ReSharper 2025.1의 새로운 기능

ReSharper 2025.1은 .NET 10과 C# 14 Preview 기능에 대한 조기 지원을 제공합니다. 이번 릴리스에는 C#의 일반 문제를 대상으로 하는 새로운 검사 및 품질 개선 사항도 몇 가지 포함되어 있습니다. 문자열 인터닝 처리 시스템을 전면 개편하고 Razor 태그 헬퍼 및 Blazor 구성 요소 지원을 재설계하여 성능이 대폭 향상되었습니다. 또한, CI/CD 파이프라인 통합을 강화하는 새로운 Qodana Team Code Quality 플러그인과 Visual Studio용 dotMemory 통합 기능을 선보입니다.

C# 지원

.NET 10 Preview 및 C# 14 지원

ReSharper 2025.1은 .NET 10과 C# 14 Preview 기능에 대한 조기 지원을 제공합니다.

바운딩되지 않은 제네릭 타입의 nameof

이전에 nameof를 사용할 때는 모든 타입 인수를 지정해야 해서 불필요하게 장황해지기도 했습니다. C# 14에서는 타입 인수를 명시적으로 나열할 필요 없이 nameof(List<>)를 사용할 수 있습니다. ReSharper는 nameof 표현식에서 불필요한 제네릭 타입 인수를 탐지하고 이를 단순화하는 빠른 수정을 제공합니다.

일급 Span<T> 변환

C# 14에는 ReadOnlySpan<T>, Span<T>T[] 간의 새로운 묵시적 변환이 도입되어 Span 기반 코드를 더 직관적으로 만듭니다. ReSharper는 이제 이러한 변환 규칙을 완전히 지원하여 사용자가 효율적이고 현대적인 C# 코드를 작성할 수 있도록 도와줍니다.

단순 람다 매개변수의 한정자

C# 14에서는 ref, out, inscoped와 같은 매개변수 한정자를 명시적 매개변수 타입 없이 람다 표현식에서 사용할 수 있습니다. ReSharper는 불필요한 타입 사양을 제거하는 빠른 수정을 제공합니다.

ReSharper와 Rider의 C# 언어 지원 개선 사항에 대한 자세한 내용은 블로그에서 확인해 주세요.

이번 릴리스에는 C# 14 기능 지원이 도입되었을 뿐만 아니라, 다양한 C# 버전에서 자주 발생하는 문제와 비효율성을 진단하는 새로운 검사도 다수 포함되었습니다:

보간을 연결로 변환하는 새로운 컨텍스트 액션

새로운 컨텍스트 액션을 사용하면 문자열 보간을 다시 연결로 변환할 수 있습니다. ReSharper는 오랫동안 문자열 연결"Id = " + someId을 보간$"Id = {someId}" 또는 string.Format("Id = {0}", someId)으로 변환하는 기능을 지원해 왔습니다. 이번 업데이트에서는 그 반대 방향 변환도 지원하여, 문자열 표현식을 더 자유롭게 구성할 수 있도록 했습니다.

불필요한 중복 코드

ReSharper는 이제 ifswitch와 같은 조건문에서 나타나는 더 다양한 중복 코드 패턴을 감지하고 강조 표시하며, 더 깔끔하고 유지 관리하기 쉬운 코드를 위한 리팩터링을 제안합니다.

CancellationToken의 잘못된 사용

이제 ReSharper는 로컬 토큰 대신 메서드 수준의 CancellationToken이 실수로 사용된 경우를 감지합니다. 이 경우 빠른 수정에서 CancellationTokenSource.CreateLinkedTokenSource()를 사용하여 잘못된 토큰을 교체하거나 여러 토큰을 병합하기 위해 제공합니다.

열거형 멤버 이름을 참조하기 위한 nameof 사용

열거형 멤버에서 .ToString()을 호출하면 불필요한 런타임 오버헤드가 발생할 수 있습니다. 앞으로 ReSharper는 nameof(SomeEnum.Member)로 교체할 것을 제안하여 성능과 명확성을 향상합니다.

튜플 구성 요소 이름 제안

ReSharper 2025.1은 일반적인 <0>ItemN 이름 대신 명시적인 튜플 구성 요소 이름을 제안하여, 코드의 가독성과 자기 문서화를 향상합니다.

Inexact stream reads(부정확한 스트림 읽기) 검사

ReSharper에서는 데이터가 불완전하게 읽히는 문제를 예방하기 위해 Stream.Read()ReadAsync() 메서드를 반환 값을 확인하지 않고 사용할 때 경고를 표시하고 정확하게 읽을 수 있도록 해당 메서드를 .ReadExactly()로 교체할 것을 제안합니다.

Debug.Assert 검사에서 수정 경고

Debug.Assert 호출은 RELEASE 빌드에서 제거되므로, ReSharper는 상태를 변경하는 어설션에 대해 경고를 표시하여 프로덕션 코드에서 예상치 못한 동작이 발생하는 것을 방지할 수 있습니다.

데이터베이스 작업

ReSharper에서 SQL 및 NoSQL 지원 2025.1.3 dotUltimate

ReSharper 2025.1.3에서는 쿼리 언어에 대한 지원이 추가되어, Visual Studio에서의 SQL 및 NoSQL 코딩 경험이 향상됩니다. 주요 파생 언어 전반에서 스마트한 코드 분석, 코드 완성, 빠른 수정을 이용해 보세요. 아래 링크를 클릭하면 새로 지원되는 기능 및 해당 라이선스에 대한 자세한 내용을 확인할 수 있습니다.

자세히 알아보기

C++ 지원

ReSharper 2025.1에서는 C++ 지원이 다양하게 개선되었습니다.

  • Inline Macro(매크로 인라인화) 리팩터링 도입.
  • 여러 새로운 GNU 언어 확장 지원.
  • 대량의 블루프린트 애셋이 포함된 Unreal Engine 프로젝트에서 메모리 사용 최적화.
  • Clang-Tidy 20 번들 및 ARM 기기에서 Clang-Tidy 사용 지원.
  • GoogleTest 지원 업데이트.

C++ 업데이트에 대한 자세한 내용은 ReSharper C++ 2025.1의 새로운 기능 페이지에서 확인할 수 있습니다.

코드 리팩터링

<ImplicitUsings> Toggle( 전환) 리팩터링

묵시적 using에 공통 네임스페이스가 자동으로 포함되어 상용구 코드가 줄어듭니다. 이제 ReSharper는 프로젝트 전체에서 묵시적 using을 쉽게 켜거나 끌 수 있는 방법을 제공하므로, 활성화 시 중복된 명시적 using을 제거하고 비활성화 시 필요한 using을 추가할 수 있습니다.

Transform Parameters(매개변수 변환) 리팩터링 기능 개편

ReSharper는 Transform Parameters(매개변수 변환) 리팩터링을 현대화하여 값 튜플, 레코드, 비동기 시나리오를 지원해 코드의 유연성과 유지 관리 편의성을 향상합니다.

코드 서식 지정

Chop formatting(엔티티별 분할 서식) 컨텍스트 액션

새로운 서식 지정 작업은 다양한 C# 구문에 엔티티별 분할 서식을 적용하여 코드 가독성과 일관성을 개선합니다.

기타 개선 사항

  • 주석 서식 지정이 이제 // 뒤에 공백을 추가하고, 적절한 줄바꿈을 자동으로 적용합니다. 티켓 [RSRP-225809], [RSRP-78312]에서 유용한 스크린샷을 확인할 수 있습니다.
  • 메서드 호출 시 단일 람다 식 인수 앞에 줄바꿈을 삽입하지 않도록 설정할 수 있는 옵션도 추가했습니다. [RSRP-467905]

사용자 경험

Push-to-Hint 활성화 및 표시기 개선

ReSharper에서 Push-to-Hint 동작을 개선하여, 다른 Ctrl 기반 단축키와 충돌하여 의도치 않게 활성화되는 문제를 해결했습니다. 또한, 모드가 활성화되었을 때 이를 표시하는 시각적 표시기를 새롭게 도입했습니다.

확장 타입 목록에 대한 컨텍스트 강조 표시

이제 ReSharper는 기본 타입 절에서 타입 이름에 캐럿을 배치하면, 기본 클래스를 확장하거나 특정 인터페이스를 구현하는 멤버를 시각적으로 강조합니다.

성능

메모리 사용량

이번 릴리스에서는 문자열 인턴 시스템을 완전히 개편했습니다. IDE는 소스 코드, 구문 요소, 심볼 이름, 파일 경로 등 방대한 수의 문자열을 처리하므로, 문자열을 효율적으로 다루는 것이 매우 중요합니다. 새롭게 도입된 문자열 인터닝 시스템은 이전 버전에 비해 평균 네 배 더 많은 고유 문자열을 저장하면서도, 메모리 사용량은 절반 수준으로 줄였습니다. 이를 통해 대규모 .NET 프로젝트에서 더 많은 리소스를 확보할 수 있습니다.

Blazor 및 Razor 개선 사항

Razor 태그 헬퍼 및 Blazor 구성 요소 지원이 2025.1에서 완전히 새로워졌습니다. 오랫동안 기다려온 이 개선으로 구성 요소 사용이 많은 대규모 ASP.NET 솔루션에서 분석 시간이 5~10% 단축됩니다. 또한 .cshtml/.razor 파일을 편집할 때 재분석 이벤트가 줄어들고 잘못된 오류 보고가 크게 감소합니다.

외부 프로세스 기반 ReSharper의 최신 상태 업데이트

지난 4주 동안 최신 외부 프로세스 기반 ReSharper 구현을 내부적으로 테스트해 왔으며, 지금까지 결과는 매우 고무적입니다. 아직 모든 기능을 지원하고 알려진 문제를 수정하는 작업이 진행 중이지만, ReSharper를 개발 워크플로의 필수 요소로 만들어 주는 핵심 기능은 순조롭게 완성 중입니다.

외부 프로세스 기반 ReSharper의 전체 진행 상황에 관한 업데이트는 최신 블로그 게시물에서 확인해 보세요.

메모리 프로파일링 dotUltimate

Visual Studio에서 dotMemory를 사용한 스냅샷 분석

dotMemory가 이제 Microsoft Visual Studio와 완전히 통합되었습니다. 이전에는 Visual Studio 내에서 프로파일링을 트리거할 수 있었지만 결과를 분석하려면 독립 실행형 dotMemory 애플리케이션으로 전환해야 했습니다. 이제 IDE를 떠나지 않고도 애플리케이션을 프로파일링하고 메모리 스냅샷을 분석할 수 있습니다.

코드 품질 향상 기능 제공

Qodana Team Code Quality 확장 프로그램

Qodana는 JetBrains 검사를 활용하여, 팀이 검사 및 감사를 실행하고 선호하는 CI/CD 파이프라인에서 품질 게이트를 설정할 수 있도록 지원하는 팀 코드 품질 도구입니다. 이제 ReSharper 설치 관리자를 통해 Qodana Team Code Quality 확장 프로그램을 다운로드하여 Qodana Cloud 또는 자체 호스팅된 Qodana 프로젝트를 Visual Studio로 가져올 수 있습니다.

코드 문제, 버그, 취약점을 식별하고, 분석을 파이프라인에서 직접 실행한 후, 작업 중인 IDE에서 문제를 확인하여 컨텍스트에 더 맞는 업데이트와 학습이 가능합니다. ReSharper 설치 관리자를 사용하여 독립실행형 도구로 다운로드하는 옵션도 있습니다.

게임 개발

ReSharper용 Unity 플러그인

ReSharper 2025.1은 주요 게임 개발 워크플로를 모두 지원하는 Unity 플러그인을 번들로 제공합니다. 이 플러그인은 Unity 이벤트 함수 및 API에 대한 코드 완성, Unity 문서로 연결되는 툴팁 요약, 일반적인 문제를 탐지하는 전문 검사를 제공합니다. ShaderLab 파일에 대한 구문 강조 표시, 코드 완성 및 오류 탐지 기능도 포함되어 있습니다. 이 플러그인은 또한 .meta 파일을 자동으로 처리하고 Unity 장면, 프리팹 및 애셋에서 필드와 메서드의 묵시적 사용을 탐지합니다.

ReSharper C++는 Unreal Engine 개발 전용 지원을 계속해서 제공합니다.

디컴파일러

ReSharper 2025.1은 디컴파일러를 일부 개선하여 최신 C# 기능에 대한 지원을 강화하고 코드 가독성을 향상합니다. 새롭게 추가된 기능은 다음과 같습니다.

  • required 멤버 지원.
  • C# 13에서 새롭게 도입된 System.Threading.Lock 타입 지원.
  • ref 필드와 scoped 매개변수 한정자 지원.
  • allows ref struct 제네릭 반제약 조건 지원.
  • ref struct 타입을 위한 패턴 기반 using.
  • 문자열 보간 지원.
  • 디컴파일링된 코드의 일부 정수 상수에 주석이 달린 16진수 표현 추가로 가독성 향상.
  • 파일 범위 네임스페이스 지원.

기타 주요 개선 사항

새 접미사 템플릿: .inject

C# 12의 기본 생성자는 종속성 삽입을 간소화했습니다. 새로운 .inject 접미사 템플릿은 기본 생성자에 매개변수를 자동으로 삽입하고 의미 있는 이름을 제안하여 생성자 종속성 삽입을 더욱 간소화합니다.

구조화된 로깅 지원

이제 ReSharper는 더 나은 구조화된 로깅 지원을 제공하여 개발자가 보다 효율적으로 로그를 작성하고 분석할 수 있도록 지원합니다.

반환 값에 언어 삽입

이제 ReSharper는 메서드 반환 값에 언어 삽입 주석을 허용하여 매개변수, 필드 및 프로퍼티에 대한 이전의 지원을 확장합니다.

여러 줄 To-do 주석 개선

이전에는 여러 줄 To-do 주석을 작성할 때, 이어지는 줄마다 들여쓰기를 해야 했습니다. ReSharper 2025.1에서는 이러한 제약이 해결되어, 입력된 들여쓰기가 자동 적용된 상태로 여러 줄 To-do 주석을 더욱 손쉽게 작성하고 관리할 수 있습니다.