ReSharper 2021.3의 새로운 기능

ReSharper 2021.3은 최근 출시된 Visual Studio 2022를 지원합니다. 코드 분석은 파일 범위의 네임스페이스 및 global using 지시문, null 가능 참조 타입 및 일반 C# 지원을 포함한 C#10 지원을 개선합니다. 이 릴리스에는 사용자 정의 묵시적 변환 연산자에 대한 Find Usages(사용 위치 찾기), 새로운 여백 표시 및 크게 향상된 Copy Code Reference(코드 참조 복사) 기능도 추가되었습니다.

다운로드

30일 무료 평가 이용 가능

Visual Studio 2022 지원

ReSharper는 이제 새로운 Visual Studio 2022의 릴리스 빌드를 지원합니다. 다른 Visual Studio 버전에서 이미 사용했던 것과 동일한 풍부한 기능 세트를 사용할 수 있습니다. Visual Studio 2022는 x64 프로세스이므로 할당할 수 있는 최대 메모리 양에 더 이상 제한이 없으며 결과적으로 모든 ReSharper 기능이 더 빠르게 작동합니다.

이 새 버전의 Visual Studio에서 ReSharper를 사용하려면 dotUltimate 2021.3 설치 프로그램에서 VS2022 아이콘이 선택되어 있는지 확인하세요.

C# 10

C# 10이 최근에 출시되었으며, ReSharper는 계속해서 더 많은 C# 10 기능을 추가하고 있습니다. 오늘 전해 드릴 기쁜 소식은 파일 범위의 네임스페이스, global using, CallerArgumentExpression 속성, '보간된 문자열 핸들러' 콘셉트 및 C# 10 람다가 지원된다는 것입니다.

파일 범위의 네임스페이스부터 살펴보겠습니다. 새로운 구문 자체를 지원하는 것 외에도 원하는 스타일을 선택할 수 있는 새로운 구문 스타일 옵션이 추가되었습니다(ReSharper | Options(옵션) | Code Editing(코드 편집) | C# | Syntax Style(구문 스타일) | Code body(코드 본문) | Namespaces(네임스페이스)). 스타일을 선택하면 ReSharper가 스타일을 따르기 위해 변경해야 하는 코드에 대한 검사를 표시하고 적절한 빠른 수정을 제안합니다. 한 번의 클릭으로 프로젝트 또는 심지어 전체 솔루션에 수정 사항을 적용할 수 있습니다.

이제 코드를 이전 구문 스타일로 되돌릴 수 있는 두 가지 컨텍스트 액션인 Convert to file-scoped namespace(파일 범위 의 네임스페이스로 변환)Convert to block-scoped namespace(블록 범위의 네임스페이스로 변환)가 추가되었습니다.

자세히 알아보기: 파일 범위의 네임스페이스

이제 global using에 대해서 간단히 알아보겠습니다. ReSharper 코드 분석은 global 키워드로 표시된 using을 인식하고 이를 사용하여 프로젝트의 모든 코드 파일에서 심볼을 올바르게 해결합니다. ReSharper는 global using이 파일 내에서 잘못된 위치에 있는 경우도 알려줍니다.

ReSharper는 프로젝트에서 사용된 곳이 없는 global using을 사용되지 않은 것으로 강조 표시하고 해당 구문을 제거할 수 있도록 빠른 수정을 제공합니다.

ReSharper는 코드 완성 및 코드 검사를 포함하여 CallerArgumentExpression 속성에 대한 풍부한 지원을 제공하여 올바르게 사용할 수 있도록 도와줍니다.

자세히 알아보기: CallerArgumentExpression

C# 10은 '보간된 문자열 핸들러'라는 새로운 콘셉트를 도입했습니다. 최종 사용자의 경우 이는 일반적으로 문자열 보간 표현식이 .NET 6에서 더 빠르게 작동하고 새로운 핸들러를 통해 보간 홀에서 Span<char> 값을 사용할 수도 있음을 의미합니다. 라이브러리 작성자의 경우 이 기능을 통해 문자열 보간 표현식을 문자열로 변환할지 여부를 결정할 수 있습니다. ReSharper 2021.3은 라이브러리 코드에서 '보간된 문자열 핸들러' 패턴을 인식하고 이제 더 많은 위치에서 문자열 보간 표현식의 사용을 안전하게 제안할 수 있습니다.

ReSharper는 record 구조체를 readonly로 표시하도록 제안하여 최고의 성능을 얻을 수 있도록 도와줍니다. 제어자를 사용하여 타입 선언을 불필요하게 복잡하게 만드는 것을 방지하기 위해 이 검사는 record 타입에 변경되지 않는 인스턴스 구성원이 있고 솔루션에 setter를 통한 변형이 없는 경우에만 표시됩니다(솔루션 전체 분석이 필요함).

C# 10을 사용하면 객체 패턴 중첩 대신 점으로 구분된 액세스를 허용하여 패턴 일치 구문을 약간 단순화할 수 있습니다.

ReSharper는 빠른 수정을 사용한 해당 검사와 빠른 수정 실행을 취소하는 컨텍스트 액션을 제공합니다.

마지막으로 중요한 개선 사항:

  • C# 10 람다에 대한 지원이 향상되었으며 .NET 6 Minimal API 프로젝트에서는 빨간색 코드나 거짓 양성 오류가 없을 것입니다. 또한 ReSharper는 올바른 구문을 사용하고 컴파일러에서 예상하는 위치에 괄호를 추가하는 데 도움을 줍니다.
  • ReSharper는 이제 최상위 구문이 포함된 코드에 대해 유효한 생성 클래스 이름으로 'Program'을 지원합니다.
  • 이제 인터페이스의 static abstract 멤버에 대한 초기 지원을 사용할 수 있습니다. 코드 분석에서는 이 구문이 유효한 것으로 간주되므로 더 이상 빨간색 코드를 처리할 필요가 없습니다. Generate missing members(누락된 멤버 생성) 기능은 static abstract 멤버를 인식하고 올바르게 처리합니다. 이 릴리스에는 상속 여백 표시와 기본/파생 심볼로 이동하는 기능도 포함되어 있습니다.

null 가능 참조 타입

stackoverflow.com과 같은 다른 리소스에서 코드 조각을 복사하는 것은 드문 일이 아닙니다. 최근에는 C#에서 null 가능 참조 타입을 사용할 수 있으므로 일부 코드 샘플에는 이미 NRT 구문이 포함되어 있습니다. 하지만 솔루션에 NRT가 활성화되어 있지 않다면 어떻게 해야 할까요? ReSharper에는 Replace with JetBrains.Annotations(JetBrains.Annotations 속성으로 대체)Remove nullable annotations without ‘#nullable’ context('#nullable' 컨텍스트 없는 null 가능 어노테이션 제거)라는 두 가지 새로운 빠른 수정 기능이 있습니다. 이는 코드를 프로젝트에 붙여넣은 후 이러한 구문을 제거하는 데 도움이 됩니다.

때때로 타입 인수와 해당 null 값 가능성 제약 간에 null 값 가능성 여부가 일치하지 않을 수 있습니다. 이제 다음과 같은 경우를 포함하여 이러한 경우에 대한 빠른 수정이 있습니다.

  • 타입 인수에서 null 가능 어노테이션을 제거합니다.
  • 타입 인수에서 notnull 제약을 제거합니다.
  • 타입 매개변수에 null 가능 값을 허용합니다.
  • 타입 인수로 사용되는 타입 매개변수에 null 가능 값을 허용하지 않습니다.

파일, 프로젝트 또는 전체 솔루션에서 null 가능 디폴트 값이 있는 매개변수의 어노테이션을 수정하기 위해 일괄 빠른 수정을 사용할 수 있습니다.

메서드 내에서 매개변수가 null로 확인되면 해당 매개변수를 null 가능으로 만드는 새로운 일괄 빠른 수정도 있습니다.

코드 분석

클로저를 사용한 static 지역/익명 함수에 대한 몇 가지 빠른 수정 및 컨택스트 액션을 추가하였습니다.

  • Allow closures(클로저 허용) 빠른 수정은 지역 함수 또는 익명 함수가 클로저를 포함하는 경우 해당 함수에서 static 제어자를 제거합니다.
  • Pass closure as a parameter(클로저를 매개변수로 전달) 빠른 수정은 static 지역 함수의 클로저를 매개변수로 리프트합니다.
  • Pass closure as a parameter(클로저를 매개변수로 전달) 컨텍스트 액션은 static이 아닌 지역 함수의 클로저를 매개변수로 리프트합니다.

.PadLeft().PadRight() 메서드 호출을 보간된 문자열 내 자리 표시자로 대체하는 해당 빠른 수정이 포함된 Simplify string interpolation(문자열 보간 단순화)라는 새로운 검사가 있습니다.

C# 레코드 구조체(record struct) 추가에 이어 일반 구조체에 대한 지원도 개선하였습니다. 대부분의 개발자는 여전히 DTO에 객체 이니셜라이저가 있는 클래스를 사용합니다. 이제 이러한 모든 사용 위치를 매개변수가 있는 생성자로 빠르게 변환할 수 있습니다. 이는 레코드(record) 선언 자체에서, 또는 모든 객체 이니셜라이저에서 수행할 수 있습니다. 프로퍼티 대입으로 생성자를 정의하는 DTO도 변환할 수 있습니다.

이미 얼마 전부터 ReSharper는 필드에 대한 일관성 없는 잠금에 대해 경고했습니다. 이 버전에서는 여러 잠긴 리소스의 순서도 고려하는 보완 검사를 추가하여, 발생할 수 있는 교착상태 주기에 대해 알려줍니다.

ReSharper는 이제 byte, sbyte, short, ushort, uint, long, ulongenum 등의 추가 정수 타입에 대한 정수 산술 표현식의 타당성을 검사합니다. 이렇게 하면 도달할 수 없는 코드 분기를 방지할 수 있습니다.

길고 복잡한 조건을 더 쉽게 읽을 수 있도록 조건 요소에 대한 강조 표시를 추가했습니다. C#의 &&|| 체인과 같은 논리 연산자 그룹을 강조 표시합니다.

코드 분석 성능

폴더, 프로젝트 또는 솔루션에 대해 빠른 수정 및 컨텍스트 액션이 호출될 때 구현되는 데 걸리는 시간을 줄였습니다.

Solution-Wide Error Analysis(SWEA, 솔루션 전체 분석)Monitor warnings(경고 모니터링)와 함께 활성화된 경우, ReSharper는 이제 SWEA 결과를 사용하여 해당하는 문제가 없는 파일을 건너뛰어 해결할 문제를 찾는 데 소요되는 시간을 크게 줄입니다.

솔루션에서 SWEA를 실행하지 않는 분들을 위한 희소식도 있습니다! 이제 ReSharper는 사용 가능한 모든 CPU 코어를 활용하여 코드 분석을 병렬로 실행합니다. 이렇게 하면 범위 빠른 수정 및 컨텍스트 액션을 실행하는 데 걸리는 전체 시간이 줄어듭니다.

 

다음과 같이 거대한 메서드가 포함된 파일에 대한 데몬의 성능이 크게 향상되었습니다.

  • 크거나 중첩된 조건식, 튜플 표현식 또는 switch 식이 있는 메서드.
  • null 가능 참조 타입이 비활성화된 경우 타입 검사가 많은 메서드.
  • null 가능 참조 타입이 활성화된 경우 인덱서 액세스가 많은 메서드.
  • null 가능 참조 타입이 활성화된 경우 클로저가 많이 사용된 메서드.

탐색 및 Find Usages(사용 위치 찾기)

새로운 여백 표시

클래스, 인터페이스 또는 구조체의 상속 구조를 빠르게 탐색할 수 있도록 여백 표시를 몇 개 더 추가했습니다. 새로운 ↑O↑I 아이콘은 코드 엔티티가 각각 다른 클래스 또는 인터페이스를 상속 또는 구현함을 나타냅니다. 이 코드 엔티티의 상속이 복잡한 경우 아이콘을 선택하면 상속 계층 구조의 맨 위에 있는 모든 상위 항목이 있는 메뉴가 표시됩니다. 클래스가 인터페이스와 클래스를 동시에 구현하거나 상속하는 경우 ReSharper는 여백에 ↑IO 아이콘을 표시합니다.

또한 이 릴리스에서는 기본적으로 클래스 멤버에 대한 여백 표시를 활성화했습니다. ReSharper는 파생 클래스에서 클래스 멤버가 재정의된 경우 클래스 멤버 옆의 왼쪽 여백에 ↓O 아이콘을 추가합니다. 아이콘을 클릭하면 다음이 수행됩니다.

  • 이 멤버를 재정의하는 파생 클래스의 멤버로 이동합니다.
  • 이 멤버를 재정의하는 다른 클래스의 클래스 멤버 목록이 있는 메뉴를 표시합니다.

사용자 정의 묵시적 변환 연산자에 대한 Find Usages(사용 위치 찾기)

이제 사용자 정의 묵시적 변환 연산자에 대해 Find Usages(사용 위치 찾기)를 사용할 수 있습니다! 이 기능은 타입 변환 힌트에 사용되는 메커니즘을 기반으로 구현되었습니다.

이 기능을 통해 사용자 정의 묵시적 변환 연산자가 사용되는지 여부를 확인한 다음 변환이 있는 코드 블록으로 이동할 수 있습니다.

이 알고리즘은 빠르지 않으며 결과를 계산하고 표시하는 데 상당한 시간이 걸릴 수 있습니다.

디버그 모드에서 인터페이스 구현으로 이동

디버그 모드에서 인터페이스 타입의 변수 또는 매개변수에 대해 Go to Type of Symbol(심볼 타입으로 이동)을 호출하면 ReSharper가 인터페이스 선언이 아닌 현재 프레임에서 사용되는 정확한 구현으로 안내합니다.

언어 삽입

이제 [LanguageInjection] 어노테이션 속성을 사용하여 함수의 매개변수, 필드 또는 프로퍼티를 표시할 수 있습니다. ReSharper는 표시된 코드 엔티티의 문자열 값을 지정된 언어의 코드 조각으로 간주합니다. 삽입할 수 있는 언어는 CSS, HTML, JavaScript, JSON 또는 XML입니다. 속성을 추가하는 즉시 적절한 구문 강조 표시, 코드 완성 및 기타 기능을 문자열 내에서 사용할 수 있습니다. LanguageInjection 속성을 ​​사용하려면 최신 버전 JetBrains.Annotations를 프로젝트에 추가해야 합니다.

Copy Code Reference(코드 참조 복사)

이번 릴리스에서는 Copy FQN(FQN 복사) 기능이 많이 변경되었습니다. 우선 기능의 이름이 Copy Code Reference(코드 참조 복사)로 변경되었습니다. 새로운 이름이 기능을 더 잘 반영한다고 생각합니다.

Git을 버전 관리 시스템으로 사용하는 경우 새로운 기능을 추가했습니다. GitHub에서 복제된 프로젝트에 대해 GitHub 관련 항목이 있는 Copy Code Reference(코드 참조 복사) 팝업이 별도 설정 없이 표시됩니다. 이 항목은 GitHub 저장소에 대한 적절한 링크를 생성하여 누구와도 바로 공유할 수 있습니다.

GitHub 저장소가 아닌 경우 이제 ReSharper 설정에서 사용자 지정 URI 템플릿을 추가할 수 있습니다. 이러한 모든 템플릿은 Copy Code Reference(코드 참조 복사) 팝업에서 확인할 수 있습니다. URI 템플릿은 Current Branch Name(현재 브랜치 이름), File Name(파일 이름), Current Line Number(현재 줄 번호) 등과 같은 사전 정의된 다양한 자리 표시자로 구성될 수 있습니다.

마지막으로 팝업 자체에 상당한 변화가 생겼습니다. 팝업의 디자인, 아이콘 및 서식이 모두 새로워졌습니다.

서식 지정

  • if(), while() 등과 같은 구문 조건 내에서 람다 또는 프로퍼티 패턴 중괄호를 들여쓰는 옵션을 추가했습니다.
  • if(), foreach() 등의 괄호 안에 구문 조건을 정렬하는 옵션을 추가했으며 기본적으로 ON으로 설정되었습니다.
  • 예를 들어 x is Foo or Bar or Baz와 같이 바이너리 패턴을 줄 바꿈, 자르기, 정렬 및 내어쓰기하는 옵션을 추가했습니다.

새 Unreal Engine 클래스 만들기

ReSharper C++ 2021.3을 사용하면 더 이상 새 클래스를 생성하기 위해 Unreal Editor로 전환할 필요가 없습니다. 이제 Unreal Engine 클래스를 위해 사전 정의된 모든 템플릿을 ReSharper 파일 템플릿 목록에서 사용할 수 있습니다.

새 클래스를 만들려면 Solution Explorer(솔루션 탐색기)로 이동한 다음, 원하는 프로젝트 폴더를 마우스 오른쪽 버튼으로 클릭하여 Add(추가) 메뉴를 엽니다(또는 Ctrl+Alt+Insert 사용). 목록에서 Unreal Engine 템플릿을 선택하고 새 클래스에 이름을 부여하면 ReSharper C++가 템플릿 코드를 사용하여 private 또는 public 컨텍스트에 따라 적절한 폴더에 헤더와 소스 파일을 생성합니다.

ReSharper C++ 2021.3의 새로운 기능

더욱 향상된 C++# 20 지원

C++20 지정 이니셜라이저를 사용하여 집계 초기화를 위한 상용구 코드를 빠르게 생성할 수 있습니다. 완성 목록에서 해당 항목을 선택하여 데이터 멤버에 대한 지정자를 삽입한 다음 초기 값을 제공하기만 하면 됩니다.

또한 ReSharper C++ 2021.3은 표준 컨테이너에서 요소를 삭제하고 요소가 연관 컨테이너에 있는 지 확인하고 디폴트 초기화를 사용하여 스마트 포인터를 생성하는 검사를 사용하여 새로운 라이브러리 함수를 적용하는 것을 돕습니다.

ReSharper C++ 2021.3의 새로운 기능

AnalyzerConfig 파일 지원

.NET 5 SDK부터 전역 AnalyzerConfig 파일을 사용하여 Visual Studio의 분석기 옵션을 구성할 수 있습니다. ReSharper 2021.3은 이러한 전역 AnalyzerConfig 파일에서 코드 스타일 정보를 읽고 이에 따라 ReSharper의 규칙을 조정합니다.

샘플링된 메모리 할당 데이터 dotUltimate

이제 dotMemory는 ETW 이벤트를 기반으로 샘플링된 메모리 할당 데이터를 가져올 수 있습니다. 할당 데이터를 수집하는 기존의 (통계적인) 방법과 비교할 때 샘플링 정확도는 떨어지지만 다음과 같은 많은 이점이 있습니다.

  • 샘플링된 할당 데이터는 성능 저하 없이 수집됩니다.
  • 이 데이터 수집은 항상 활성화되어 있으므로 명시적으로 활성화할 필요가 없습니다.
  • 이미 실행 중인 애플리케이션에 프로파일러를 연결할 때에도 샘플링된 할당 데이터가 수집됩니다.

이 기능은 Windows에서만 사용 가능합니다.

dotMemory 2021.3의 새로운 기능

다운로드

30일 무료 평가 이용 가능