ReSharper C++ 2023.2의 새로운 기능

소스 코드에서 심볼을 안전하게 제거할 수 있는 Safe Delete(안전한 삭제) 리팩터링이 ReSharper C++ 2023.2에 도입되었습니다. 최신 C++ 프로젝트를 위해 C++23 표준 라이브러리 모듈을 포함한 C++20 및 C++23 관련 신규 기능이 지원됩니다. 이 버전에는 프로그래밍 작업을 지원하기 위해 특별히 고안된 ReSharper AI Assistant도 포함되어 있습니다.

다운로드

30일 무료 평가 이용 가능

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에 도입되었습니다.

다운로드

30일 무료 평가 이용 가능