2016-04-15 3 views
0

У меня есть крошечное приложение на основе roslyn для форматирования кода проектов VB.NET/C# на основе sample provided at codeplex. Это приложение представляет собой новую версию старого кода форматера, что я разработан на основе DTE, в котором программно запустить Визуальную команду студии Edit.FormatDocument каждый файл в определенном решении, как это:Как запустить коррекцию случая по решению?

projectItem.Document.DTE.ExecuteCommand("Edit.FormatDocument"); 

Это уже не приемлемо, поэтому я начал разработку новой версии, которая будет выполнять ту же задачу, что и команда FormatDocument. Одной из особенностей этой команды в исходном файле VB.NET является то, что он исправляет кожух для ключевых слов и имен, например:

  • public становится Public,
  • переменными определяются как fooBar но используются как foobar => использования изменения в fooBar
  • т.д.

Сначала я подумал, что только Microsoft.CodeAnalysis.Formatting.Formatter.FormatAsync(...) будет делать эту работу, но это кажется, что это происходит только заботу о непечатаемыхах. Поэтому я начал искать в другом месте и обнаружил метод Microsoft.CodeAnalysis.CaseCorrection.CaseCorrector.CaseCorrectAsync(...), но класс CaseCorrector, к сожалению, internal. Это заставляет меня задаться вопросом, не является ли это ошибкой с учетом метода CaseCorrectAsync, являющегося public.

Есть ли разумный способ запустить коррекцию случаев в моем новом приложении на основе рослина?

+0

Что касается ошибки или нет: нет, скорее всего, это не так. Многие из помощников Рослина являются «внутренними», но команда открыта для запросов сделать их «публичными» после того, как вы продемонстрировали необходимость в ней. Вероятно, вы должны создать проблему для репо для этого. –

+0

Имейте в виду, что мы [с открытым исходным кодом] (https://github.com/dotnet/roslyn), и поэтому вы можете легко разветвить нас и сделать их общедоступными для ваших собственных инструментов. Но, конечно, файл ошибка тоже. –

+0

@JasonMalinowski Если у меня может возникнуть еще один вопрос - есть ли инструкции по локальному созданию пакетов roslyn nuget с использованием модификаций (например, создание CaseCorrector public), которые я сделал? –

ответ

0

Правильное решение действительно должно использовать класс CaseCorrector, который должен был быть public согласно комментариям в roslyn bug report. Поэтому для решения этой проблемы сейчас нужно сделать CaseCorrector общедоступным, построить roslyn локально и использовать модифицированные двоичные файлы.

Должно быть возможно использовать BuildNuGets.csx script, чтобы создать пакеты roslyn nuget, включающие ваши местные изменения, если это необходимо.

Смежные вопросы