2012-07-25 3 views
3

MPF를 사용하여 VSPackage에 언어 서비스를 구현하려고 시도하고 있는데 이해해야하므로 제대로 작동하지 않습니다.Visual Studio 사용자 지정 언어 서비스

입력 파일을 ParseRequest으로 구문 분석하여 ParseSource과 같이 여러 가지 구현이 이미 있습니다. 그러나 오류가 발견되면 AuthoringSink.AddError이 추가됩니다. 이것에 대한 문서는 나를 위해 오류 목록에 추가한다는 것을 의미합니다. 그렇지 않습니다.

또한 MySource 클래스의 서브 클래스는 Source입니다. 재정의 된 LanguageService.CreateSource 메서드를 사용하여이 새 클래스를 반환합니다. OnCommand에 대한 문서에서 '명령을 입력하면 시작됩니다'라고 말합니다. 그러나 그렇지 않습니다.

분명히 제대로 수행하지 못한 중간 단계가 있습니다. 나는 이미 충분히 걷잡 았기 때문에 요청으로 추가 세부 사항을 제공하게되어 기쁩니다.

모든 설명이 크게 감사드립니다.

+0

Visual Studio 2010 이상을 대상으로하는 확장 프로그램의 경우 MPF 언어 서비스가 더 이상 사용되지 않습니다. 가능한 경우 새로운 MEF 인터페이스를 사용하는 것이 좋습니다 (물론 Visual Studio 2008 이전 버전을 대상으로해야하는 경우는 제외). –

답변

1

AuthoringSink 오류 목록 질문에 대해서는 언어 서비스에서이 동작을 사용합니다. ParseSource에서 ParseRequest 클래스에는 AuthoringSink가 있습니다. 파서의 동작 외부에서 작업하려는 경우 새 ErrorListProvider를 만들 수도 있습니다. 다음은 몇 가지 예제 코드입니다.

error_list = new ErrorListProvider(this.Site); 
    error_list.ProviderName = "MyLanguageService Errors"; 
    error_list.ProviderGuid = new Guid(this.errorlistGUIDstring.); 
} 

ErrorTask task = new ErrorTask(); 
task.Document = filename; 
task.CanDelete = true; 
task.Category = TaskCategory.CodeSense; 
task.Column = column; 
task.Line = line; 
task.Text = message; 
task.ErrorCategory = TaskErrorCategory.Error; 
task.Navigate += NavigateToParseError; 
error_list.Tasks.Add(task); 

이 정보가 도움이되기를 바랍니다.

요구시 작동이 명령을 사용하면 (작업 코드에서 가져온) 같은 것을 할 수 있습니다 MYSOURCE 클래스에서,이 때마다 발사한다

: 그 한 번 확인 작동하지 않는 경우

public override void OnCommand(IVsTextView textView, VsCommands2K command, char ch) 
{ 
    if (textView == null || this.LanguageService == null 
     || !this.LanguageService.Preferences.EnableCodeSense) 
     return; 

    if (command == Microsoft.VisualStudio.VSConstants.VSStd2KCmdID.TYPECHAR) 
    { 
     if (char.IsLetterOrDigit(ch)) 
     { 
      //do something cool 
     } 
    } 

    base.OnCommand(textView, command, ch); 
} 

을 그 CodeSense = LanguageService 패키지를 설정할 때 ProvideLanguageService 속성에서 true를 반환합니다. LanguageService에서해야 할 멋진 일은 이러한 속성이 올바르게 켜져 있어야합니다. 어떤 사람들은 심지어 시원한 행동을 무료로 제공합니다!

또 다른주의해야 할 점은 colorizer와 같은 일부 동작이 내 경험의 하이브에서 올바르게 작동하지 않는다는 것입니다. 나는 이것들이 나를 곤경에 빠뜨린 것들이라고 생각하지 않는다. 그러나 나는 2 년 전에 이것들을 구현했다. 그래서 나는 대부분 오래된 코드를 되돌아보고있다.

1

AuthoringSink.AddErrorParseRequest.ReasonParseReason.Check 인 경우에만 오류 목록에 오류를 추가합니다. 다른 ParseReason에 대한 구문 분석 중에 ParseSource 함수가 오류를 추가하려고하면 아무 일도 일어나지 않습니다.

ParseReason과 함께 ParseSource 전화를하지 않을 수도 있습니다. 알다시피, only wayParseReasonCheck (수동으로 BeginParse 또는 ParseSource으로 전화하지 않고) proffer your service with an idle timer입니다.

관련 문제