Как создать расширение Visual Studio для файлов .cshtml? - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь создать расширение для visual studio 2017.В частности, я хочу расширить IntelliSense для создания предложений и исправлений лампочек.Для этого я пытаюсь просмотреть синтаксис файла .cshtml (как разметки, так и кода C #) и проанализировать его, чтобы я мог получить такие вещи, как значения атрибутов и имена тегов, чтобы я знал, когда показывать светлуковицы.

Я просмотрел документацию на сайте MSDN.Я узнал, как можно заставить лампочки отображаться в определенном месте каретки, используя ITextBuffer и Snapshot для [ContentType = "text"].Но для моей проблемы я хочу, чтобы лампочка отображалась на основе значений атрибутов и тому подобное.Итак, я думаю, что мне придется работать с [ContentType = 'code'].Я не мог найти надлежащую документацию для этого.Я нашел эту статью

https://designprincipia.com/writing-a-visual-studio-extension-to-automate-code-generation-with-roslyn/

Она рассказывает, как вы можете показать лампочку, когда ваша каретка находится на имени метода, и создать файл класса с этим именем метода.Теперь это для файла C # и использует API Roslyn для получения синтаксического дерева и семантической модели кода C #.

Проблема сводится к этому

У меня есть файл .cshtml, и я хочу получить в нем синтаксическое дерево разметки и код C #. И, я думаю, я смогу получить его, потому что редактор по-разному выделяет разметку и код C # файла.Таким образом, это должно быть разбором.Но я не могу этого сделать.

Итак, для моего подхода я пытаюсь получить синтаксическое дерево.Я хочу знать, как это можно сделать.Пожалуйста, скажите мне, если это неправильное направление, и что еще я могу сделать.

PS: Это мой первый вопрос, поэтому, пожалуйста, скажите мне, если я оставил какую-либо информацию, а также я новичокRazor, так что, возможно, я что-то там упускаю.

Большое спасибо за ваше время.

1 Ответ

0 голосов
/ 14 июня 2018

Это может быть полезно:

using System.Web.Razor;
using System.Web.Razor.Parser.SyntaxTree;

var host = new RazorEngineHost(new CSharpRazorCodeLanguage());
var engine = new RazorTemplateEngine(host);

var result = engine.ParseTemplate(new StringReader(<STRING>)));

result.Document.Children предоставляет подробную рекурсивную древовидную структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...