Roslyn Analyzer - доступ к ITextBuffer

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

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


person TWT    schedule 20.06.2019    source источник
comment
Вероятно, лучше описать реальную проблему, которую вы пытаетесь получить с помощью буфера, для решения, поскольку, возможно, есть лучшее решение этой проблемы, чем попытка получить буфер   -  person Sam Holder    schedule 25.06.2019


Ответы (2)


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

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

person jmoreno    schedule 23.06.2019

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

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

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

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

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

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

person JoshVarty    schedule 20.06.2019