(패키지 관리 프레임 워크) 개요
개요 개요 또는 윤곽선으로 복잡 한 프로그램을 축소할 수 있습니다. 예를 들어, C# 메서드를 모두 메서드 시그니처를 보여 주는 한 줄으로 축소할 수 있습니다. 또한 구조체와 클래스 구조체와 클래스의 이름만 표시 하려면 축소할 수 있습니다. 단일 메서드 내에서 복잡 한 논리 같은의 문 첫 줄만 표시 하 여 전체적인 흐름을 표시 하려면 축소할 수 foreach, if, 및 while.
개요 만들기에 대 한 지원 사용
AutoOutlining 레지스트리 항목이 설정 되어 1 자동 개요 표시를 활성화 합니다. 파일을 로드 하거나 숨겨진된 영역을 식별 하 고 개요 글리프를 표시 하도록 변경 하면 전체 소스 parse를 자동 개요 표시를 설정 합니다. 개요 또한 수동으로 사용자가 제어할 수 있습니다.
값은 AutoOutlining 레지스트리 항목을 통해 얻을 수 있습니다는 AutoOutlining 속성에는 LanguagePreferences 클래스. AutoOutlining 레지스트리 항목에 명명 된 매개 변수가 초기화 될 수 있습니다의 ProvideLanguageServiceAttribute 특성 (참조 하십시오 언어 서비스 (패키지 관리 프레임 워크)를 등록 하는 중 세부 정보에 대 한).
숨겨진된 영역
개요를 제공 하려면 언어 서비스를 숨겨진된 영역을 지원 해야 합니다. 이러한 범위를 확장 하거나 축소할 수 있는 텍스트입니다. 중괄호 ()와 같은 표준 언어 기호 또는 사용자 지정 기호 숨겨진된 영역을 구분할 수 있습니다. 예를 들어, C#가 #region/#endregion 쌍 숨겨진된 영역을 구분 합니다.
숨겨진된 영역으로 노출 하는 숨겨진된 영역 관리자가 관리 되는 IVsHiddenTextSession 인터페이스입니다.
사용 하 여 숨겨진된 영역의 개요 표시를 IVsHiddenRegion 인터페이스와 숨겨진된 영역, 현재 보이는 상태에서 범위를 축소 하면 표시 되는 배너의 범위를 포함 합니다.
언어 서비스 파서를 사용 하는 AddHiddenRegion 새로운 숨겨진된 영역 숨겨진된 영역에 대 한 기본 동작을 사용 합니다 동안는 AddHiddenRegion 메서드를 사용 하면 모양 및 윤곽선의 동작을 사용자 지정 합니다. 숨겨진 숨겨진된 영역 세션에 부여 된 후 Visual Studio 언어 서비스에 대 한 숨겨진된 영역을 관리 합니다.
숨겨진된 영역 세션이 종료 될 때를 결정 하는 경우 숨겨진된 영역 변경 되거나 특정 숨겨진된 영역 표시 되어 있는지 확인 해야 합니다. 클래스에서 파생 되어야는 Source 클래스 및 해당 메서드를 재정의 OnBeforeSessionEnd, OnHiddenRegionChange, 및 MakeBaseSpanVisible, 각각.
예제
모든 중괄호의 쌍에 숨겨진된 영역을 작성 한 간단한 예는 다음과 같습니다. 중괄호 일치를 제공 하는 언어와 일치 하는 중괄호를 적어도 중괄호 포함 됩니다 ({및}). 이 방법은 설명을 위한 것입니다. 완벽 하 게 구현 완료의 경우 처리 하는 것이 ParseSource. 또한 설정 하는 방법을 보여 주는이 예제는 AutoOutlining 에 대 한 기본 설정 true 일시적으로. 대신 지정할 수 있습니다는 AutoOutlining 라는 매개 변수에서의 ProvideLanguageServiceAttribute 언어 패키지에서 특성입니다.
C# 규칙을 주석과 문자열 리터럴에 추가 하는 예제입니다.
using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;
namespace MyLanguagePackage
{
public class MyLanguageService : LanguageService
{
private LanguagePreferences m_preferences;
public override LanguagePreferences GetLanguagePreferences()
{
if (m_preferences == null)
{
m_preferences = new LanguagePreferences(this.Site,
typeof(MyLanguageService).GUID,
Name);
m_preferences.Init();
// Temporarily enabled auto-outlining
m_preferences.AutoOutlining = true;
}
return m_preferences;
}
public override AuthoringScope ParseSource(ParseRequest req)
{
Source source = (Source) this.GetSource(req.FileName);
switch (req.Reason)
{
case ParseReason.HighlightBraces:
case ParseReason.MatchBraces:
case ParseReason.MemberSelectAndHighlightBraces:
if (source.Braces != null)
{
foreach (TextSpan[] brace in source.Braces)
{
if (brace.Length == 2)
{
if (req.Sink.HiddenRegions == true
&& source.GetText(brace[0]).Equals("{")
&& source.GetText(brace[1]).Equals("}"))
{
//construct a TextSpan of everything between the braces
TextSpan hideSpan = new TextSpan();
hideSpan.iStartIndex = brace[0].iStartIndex;
hideSpan.iStartLine = brace[0].iStartLine;
hideSpan.iEndIndex = brace[1].iEndIndex;
hideSpan.iEndLine = brace[1].iEndLine;
req.Sink.ProcessHiddenRegions = true;
req.Sink.AddHiddenRegion(hideSpan);
}
req.Sink.MatchPair(brace[0], brace[1], 1);
}
else if (brace.Length >= 3)
req.Sink.MatchTriple(brace[0], brace[1], brace[2], 1);
}
}
break;
default:
break;
}
// Must always return a valid AuthoringScope object.
return new MyAuthoringScope();
}
}
}
참고 항목
개념
언어 서비스 (패키지 관리 프레임 워크)를 등록 하는 중