ReSharper 2021.1의 새로운 기능

ReSharper 2021.1은 코드 분석 업데이트, ASP.NET 경로 템플릿 지원, 튜플 구성 요소 이름 변경 등을 제공합니다.

다운로드

30일 무료 평가 이용 가능

코드 분석

더 다양해진 병합 패턴

Merge into pattern(패턴에 병합) 검사가 이제 더 많은 코드 패턴을 처리할 수 있습니다. Null 검사 및 다른 검사를 하나의 패턴 검사로 만듭니다.

conditional?.Access 표현식에서 중첩된 패턴 일치로 검사를 재작성합니다.

검사를 병합하여 if 구문의 중첩을 줄입니다.

마지막으로, 패턴을 전체 양식으로 확장하여 간단한 var (a,b) 구조 분해 패턴 내부에 패턴을 병합할 수 있습니다.

C++9.0에 대한 추가 지원

C# 9.0 레코드에 대한 지원을 확대했습니다. Extract interface(인터페이스 추출)Extract superclass(상위 클래스 추출) 리팩터링이 이제 File Layout(파일 레이아웃) 및 XML 문서와 관련된 기능과 마찬가지로 레코드 선언과 함께 작동합니다.

여러 가지 새로운 검사와 액션을 도입했습니다. 레코드 선언의 프로퍼티에 대한 Redundant explicit property declaration(중복된 명시적 프로퍼티 선언)은 위치 매개변수 및 묵시적 프로퍼티 선언이 있는 레코드를 사용하도록 코드를 마이그레이션을 할 때 도움이 될 수 있습니다. 해당하는 빠른 수정인 Remove explicit property(명시적 프로퍼티 제거)가 포함되어 있습니다.

레코드클래스로 전환하기로 결정한 경우, To class(클래스로 이동) 액션이 위치 매개변수와 기본 생성자를 처리합니다. 반대로 작동하는 To record(레코드로 이동) 액션도 있습니다.

위치 매개변수와 기본 생성자를 일반 프로퍼티, 생성자 및 명시적 Deconstruct() 메서드로 다시 작성해야 할 때마다 To explicit constructor(명시적 생성자로 이동) 컨텍스트 액션을 사용하는 것이 좋습니다.

깔끔하게 정리하는 데도 신경을 써, Redundant 'record' type declaration body(중복 '레코드' 유형 선언 본문) 검사 및 해당하는 빠른 수정이 빈 레코드 유형 선언 본문을 세미콜론으로 대체합니다.

Find usages(사용 위치 찾기)가 이제 레코드 기본 생성자의 사용 위치와 묵시적 Deconstruct() 메서드의 사용 위치를 검색합니다.

임시 변수 인라인화

새로운 검사인 Inline temporary variable(임시 변수 인라인화)를 추가했습니다. 때로는 프로그래밍을 할 때 서로 다른 이름으로 동일한 값을 반복해서 사용하는 경우가 있습니다. 이러한 코드를 더 투명하게 만들 수 있을까요? 물론입니다. 여기서 ReSharper가 도움을 줍니다.

임시 변수가 다른 값으로 초기화되거나 나중에 코드에서 변경되어야 하는 경우 버그를 찾는 데 도움을 줄 수도 있습니다.

기타 유용한 기능

논리적 not 패턴으로 유형 검사를 훨씬 더 쉽게 읽을 수 있습니다. ReSharper는 not 패턴을 우선시하고 !() 구문을 삭제하는 방법을 이용합니다.

코드를 단순화하는 데 도움이 된다면 ReSharper가 이제 SliceSubstring 대신 범위 연산자의 사용을 제안합니다.

Namespace does not correspond to file location(네임스페이스가 파일 위치와 일치하지 않음) 검사가 이제 최상위 코드가 있는 파일에서 표시되지 않습니다.

자동 프로퍼티가 계산된 프로퍼티로 대체될 수 있는지 여부를 확인하는 또 다른 새로운 검사와 대체를 위한 빠른 수정이 제공됩니다.

C# 10.0 지원을 위한 첫 번째 단계로 ReSharper에서 상수 문자열 보간 기능을 처리 할 수 있도록 했습니다.

2021.1의 코드 분석에 대한 자세한 정보는 블로그에서 곧 확인하실 수 있습니다!

ASP.NET Core 경로 템플릿

경로 템플릿은 MVC 애플리케이션에서 HTTP 요청이 애플리케이션의 실행 가능한 엔드포인트에 결부되는 방식을 구성하는 데 널리 사용됩니다. 2021.1에서는 경로 템플릿에 대한 지원을 도입하여, 이제 ReSharper에서 구조 탐색, 검사 및 빠른 수정을 제공합니다. 몇 가지 예를 살펴보겠습니다.

가장 기본적인 검사는 경로 템플릿 구문 오류를 확인합니다. 실수로 템플릿 중간에 catch-all 매개변수 경로를 배치하고, catch-all 매개변수를 선택 사항으로 선언하고, 선택적 매개변수의 기본값을 추가하는 등을 예로 들 수 있습니다.

경로 매개변수에서 흥미로운 사례가 많이 나올 수 있습니다. 컨트롤러와 액션에서 같은 이름의 매개변수를 선언하면 어떻게 될까요? ReSharper가 이를 경고합니다.

한편으로는, 매개변수가 누락될 수 있습니다. 이 경우 ReSharper는 컨트롤러의 속성 또는 액션에서 이 매개변수를 추가할 것을 제안합니다. 유형 제약 조건이 있는 경우, 매개변수 유형을 추론하는 데 사용됩니다.

제약 조건은 코드 분석에 도움이 됩니다. ReSharper는 적용된 제약 조건 자체가 올바른지, 매개변수가 실제로 제약 조건을 충족하는지 확인합니다.

ReSharper는 제약 조건에 따라 매개변수 유형이 더 엄격할 수 있는지 여부를 분석하고 유형 변경을 제안할 수도 있습니다. 의도적으로 매개변수에 다른 유형을 사용한 경우, 제안을 무시하면 됩니다.

ReSharper는 사용자 지정 제약 조건도 인식합니다. 경우에 따라 인식되지 않는 경우 JetBrains.Annotations에서 제공하는 [RouteParameterConstraint] 속성으로 제약 클래스에 어노테이션을 추가하세요.

표준 팩의 다른 기능의 경우와 마찬가지로 코드 완성, 구조 탐색 및 코드 재배열이 있습니다.

더 이상 경로 매개변수의 이름을 수동으로 변경할 필요가 없습니다. 이제 Rename(이름 변경) 리팩터링을 사용하면 됩니다.

지금은 위의 모든 기능이 속성 기반 라우팅에서 작동합니다. 이번 새 버전에 대한 여러분의 의견을 저희에게 알려주세요.

ASP.NET Core 경로 템플릿에 대한 자세한 내용은 이 블로그 게시물을 참조하세요.

튜플에서 이름 변경

이름 지정된 튜플은 C# 7 이후로 우리와 함께 해왔지만 구성 요소의 이름 변경은 수동으로 해야만 했습니다. 이제 더 이상 그럴 필요가 없이 리팩터링을 호출하면 됩니다.

탐색

새로운 탐색 액션인 Navigate to Windows Explorer(Windows Explorer로 이동)가 추가되었습니다 Navigate(탐색) | Navigate to(탐색 위치) 메뉴를 이용하거나 Ctrl+Shift+A를 누르고 이름을 입력하면 됩니다. 파일을 복사하거나 저장소 내부의 경로를 복사하는 등 파일 자체로 작업을 하는 경우, 또는 Windows 탐색기용 Git 확장 프로그램을 사용하여 파일의 VCS 기록을 보고 싶은 경우에 유용할 수 있습니다.

성능

ReSharper를 별도의 프로세스로 이전하는 과정을 계속 진행하면서도, 가능한 성능과 관련한 특정 문제도 계속 해결하고 있습니다. 주요 개선 사항은 다음과 같습니다.

  • 대규모 솔루션 내에서 Razor 파일의 입력 속도를 높였습니다.
  • ReSharper의 분석기가 작동하는 모든 대용량 파일의 입력 속도를 높였습니다.
  • 디버거 데이터 팁의 성능과 응답 성능을 개선했습니다.
  • ReSharper가 공유 문서를 처리하는 방식을 최적화하여 이제 메모리를 적게 사용합니다.
  • JavaScript 및 TypeScript 유닛 테스트에 대한 성능을 향상시켰습니다.

서식 지정 및 코드 스타일

몇 가지 새로운 설정이 추가되었습니다.

  • 이제 대상 유형 new() 괄호 앞 및 괄호 내에 공백을 설정할지 여부를 선택할 수 있습니다.
  • 대입 연산자 앞에 줄 바꿈을 지정할 수 있습니다.
  • 라벨 구문을 내어쓸 수 있습니다.

사용자 지정 이름 지정 규칙의 경우, 적용되는 순서를 업데이트하여 보다 구체적인 규칙이 먼저 적용되도록 했습니다.

마지막으로, 서식 지정 선택에 새로운 액션을 추가했습니다. 이제 전체 서식을 지정하지 않고 선택한 코드의 들여쓰기만 조정하도록 ReSharper에 지시할 수 있습니다.

또한 일련의 버그를 수정했습니다. 자세한 내용은 이슈 트래커에서 확인할 수 있습니다.

EditorConfig

EditorConfig는 .NET 커뮤니티에서 인기 도구로 자리잡고 있으며 ReSharper와의 작동 방식을 지속적으로 개선하고 있습니다. 변경된 사항은 다음과 같습니다.

  • ReSharper가 EditorConfig에서 이름 지정 규칙 설정을 읽고 사용자 지정 이름 지정 규칙을 EditorConfig에 쓰는 방식을 개선했습니다.
  • EditorConfig에서 이름 지정 규칙이 재정의되면 ReSharper는 이름 지정 설정 페이지에 알림을 표시합니다.
  • EditorConfig에서 csharp_indent_case_contents_when_block 옵션에 대한 지원을 추가했습니다.

유닛 테스트

  • We’ve implemented support for VSTest adapters – a feature that allows you to discover and run tests from a third party framework. 이제 JetBrains가 기본적으로 지원하는 프레임워크에 제한을 받지 않습니다. ReSharper | Options(옵션) | Tools(도구) | Unit Testing(유닛 테스트) | Test Frameworks(테스트 프레임워크) | VSTest에서 이 기능을 활성화 하세요.
  • Visual Studio 2019용 유니버설 Windows 플랫폼 프로젝트에서 MSTest 지원을 구현했습니다.
  • 일부 사용자들이 "생성된 프로세스" 이슈를 경험했을 것으로 생각합니다. 때로 테스트 러너가 작업을 완료했음에도 이 러너에 의해 시작된 프로세스가 종료되지 않는 경우가 있습니다. 이런 경우 기본적으로 대응할 수 있는 액션에 대한 설정을 추가했습니다. 이제 수행할 작업을 묻거나, 아무것도 하지 않거나, 생성된 프로세스를 종료할 것인지 중에서 결정을 내릴 수 있습니다. 프로세스에 대한 질문을 받고 이에 대한 결정을 내리면 결정 사항이 ReSharper | Options(옵션) | Tools(도구) | Unit Testing(유닛 테스트) | Test Runner(테스트 러너)에 저장됩니다. 잘못된 경우 언제든지 삭제할 수 있습니다.
  • NUnit에서 AutoFixture 라이브러리에 대한 일련의 검사를 구현했습니다. ReSharper는 이제 테스트 값 유형이 올바른지 확인하고, [InlineAutoData] 속성에 중복 인수가 없는지 확인하며, 테스트 클래스 또는 메서드에 [TestFixture] 또는 [Test] 속성이 없으면 경고합니다.
  • QUnit에 대한 지원을 버전 2.14.0으로 업그레이드했습니다.

C++ 지원

ReSharper C++ 2021.1은 몇 가지 새로운 C++20 및 C++17 언어 기능을 지원합니다. 구체적으로, 비 유형 템플릿 매개변수의 클래스 유형, C++ 20 클래스 템플릿 인수 추론 규칙 및 함수 유형의 일부인 noexcept가 있습니다. 기본 코드 완성 및 접미사 완성 템플릿으로 사용할 수 있는 코루틴에 대한 새로운 코드 완성 항목도 있습니다. co_await, co_yieldco_return.

C++ 구문 스타일

구문 구성에 대해 선택한 코드 스타일을 적용하는 데 사용할 수 있는 구문 스타일 설정 모음을 도입했습니다. 검사, 빠른 수정 및 Apply Syntax Style(구문 스타일 적용)Cleanup selection(선택 범위 정리) 컨텍스트 액션의 지원으로 코드 베이스에 새 스타일을 쉽게 적용하고 새 코드를 일관되게 유지할 수 있습니다.

기타 업데이트

  • Copy FQN(FQN 복사) 기능을 사용하여 GitHub 링크를 복사하는 액션을 추가했습니다. 메인 메뉴(ReSharper | Edit(편집)) 또는 Ctrl+Shift+ACopy Fully-qualified name(정규화된 이름 복사)를 호출할 때, ReSharper는 복사를 하고 디폴트 이외의 서식 지정이 필요한 경우를 위해 다양한 서식 지정을 선택할 수 있는 컨텍스트 메뉴를 엽니다. 이 메뉴에는 이제 GitHub 링크가 포함됩니다.
  • Razor 페이지를 포함해 C#, VB.NET 또는 JavaScript의 문자열에서 정규식을 사용하는 경우, 이제 삽입에서도 작동하는 확장/축소 선택 기능이 제공되니 즐겁게 사용할 수 있을 것입니다.
  • 튜플 변환에 대한 유형 변환 힌트를 추가했습니다.
  • File Layout(파일 레이아웃)의 메서드에 새로운 Body 제약 조건을 사용할 수 있습니다. 이 제약 조건으로 블록 본문 및 표현식 본문 메서드에 대해 서로 다른 규칙을 지정할 수 있습니다.

dotTrace 및 dotMemory의 새로운 홈 화면 dotUltimate

dotTrace와 dotMemory의 홈 화면이 새롭게 다시 태어났습니다. 새 프로파일링 세션 구성 및 시작, 스냅샷 작업 및 기타 기본 동작 수행이 한결 편리해졌습니다.

다운로드

30일 무료 평가 이용 가능