코드 분석

ReSharper는 C#, VB.NET, XAML, XML, ASP.NET, ASP.NET MVC, ASP.NET Core, HTML, ResX 및 Protobuf에서 지속적인 코드 품질 분석 기능을 제공하여 컴파일하기도 전에 오류와 문제가 즉시 탐지됩니다.

Visual Studio의 마커 표시줄에서 확인할 수 있는 ReSharper의 코드 검사

지속적인 코드 품질 분석

ReSharper는 솔루션 설계가 진행되는 동안 2200개가 넘는 코드 검사를 코드에 적용하므로 현재 파일뿐 아니라 전체 솔루션에 오류나 문제가 없는지 즉시 확인할 수 있습니다.

ReSharper는 Visual Studio 에디터에서 탐지된 오류와 문제를 즉시 강조 표시하고, 오른쪽의 마커 표시줄을 사용해 자동으로 시각화합니다.

파일에 오류나 문제가 있는 경우, 마커 표시줄 상단의 상태 표시기의 색상과 아이콘이 바뀝니다. 아이콘을 마우스 오른쪽 버튼으로 클릭하면 ReSharper 코드 분석 정보를 비롯해 식별자 강조 표시 및 Visual Studio 코드 분석 정보 사이를 빠르게 전환하고 최고 심각도 수준의 문제를 탐색할 수 있습니다.

ReSharper의 코드 분석

오류

ReSharper는 코딩할 때 즉시 오류를 탐지하여 에디터에 바로 강조 표시합니다.

오류는 빨간색 글자 또는 물결 밑줄로 강조 표시됩니다. 마우스 포인터를 오류 위로 가져가면 툴팁에 해당 설명이 표시됩니다.

ReSharper는 일반 C# 또는 VB.NET 코드뿐 아니라 ASP.NET 코드 비하인드 파일, 마크업 파일의 참조 및 ASP.NET MVC 호출에서 오류를 탐지할 수 있습니다.

XAML의 경우, ReSharper는 XML 구문을 검사하여 XAML 엔티티 간의 참조를 포함해 XAML의 의미를 전문적으로 검증합니다.

빌드 스크립트(NAnt 및 MSBuild)의 경우, ReSharper는 알 수 없는 속성(property 및 attribute), 대상 및 작업을 분석하여 강조 표시합니다.

HTML 및 XML에서 코드 검사를 이용할 수도 있습니다.

경고

컴파일러 오류 및 경고 이외에, ReSharper는 코드 컴파일을 방해하지 않지만 심각한 코딩 비효율성을 나타낼 수 있는 부분에 대해 자체 경고를 표시합니다. 예를 들어, ReSharper는 중복된 형 변환, 잘못된 형식의 문자열, 선언되었으나 전혀 사용되지 않은 지역 변수 등을 알려줍니다. 경고와 관련된 구문은 회색 텍스트 또는 파란색 물결 밑줄로 강조됩니다.

제안

코드 제안을 통해 더욱 심층적인 코드 분석 기능이 제공됩니다. 코드 제안에서는 코드 구조 정보를 제공하여 반드시 좋지 않거나 잘못된 것이 없어도 알아두면 유용할 수 있는 내용을 안내합니다. 코드 제안은 녹색 물결 밑줄로 강조 표시됩니다.

예를 들어 특정 매개변수는 기본 유형을 사용해 선언할 수 있다는 사실, 즉 사용 중인 메서드가 해당 매개변수의 기본 유형 멤버만을 사용한다는 사실을 알면 흥미로울 수 있습니다. 또한 ReSharper는 보조 필드를 포함한 속성에서 자동 속성을 생성하고, 정적 메서드 호출을 확장 메서드 호출로 변환하거나, 가능한 경우 'var' 키워드를 사용하도록 제안할 수 있습니다.

힌트

마지막으로 가장 심각하지 않은 수준의 코드 강조 표시는 힌트입니다. 오류, 경고 및 제안과 달리, 힌트는 마커 표시줄에 표시되지 않은 다음 또는 이전 강조 표시로 이동할 때 고려되지 않으므로 상태 표시기의 색상에 영향을 주지 않습니다.

힌트는 단순히 특정 코드의 세부 정보에 대한 주의를 환기시키고 개선 방법을 권장합니다. 힌트와 관련된 코드 항목은 녹색 점선의 밑줄로 강조 표시됩니다.

ReSharper에서 코드 문제 빠른 수정

코드 문제의 빠른 수정

ReSharper에는 1200가지 이상의 빠른 수정 기능이 포함되어 있어 지원되는 모든 언어에서 탐지된 대부분의 코드 문제를 바로 고칠 수 있습니다. 빠른 수정을 적용하는 방법은 아주 간단합니다. 강조 표시된 코드 문제에서 Alt+Enter를 눌러, 문제를 해결하거나 부적절한 코드를 개선할 수 있는 적절한 방법을 선택하면 됩니다.

Alt 텍스트

솔루션 전체 검사

솔루션 전체 대상의 경고 및 제안은 사용되지 않은 비 private 멤버를 즉시 탐지하는 데 도움이 됩니다. 이러한 검사는 ReSharper가 전체 솔루션을 분석하도록 설정한 경우에만 작동합니다. 코드 및 마커 표시줄에 강조 표시되는 문제 중에서 특히 다음과 같은 항목을 발견할 수 있습니다.

  • 사용되지 않은 비 private 선언
  • 비 private 메서드의 사용되지 않은 반환값
  • 액세스되지 않은 비 private 필드
  • 비 private 멤버의 사용되지 않은 매개변수
  • 절대 실행되지 않는 추상 또는 가상 이벤트
  • 할당되지 않은 필드
  • public 대신 internal로 만들 수 있는 멤버 및 유형

또한 코드 주석에서 특정 비 private 유형 및 멤버를 의도적으로 사용되지 않은 상태로 둔 것으로 표기하여 ReSharper가 해당 항목을 문제 삼지 않도록 만들 수도 있습니다.

코드 검사 항목 비활성화 및 구성

언제든지 여러 분석 항목의 심각도를 변경할 수 있습니다. 예를 들어, 개인의 코딩 스타일 또는 기업의 요구 사항에 따라 ReSharper가 특정 검사/알림을 오류, 경고, 코드 제안 또는 힌트로 표시하도록 설정할 수 있습니다.
뿐만 아니라 특정 코드 조각만 문제가 없는지 확인하면 되어서 경고가 따로 필요하지 않은 경우에는 특정 경고를 간단히 비활성화할 수 있습니다.

코드 검사 항목을 비활성화하거나 구성하려면 ReSharper 옵션에서 Code Inspection(코드 검사) | Inspection Severity(검사 심각도) 페이지를 사용하세요. 또는 Alt+Enter를 누르면 실행되는 액션 목록에서 Options for inspection(검사 옵션) 메뉴를 사용하여 특정 경고, 제안 또는 힌트를 구성할 수도 있습니다.

각 오류, 경고 또는 제안은 마커 표시줄에서 개별 막대로 나타납니다. 막대를 클릭하면 오류가 있거나 경고/제안의 원인이 된 코드 줄로 바로 이동할 수 있습니다.

Alt+PageDown(앞으로) 및 Alt+PageUp(뒤로)을 누르면 오류, 경고 및 제안 사이를 이동할 수 있습니다. 또는 Shift+Alt+PageDown(다음 오류) 및 Shift+Alt+PageUp(이전 오류)을 눌러 오류(경고와 제안은 건너뜀) 사이를 탐색할 수도 있습니다. 현재 오류, 경고 또는 제안을 설명하는 메시지는 상태 표시줄에 표시됩니다.

코드 문제를 탐색하는 또 다른 방법은 특정 범위에서 모든 코드 문제를 검색하고 전용 도구 창에서 탐색하는 것입니다.

검색 패턴과 일치하는 코드 강조 표시 및 교체 패턴으로 바꾸기

사용자 지정 코드 검사

ReSharper는 특정 패턴과 일치하는 코드를 찾고 선택적으로 다른 패턴과 일치하는 코드로 바꿀 수 있는 Structural Search and Replace(구조 검색 및 바꾸기) 기능을 제공합니다. 여기에서 더 나아가, 검색 패턴과 관련하여 솔루션을 지속적으로 모니터링하고, 패턴과 일치하는 코드를 강조 표시하며, 교체 패턴에 따라 코드를 바꿀 수 있는 빠른 수정 기능을 제공합니다.

이는 사용자 지정 검사를 통해 ReSharper의 고유 코드 검사 기능을 확장할 수 있음을 의미합니다. 예를 들어, 최신 프레임워크 버전으로 마이그레이션하는 경우 이전 API의 사용 위치를 찾는 검색 패턴을 만든 다음, 업데이트된 API를 삽입하는 패턴으로 교체할 수 있습니다.

전체 솔루션에서 오류 탐지

솔루션 전체 분석을 통한 오류 모니터링

ReSharper는 솔루션을 설계하는 동안 열린 파일을 분석할 수 있을 뿐만 아니라 전체 솔루션을 포괄하도록 분석을 확장할 수 있습니다.

예를 들어 어떤 멤버가 현재 어셈블리 내에서만 사용되는 것으로 상정하여 해당 멤버를 public에서 internal로 변경했다고 가정해 보겠습니다. 이 단계에서 ReSharper는 현재 파일에서 오류를 발견하지 못합니다. 그 후, Solution-Wide Analysis(솔루션 전체 분석)를 켜니 ReSharper가 잘못된 부분을 발견합니다. 솔루션에서 다음 오류로 이동해 보니 누군가 이 멤버를 현재 프로젝트의 범위를 벗어나 사용한 것이 발견됩니다.

사용자가 해야 할 일은 Solution-Wide Analysis를 명시적으로 켜는 것뿐이며, 이 기능이 켜지면 솔루션 코드가 분석된 후, 전용 창에 오류 목록이 표시됩니다.

이 창을 열지 않고도 Go to Next Error/Warning in Solution(솔루션의 다음 오류/경고로 이동)(Shift+Alt+PageDown) 및 Go to Previous Error/Warning in Solution(솔루션의 이전 오류/경고로 이동)(Shift+Alt+F12) 명령어를 사용하면 솔루션 내의 오류를 쉽게 탐색할 수 있습니다.

솔루션 전체 분석으로 경고 표시

솔루션 전체 분석으로 경고 모니터링

솔루션에서 마지막 오류가 수정되면, 곧바로 빨간색 상태 막대 표시기가 녹색으로 바뀝니다. 여기에서 솔루션의 코드 품질을 더욱 개선하려면 솔루션 전체 분석을 사용해 보세요. 오류 뷰에서 Include Warnings(경고 포함)를 클릭하면 ReSharper가 전체 솔루션에서 경고(경고 심각도 수준에 따라 ReSharper 검사로 탐지된 경고와 컴파일러 경고 모두)를 모니터링하기 시작합니다.

솔루션에 오류가 다시 나타나면 오류 수정에 집중할 수 있도록 경고가 자동으로 숨겨집니다. 모든 오류가 수정되면 경고가 다시 표시됩니다.

호출 추적

이전에는 코드에서 호출 시퀀스를 추적하면 수많은 Find Results(결과 검색) 창으로 이어져서 컨텍스트를 잃어버리는 경우가 있었습니다. 이 문제를 해결하기 위해 ReSharper는 단일 도구 창에서 전체 호출 시퀀스를 시각화합니다. 이 창을 Call Tracking(호출 추적)이라고 하며, 여기에서 코드 내 호출 체인을 보고 탐색할 수 있습니다.

또한 ReSharper의 Call Tracking은 이벤트, 인터페이스, 클로저 지원 덕분에 Visual Studio의 고유 기능인 Call Hierarchy(호출 계층 구조)보다 크게 개선되었습니다.

호출 시퀀스를 시각화하려면 ReSharper | Inspect(검사) | Outgoing Calls(송신 호출) 또는 ReSharper | Inspect(검사) | Incoming Calls(수신 호출)를 선택하거나 Inspect This(다음을 검사) 바로가기 기능을 사용하세요.

코드 문제 검색

ReSharper를 이용하면 Inspection Results(검사 결과)라는 단일 도구 창에서 모든 코드 품질 문제, 중복성, 언어 사용 기회, 코드 개선 제안을 확인할 수 있습니다.

특정 범위에서 코드 문제를 찾으려면 ReSharper | Inspect(검사) | Code Issues in Solution(솔루션의 코드 문제) 또는 ReSharper | Inspect(검사) | Code Issues in Current Project(현재 프로젝트의 코드 문제)를 선택하세요. 또는 Solution Explorer(솔루션 탐색기)에서 노드를 선택해 마우스 오른쪽 버튼으로 클릭한 후, Find Code Issues(코드 문제 검색)를 선택해도 됩니다.

Inspection Results 창에서는 탐지된 문제를 필터링하고, 문제 유형, 심각도, 카테고리 및 기타 속성별로 결과를 다시 그룹 지정하여, 해당 결과를 파일로 내보낼 수 있습니다.

값 추적

Value Tracking(값 추적)은 프로그램에서 데이터 흐름에 대한 중요 정보를 제공합니다. 소스 코드의 어떤 위치에서든 변수, 매개변수, 필드 또는 속성을 가리키고 ReSharper가 해당 항목을 검사하도록 요청할 수 있습니다. 그런 다음, 프로그램 내에서 값이 어떻게 흘러가는지, 해당 값의 원래 위치로 돌아오거나 해당 값이 사용되는 위치로 바로 전달되는지 확인할 수 있습니다.

Value Tracking을 이용하면 특정한 잘못된 값이 프로그램의 지정된 지점에 어떻게 전달될 수 있는지, 그 다음에 전달되는 위치는 어디인지 파악할 수 있습니다. 또, 이를 통해 잠재적인 NullReferenceExceptions, 부적절한 동작 및 잘못된 값이 발생하는 이유를 조사할 수 있습니다.

특정 값이 관여된 데이터 흐름을 시각화하려면 ReSharper | Inspect(검사) | Value Origin(값의 원래 위치) 또는 ReSharper | Inspect(검사)| Value Destination(값의 전달 대상)을 선택하거나 Inspect This(다음을 검사) 바로가기 기능을 사용하세요.

코드 주석

코드 분석 엔진이 ReSharper만큼 강력하더라도 간혹 특정 문제를 탐지하는 데 필요한 지식이 부족할 때가 있습니다. 예를 들어, 메서드가 절대 null을 반환하지 않도록 설계되고 클라이언트 역시 그에 따라 설계되었을 때 누군가 해당 메서드에서 null을 반환하도록 변경했다면 코드 분석에서는 잠재적인 문제가 발견되지 않습니다.

이러한 경우를 포함해 기타 다양한 상황에서 JetBrains.Annotations 프레임워크는 추론될 수 없는 문제를 발견할 수 있도록 도와줍니다. 이 프레임워크에서 선언된 속성을 통해 ReSharper는 사용자에게 필요한 방식으로 코드를 분석할 수 있습니다.

소스 코드에서 ReSharper 코드 어노테이션 속성을 사용하려면 해당하는 NuGet 패키지를 설치해야 합니다. 패키지 설치는 간단히 using JetBrains.Annotations 지시문을 추가하면 되며, ReSharper에서 자동으로 패키지를 불러올 수 있도록 지원합니다.

다음을 검사

Inspect This(다음 항목 검사)(Ctrl+Shift+Alt+A)는 Call Tracking(호출 추적), Value Tracking(값 추적), Type Hierarchy유형 계층 구조, Type Dependency Diagram(유형 종속성 다이어그램) 등, ReSharper의 여러 코드 분석 및 탐색 기능 모음으로 연결되는 바로가기입니다.

단축키 참고사항

이 페이지에 나온 모든 키보드 단축키는 ReSharper의 기본 'Visual Studio' 단축키에서 제공됩니다. ReSharper의 2가지 단축키에 관한 자세한 내용은 ReSharper 문서를 참조하세요.