Roslyn Analyzer - доступ к ITextBuffer - PullRequest
0 голосов
/ 20 июня 2019

Возможно ли как-то получить доступ к экземпляру ITextBuffer документа, который анализируется диагностическим анализатором Roslyn в Visual Studio. Или, по крайней мере, имя файла, чтобы я сам мог получить ITextBuffer?

Для получения дополнительной информации о том, как написать собственный анализатор кода для c #, см .: https://docs.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/tutorials/how-to-write-csharp-analyzer-code-fix

Ответы [ 2 ]

2 голосов
/ 24 июня 2019

SyntaxTree имеет свойство FilePath, как и Document, который, если не пустая строка, будет путем к файлу.

Не знаю, как перейти от этого к буферу. Но также неясно, зачем вам нужен буфер ...

1 голос
/ 21 июня 2019

В общем, инфраструктура вокруг анализаторов была создана, чтобы позволить им работать вне Visual Studio (например, из командной строки или как часть системы сборки CI).Вот почему не так много простых способов взаимодействия между Roslyn и Visual Studio.Однако есть несколько различных методов расширения , которые могут помочь вам преодолеть разрыв между Visual Studio и Roslyn.

Я считаю, что вам необходимо:

  1. ДобавитьNugetPackage с Install-Package Microsoft.CodeAnalysis.EditorFeatures.Text
  2. Добавьте использование using Microsoft.CodeAnalysis.Text; к вашему анализатору

Если у вас есть доступ к Document, вы можете использовать .TryGetText(out SourceText) для получения SourceTextдля документа.

Тогда вы можете использовать метод расширения FindCorrespondingEditorTextSnapshot, чтобы получить ITextSnapshot.

Мои знания здесь немного шатки, но я не уверен, что вы можете получитьITextBuffer, потому что ваш анализатор будет часто работать, когда редактор для данного файла не открыт, поэтому для него не было создано ITextBuffer.

...