0

Я работаю над расширением классификатора редактора для классических исходных файлов Visual Basic (файлы модулей и классов). Проект был создан с использованием шаблона проекта классификатора редактора из пакета Visual Studio 2012 SDK. Мастер создал три файла кода: один для классификатора, один для формата классификатора и -provider, а другой - определения классификации. Я сделал следующие изменения последней для того, чтобы связать *.bas и *.cls файлов на пользовательский классификатор ...Не удается связать известные расширения файлов с пользовательским редактором классификатора

using System.ComponentModel.Composition; 

using Microsoft.VisualStudio.Text.Classification; 
using Microsoft.VisualStudio.Utilities; 

internal static class MyEditorClassifierClassificationDefinition 
{ 
    [Export(typeof(ClassificationTypeDefinition))] 
    [Name("MyEditorClassifier")] 
    internal static ClassificationTypeDefinition MyEditorClassifierType = null; 

    [Export] 
    [Name("custom")] 
    [BaseDefinition("code")] 
    internal static ContentTypeDefinition MyContentDefinition = null; 

    [Export] 
    [FileExtension(".bas")] 
    [ContentType("custom")] 
    internal static FileExtensionToContentTypeDefinition MyModuleFileExtensionDefinition = null; 

    [Export] 
    [FileExtension(".cls")] 
    [ContentType("custom")] 
    internal static FileExtensionToContentTypeDefinition MyClassFileExtensionDefinition = null; 
} 

Проблема заключается в том, что Visual Studio не вызывает мой классификатор файлы, имеющие *.bas или *.cls расширения, вместо этого используется встроенный редактор для Visual Basic. Я уже тестировал свой редакторский классификатор, используя расширение пользовательского файла; в этом случае классификатор работает так, как ожидалось. Я хотел бы знать, если можно изменить классификатор для известных расширений файлов.

+0

Мы уже определили .bas и .cls для сопоставления с основным типом содержимого вместе со стандартным расширением .vb. Что вы на самом деле пытаетесь сделать здесь? Почему вы не просто определяете свой классификатор по типу «Основной»? –

+0

Я знаю, что эти типы файлов сопоставляются с базовым типом содержимого; и я также попытался использовать «Basic» в качестве базового определения для моего классификатора, но он тоже не работал. Кроме того, редактор Basic не корректно обрабатывает файлы .bas и .cls; эти файлы имеют заголовок, содержащий метаданные (я хотел бы использовать Projection, чтобы скрыть эти заголовки из редактора, но это мечта о будущем). – Matze

ответ

1

Я нашел, что интересное решение для классификации ключей уже классифицировано языковой службой. В описании говорится, что он использует Tagger для улучшения выделения кода. Возможно, это может вам помочь: KeywordClassifier В старой версии связанного проекта использовался классификатор, упомянутый в описании.

Вы можете получить имя загруженного документа, а также расширение с помощью ITextDocumentFactoryService или, возможно, есть способ привязать теггер также к расширениям не только к типу содержимого Basic (вместо code). FileExtensionAttribute может помочь.