Расширение VS2010: пользовательское форматирование документа - PullRequest
2 голосов
/ 21 июля 2011

Добрый день,

Я создал пакет Visual Studio, в котором язык Verilog регистрируется как допустимый тип содержимого.

У меня есть подсветка синтаксиса, выделение, умные отступы и т. Д.

Однако я бы хотел, чтобы Visual Studio автоматически форматировал весь документ с помощью Edit->Advanced->Format Document/Selection. В настоящее время эти параметры невидимы, и я ожидаю, что я должен сообщить VS2010 (каким-то образом), что эти методы можно вызывать, и предоставить правильные методы для этого форматирования.

Кажется, я не могу найти какую-либо ссылку на форматирование в VS2010 SDK и документации. Я надеялся, что ISmartIndent будет решением, которое я искал, но кажется, что этот код запускается только в пустой строке или при нажатии клавиши ввода.

У кого-нибудь есть какие-либо советы или идеи о том, как я могу решить эту проблему?

Спасибо

Giawa

Редактировать: я использую среду управляемых расширений, представленную в VS2010, для достижения этой цели. Я пишу на C # (и просто добавил тег c # к моему вопросу). Спасибо

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

MEF не является правильным способом решения задачи создания языковой службы. Вместо этого следует использовать инфраструктуру управляемых пакетов (MPF) для регистрации языковой службы и выполнения таких задач, как выделение синтаксиса, выделение, анализ, форматирование, анализ и т. Д.

Поскольку мой вопрос касался форматирования, я немного расскажу об этом в своем ответе. Вы должны переопределить метод ReformatSpan в пользовательском объекте Source , который вы создали для своей языковой службы. Хороший пример есть на веб-страницах MSDN для VS2005 (также применимо к VS2010).

Вы также можете принудительно отформатировать в любое время, вызвав метод ReformatSpan напрямую. Вот рабочий пример из моего кода:

Region region = service.GetRegionContainingLine((line > 0 ? line - 1 : 0));

if (region != null)
{
    using (EditArray mgr = new EditArray(this, service.LastActiveTextView, true, "Reformat Brace"))
        this.ReformatSpan(mgr, region.ToSpan());
}

Спасибо @ Джеймсу МакНеллису за то, что он указал мне правильное направление.

1 голос
/ 21 июля 2011
...