ReSharper 2020.2의 새로운 기능

ReSharper 2020.2는 C#8 및 null 가능한 참조 유형에 대한 새로운 검사 및 빠른 수정, 고대하던 기능인 Code Cleanup on Save(저장 시 코드 정리), 향상된 유닛 테스트 러너 및 접근성 개선을 제공합니다. 또한 ReSharper C++는 한 차원 높은 Unreal Engine 개발 경험을 제공하고 C++/CLI 지원, 탐색 및 코드 분석을 크게 개선했습니다.

다운로드

30일 무료 평가 이용 가능

코드 분석

이제 null 값 가능성 코드 분석이 더 많은 사례를 인식하므로 구조 분해foreach 순환에서 잘못된 null 값 가능성을 추적할 수 있습니다. 또한 그에 해당하는 빠른 수정도 제공합니다.

코드 분석 기능은 null 가능한 참조 유형이 비활성화된 코드(#nullable disable)에서도 API에 대한 JetBrains.Annotations 속성(NotNullCanBeNull)을 고려합니다.

프로젝트에 System.Linq.Async NuGet 패키지가 설치되어 있으면 IAsyncEnumerable<T>에서 foreach를 LINQ로 변환하고 LINQ를 코드로 변환하기 위한 컨텍스트 액션을 사용할 수도 있습니다.

이제 적절한 빠른 수정으로 IEqualityComparer<T>IComparer<T> 구현을 쉽게 생성할 수 있습니다.

코드 분석 기능은 구현되거나 재정의된 멤버의 null 값 가능성을 확인할 때 컴파일러 어노테이션(예: AllowNullDisallowNull)을 고려합니다.

변수 및 반환 유형이 null 가능 값을 갖지 않거나 반환하지 않는 경우 "not nullable"로 설정하는 새로운 검사 및 빠른 수정이 생겼습니다.

이제 코드 분석이 .editorconfig 파일에서 dotnet_diagnostic 규칙을 따를 수 있습니다. .editorconfig 파일에서 검사의 심각도를 지정하면(예: dotnet_diagnostic.CS1058.severity = hint), ReSharper가 그에 따라 검사를 표시합니다.

인터페이스 기능에서 디폴트 구현을 위한 지원이 이 릴리스에서 향상되었습니다. 코드 에디터의 왼쪽 여백에서는 메서드가 구현되거나 재정의되었음을 표시하며 리팩터링 및 탐색 기능은 이 C# 언어 기능을 인식합니다.

이제 XAML 코드에서 매개변수 힌트를 사용할 수 있습니다. 마크업 프로퍼티 이름 및 DataContext를 비롯해 바깥쪽 여백(margin) 및 안쪽 여백(padding)에 관한 힌트를 제공하므로 이러한 요소의 순서를 외우고 싶지 않은 경우 편리합니다.

Alt+Enter 메뉴를 눌러 Suppress nullable warning with !(!로 null 가능 경고 억제) 빠른 수정을 해결책으로 사용하지 않도록 설정할 수 있습니다.

코드 정리

이제 파일 저장 시 코드 정리가 자동으로 시작되도록 ReSharper를 구성할 수 있습니다! 마침내 구현되었죠!

타사 플러그인도 더 이상 필요하지 않습니다. 이 기능은 ReSharper | Options(옵션) | Code Editing(코드 편집) | Code Cleanup(코드 정리) 옵션 페이지에서 활성화할 수 있습니다.

Code Cleanup(코드 정리)을 실행할 때 recently modified files(최근에 수정한 파일)recently opened files(최근에 열어본 파일) 등의 세분화된 범위가 새로 추가되어 Code Cleanup(코드 정리)에서 전체 솔루션을 실행할 필요가 없으므로 결과 산출 시간이 크게 단축됩니다. 범위를 더 정확하게 조정하려면 "recently(최근)"로 적합한 항목을 지정할 수 있습니다.

코드 정리가 완료되면 파일이 자동 저장됩니다. 이 기능은 ReSharper | Options(옵션) | Code Editing(코드 편집) | Code Cleanup(코드 정리) 옵션 페이지에서 활성화할 수 있습니다.

코드 정리 실행 시간을 줄이기 위한 몇가지 개선 사항이 있습니다.

  • Cleanup(정리) 프로파일에서 해당 체크박스를 선택하지 않으면 정리할 코드를 수집할 때 정리에서 분석기가 실행되지 않습니다. 예를 들어 프로파일에 "Remove redundancies"(중복 제거) 옵션이 선택되어 있지 않으면 중복 검색과 관련된 분석기가 실행되지 않습니다.
  • 한 파일에서 여러 코드 수정이 동시에 실행됩니다. 이제 각 수정이 끝날 때마다 파일을 다시 강조 표시하지 않습니다.

유닛 테스트

유닛 테스트 러너를 처음부터 다시 작업하여 Visual Studio 프로세스에서 실행되는 .NET Framework 및 .NET Core 두 런타임에 동일한 러너가 적용되도록 하였습니다. 이 방법으로 유닛 테스트 검색, 실행, 디버그와 관련된 많은 문제를 해결하고 .NET Core 테스트의 유닛 테스트 계층 구조를 완전히 제어할 수 있게 되었습니다.

새로운 테스트 러너는 다음을 기본적으로 지원합니다.

  • NUnit, xUnit, MSTest v2 유닛 테스트 프레임워크용 MSFakes
  • NUnit, xUnit, MSTest v2용 TypeMock Isolator

UI에서 가장 눈에 띄는 것은 ReSharper가 xUnit 및 NUnit 프레임워크에 대한 .NET Core 테스트에서 DisplayName 속성을 지원한다는 것입니다.

유닛 테스트 트리에 필터를 적용하면(예: Passed(통과)/Failed(실패) 등) 카운터가 2개의 개별 숫자, 즉 모든 테스트의 총 수와 필터 기준을 만족하는 테스트 수를 제공합니다.

Navigate To(다음으로 이동) 메뉴에 두 가지 새로운 액션이 추가되었습니다.

  • 이 테스트를 포함하여 모든 유닛 테스트 세션 표시
  • 유닛 테스트 탐색 도구 창에 테스트 표시

NUnit의 Assert.Multiple 메서드에 대한 지원이 도입되어 첫 번째 실패 후 코드를 종료하지 않고도 여러 어설션을 확인할 수 있게 되었습니다.

기간별로 그룹을 지정할 수 있는 시간 범위를 옵션에서 바로 편집할 수 있습니다.

접근성 개선 사항

이번 릴리스에서는 JAWS, NVDA, Microsoft Narrator 등의 스크린 리더에 대한 지원이 향상되었습니다. 이제 이러한 스크린 리더는 다음 항목에 더 원활하게 액세스할 수 있습니다.

  • ReSharper 도구 창 내의 목록 및 트리 구성 요소
  • Options(옵션) 대화상자 내의 요소
  • Alt+Enter 메뉴의 요소
  • 모든 Go To(이동) 대화상자
  • 코드 완성 팝업

x:Bind 지원

UWP 개발자에게 희소식이 있습니다. x:Bind를 사용한 컴파일된 바인딩이 드디어 지원됩니다!

ReSharper는 x:Bind 코드를 올바르게 해결하고 여러 검사와 그에 해당하는 빠른 수정을 제공합니다. 또한 누락된 특성 setter, BindBack 속성 및 오버로드 충돌이 있을 경우 경고합니다. 그외에 C# 코드 비하인드 내에서 적절한 필드, 프로퍼티 또는 메서드를 생성하기 위한 Create from Usage(사용 위치에서 생성) 빠른 수정 모음이 있습니다.

x:Bind 표현식 내 propertyPath, BindBack, UpdateSourceTrigger 속성에 대한 코드 완성 및 매개변수 정보가 있습니다.

이제 Change Signature(시그니처 변경)Safe Delete(안전한 삭제) 리팩터링은 XAML 코드의 메서드 사용 위치를 인식하고 업데이트합니다. 또한 Make Static/Const(정적/상수로 변환)Encapsulate Field(필드 캡슐화) 리팩터링은 XAML 코드에서 바로 작동하고 C# 코드 비하인드에서 호출하면 XAML 사용 위치를 올바르게 업데이트합니다.

null 값 가능성 인식 기능이 x:Bind 코드 분석에 통합됩니다. C# 코드에 CanBeNullNotNull 속성이 있는 경우(예: propertyPath에서 사용된 메서드의 인수에 대한 "Possible System.NullReferenceException" 및 "Possible null assignment to non-nullable entity"), ReSharper에서 XAML 코드 내부에 null 관련 검사를 바로 표시합니다.

Find Usages(사용 위치 검색)Go to Declaration(선언으로 이동)과 같은 다른 ReSharper 기능도 x:Bind 바인딩을 인식합니다.

ReSharper 명령줄 도구

2020.1에서는 Rider가 macOS 및 Linux상에서 Mono에서 .NET Core로 마이그레이션되었습니다. 이번 릴리스에서 ReSharper 명령줄 도구는 Windows, Linux 및 macOS의 .NET Core에서 실행됩니다.

ReSharper 명령줄 도구는 더 이상 Mono 번들로 제공되지 않으며 macOS 및 Linux용 도구에 .NET Core 3.1이 필요합니다.

Mono 대신 .NET Core를 런타임으로 사용할 때의 또 다른 이점은 ReSharper 명령줄 도구를 .NET Core 전역 도구로 설치할 수 있다는 것입니다. 설치하려면 다음 명령어를 실행하세요.

dotnet tool install -g JetBrains.ReSharper.GlobalTools --version 2020.2.0-*

그럼 다음 jb tool_name [options](으)로 도구를 실행하세요. 다음은 예시입니다.

jb inspectcode yourSolution.sln -o=<pathToOutputFile>

유형 및 프로젝트 종속성 다이어그램

이 릴리스에서는 그래프를 그리는 데 사용되는 yFiles 엔진이 최신 버전으로 업데이트되었습니다. 이 새로운 yFiles 버전은 최적화 외에도 결과 그래프를 그리는 성능을 크게 향상합니다.

이제 결과 그래프를 다음과 같은 새로운 형식으로 내보낼 수 있습니다.

  • 외부 도구에서 상세 분석하기 위한 GraphML 파일 형식
  • PNG 형식으로 내보낼 수 없는 큰 다이어그램을 인쇄하기 위한 XPS 파일 형식

다이어그램 도구 창에서 Visual Studio 다크 테마가 드디어 지원됩니다.

탐색 업데이트

코드의 외부 어셈블리에서 유형의 사용 위치를 탐색하기가 훨씬 쉬워졌습니다. ReSharper는 Go to Type(유형으로 이동) 검색 결과에서 Find Usages(사용 위치 검색)로 바로 이동할 수 있습니다. 이 기능을 사용하려면 유형을 검색하고 키보드 또는 마우스오버로 목록에서 해당 유형을 강조 표시한 다음 해당 단축키를 사용하여 Find Usages(사용 위치 찾기) 또는 Go to Usage(사용 위치로 이동)를 호출하세요.

2020.2 버전 릴리스부터 사용자가 선호하는 단축키 구성에서 이러한 액션에 매핑된 단축키를 사용해 몇가지 ReSharper 액션을 호출할 수 있습니다(예: Go to Symbol(심볼로 이동)Go to File Member(파일 멤버로 이동) 대화상자에서 바로 빠른 문서를 호출).

새로운 Peek 액션

Peek Definition(정의 피킹) 뷰에서 일부 일반적 ReSharper 액션의 결과를 표시하기 위해 새로운 Peek 액션 모음이 추가되었습니다.

Peek Implementation(구현 피킹) 액션을 호출하여 Ctrl+Alt를 길게 누른 상태에서 마우스 휠을 클릭하여 구현의 Peek(피킹) 뷰를 열거나 심볼에 캐럿을 배치한 후 Ctrl+Alt+Q를 누르세요.

Peek Base Symbols(기본 심볼 피킹) 액션을 호출하여 Peek(피킹) 뷰 내의 모든 기본 심볼을 확인하세요. 간단히 심볼 위에서 Shift+Alt+Q를 누르기만 하면 실행됩니다.

Ctrl을 누른 상태에서 심볼 위에서 마우스 휠을 클릭하여 Peek Usages(사용 위치 피킹) 액션을 호출하면 Peek(피킹) 뷰 내에서 사용 위치를 확인할 수 있습니다.

리팩터링

이 릴리스에서는 Conflicts(충돌) 대화상자가 리팩터링 인터페이스에서 별도의 단계로 재설계되었습니다. 또한 이전의 일반 목록이 파일별로 그룹화된 트리로 대체되었습니다.

표현식에서 Introduce parameter(매개변수 삽입) 또는 Introduce field(필드 삽입) 리팩터링을 호출하면 ReSharper에서 해당 리팩터링을 적용할 표현식 부분을 묻습니다.

향상된 Unreal Engine 기능

Unreal Engine

ReSharper C++ 2020.2에는 Unreal Engine 프로젝트 모델 지원이 포함되어 include 지시문에 대한 더 스마트한 자동 가져오기 제안과 다양한 솔루션 구성에 대한 지원이 제공됩니다. 또한 ReSharper C++는 검사 심각도 및 코드 생성 액션을 조정하여 Unreal Engine 가이드라인을 철저히 준수합니다.

더 간편한 탐색을 위해 Search Everywhere(전체 검색)/Go To(이동) 기능은 이제 엔진 소스의 심볼을 라이브러리 심볼처럼 취급합니다. 또한 Unreal Engine 가이드라인을 강제하고 Unreal Editor에서 프로젝트 파일을 새로 고치도록 알려주는 몇가지 새로운 검사가 있습니다.

향상된 C++/CLI 지원

C++/CLI

ReSharper 라이선스에 ReSharper 및 ReSharper C++ 제품이 모두 포함되며 언어 간 브리지인 C++/CLI에 대한 지원이 다양하게 업데이트되고 C++/CLI와 C# 간의 상호 운용성도 크게 개선되었습니다.

ReSharper C++에서 C# 코드 내 파생 심볼을 검색할 수 있게 되고 Go to Base Symbols(기본 심볼로 이동)Go to Derived Symbols(파생 심볼로 이동) 기능이 가져온 CLR 엔티티에서도 작동합니다.

이제 ReSharper C++는 메모리 할당 방식을 검사하고 대상 유형이 유효하지 않은 경우 gcnewnew로 또는 그 반대로 대체하도록 빠른 수정을 제안합니다. 사용자가 관리형 클래스 또는 인터페이스에서 C++ final 지정자를 사용하려고 하면 다른 검사에서 이를 경고하고 sealed 지정자를 사용하도록 빠른 수정을 제안합니다. 또한 빠른 수정을 사용하여 C 스타일을 safe_cast로 형 변환할 수 있습니다.

ReSharper C++의 새로운 기능

어셈블리 탐색기

  • NuGet v3 패키지 피드가 Open from NuGet(NuGet에서 열기), Open from NuGet packages cache(NuGet 패키지 캐시에서 열기), Open NuGet packages.config(NuGet packages.config에서 열기)에서 지원됩니다.
  • Open from NuGetOpen from NuGet packages cache 대화상자에서 이름이 비슷한 항목은 접힌 상태가 됩니다.
  • NuGet 패키지가 알파벳순으로 정렬됩니다.

기타 기능

서식 지정

이제 ReSharper는 정렬된 그룹 중 일부의 서식만 다시 지정된 경우에도 유사한 코드의 열을 올바르게 정렬하므로 세미콜론 또는 괄호를 추가해도 정렬이 중단되지 않습니다.

.NET 도구 및 확장 기능

dotCover dotUltimate

dotCover 콘솔 러너가 몇가지 개선되었습니다.

  • --reportype=SummaryXml 매개변수를 사용하면 포함 클래스, 메서드 및 구문의 총 수에 대한 데이터가 포함된 새로운 Summary(요약) 보고서 유형을 생성할 수 있습니다.
  • 이제 러너에서 --reporttype=HTML,SummaryXml --output=report.html;summary.xml와 같이 여러 유형의 보고서를 한 번에 생성할 수 있습니다.
  • Linux용 러너(Debian, Ubuntu)가 ARM64 시스템에서 분석을 수행할 수 있게 되었습니다.

자세히 알아보기

dotTrace dotUltimate

독립실행형 dotTrace와 Rider의 dotTrace는 둘 다 Windows 기반 Mono/Unity 애플리케이션의 네이티브 부분을 프로파일링할 수 있습니다. 'Enable native profiling(기본 프로파일링 활성화)' 옵션으로 세션을 시작하면 성능 스냅샷에 네이티브 및 관리형 호출 스택이 모두 표시됩니다. 이 기능은 Unity 게임에서 성능 병목현상을 분석하는 데 도움이 될 수 있습니다.

dotTrace 콘솔 프로파일러가 몇가지 개선되었습니다.

  • 프로파일러를 사용하면 stdin 또는 파일에 명령어를 전송하여 프로파일링 세션(스냅샷 촬영, 프로파일링된 프로세스 분리 등)을 제어할 수 있습니다.
  • Linux용 프로파일러(Debian, Ubuntu)가 ARM64 시스템에서 애플리케이션을 프로파일링할 수 있게 되었습니다.

자세히 알아보기

dotMemory dotUltimate

이제 고정된 객체와 GC 루트에서 도달할 수 없는 객체를 별도의 객체 모음으로 열 수 있습니다.

dotMemory 명령줄 프로파일러의 개선 사항은 다음과 같습니다.

  • 이제 명령줄 프로파일러를 Windows뿐만 아니라 Linux 및 macOS에서도 사용할 수 있습니다.
  • Linux용 프로파일러(Debian, Ubuntu)가 x64뿐만아니라 ARM64 시스템에서도 애플리케이션을 프로파일링할 수 있게 되었습니다.

자세히 알아보기

dotPeek 

dotPeek은 최신 버전의 C#에 대한 지원을 지속적으로 개선하고 있으며 새로운 릴리스에서는 다음을 제공합니다.

  • 표현식으로 본문이 구성된 멤버
  • throw
  • 디폴트 매개변수 및 이름 지정된 인수
  • NullablePublicOnly 속성

자세히 알아보기

다운로드

30일 무료 평가 이용 가능