ReSharper 2022.2의 새로운 기능

ReSharper 2022.2에는 필수 멤버, checked 사용자 정의 연산자, raw 문자열, list 패턴과 같은 C# 11 기능에 대한 지원이 포함됩니다. 솔루션 전체의 분석으로 메모리 소비가 크게 최적화되었습니다. 또한 이 릴리스에는 디스크의 소스 코드의 서식을 실제로 다시 지정하지 않고도 원하는 형식으로 코드를 볼 수 있는 Virtual Formatter(가상 서식 지정 도구)와 함께 ReSharper가 코드에서 작동하는 동안 생성된 임시 파일을 제거하는 Disk Cleanup(디스크 정리) 도구도 있습니다.

다운로드

30일 무료 평가 이용 가능

C# 11

이 릴리스에서는 C# 11 테스트 버전의 몇 가지 추가 기능을 지원합니다.

필수 멤버

C# 11에서 class, structrecord 타입에 필수 멤버 목록을 선언하는 기능이 추가되었습니다. 이러한 항목은 필수로 간주되고, 타입의 인스턴스를 초기화하는 동안 초기화되어야 하는 모든 프로퍼티와 필드의 목록입니다. 타입은 기본 타입에서 이러한 목록을 자동으로 상속하여 상용구와 반복적인 코드를 제거하는 원활한 환경을 제공합니다.

ReSharper는 class, struct 또는 record 타입 내 멤버에 대한 required 키워드를 인식할 뿐만 아니라 required 키워드에 대해 다음의 추가 지원도 제공합니다.

  • 코드 완성에 required 키워드가 있습니다.
  • 대부분의 컴파일러 오류 및 경고를 사용할 수 있습니다.
  • required 제어자가 ReSharper | Options(옵션) | Code Editing(코드 편집) | C# | Syntax Style(구문 스타일) 페이지의 Modifiers order(제어자 순서)에 추가되었습니다.

타입의 객체를 생성했지만 아직 멤버를 초기화하지 않은 경우에 적용되는 새로운 Add initializer for required members(필수 멤버에 대한 이니셜라이저 추가) 빠른 수정을 추가하여 객체에서 누락된 모든 'required' 멤버가 자동으로 생성됩니다. 사용자는 의미 있는 데이터로 멤버의 값을 채우기만 하면 됩니다.

checked 사용자 정의 연산자

checked 사용자 정의 연산자를 이용하면 산술 오버플로가 유효한 개념인 타입에서 작동하는 사용자 정의 연산자를 만들 수 있습니다. ReSharper는 모든 컴파일러 오류 및 경고를 표시합니다. checked 사용자 정의 연산자를 완전히 지원하기 위해 몇 가지 검사와 컨텍스트 액션이 추가되었습니다.

unchecked/checked 컨텍스트에서 checked 연산자가 사용된 경우 이 연산자를 고려하도록 Unchecked/checked context is redundant(unchecked/checked 컨텍스트가 불필요함) 검사를 업데이트했습니다.

사용자 정의 연산자 집합이 있고 그 중 일부에 이미 checked 버전이 있는 경우, ReSharper는 checked 연산자가 전체 집합에 전달되도록 도와줍니다. The operator does not have a matching checked operator while other operators do(이 연산자에는 일치하는 checked 연산자가 없지만 다른 연산자에는 있음)라는 새로운 검사를 통해 아직 checked 연산자가 없는 연산자를 알려주고 checked 버전이 자동 생성되도록 하는 빠른 수정을 제안합니다.

코드 베이스에서 아직 checked 연산자를 사용하지 않았지만 추가하려고 하는 경우, Create matching checked operator(일치하는 checked 연산자 만들기)라는 새로운 컨텍스트 액션이 매우 유용할 것입니다. 이 액션은 모든 사용자 정의 연산자에서 사용할 수 있으며 한 번의 클릭으로 Alt+Enter 메뉴에서 바로 checked 버전의 연산자를 생성합니다.

raw 문자열

C# 11은 'raw' 문자열 개념을 도입하여 다른 언어나 텍스트 형식을 C# 코드에 포함하는 기능을 개선합니다.

ReSharper는 컴파일러 오류, 올바른 구문 분석 및 """ 구문에 대한 색상 강조 표시, 큰따옴표 쌍, 보간된 문자열({{.. .}} 구문) 내의 자리 표시자를 포함해 기본적인 'raw' 문자열을 지원합니다.

list 패턴

C# 11은 언어에서 사용 가능한 패턴 모음을 계속 확장하고 있습니다. 이번에는 C#에서 배열, 문자열 및 List<T> 같은 컬렉션 등의 list 구조에서 일치 작업을 수행할 수 있도록 지원합니다.

ReSharper 2022.2는 오류 검사, 코드 완성 및 코드 분석을 통해 list 패턴을 완벽하게 지원합니다. 또한 기존 코드 및 추가 리팩터링 액션에서 list 패턴을 사용하도록 제안하는 코드 검사를 추가하는 작업이 진행되고 있습니다.

추가 C# 11 기능

추가 C# 11 기능

  • ReSharper 2022.2는 사용자 정의 연산자 >>> 오버로드 지원을 포함하여 새로운 부호 없는 오른쪽 시프트 연산자(>>>)를 완벽하게 지원합니다.
  • C# 11에서 Span<char>ReadOnlySpan<char> 타입 값에 대해 문자열 상수를 바로 패턴 일치시킬 수 있게 됨에 따라 ReSharper 2022.2에서는 Span<char> 값을 문자열 인스턴스의 대체로서 단순하게 사용할 수 있도록 합니다.

솔루션 전체 분석 최적화

이번 릴리스에서는 Solution-Wide Analysis(솔루션 전체 분석) 모드 사용으로 메모리 트래픽(메모리 할당 수)과 메모리 소비 측면 모두에서 ReSharper의 메모리 사용량을 크게 최적화했습니다.

Solution-Wide Analysis 엔진은 메모리를 사용하여 솔루션의 문제 목록 및 타입/멤버의 사용 정보를 저장하여 솔루션 전반의 사용량 보고를 수행합니다('public member is never used'(public 멤버가 전혀 사용되지 않음) 등의 코드 검사). 사용 데이터는 '최신'이어야 하므로 사용자가 코드를 편집하는 동안 지속적으로 업데이트되어야 하며 디스크로 오프로드할 수 없습니다. 이로 인해 솔루션에 타입 및 타입 멤버가 많이 포함된 경우, 상당한 양의 메모리가 사용될 수 있습니다. 그래서 저희는 메모리에 저장된 데이터를 검토하여 데이터를 중복 제거/정규화할 수 있는 패턴을 찾았습니다. 또한 작업 세트를 더욱 줄이기 위해 특수 컬렉션 타입을 활용했습니다. 이러한 최적화를 통해 메모리 소비가 5~10배 향상되고 Solution-Wide Analysis(솔루션 전체 분석) 로드 속도가 빨라졌습니다.

코드 분석

최상위 구문

.NET 6은 C# 9 최상위 구문을 사용하여 새로운 프로젝트 템플릿을 도입했습니다. 최상위 구문은 Program 클래스 또는 public static void Main(string[] args) 메서드 선언을 단순화합니다. 그러나 때로는 명시적 시작 class Program이 필요하거나, 이것을 사용하는 것이 더 바람직합니다. 이에 ReSharper 2022.2에서는 이전 스타일로의 변환을 실행할 수 있도록 명시적 To explicit 'Program' class(명시적 'Program' 클래스로)라는 새로운 컨텍스트 액션이 추가되었습니다.

동시에 기존 Program 시작 클래스가 있고 최상위 구문으로 마이그레이션하려는 경우, 새로운 Convert to top-level code(최상위 코드로 변환) 컨텍스트 액션을 이용할 수 있습니다.

INotifyPropertyChanged 지원 업데이트

이번 릴리스에서는 INotifyPropertyChanged 지원을 새롭게 손보았습니다. 더 이상 외부 어노테이션에 의존하지 않고 일반적인 INotifyPropertyChanged API를 탐지하므로 더 많은 MVVM 프레임워크와 INotifyPropertyChanged 기본 클래스가 자동 지원됩니다. 이번 버전에서는 INotifyPropertyChanged 알림에 대해 가장 간결한 구문을 사용할 수 있게 해주는 SetField 메서드가 전송됩니다.

이제 타입 또는 파일의 모든 프로퍼티에 대한 property change(프로퍼티 변경) 알림을 추가할 수도 있습니다.

Alt+Enter 메뉴의 리팩터링

리팩터링을 더 쉽게 찾을 수 있도록 가장 많이 사용되는 리팩터링을 검토하여 현재 컨텍스트에 따라 표시되는 관련 컨텍스트 액션을 Alt+Enter 메뉴에 도입했습니다.

선택한 코드에서 Alt+Enter 메뉴를 호출하면 Extract method(메서드 추출) 컨텍스트 액션이 표시되도록 추가했습니다.

Change Signature(시그니처 변경), Transform Parameters(매개변수 변환), Convert to extension method(확장 메서드로 변환)Convert Property To Method(프로퍼티를 메서드로 변환) 리팩터링은 멤버 시그너처에 대한 컨텍스트 액션으로 모두 이용할 수 있습니다.

nameof 연산자 사용에 대한 추가 제안

ReSharper 2022.2는 WPF 프로젝트에서 DependencyProperty 등록을 인식하고 nameof 연산자를 사용하여 해당 CLR 프로퍼티 이름을 캡처하도록 제안합니다. 기본 제공 라이브 템플릿도 문자열 리터럴 대신 nameof를 내보내도록 업데이트되었습니다.

ReSharper는 멤버 또는 타입 이름과 같은 일부 코드 엔티티의 이름을 지정하는 데 사용되는 코드에서 특정 문자열 리터럴의 특별한 의미를 인식하지 못하는 경우가 많습니다. 이러한 경우를 위해, 문자열 리터럴을 포함하는 컨텍스트에서 코드 엔티티를 참조할 수 있는 식별자와 함께 문자열 리터럴에 대한 새로운 Capture element name(요소 이름 캡처) 컨텍스트 액션을 도입했습니다.

Structural Search and Replace(구조 검색 및 바꾸기)

Structural Search and Replace (SSR)(구조 검색 및 바꾸기) 패턴의 빠른 수정을 이제 파일, 폴더, 프로젝트 또는 전체 솔루션 범위에 적용할 수 있습니다. 이는 ReSharper | Options(옵션) | Code Inspection(코드 검사) | Custom Patterns(사용자 지정 패턴) 페이지에서 만든 사용자 지정 패턴, ReSharper 기본 제공 코드 검사 및 SSR을 기반으로 한 수정에 적용됩니다.

기타

ReSharper 2022.2는 코드에서 일부 대입 패턴을 탐지하고 패턴 일치를 통해 더 관용적인 C# 코드를 제안합니다.

ReSharper 2022.2는 ?: 표현식의 일부 is 패턴을 더 간결한 ?? 표현식의 as로 바꾸어 임시 변수를 효과적으로 제거할 수 있습니다.

가상 서식 지정

실제로 디스크에서 소스 코드 서식을 다시 지정하지 않고도 원하는 서식으로 코드를 볼 수 있는 방법인 Virtual Formatter(가상 서식 지정 도구)를 도입했습니다. 예를 들어, 이제 열의 매개변수를 가상으로 정렬하거나 들여쓰기를 늘릴 수 있습니다. 이 기능의 목표는 코드의 가독성과 관리 편리성을 개선하고 시각 장애가 있거나 신경 발달 장애가 있는 개발자가 더 쉽게 접근할 수 있도록 하는 것입니다. 사전 설정된 Virtual Formatter(가상 서식 지정 도구)를 사용하려면 ReSharper | Options(옵션) | Environment(환경) | Inlay Hints(인레이 힌트) | General(일반)로 이동합니다. 정확한 사양에 맞게 서식을 추가로 조정하려면 Use dedicated Virtual Formatter style settings(전용 가상 서식 지정 도구 스타일 설정 사용) 확인란을 선택하고 C#을 클릭합니다.

디스크 정리

이제 코드에서 작업하는 동안 ReSharper에서 생성한 임시 파일을 제거할 수 있습니다. Options(옵션)에서 다음을 수행할 수 있는 새 페이지를 추가했습니다.

  • ReSharper가 제거할 수 있는 디폴트 경로 및 파일 세트를 관찰합니다.
  • 제거하려는 파일에 대한 사용자 지정 경로 템플릿을 추가합니다.
  • 각 경로 템플릿에서 ReSharper가 파일이 오래된 것으로 간주해야 하는 일 수를 지정합니다.
  • 각 경로 템플릿과 일치하는 파일이 차지하는 공간을 확인합니다.
  • 오래된 파일에 대한 자동 정리가 주기적으로 실행되도록 설정합니다(디폴트 값은 1일).
  • 다른 범위를 지정하려면 수동으로 정리를 실행합니다.

JavaScript 및 TypeScript 지원

많은 분들이 눈치채셨겠지만 ReSharper의 JavaScript 및 TypeScript 지원은 오래되었고 느립니다. 현재 구현에서는 TS 언어 변경 사항을 따르고 새 버전을 빠르게 지원하기 어렵기 때문에 이러한 언어를 지원할 더 나은 방법을 찾고 있습니다. 현재 JS 및 TS 지원은 오랜 내부 논의 끝에 보류하기로 결정했습니다. 이에 따라 이 릴리스에서는 TS/JS 지원을 기본적으로 비활성화했습니다. 이를 계속 사용하려면, ReSharper | Options(옵션) | Environment(환경) | Products & Features(제품 및 기능) | 'JavaScript and TypeScript'(JavaScript 및 TypeScript) 체크박스로 이동하여 다시 활성화할 수 있습니다.

Unreal Engine

ReSharper C++Blueprint 관련 인레이 힌트가 도입되어 코드를 전체적으로 파악할 수 있습니다.

  • 파생된 Blueprint 클래스 및 모든 상속자 목록 확인.
  • Blueprint에 구현된 UFunction의 모든 해당 사례 검색.
  • 재정의 여부와 Blueprint 파일에 설정된 값 등을 포함한 UProperty의 상태를 빠르게 확인.

또한 코드에 사용된 Blueprint 관련 함수 지정자와 Blueprint 자체의 불일치를 확인하는 검사도 추가했습니다.

기본 시스템 호출에 대한 지원 개선 dotUltimate

이제 dotTrace는 Windows 커널 호출(ntoskrnl.exe), 기기 드라이버 호출(*.sys) 등을 포함하여 Timeline Call Tree(타임라인 호출 트리)의 네이티브 시스템 호출에 대한 자세한 정보를 제공합니다.

StyleCop.Analyzers의 설정 준수

이제 ReSharper는 프로젝트에서 StyleCop.Analyzers 패키지를 참조하는지 탐지하여 stylecop.json.ruleset 파일에서 해당 설정을 읽을 수 있습니다. 파일 헤더 및 들여쓰기 설정은 stylecop.json에서 가져오고, StyleCop 규칙은 활성 .ruleset 파일 설정에 따라 적용됩니다.

ReadyToRun 및 NGen 어셈블리

  • ReadyToRun (R2R)NGen 어셈블리가 Assembly Explorer(어셈블리 탐색기)에 표시되는 방식이 개선되었습니다. 이제 작은 프로세서 기호 아이콘과 ngen 또는 R2R 라벨이 각 어셈블리 이름 옆에 표시됩니다.
  • Metadata(메타데이터) 트리에 ReadyToRun 헤더가 있습니다.
다운로드

30일 무료 평가 이용 가능