ReSharper C++의 새로운 기능

ReSharper C++ 2024.1은 C++20 모듈 지원을 개선하고 Call Tracking(호출 추적)에서 송신 호출을 구현합니다. 코딩 지원 개선 사항에는 Change Signature(시그니처 변경) 리팩터링의 개선, 업데이트된 문서 주석 지원 등이 포함됩니다. Unreal Engine 개발자를 위해 ReSharper C++ 2024.1은 C++ 코드에서 Slate UI 프레임워크와 애셋 경로 완성을 지원합니다.

다운로드

30일 무료 평가 이용 가능

C++20 모듈 지원

모듈 검색 프로세스가 업데이트되어 ReSharper C++에서 이제 모듈의 외부 인터페이스에 사용되지 않는 모듈 파티션 단위인 내부 파티션 단위를 지원합니다. 즉, 연관된 export module 선언이 없는 모듈 파티션입니다.

내보낸 C++20 모듈의 내부 표현을 새롭게 개선하여 다른 모듈에서 가져온 엔티티에 대한 이행적 참조가 원활하게 처리되도록 했습니다. 이전에는 이러한 엔티티를 가져온 모듈에서 다시 내보냈습니다. 이번 변경으로 내보낸 모듈의 공간이 크게 줄어들고 C++20 모듈을 활용하는 프로젝트의 성능이 향상될 것으로 기대합니다.

Unreal Engine

ReSharper C++ 2024.1에는 Unreal Engine의 Slate UI 프레임워크에 대한 지원이 도입되었습니다. ReSharper의 코드 서식 지정 도구와 입력 지원 기능을 사용하여 Unreal Engine의 규칙에 따라 Slate 코드 서식을 지정할 수 있습니다. Go to declaration(선언으로 이동), Find Usages(사용 위치 찾기), Rename(이름 변경)과 같은 기능도 Slate의 선언적 구문을 이해할 수 있도록 업데이트되었습니다.

Blueprint 기능과 ReSharper C++ 통합의 연장선으로 UENUM 인스턴스 이름 변경 시 코어 리디렉션 추가 지원과 C++ 코드의 리소스 이름에 대한 애셋 경로 완성이 제공됩니다.

동적 셰이더 연결에 사용되는 HLSL 인터페이스가 이제 셰이더 코드에서 지원됩니다.

Unreal Engine 개발을 위한 독립실행형 크로스 플랫폼 IDE에 관심이 있다면 Rider를 사용해 보세요. Rider와 ReSharper C++의 Unreal Engine 지원이 일치하도록 조정되어 Rider 2024.1 업데이트에서도 동일한 개선 사항을 기대할 수 있습니다.

Call Tracking(호출 추적)의 송신 호출

수신 호출 추적만 지원했던 ReSharper의 Call Tracking(호출 추적)이 이제 송신 C++ 호출 체인의 탐색도 지원합니다. 송신 호출을 탐색하려면 임의의 함수에 캐럿을 놓고 컨텍스트 메뉴에서 Inspect(검사) | Outgoing calls(송신 호출)을 선택하세요. 또는 Ctrl+Shift+Alt+A를 눌러 Inspect This(다음을 검사) 메뉴에서 호출할 수 있습니다.

Change Signature(시그니처 변경) 개선

이제 Change Signature(시그니처 변경)를 사용하여 포인터, 참조 또는 값 타입 간 함수 매개변수의 타입을 쉽게 변경할 수 있습니다. ReSharper는 함수 본문 내의 매개변수 사용 위치를 자동으로 업데이트하고 함수 호출 위치에서 함수 인수를 조정하여 필요한 경우 역참조나 address-of 연산자를 추가합니다.

종속 코드에 잠재적인 사용 위치가 있는 함수에서 Change Signature를 호출하면, 리팩터링을 통해 변경 사항을 확인하고 업데이트해야 하는 사용 위치를 확인할 수 있습니다.

또한, Change Signature를 사용하여 추가된 새 함수 매개변수의 디폴트 인수를 지정할 수도 있습니다.

그 외 Change Signature의 주요 업데이트에는 다음이 포함됩니다.

  • 가변 함수 템플릿 처리가 개선되었습니다.
  • 매크로 호출 내의 호출 위치에 함수 인수를 올바르게 업데이트합니다.
  • Change Signature가 이제 unsigned int 타입의 int 타입 지정자 및 배열 타입을 유지합니다.

문서 주석

이제 라이브 템플릿을 편집할 필요 없이 생성된 문서 주석의 스타일을 사용자 지정할 수 있습니다. 문서 주석의 스타일을 구성하려면 ReSharper의 Settings(설정) | Code editing(코드 편집) | C++ | Code generation(코드 생성)으로 이동하세요.

JetBrains Grazie는 ReSharper 2023.3에 도입된 ReSharper에서 새롭게 기본 제공되는 문법 및 철자 검사기입니다. 2024.1 릴리스에서는 C++ 문서 주석 내에서도 Grazie 기반 문법 검사를 사용할 수 있습니다.

이제 Change Signature(시그니처 변경) 리팩터링이 @param명령어를 함수 매개변수 목록과 동기화된 상태로 유지합니다. 이 리팩터링은 제거된 매개변수에 대한 @param 명령어를 삭제하고, 새 매개변수에 대한 명령어를 추가하며, 포함된 매개변수의 업데이트된 순서와 일치하도록 기존 명령어를 재정렬합니다.

코드 분석

C++ 리팩터링 도구에 대한 광범위한 테스트 도구(Richard Thomson이 유지 관리)의 최신 결과에 따르면, ReSharper C++는 가장 많은 테스트 사례를 통과하여 계속해서 다른 도구보다 뛰어난 성능을 보이고 있습니다. ReSharper의 제안 품질을 개선하기 위한 지속적인 노력의 일환으로, JetBrains는 ReSharper C++ 2024.1에서 Richard의 테스트 도구에서 확인된 몇 가지 문제를 해결했습니다. 예를 들어, 이제 Create constructor from usage(사용 위치에서 생성자 만들기) 빠른 수정 기능이 필요할 때 기본 생성자를 추가합니다.

ReSharper C++ 2024.1에서는 집계 초기화 시 불필요한 관용적 제로 이니셜라이저의 제거를 제안합니다. 몇 가지 새로운 검사에서는 static constexpr 데이터 멤버의 불필요한 inline 지정자와 같이 static 데이터 멤버와 관련된 다양한 문제를 발견합니다.

코드 정리는 불필요한 접근성 지정자를 제거하고 상속자가 없는 클래스를 final로 만드는 새 항목을 추가합니다. Apply ‘auto’ style('auto' 스타일 적용)은 이제 지역 변수 외에도 전역 변수와 클래스 멤버를 처리합니다.

이전에는 특정 범위에서 검사를 억제하려는 경우 ReSharper용으로 // ReSharper disable 주석을 사용할 수 있었습니다. ReSharper C++ 2024.1은 clang-tidy가 사용하는 NOLINT, NOLINTNEXTLINENOLINTBEGIN ... NOLINTEND 주석을 추가로 인식합니다.

코드 서식 지정

ReSharper C++ 2024.1에는 몇 가지 새로운 서식 지정 옵션이 도입되었습니다.

  • Break line after goto labels(goto 라벨 뒤 줄바꿈)Indent goto labels(goto 라벨 들여쓰기)은 라벨이 있는 구문의 서식 지정을 향상합니다.
  • Arrangement of enumerations(열거형 배열)에서 열거형 내부 줄 바꿈을 제어하는 설정.
  • Empty braces formatting(빈 중괄호 서식 지정)Do not change(변경 안 함) 옵션이 포함됩니다.

.clang-format 구성을 사용할 때 ReSharper의 서식 지정 도구는 이제 DisableFormatIndentAccessModifiers 설정을 따릅니다. 이제 GNU 내장 clang-format 스타일도 지원됩니다.

이번 릴리스에 도입된 다른 모든 변경 사항을 알아보려면 ReSharper의 새로운 기능 페이지를 살펴보세요.

다운로드

30일 무료 평가 이용 가능

ReSharper C++ 2023.3

테스트 단계를 마친 AI Assistant 정식 출시

JetBrains의 AI Assistant가 이제 생산성을 높이기 위한 여러 가지 새롭고 향상된 기능과 함께 정식 출시되었습니다. 최신 개선 사항에는 AI 액션의 향상된 프로젝트 인식과 프롬프트 라이브러리가 포함됩니다.

JetBrains AI Service 구독을 통해 ReSharper C++의 AI Assistant를 추가 기능으로 사용해 보세요.

HLSL 및 Unreal Engine 업데이트

HLSL 2021에는 C++ 유사 템플릿 함수와 데이터 타입이 도입되었습니다. 최신 ReSharper C++ 업데이트는 HLSL 템플릿을 완벽하게 지원합니다.

ReSharper C++ 2023.3은 HLSL 내장 RayQuery 타입에 대한 지원을 도입하고 코드 완성 기능을 개선하여 해당 플래그를 제안합니다.

새로운 검사는 AddDynamic 헬퍼 매크로의 일반적인 함정에 빠지지 않도록 도와줍니다. 이제 동적 위임 함수가 UFUNCTION 매크로로 표시되지 않으면 경고를 받게 됩니다.

아직도 이따금 상용구 코드를 작성하고 있다면 Alt+Insert 단축키를 사용하여 일반 타입 멤버를 자동으로 생성할 수 있다는 점을 잊지 마세요. ReSharper C++ 2023.3에서는 Unreal Engine 규칙을 따르도록 해시 함수 생성을 조정했습니다.

Unreal Engine 개발을 위한 독립실행형 크로스 플랫폼 IDE에 관심이 있다면 Rider를 사용해 보세요. Rider와 ReSharper C++의 Unreal Engine 지원이 일치하도록 조정되어 Rider 2023.3 업데이트에서도 동일한 개선 사항을 기대할 수 있습니다.

C 및 C++ 지원

현재 표준 또는 컴파일러 버전에서 일부 특정 속성을 사용할 수 있는지 확인해야 하는 경우, C++20의 기능 테스트를 통해 해결할 수 있습니다. 전처리기 조건에서 __has_cpp_attribute(operand)를 사용하면 컴파일러가 피연산자에 의해 참조된 속성을 인식하는지 여부를 테스트할 수 있습니다. ReSharper C++는 이제 __has_cpp_attribute를 올바르게 처리하여 C++ 표준 라이브러리에서 속성 어노테이션을 더 효과적으로 지원합니다.

__pragma 키워드와 함께 사용되는 pack pragma에 대한 지원을 도입했습니다. 매크로 정의 내에서 #pragma 지시문을 사용할 수 없기 때문에 __pragma(pack) 구문이 매크로 정의 내에서 사용되는 경우가 있습니다. 이와 같은 경우 ReSharper C++는 이제 코드 분석 결과를 신뢰할 수 있도록 압축된 구조의 크기를 올바르게 계산합니다.

ReSharper C++에 몇 가지 C 기능에 대한 지원이 추가되었습니다.

  • 포인터 선언에 사용할 수 있는 C99 restrict 타입 한정자
  • C23에서 타입 추론 consexprnullptr

또한 ReSharper C++가 크로스 플랫폼 코드에서 더 잘 작동하도록 하기 위해 __is_const(), __is_member_pointer() 등과 같은 몇 가지 새로운 clang 내장 함수에 대한 지원도 도입했습니다.

크로스 플랫폼 C 및 C++ 개발의 경우, 독립 실행형 CLion Nova IDE의 조기 테스트 버전을 사용해 볼 수 있습니다. 이는 ReSharper C++로 구동되며 현 단계에서는 완전 무료로 사용할 수 있습니다. 간단히 등록하고 코딩을 시작한 후 피드백을 보내주세요!

문법 및 철자 검사

JetBrains Grazie가 ReSharper의 새로운 내장 문법 및 철자 검사기로 사용됩니다. Grazie는 20개 이상의 언어를 지원하며 ReSharper가 지원하는 프로그래밍 언어(C#, C++, VB.NET), 마크업 언어(HTML, XML, XAML) 및 주석 내에서 자연어 오류를 찾아냅니다. Grazie에 다른 자연어를 추가하려면 ReSharper에서 Options(옵션) | Grammar and Spelling(문법 및 철자) | General(일반)로 이동하세요.

현재, doxygen 주석에서는 문법 검사를 사용할 수 없습니다.

비활성 코드 작업

플랫폼별 또는 구성별 코드를 사용하면 조건부 전처리기 브랜치 내에서 현재 비활성인 코드 블록을 편집하는 경우가 종종 생깁니다. 이전에는 비활성 코드의 코드 완성에서는 매크로만 제공되었습니다. ReSharper C++ 2023.3에서는 전역 범위의 심볼을 포함하도록 이러한 시나리오의 코드 완성 기능을 개선했습니다.

Find Usages(사용 위치 찾기)는 이제 비활성 코드 및 매크로 본문에서 가능한 사용 위치를 찾습니다. 이전에는 이러한 사용 위치를 찾으려면 Find Usages Advanced(고급 사용 위치 찾기)를 사용하여 텍스트 항목을 조사해야 했습니다. 이제 Find Usages 결과에는 기본적으로 매크로 본문과 비활성 코드의 잠재적 사용 위치가 포함됩니다. 이러한 사용 위치는 활성 코드의 사용 위치와 구별하기 위해 별도의 섹션으로 그룹화됩니다.

코드 분석

ReSharper 전용 C++ 속성을 사용하면 ReSharper가 더욱 정확하고 통찰력 있게 솔루션을 분석할 수 있습니다. ReSharper C++ 2023.3에서는 기존 [[jetbrains::format]], [[jetbrains::guard]][[jetbrains::has_side_effects]] 속성에 대해 [[rscpp::...]] 외에 [[jetbrains::...]] 접두사를 추가했습니다.

새로운 [[jetbrains::pass_by_value]] 속성을 사용하면 함수 매개변수에 대한 Pass value by const reference 검사를 억제할 수 있습니다. 자세히 알아보기

C++20 모듈에서 export 키워드의 잘못된 사용을 찾기 위한 일련의 검사를 도입했습니다. ReSharper C++는 이제 다른 export 선언이 이미 해당 선언을 포함하거나 선언이 모듈 인터페이스 유닛의 일부가 아니어서 내보낼 수 없는 경우 export 제거를 제안합니다. 템플릿 선언을 내보내는 대신 export 선언의 템플릿을 만들려고 하면 export를 이동하라는 제안도 표시됩니다.

번들로 제공되는 clang-tidy 바이너리를 Clang 17로 업그레이드하여 최신 LLVM 릴리스의 업데이트를 적용했습니다.

일부 clang-tidy 검사는 경고 텍스트 외에 더 상세한 내용을 출력합니다. ReSharper C++는 이제 툴팁에 이러한 추가 메모를 표시합니다.

새로운 검사에서는 다중 문자 리터럴의 사용에 대해 경고합니다. 이는 구현 정의 값을 이용해 조건부로 지원되며 이식 가능한 코드에서는 주의하여 사용해야 합니다.

ReSharper C++는 이제 중복된 조건 연산자를 제거하고 삼항 조건식을 단순화하는 빠른 수정을 제안합니다.

코딩 지원

Alt+Insert Generate(생성) 메뉴를 사용하면 상용구 코드를 빠르게 생성할 수 있습니다. ReSharper C++ 2023.3에서는 소멸자를 생성할 수 있는 새로운 액션을 목록에 추가했습니다.

이 액션은 다형적 클래스에서 호출되었을 때 구문 스타일 설정을 사용하여 필요한 virtual 및/또는 override 지정자를 삽입합니다. Code Editing(코드 편집) | C++ | Code Generation(코드 생성) 옵션 페이지에서 생성된 소멸자의 본문 스타일을 구성할 수 있습니다.

#pragma Region#pragma endregion 지시문을 사용하면 접을 수 있는 코드 블록을 지정할 수 있습니다. 다른 일치 지시문과 마찬가지로 이제 #pragma 지시문 또는 리전 이름이 포함된 새로운 인레이 힌트에서 Go to Declaration(선언으로 이동) 액션을 사용하여 2개의 지시문 사이를 이동할 수 있습니다.

또한 이제 File Structure(파일 구조) 창에서 영역을 편리하게 접고 해당 코드 블록으로 이동할 수 있습니다.

C 코드에서는 함수가 인수를 취하지 않음을 나타내기 위해 함수의 매개변수 목록에 void를 사용해야 합니다. ReSharper C++는 이제 사용자가 Extract method(메서드 추출) 또는 Change Signature(시그니처 변경) 리팩터링을 호출할 때 이 특별한 void를 유지하고, 함수에 대한 정의를 생성하거나 사용 위치에서 새 함수를 만듭니다.

이제 참조 인레이 힌트에 별도의 [>>] 텍스트가 있으므로 전달 참조를 한 눈에 확인할 수 있습니다.

새로운 Generate inline definitions(인라인 정의 생성) 액션을 사용하면 여러 함수의 본문을 동시에 빠르게 생성할 수 있습니다. 기존의 Generate definitions(정의 생성)과 유사하게 에디터에서 클래스 이름이나 여러 함수 선언을 선택한 경우 새 액션을 사용할 수 있습니다.

이제 ReSharper C++에서 Introduce variable(변수 삽입) 또는 Introduce field(필드 삽입) 리팩터링을 중첩 표현식상에서 호출할 때 자동으로 가장 바깥쪽 표현식이 사용되지 않고, 사용자가 타깃 표현식을 명시적으로 선택할 수 있습니다.

코드 탐색 환경을 개선하기 위해 이제 매크로 대체에서 나온 심볼이 Go to(이동)File Structure(파일 구조) 창에서 숨겨집니다. 이는 널리 사용되는 유닛 테스트 프레임워크의 테스트 사례 선언과 같이 확장 중에 많은 보조 심볼을 삽입하는 매크로에 유용합니다.

코드 서식 지정

ReSharper C++ 2023.3에는 몇 가지 새로운 서식 지정 옵션이 도입되었습니다.

  • 후행 반환 타입에서 -> 앞 줄바꿈
  • 후행 반환 타입에서 -> 뒤 줄바꿈
  • 빈 블록 내의 공백
  • { 뒤에 주석 허용

또한 번들로 제공되는 clang-format 바이너리를 Clang 17로 업그레이드하고 .clang-format 구성에서 서식 지정 도구 설정을 가져올 때와 내장 서식 지정 도구 대신 clang-format을 사용할 때 InsertNewlineAtEOF clang-format 설정에 대한 지원을 구현했습니다.

이번 릴리스에 도입된 다른 모든 변경 사항을 알아보려면 ReSharper의 새로운 기능 페이지를 살펴보세요.

ReSharper C++ 2023.2

AI Assistant 제한적 액세스

AI Assistant는 ReSharper와 함께 제공되지 않으며 별도로 설치해야 합니다. 현재 AI Assistant 기능은 대기자 명단을 통해 이용할 수 있습니다.

JetBrains 웹 도움말에서 AI Assistant에 대한 자세한 정보와 Toolbox App 또는 dotUltimate 설치 프로그램을 통해 AI Assistant를 설치하는 방법을 알아보세요.

ReSharper C++ 2023.2 버전은 ReSharper AI Assistant 기능을 선보입니다. 이 AI 기반 채팅 기능은 프로그래밍 관련 질문에 답변을 제공하고 문제 해결, 리팩터링, 문서 작성 및 기타 개발 워크플로 지원을 위해 특별히 설계되었습니다.

ReSharper의 AI Assistant 기능은 프로젝트에 사용된 언어 및 기술을 고려합니다. 이러한 컨텍스트 인식으로 즉시 맞춤형 답변이 제공되므로 사용자의 시간과 노력이 절감됩니다.

질문에는 소스 코드의 일부를 포함할 수 있습니다. ReSharper는 사용자가 채팅에 전송하거나 붙여 넣은 코드를 탐지해 적절한 서식을 지정하고, AI 모델은 코드의 로직을 설명하고 리팩터링, 문제 발견 또는 관련 문서 생성을 지원합니다.

C++23 지원

if consteval 문은 C++23의 새로운 상수 평가 기능으로, C++20 constevalstd::is_constant_evaluated()의 개념을 발전시켜 개발되었습니다. 상수 평가 중 if consteval 문이 평가되면 다음 복합문이 실행됩니다. 그 외에는 else 브랜치가 실행됩니다.

ReSharper C++if consteval 문을 지원하며 다음의 경우와 관련된 검사를 제공합니다.

  • consteval if가 항상 상수.
  • std::is_constant_evaluated가 항상 상수로 평가됨.
  • ifif consteval로 바꿀 수 있음.

ReSharper C++는 C++23 표준 라이브러리에 도입된 명명된 모듈인 stdstd.compat을 지원합니다. Visual Studio 17.6 이상의 버전을 사용하면 사전 컴파일링된 헤더를 사용하거나 특정 표준 라이브버리 헤더를 포함하지 않고도 import std 또는 import std.compat을 사용해 전체 표준 라이브러리를 가져올 수 있습니다.

C++23 이전 버전에서는 모든 연산자가 static이 아닌 멤버 함수여야 했습니다. 하지만 호출 연산자는 멤버가 없는 함수 객체와 함께 사용되는 경우가 많으므로 static 연산자가 허용되면 더욱 효과적인 코드를 작성할 수 있습니다. C++23에서는 operator()operator[] 모두 static일 수 있습니다.

C++20 지원

저희 팀은 모듈이 사용된 실제 프로젝트의 일반적이지 않은 다양한 이슈를 해결하기 위해 C++20 모듈 지원을 개선하는 데 많은 노력을 기울여 왔습니다. 내부적으로 모듈을 처리할 때 다른 선언이 도달할 수 없는 선언을 삭제하는 기능을 구현해 전역 모듈 조각에 여러 헤더가 포함된 모듈의 성능이 대폭 개선되었습니다.

또한 CMake 프로젝트 모듈 지원을 개선하기 위한 변경 사항도 있습니다. 이제 ReSharper C++.cppm 파일을 모듈 인터페이스로 인식하고 프로젝트 폴더 외부의 모듈에 대한 실험적 지원을 제공합니다.

C++20의 새로운 [[no_unique_address]] 속성은 클래스의 static이 아닌 데이터 멤버에 고유 주소가 요구되지 않는다는 것을 의미하므로, 컴파일러가 클래스 멤버를 보다 효율적인 방식으로 배치할 수 있습니다. ReSharper C++는 객체 크기 계산 시 [[no_unique_address]]를 고려합니다.

또한 ReSharper C++ 2023.2에 최근 승인된 C++20 결함 보고서가 구현되어, UTF-8 문자열 리터럴을 사용해 char 또는 unsigned char 배열을 초기화할 수 있습니다.

Safe Delete(안전한 삭제) 리팩터링

소스 코드에서 심볼을 안전하게 제거할 수 있는 Safe Delete(안전한 삭제) 리팩터링이 ReSharper C++에 도입되었습니다. 클래스, 함수, 변수, 열거형, 네임스페이스 및 콘셉트에 이 리팩터링을 사용할 수 있습니다.

리팩터링을 호출하려면 삭제할 심볼에 캐럿을 놓고 Alt+Del을 누르거나 Refactor This(다음을 리팩터링) 메뉴에서 Safe Delete(안전한 삭제)를 선택하면 됩니다.

심볼을 삭제하기 전 ReSharper C++에서 해당 심볼의 사용 위치를 찾아 소스 코드 변경 사항을 미리 보여주므로 실수로 삭제하는 경우를 방지할 수 있습니다. 클래스 또는 네임스페이스와 같은 복잡한 엔티티를 삭제하려는 경우 ReSharper C++가 해당 엔티티의 모든 멤버의 사용 위치를 재귀적으로 확인합니다.

Unreal Engine

이번 릴리스에서 Blueprint 색인 생성 시 성능이 개선되었습니다. 처음 프로젝트를 열면 ReSharper C++가 모든 Blueprint 애셋의 색인을 생성해 Find Usages(사용 위치 찾기)와 같은 기능을 사용하고, 직렬화된 데이터 값을 텍스트 에디터에서 바로 표시합니다.

이전에는 ReSharper C++가 애셋 색인을 생성을 C++ 코드와 동일한 우선순위로 두었으므로 프로젝트 작업 준비를 완료하는 데 더 오랜 시간이 소요되었습니다. ReSharper C++ 2023.2에서는 C++ 코드 색인 생성 후 백그라운드에서 애셋 색인 생성이 진행되므로 작업에 지장을 주지 않습니다.

표준 대입 의미를 적용하여 래퍼 타입에 대한 스마트 코드 완성을 개선했습니다. 예를 들어, TEnumAsByte 타입의 변수에 대입할 경우 코드 완성 기능은 기본 열거형 타입의 열거자를 제안합니다.

Unreal Engine 5.1 프로젝트를 위한 UE_INLINE_GENERATED_CPP_BY_NAME 매크로 지원도 제공됩니다. 이 매크로는 생성된 파일을 모듈로 인라인화하여 컴파일링 시간을 개선합니다.

코딩 지원

종속 코드에 대한 코드 완성 기능이 개선되어, 타입이 콘셉트 또는 특성에 따라 제한될 경우 코드 완성 항목이 표시됩니다. ReSharper C++는 이제 표준 std::is_same/std::is_base_of 타입 특성, _v 값-별칭, 해당 std::same_as/std::derived_from 콘셉트 및 Unreal Engine TIsSame 특성을 고려합니다.

ReSharper C++는 더욱 유용한 코드 완성을 제안하기 위해 requires 절, if constexpr 및 SFINAE의 의 타입과 값 요구 사항을 추출합니다.

템플릿 매개변수 제약을 requires 절로 이동하고 requires 절을 템플릿 매개변수 제약으로 변환하는 데 도움이 되는 보완적인 컨텍스트 액션 2가지가 새롭게 추가되었습니다.

재귀 호출이 있는 경우 ReSharper C++는 해당 호출이 더 잘 보이도록 여백에 표시합니다.

코드 완성 목록에서 예약된 식별자가 필터링되어 _ 다음에만 제안됩니다. 즉, 이제 필요한 경우를 제외하고 표준 라이브러리의 제안을 살펴보지 않아도 됩니다.

ReSharper C++ 2023.1에서는 Quick Documentation(빠른 문서) 팝업과 마우스로 가리키면 표시되는 툴팁의 매크로 치환에 대한 적절한 강조 표시 및 서식 지정 기능이 도입되었습니다. 2023.2 릴리스부터 코드 완성의 매크로 정의 및 Parameter Info(매개변수 정보)에도 이 개선 사항이 적용됩니다.

평가 엔진이 개선되어 constexpr 배열의 집계 초기화를 지원합니다.

GCC 및 Clang 컴파일러, libc++/libstdc++ 표준 라이브러리와의 호환성이 개선되었습니다. 개선 사항으로 __integer_pack, __is_convertible/__is_nothrow_convertible과 같은 기본 제공 기능 지원 및 이전부터 지원된 기능의 업데이트가 있습니다.

Doxygen param 명령어의 [in], [in,out] 또는 [out] 속성을 사용하여 매개변수 방향을 지정하면 툴팁은 주석에서 이를 가져옵니다.

코드 분석

ReSharper C++ 2023.2에는 불필요한 역참조 및 address-of 연산자를 탐지하는 새로운 검사가 추가되었습니다. 이 검사는 멤버 액세스 간소화 및 불필요한 연산자 제거를 위한 몇 가지 빠른 수정을 제공합니다.

또한 해당 디폴트 템플릿 인수와 일치하며 생략 가능한 불필요한 템플릿 인수를 강조 표시하는 새로운 검사도 있습니다.

새로운 호환성 검사는 기본 타입이 없는 C 스타일 열거형의 전방 선언에 대한 경고를 표시합니다. 이러한 선언은 C++ 표준에 따라 금지되나 MSVC에서 허용되며 이식성이 낮은 코드를 초래할 수 있습니다.

이제 ReSharper C++는 심각도 수준에 따라 #error#warning 진단 전처리기 지시문을 강조 표시합니다.

또한 번들로 제공되는 clang-tidy 바이너리를 Clang 16으로 업데이트하여 새로운 검사와 수정을 제공합니다.

MSVC는 /Zc:preprocessor 컴파일러 인수의 값에 따라 기존 전처리기 또는 새로운 표준 준수 전처리기를 사용할 수 있습니다. ReSharper C++는 프로젝트 프로퍼티에서 인수의 값을 읽고 그에 따라 기본 제공 전처리기의 동작을 조정합니다.

탐색

ReSharper C++ 2023.2에 Go to declaration(선언으로 이동)과 관련된 몇 가지 개선 사항이 추가되어 추가 단계를 거치지 않고 더욱 일관적이며 간단한 방식으로 코드를 탐색할 수 있습니다.

  • 생성자 호출의 클래스 이름에서 Go to declaration을 호출하면 포함 클래스가 아닌 생성자로 이동합니다.
  • Go to declaration을 사용하면 모든 선언이 포함된 메뉴가 표시되지 않고 첫 번째 typedef 또는 타입 별칭 선언으로 이동합니다.
  • 모듈 이름에서 Go to declaration을 사용하면 동일한 모듈의 인터페이스 및 구현 유닛 사이에서 이동합니다.
  • #include 경로의 폴더에서 Go to declaration을 사용하면 폴더가 열립니다.

또한 Type of symbol(심볼 타입)이 비선언적 심볼에서도 지원되며 Go to declaration과 유사한 방식으로 작동합니다.

서식 지정 및 입력 지원

문서 주석 생성 시 ReSharper C++는 에디터의 주석 스타일에 따라 문서 템플릿을 조정합니다. /** 사용 시에는 입력 지원 기능이 /** */ 스타일의 주석을 생성하며 /// 사용 시에는 주석이 /// 스타일로 생성됩니다.

이번 릴리스에는 비트 필드 멤버의 서식 지정과 관련된 개선 사항이 있습니다. 열의 이니셜라이저 및 선언 이름을 정렬하는 옵션이 비트 필드에도 지원됩니다. 또한 비트 필드 선언의 콜론 앞뒤 공백 및 열의 비트 필드 크기 정렬에 대한 새로운 서식 지정 설정 2가지가 추가되었습니다.

새로운 입력 지원 옵션 사용 시 문서 주석 생성 기능을 비활성화해 Visual Studio 기본 제공 제너레이터와의 충돌을 방지할 수 있습니다(ReSharper | Options(옵션) | Environment(환경) | Editor(에디터) | Behavior(동작) | C++, C, HLSL | Generate documentation comments(문서 주석 생성)).

또한 번들로 제공되는 clang-format 바이너리를 업데이트하고 파일 끝의 새 줄이 제거되지 않도록 clang-format 엔진을 수정했습니다.

이 릴리스의 다른 변경 사항에 대해 알아보려면 ReSharper의 새로운 기능을 참조하세요. 예를 들어, 프로그램을 실제로 실행하지 않고도 프로그램 실행 시 트리거될 수 있는 모든 상태를 예측하는 예측 디버거가 ReSharper에 도입되었습니다.