Есть две основные вещи, которые необходимы для того, чтобы пользовательский язык делал то, что вы хотите:
1) Иметь пользовательскую страницу параметров в меню Инструменты/Параметры/Текстовый редактор/{CustomLanguage}, которая состоит из стандартных диалоговых окон «Общие», «Полосы прокрутки» и «Вкладки» для настроек.
2) Вы хотите, чтобы встроенный редактор кода автоматически использовал ваши пользовательские настройки при редактировании контента на вашем языке. {Пользовательский язык}.
У меня была куча расширений пакетов, которые я создал для QMBasic, который представляет собой многозначный язык для базы данных QM, похожей на Pick. У меня был intellisense с раскраской синтаксиса, сопоставлением фигурных скобок и поставщиками автоматического завершения, работающими как шарм. Я не мог понять, почему не было страниц опций для моего нового пользовательского «Типа контента», на который я ссылался снова и снова. Оказывается, документация и Visual Studio ссылаются на такие вещи, как Content Type и Language Service, и вы предполагаете, что они одинаковы, но это не так. Тип контента в основном используется частью MEF Visual Studio для предоставления точек расширения, которые используются при редактировании определенного типа «Типа контента» или языка в этом случае. Это прекрасно работает.
Visual Studio прекрасно справляется со всеми этими задачами без регистрации «Языковой службы», которая является реальной уловкой для создания настраиваемых страниц параметров И получения их значений для использования редактором. Чтобы получить настраиваемые страницы параметров, созданные для вашего языка, вам просто нужно создать Guid для языка, а затем зарегистрировать его в определении вашего пакета. Так.
[ProvideLanguageService(QMBasicEditor.GuidList.guidQMBasicLanguageServiceIdString, "QMBasic", languageResourceID: 204, RequestStockColors = true, ShowDropDownOptions = true, ShowSmartIndent = true, DefaultToInsertSpaces = true)]
Точно так же Visual Studio затем создаст для вас диалоговые страницы «Общие», «Полосы прокрутки» и «Вкладки» в разделе «Инструменты/Параметры/Текстовый редактор/QMBasic», а также сохранит для вас пользовательские настройки в реестре.
Однако вы обнаружите, что редактор НЕ будет использовать эти новые настройки автоматически. Visual Studio, кажется, проводит различие между Content Type и LanguageName, которое вы видите в определении ProvideLanguageService выше.
Я использую EditorFactory для создания окон редактирования кода для QMBasic, и они создают VSTextBuffers типа контента «QMBasic».
pTextBuffer =_IVsEditorAdaptersFactoryService.CreateVsTextBufferAdapter(_IOleServiceProvider, _QMBasicContentType);
что я думал будет достаточно, но увы это не так. Интерфейс IVSTextBuffer предоставляет изящный маленький вспомогательный метод SetLanguageService, который вы должны использовать, который предоставляет эту магию. В моей фабрике редакторов это было так же просто, как
pTextBuffer.SetLanguageServiceID(GuidList.guidQMBasicLanguageServiceId);
и это все, что потребовалось. Встроенный редактор кода теперь использует пользовательские настройки на страницах параметров, как я и ожидал.
person
jrstokka
schedule
01.01.2019