ВЪПРОС: Как да приложа моя личен DocumentationProvider към символи на изходното дърво? Кой е типът символ, който получавам, когато използвам SymbolFinder.FindSymbolAtPosition()
По-конкретно искам да отменя функцията GetDocumentationForSymbol(). Имам го отменено за моите символи за автоматично довършване, но не и за символите, които получавам от задържане на курсора на мишката.
ЗАДЕН ПЛАН:
Здравейте, използвам roslyn за събиране на информация за текстов редактор, който създавам. Едно от нещата, които трябва да направя, е бърза информация или съвети за инструменти. Работи ми за предложенията за автоматично довършване. чрез използване на фрагмент, който изглежда така
compilation = CSharpCompilation.Create(
"MyIntellisense",
new[] { CSharpSyntaxTree.ParseText(dotNetCode) },
assemblies
.Select(i => MetadataReference
.CreateFromFile(i.Location, MetadataReferenceProperties.Assembly,
new DotNetDocumentationProvider(
new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
това използва моя личен DotNetDocumentationProvider, който анализира XML и документация по начина, по който имам нужда. Това работи за асемблирани символи, които са типовете символи, които имам, когато използвам Recommender.GetRecommendedSymbolsAtPosition().
РЕДАКТИРАНЕ: Просто исках да дам повече предистория :)
Получавам символи по два различни начина.
1) Единият начин е, когато се обадя
var symbols = Recommender.GetRecommendedSymbolsAtPosition(semanticModel, offset, solution.Workspace);
Използвам това, когато потребителят поиска информация за автоматично попълване. С тези символи мога да премина през и за всяко едно повикване:
var information = symbol.GetDocumentationCommentXml();
Това в крайна сметка извиква функция, която съм заменил от класа DocumentationProvider:
protected override string GetDocumentationForSymbol(string documentationMemberID, CultureInfo preferredCulture, CancellationToken cancellationToken = default(CancellationToken))
2) Вторият начин е когато потребителят задържи курсора на мишката
var symbol = SymbolFinder.FindSymbolAtPosition(semanticModel, offset, workspace, cancellationToken);
Извиквам точно същата функция (всъщност от същия ред код, запазвайки го СУХ)
var information = symbol.GetDocumentationCommentXml();
Но това не извиква моя заменен GetDocumentationCommentXml(), вместо това се извиква стандартният Roslyn.
Благодаря!