Языковая служба Visual Studio с C# intellisense

в прошлом году я написал языковую службу для Visual Studio, которая добавила подсветку синтаксиса для файлов NHaml:http://github.com/snappycode/hamleditor.

чтобы уточнить, NHaml-это язык шаблонов html, который может смешиваться с элементами кода, такими как файл aspx. Этот плагин добавляет поддержку IDE для редактирования файлов NHaml, но в основном добавляет подсветку синтаксиса.

Мне было интересно, знает ли кто-нибудь, как добавить встроенный c# intellisense в службу, например теперь вы получаете файл aspx. Я надеюсь, что это будет возможно без выполнения всей грамматики c#, специфичной для плагина.

кто-нибудь написал языковую службу, которая смешивает языки?

обновление: Похоже, ребята из spark view engine сделали здесь некоторые набеги, я изучаю их реализацию

4 ответов


Я проверил Spark View Engine, и они, похоже, сделали общий материал ATL (называемый SparkLanguagePackageLib), который на самом деле, похоже, не содержит ничего конкретного Spark. Кажется, это просто общая библиотека c# intellisense, которая нуждается в следующем:

  • исходный код
  • источник C#, который генерируется из исходного кода
  • сопоставления позиций между ними (например, код в строке 2 pos 5 отображается в выход на линию 4 pos 10 и т. д.)
  • некоторые другие вещи, как картины(?)

и после этого вы можете позвонить:

events.OnGenerated(
    primaryText, // original source code
    entry.SourceCode, // generated sourcecode
    cMappings, // mappings between the two
    ref mappings[0], // ?
    cPaints, // ?
    ref paints[0]); // ?

Я попытался найти Spark-конкретные вещи в этой библиотеке C++, но я ничего не смог найти: everythig spark-related разделен на отдельный файл кода C#. Я думаю, это хорошо, потому что:

  • вам не нужно редактировать файлы c++
  • если поддержка intellisense двигателя взгляда искры установлена она может быть используется другими движками просмотра тоже
  • вам нужно только создать класс, который сопоставляет исходный файл nhaml и его сгенерированный аналог C#.

кстати. Вы все еще работаете над этой библиотекой Nhaml Intellisense? Если нет, я попытаюсь исправить их реализацию в надежде, что ее можно легко преобразовать в NHaml.


похоже, это может помочь

http://www.codeproject.com/KB/recipes/VSLanguageService.aspx


мне, наконец, удалось изменить код для поддержки NHaml. Это было совсем не трудно. К сожалению, оригинальная библиотека NHaml не поддерживает все, что было необходимо, поэтому мне пришлось создать новый парсер для NHaml. Он не поддерживает все конструкции, но поддерживает большинство из них (достаточно, чтобы упростить Программирование NHaml)

загрузить:http://github.com/sztupy/nhamlsense

видеоуроки: http://www.youtube.com/watch?v=8jTZ2zC9eYc


вы можете легко добавить слова путем создания или изменения типа пользователя.файл dat. Проверка здесь для некоторых указаний по присоединению к определенным расширениям файлов. Это может помочь вам хотя бы частично, не переделывая полный синтаксис c#.

(на самом деле, я не уверен, что вы подразумеваете под "подсветкой синтаксиса" в этом контексте. Я уверен, что, например, вы получаете подсветку скобок бесплатно в Редакторе).