ReSharper 2024.1의 새로운 기능

ReSharper 2024.1에서는 코드를 컬렉션 표현식으로 변환할 수 있도록 더 많은 제안을 포함하고, foreach 루프 내에서 반복 처리가 진행되는 동안 컬렉션이 수정될 때 경고를 받을 수 있도록 C# 지원이 더욱 개선되었습니다. Razor 지원은 이제 @addTagHelper@removeTagHelper 지시문에 대한 참조를 확인하고 사용자 지정 명명 규칙을 편집하기 위한 UX/UI가 크게 개선되었습니다.

다운로드

30일 무료 평가 이용 가능

C# 지원

컬렉션 표현식으로 더 많은 변환 제안

컬렉션 표현식으로 더 많은 변환 제안

이제 소스 코드의 더 많은 코드 구성을 빈 배열이나 ImmutableArray 선언 및 초기화와 같은 C# 12의 컬렉션 표현식으로 변환할 수 있도록 제안 받게 됩니다.

Collection was modified(컬렉션이 수정됨) 분석

Collection was modified(컬렉션이 수정됨) 분석

Possible 'System.InvalidOperationException': Collection was modified'(잠재적 'System.InvalidOperationException: 컬렉션이 수정됨')라는 검사가 새롭게 추가되었습니다. 이 검사는 foreach 루프 내에서 반복 처리가 진행되는 동안 컬렉션이 수정되면 런타임에 예외가 발생할 수 있음을 경고합니다. 이 분석에서는 컬렉션 수정 후 루프가 종료되는 경우를 인식하며 이러한 경우에는 경고가 발생하지 않습니다.

이 검사에는 문제를 즉시 해결하는 데 도움이 되는 적절한 빠른 수정이 함께 제공됩니다.

Generate(생성) | Formatting Members(서식 지정 멤버) 업데이트

Generate(생성) | Formatting Members(서식 지정 멤버) 업데이트

Generate(생성) | Formatting Members(서식 지정 멤버)를 사용하면 상용구 코드를 생성하여 ToString() 메서드를 재정의하고 타입에 의미 있는 문자열을 반환할 수 있습니다. 2024.1 버전부터 이 기능은 ISpanFormattable, IUtf8SpanFormattable, IFormattable과 같은 더 많은 타입을 지원합니다.

async 메서드에서 폐기 가능한 리소스에 대한 지원 강화

async 메서드에서 폐기 가능한 리소스에 대한 지원 강화

  • [MustDisposeResource] 어노테이션 개선: 이제 C# 코드 분석을 통해 Task<IDisposable>ValueTask<IDisposable>에 래핑된 리소스를 포함하여 async 메서드에서 반환된 리소스가 올바르게 폐기되도록 하여 작업 자체가 의도치 않게 폐기되는 것을 방지할 수 있습니다.
  • Task-like 반환 값: 2024.1 버전에서 Task-like 반환 값을 올바르게 분석하여 대기 중인 리소스의 폐기 여부를 확인하고 .ConfigureAwait(...), .AsTask() 또는 .Result를 통해 검색된 리소스도 포함하도록 보장합니다.
Change Signature(시그니처 변경) 리팩터링 업데이트

Change Signature(시그니처 변경) 리팩터링 업데이트

Change Signature(시그니처 변경) 리팩터링에 다음과 같이 몇 가지 개선 사항이 도입되었습니다.

  • 이제 이 리팩터링에서 Deconstruct 메서드를 지원합니다. 매개변수를 추가, 제거, 재정렬하고 이름을 바꿀 수 있으며 이러한 변경 사항은 메서드 선언과 해당 사용 위치 모두에 반영됩니다.
  • 이제 타입 매개변수에 코드 완성 기능을 사용할 수 있습니다. 예를 들어 List<>에 대한 타입을 지정해야 할 때 코드 완성을 사용하면 int와 같이 필요한 타입을 쉽게 선택할 수 있습니다.
  • 매개변수를 추가하거나 업데이트할 때 타입 네임스페이스가 자동으로 단축됩니다. 이는 리팩터링을 적용한 후 코드를 깔끔하고 단순화된 상태로 유지하는 데 도움이 됩니다. 예를 들어, Change Signature 대화상자에서 System.Collections.Generic.List<System.Int16> 타입을 지정하면 결과 코드에서 타입이 자동으로 List<short>로 단축됩니다.
  • 이제 이 리팩터링은 inref readonly 제어자와 record 타입을 포함하여 더 많은 최신 버전의 C# 기능을 지원합니다.
Make Static(static으로 만들기) 리팩터링 업데이트

Make Static(static으로 만들기) 리팩터링 업데이트

이번 릴리스에서는 Make Static(static으로 만들기) 리팩터링이 기본 생성자의 매개변수를 지원합니다. 이러한 매개변수는 Introduce parameters(매개변수 삽입) 목록에 표시되며 쉽게 구별할 수 있도록 별도의 아이콘이 있습니다. 이 리팩터링은 지역 함수에도 사용할 수 있습니다.

protobuf-net 라이브러리 지원

코드 분석에서 이제 protobuf-net 라이브러리의 ProtoContract 속성 및 ImplicitFields 열거형이 지원됩니다. 이 두 가지 모두 묵시적으로 직렬화에 사용되는 멤버를 표시하는 데 사용할 수 있습니다. 결과적으로, 해당 멤버에 더 이상 unused members(사용되지 않는 멤버) 경고 플래그가 지정되지 않습니다.

Razor 지원

@addTagHelper 및 @removeTagHelper 지시문에 대한 참조 해결

@addTagHelper@removeTagHelper 지시문에 대한 참조 해결

ReSharper는 이제 Razor 뷰의 @addTagHelper@removeTagHelper 지시문 내에 지정된 어셈블리 이름의 참조를 해결합니다. 따라서 이제 코드 완성, 사용 위치 찾기, 편리한 코드 탐색 등의 이점을 누릴 수 있습니다.

이제 ReSharper는 해결되지 않은 어셈블리 이름을 오류로 간주하고, 쉽게 알아볼 수 있게 이를 빨간색으로 강조 표시합니다.

C++ 지원

C++ 지원

C++ 지원에서 주목할 만한 개선 사항은 다음과 같습니다.

  • C++20 모듈이 새롭게 구현되어 성능이 향상되고 내부 모듈 파티션에 대한 지원이 제공됩니다.
  • Change Signature(시그니처 변경)는 포인터, 참조 또는 값 타입 사이에서 매개변수 타입을 변경하는 기능 등 몇 가지 새로운 기능을 제공합니다.
  • Call Tracking(호출 추적)에서 송신 호출 체인이 지원됩니다.
  • 생성된 문서 주석의 스타일을 쉽게 사용자 지정할 수 있습니다. 또한 문서 주석 내에서 문법 검사도 가능합니다.
  • 이제 Unreal Engine의 Slate UI 프레임워크가 지원됩니다.

C++ 업데이트에 대해 자세히 알아보세요: ReSharper C++ 2024.1의 새로운 기능.

성능

솔루션 전체 분석에서 높은 리소스 사용률 모드 개선

솔루션 전체 분석에서 높은 리소스 사용률 모드 개선

솔루션 전체 분석에서 높은 리소스 사용률 모드를 개선하여 CPU 병렬 처리의 효율을 더욱 높임으로써 분석 시간을 크게 줄이려고 노력하고 있습니다. 가비지 컬렉션에 소요되는 시간을 최소화하기 위해 코드 분석 활동의 메모리 할당 프로파일을 개선했습니다. 개선 작업이 진행되는 동안 이 모드를 사용해 보고 어떻게 느끼셨는지 알려주시면 감사하겠습니다.

더 빨라진 Rename(이름 변경) 리팩터링

이제 코드에서 요소 이름을 더 빠르고 효율적으로 바꿀 수 있습니다. 이러한 변경은 ReSharper의 다른 핵심 구성 요소에도 영향을 미쳐 Find Usages(사용 위치 찾기)를 포함한 여러 기능의 성능도 향상됩니다.

더 빨라진 Move to Another Type(다른 타입으로 이동) 리팩터링

대규모 클래스를 처리하기 위해 static 멤버에 대한 Move to Another Type(다른 타입으로 이동) 리팩터링 성능이 크게 향상되었습니다.

코드 서식 지정

사용자 지정 이름 지정 규칙의 UX/UI 개선

이 변경을 통해 고급 이름 지정 규칙을 사용하고 EditorConfig 파일에서 가져온 규칙을 준수하기가 더 쉬워집니다.

Remove whitespace on blank lines(빈 줄에서 공백 제거) 설정

Remove whitespace on blank lines(빈 줄에서 공백 제거) 설정

이 새로운 서식 지정 설정을 사용하면 빈 줄에 공백을 남기거나 제거할 수 있습니다.

디컴파일러

새로운 전용 Assembly Diff(어셈블리 Diff) 도구 창

새로운 전용 Assembly Diff(어셈블리 Diff) 도구 창

ReSharper의 2024.1에는 새로운 Assembly Diff(어셈블리 Diff) 도구 창이 도입되었으며, 이와 함께 몇 가지가 변경되었습니다.

  • 어셈블리, NuGet 패키지, 폴더 및 .zip 아카이브를 비교하는 기능이 Assembly Explorer(어셈블리 탐색기)에서 Assembly Diff 도구 창으로 이동되었습니다.
  • Diff mode(Diff 모드) 선택자와 Compare(비교)Diff Options(Diff 옵션) 버튼이 Assembly Diff 도구 창의 Actions(액션) 표시줄로 재배치되었습니다.
WebCIL 패키징 형식 지원

WebCIL 패키징 형식 지원

ReSharper 내의 디컴파일러에서 이제 WebAssemblies용 WebCIL 패키징 형식을 지원합니다. 지원 내용은 다음과 같습니다.

  • WebCIL 디컴파일링
  • Assembly Explorer(어셈블리 탐색기)에서 .wasm 파일 확인
  • WASM 및 WebCIL 헤더를 포함하여 Assembly Explorer(어셈블리 탐색기)에 있는 WASM 노드의 메타데이터 하위 트리

dotTrace, dotMemory 및 dotCover에서 MAUI 지원 dotUltimate

MAUI 및 .NET macOS 애플리케이션 프로젝트에 대한 지원을 이제 Visual Studio 내의 dotTrace, dotMemory 및 dotCover에서도 사용할 수 있습니다.

지원되는 대상 프레임워크:

  • MAUI Windows(dotTrace, dotMemory, dotCover): net8.0-windows, net7.0-windows
  • MAUI Mac(dotTrace만 지원): net8.0-maccatalyst, net7.0-maccatalyst
  • macOS 애플리케이션(dotTrace 및 dotMemory에서 지원): net8.0-macos, net7.0-macos

프로파일링 모드의 사용 가능 여부와 제한 사항에 대한 자세한 내용을 보려면 여기를 클릭하세요.

MAUI 프로젝트에 대한 지원은 독립 실행형 버전의 .NET 도구에서도 지원됩니다.

고정된 객체 힙 지원 dotUltimate

독립실행형 dotMemory 프로파일러 도구에서 이제 고정된 객체 힙이 지원됩니다. 이 기능은 가비지 컬렉션 성능 개선의 일부로 .NET 6 SDK에 처음 도입되었습니다.

FOH는 불변 객체에 전용 메모리 영역을 할당합니다. 이러한 객체는 할당된 후에도 변경되지 않으며 가비지 컬렉션 대상이 아닙니다. 이 기술의 지원으로 dotMemory가 FOH의 불변 객체에 사용되는 메모리를 더 상세하게 분석하여 메모리 사용을 더욱 최적화할 수 있습니다.

명령줄 도구

SARIF 형식이 디폴트로 설정

SARIF 형식이 디폴트로 설정

2024.1 릴리스부터 InspectCode의 디폴트 출력 형식은 SARIF이며, XML 형식은 곧 중단될 예정입니다. -f="xml" 매개변수를 사용하면 현재 버전에서도 XML 형식을 사용할 수 있습니다.

기타

프로세스와 분리된 리팩터링

텍스트 제어의 내부 리팩터링을 완료했습니다. ReSharper를 Visual Studio 프로세스와 분리하여 실행하려는 노력외에도, 이 리팩터링은 ReSharper와 Rider 모두에 대한 에디터 성능에서 입력 및 관련 측면을 개선하도록 설계되었습니다. 여기에서 ReSharper를 Visual Studio 프로세스와 분리하기 위한 작업의 진행 상황을 확인할 수 있습니다.

확장 프로그램 관리자

JetBrains Marketplace 플러그인 피드에 호환성 검사를 기반으로 하는 새로운 필터링 메커니즘이 채택되었습니다. 이에 따라 호환되지 않는 플러그인은 더 이상 ReSharper의 확장 프로그램 관리자에 표시되지 않습니다.

다운로드

30일 무료 평가 이용 가능