다음을 통해 공유


Visual Studio에서 Roslyn 구문 시각화 도우미를 사용하여 코드 탐색

이 문서에서는 .NET 컴파일러 플랫폼("Roslyn") SDK의 일부로 제공되는 구문 시각화 도우미 도구의 개요를 제공합니다. 구문 시각화 도우미는 구문 트리를 검사하고 탐색하는 데 도움이 되는 도구 창입니다. 분석하려는 코드의 모델을 이해하는 데 필수적인 도구입니다. 또한 .NET 컴파일러 플랫폼("Roslyn") SDK를 사용하여 자체 애플리케이션을 개발할 때 디버깅 지원입니다. 첫 번째 분석기를 만들 때 이 도구를 엽니다. 시각화 도우미는 API에서 사용하는 모델을 이해하는 데 도움이 됩니다. SharpLab 또는 LINQPad와 같은 도구를 사용하여 코드를 검사하고 구문 트리를 이해할 수도 있습니다.

설치 방법 - Visual Studio 설치 프로그램

Visual Studio 설치관리자에서 .NET 컴파일러 플랫폼 SDK를 찾는 방법에는 두 가지가 있습니다.

Visual Studio 설치 관리자를 사용하여 설치 - 워크로드 보기

.NET 컴파일러 플랫폼 SDK는 Visual Studio 확장 개발 워크로드의 일부로 자동으로 선택되지 않습니다. 선택적 구성 요소로 선택해야 합니다.

  1. Visual Studio 설치 관리자 실행
  2. 수정을 선택합니다.
  3. Visual Studio 확장 개발 워크로드를 확인합니다.
  4. 요약 트리에서 Visual Studio 확장 개발 노드를 엽니다.
  5. .NET 컴파일러 플랫폼 SDK에 대한 확인란을 선택합니다. 선택적 구성 요소 아래에서 마지막으로 찾을 수 있습니다.

필요에 따라 DGML 편집 기에서 시각화 도우미에 그래프를 표시할 수도 있습니다.

  1. 요약 트리에서 개별 구성 요소 노드를 엽니다.
  2. DGML 편집기 상자의 확인란을 선택합니다.

Visual Studio 설치 관리자를 사용하여 설치 - 개별 구성 요소 탭

  1. Visual Studio 설치 관리자 실행
  2. 수정을 선택합니다.
  3. 개별 구성 요소 탭 선택
  4. .NET 컴파일러 플랫폼 SDK에 대한 확인란을 선택합니다. 컴파일러, 빌드 도구 및 런타임 섹션 아래에 맨 위에 있습니다.

필요에 따라 DGML 편집 기에서 시각화 도우미에 그래프를 표시할 수도 있습니다.

  1. DGML 편집기의 확인란을 체크합니다. 코드 도구 섹션에서 찾을 수 있습니다.

개요 문서를 참조하여 .NET 컴파일러 플랫폼 SDK에서 사용되는 개념을 숙지합니다. 구문 트리, 노드, 토큰 및 퀴즈를 소개합니다.

구문 시각화 도우미

구문 시각화 도우미를 사용하면 Visual Studio IDE 내의 현재 활성 편집기 창에서 C# 또는 Visual Basic 코드 파일에 대한 구문 트리를 검사할 수 있습니다. 보기를>다른 Windows>구문 시각화 도우미를 클릭하여 시각화 도우미를 시작할 수 있습니다. 오른쪽 위 모서리에서 빠른 실행 도구 모음을 사용할 수도 있습니다. "구문"을 입력하면 구문 시각화 도우미 를 여는 명령이 나타납니다.

이 명령은 구문 시각화 도우미를 부동 도구 창으로 엽니다. 코드 편집기 창이 열려 있지 않으면 다음 그림과 같이 표시가 비어 있습니다.

구문 시각화 도우미 도구 창

왼쪽과 같은 Visual Studio 내의 편리한 위치에 이 도구 창을 도킹합니다. 시각화 도우미는 현재 코드 파일에 대한 정보를 표시합니다.

새 프로젝트 파일> 명령을 사용하여새 프로젝트를 만듭니다. Visual Basic 또는 C# 프로젝트를 만들 수 있습니다. Visual Studio에서 이 프로젝트의 기본 코드 파일을 열면, 시각화 도구가 해당 파일의 구문 트리를 표시합니다. 이 Visual Studio 인스턴스에서 기존 C# /Visual Basic 파일을 열 수 있으며 시각화 도우미는 해당 파일의 구문 트리를 표시합니다. Visual Studio 내에 여러 코드 파일이 열려 있는 경우 시각화 도우미는 현재 활성 코드 파일(키보드 포커스가 있는 코드 파일)의 구문 트리를 표시합니다.

앞의 이미지에 표시된 것처럼 시각화 도우미 도구 창에는 위쪽에 구문 트리가 표시되고 아래쪽에는 속성 표가 표시됩니다. 속성 표에는 항목의 .NET 형식종류 (SyntaxKind)를 포함하여 트리에서 현재 선택된 항목의 속성이 표시됩니다.

구문 트리는 노드, 토큰 및 퀴즈의 세 가지 유형의 항목으로 구성됩니다. 이러한 형식에 대한 자세한 내용은 구문 작업 문서에서 확인할 수 있습니다. 각 형식의 항목은 다른 색을 사용하여 표시됩니다. 사용되는 색의 개요를 보려면 '범례' 단추를 클릭합니다.

트리의 각 항목에는 자체 범위도 표시됩니다. 범위는 텍스트 파일에서 해당 노드의 인덱스(시작 및 끝 위치)입니다. 앞의 C# 예제에서 선택한 "UsingKeyword [0..5)" 토큰은 범위가 5자 너비로, [0..5)입니다. "[..)" 표기법은 시작 인덱스가 범위의 일부이지만 끝 인덱스는 아님을 의미합니다.

트리를 탐색하는 방법에는 두 가지가 있습니다.

  • 트리의 항목을 확장하거나 클릭합니다. 시각화 도우미는 코드 편집기에서 이 항목의 범위에 해당하는 텍스트를 자동으로 선택합니다.
  • 코드 편집기에서 텍스트를 클릭하거나 선택합니다. 앞의 Visual Basic 예제에서 코드 편집기에서 "Module Module1"이 포함된 줄을 선택하면 시각화 도우미가 트리의 해당 ModuleStatement 노드로 자동으로 이동합니다.

시각화 도우미는 범위가 편집기에서 선택한 텍스트 범위와 가장 일치하는 트리의 항목을 강조 표시합니다.

시각화 도우미는 현재 코드 파일의 수정 사항과 일치하도록 트리를 새로 고칩니다. Main() 안에 Console.WriteLine()를 추가하십시오. 입력하면 시각화 도우미가 트리를 새로 고칩니다.

입력한 후 입력을 일시 중지합니다 Console.. 트리에는 분홍색으로 칠한 일부 항목이 있습니다. 이 시점에서 형식화된 코드에 오류('진단'이라고도 함)가 있습니다. 이러한 오류는 구문 트리의 노드, 토큰 및 퀴즈에 연결됩니다. 시각화 도우미는 백그라운드를 분홍색으로 강조 표시하는 오류가 첨부된 항목을 보여줍니다. 항목을 마우스로 가리키면 분홍색으로 표시된 모든 항목의 오류를 검사할 수 있습니다. 시각화 도우미는 구문 오류(형식화된 코드의 구문과 관련된 오류)만 표시합니다. 의미 체계 오류는 표시되지 않습니다.

구문 그래프

트리의 항목을 마우스 오른쪽 단추로 클릭하고 지시된 구문 그래프 보기를 클릭합니다.

시각화 도우미는 선택한 항목에 루팅된 하위 트리의 그래픽 표현을 표시합니다. C# 예제의 메서드에 해당하는 MethodDeclaration 노드에 Main() 대해 다음 단계를 시도합니다. 시각화 도우미는 다음과 같은 구문 그래프를 표시합니다.

C# 구문 그래프 보기

구문 그래프 뷰어에는 색 지정 구성표에 대한 범례를 표시하는 옵션이 있습니다. 구문 그래프의 개별 항목을 마우스로 가리키면 해당 항목에 해당하는 속성을 볼 수도 있습니다.

트리의 여러 항목에 대한 구문 그래프를 반복해서 볼 수 있으며 그래프는 항상 Visual Studio 내의 동일한 창에 표시됩니다. 새 구문 그래프를 보기 위해 탭 간에 전환할 필요가 없도록 Visual Studio 내의 편리한 위치에 이 창을 도킹할 수 있습니다. 코드 편집기 창이 있는 아래쪽 영역은 자주 편리합니다.

시각화 도우미 도구 창 및 구문 그래프 창에 사용할 도킹 레이아웃은 다음과 같습니다.

시각화 도우미 및 구문 그래프 창에 대한 도킹 레이아웃 1개

또 다른 옵션은 이중 모니터 설정에서 구문 그래프 창을 두 번째 모니터에 배치하는 것입니다.

의미 검사

구문 시각화 도우미를 사용하면 기호 및 의미 체계 정보를 기초로 검사할 수 있습니다. C# 예제에서 Main() 내부에 입력 double x = 1 + 1; 합니다. 그런 다음 코드 편집기 창에서 식을 1 + 1 선택합니다. 시각화 도우미는 시각화 도우미의 AddExpression 노드를 강조 표시합니다. 이 AddExpression 을 마우스 오른쪽 단추로 클릭하고 기호 보기(있는 경우)를 클릭합니다. 대부분의 메뉴 항목에 "있는 경우"라는 한정자가 있음을 주의하세요. 구문 시각화 도우미는 모든 노드에 대해 존재하지 않을 수 있는 속성을 포함하여 노드의 속성을 검사합니다.

시각화 도우미의 속성 표는 다음 그림과 같이 업데이트됩니다. 식의 기호는 Kind = 메서드가 있는 SynthesizedIntrinsicOperatorSymbol입니다.

구문 시각화 도우미의 기호 속성

동일한 AddExpression 노드를 마우스 오른쪽 단추로 클릭하고 TypeSymbol 보기(있는 경우)를 선택합니다. 시각화 도우미의 속성 표는 다음 그림과 같이 업데이트되어 선택한 식의 형식을 Int32나타냅니다.

TypeSymbol 속성

동일한 AddExpression 노드를 마우스 오른쪽 단추로 클릭하고 변환된 TypeSymbol 보기(있는 경우)를 선택합니다. 속성 표는 식의 형식이 Int32더라도 다음 그림과 같이 식의 변환된 형식임을 Double 나타내는 업데이트됩니다. Int32 표현이 Double로 변환되어야 하는 컨텍스트에서 발생하기 때문에 이 노드에는 변환된 타입 기호 정보가 포함됩니다. 이 변환은 대입 연산자의 Double 왼쪽에 있는 변수 x 에 지정된 형식을 충족합니다.

변환된 TypeSymbol 속성

마지막으로 동일한 AddExpression 노드를 마우스 오른쪽 단추로 클릭하고 상수 값 보기(있는 경우)를 선택합니다. 속성 그리드는 이 식의 값이 컴파일 시간 상수 2임을 보여줍니다.

상수 값

앞의 예제는 Visual Basic에서도 복제할 수 있습니다. Visual Basic 파일에 Dim x As Double = 1 + 1를 입력하세요. 코드 편집기 창에서 식을 1 + 1 선택합니다. 시각화 도우미는 시각화 도우미에서 해당 AddExpression 노드를 강조 표시합니다. 이 AddExpression 에 대해 이전 단계를 반복하면 동일한 결과가 표시됩니다.

Visual Basic에서 더 많은 코드를 검사합니다. 다음 코드로 기본 Visual Basic 파일을 업데이트합니다.

Imports C = System.Console

Module Program
    Sub Main(args As String())
        C.WriteLine()
    End Sub
End Module

이 코드는 파일 상단에 있는 형식 System.Console에 매핑되는 C라는 별칭을 도입하고, Main()에서 이 별칭을 사용합니다. 별칭 CC.WriteLine()Main() 메서드 안에서 선택하십시오. 시각화 도우미는 시각화 도우미에서 해당 IdentifierName 노드를 선택합니다. 이 노드를 마우스 오른쪽 단추로 클릭하고 기호 보기(있는 경우)를 클릭합니다. 속성 표는 다음 그림과 같이 이 식별자가 형식 System.Console 에 바인딩되어 있음을 나타냅니다.

구문 시각화 도우미의 기호 C에 대한 속성

동일한 IdentifierName 노드를 마우스 오른쪽 단추 로 클릭하고 AliasSymbol 보기를 선택합니다(있는 경우). 속성 표는 식별자가 대상에 바인딩된 System.Console 이름의 C 별칭임을 나타냅니다. 즉, 속성 표는 식별자에 C해당하는 AliasSymbol에 대한 정보를 제공합니다.

AliasSymbol 속성

선언된 형식, 메서드, 속성에 해당하는 기호를 검사합니다. 시각화 도우미에서 해당 노드를 선택하고 마우스 오른쪽 단추를 클릭하여 보기 기호(있는 경우)에 액세스합니다. 메서드 Sub Main()의 본문을 포함하여 메서드를 선택합니다. 시각화 도우미에서 해당 SubBlock 노드를 마우스 오른쪽 단추로 클릭하고 기호 보기(있는 경우)를 선택합니다. 속성 표에는 이 SubBlockMethodSymbol이 이름 Main을 가지고 Void를 반환하는 것으로 보여줍니다.

메서드 선언에 대한 기호 보기

위의 Visual Basic 예제는 C#에서 쉽게 복제할 수 있습니다. 별칭 대신 Imports C = System.Console 입력 using C = System.Console; 합니다. C#의 이전 단계는 시각화 도우미 창에서 동일한 결과를 생성합니다.

의미 체계 검사 작업은 노드에서만 사용할 수 있습니다. 토큰 또는 퀴즈에서는 사용할 수 없습니다. 모든 노드에 검사할 흥미로운 의미 체계 정보가 있는 것은 아닙니다. 노드에 흥미로운 의미 체계 정보가 없는 경우 뷰 * 기호(있는 경우) 를 마우스 오른쪽 단추로 클릭하고 선택하면 빈 속성 표가 표시됩니다.

의미 체계를 사용한 작업 개요 문서에서 의미 체계 분석을 수행하기 위한 API에 대해 자세히 읽을 수 있습니다 .

구문 시각화 도우미 닫기

소스 코드를 검사하는 데 시각화 도우미 창을 사용하지 않을 때 시각화 도우미 창을 닫을 수 있습니다. 구문 시각화 도우미는 코드를 탐색하고 원본을 편집하고 변경할 때 해당 디스플레이를 업데이트합니다. 당신이 그것을 사용하지 않을 때 방해가 될 수 있습니다.