Языковая служба Visual Studio с C # intellisense - PullRequest
9 голосов
/ 11 апреля 2009

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

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

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

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

UPDATE: Похоже, что парни из движка с искровым обзором сделали здесь несколько попыток, я изучаю их реализацию

Ответы [ 4 ]

2 голосов
/ 21 июня 2009

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

  • Оригинальный код
  • Исходный код C #, сгенерированный из исходного кода
  • Отображение положения между двумя (например, код в строке 2 поз. 5 отображается в выходных данных в строку 4 поз. 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 ++, но ничего не смог найти: все, что касается искры, разбивается на отдельный файл кода C #. Я думаю, что это хорошо, потому что:

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

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

1 голос
/ 08 февраля 2010

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

Скачать: http://github.com/sztupy/nhamlsense

Скринкаст: http://www.youtube.com/watch?v=8jTZ2zC9eYc

1 голос
/ 17 апреля 2009

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

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

0 голосов
/ 13 апреля 2009

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

(На самом деле, я не уверен, что именно вы подразумеваете под «подсветкой синтаксиса» в этом контексте. Я уверен, например, что вы получаете бесплатную подсветку в скобках в редакторе).

...