Найти тип элемента в текущей позиции в окне редактора C #

Я пишу расширение для Visual Studio intellisense и хотел бы получить тип элемента непосредственно перед курсором в редакторе C #.

В настоящее время у меня есть ITextBuffer, который я могу использовать для получения текущего исходного файла.

Я также могу получить текущую позицию в редакторе, как показано ниже:

var dte = Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.GetService(typeof(EnvDTE._DTE)) as EnvDTE.DTE;            
TextSelection sel = (TextSelection)dte.ActiveDocument.Selection;

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

Ниже моя попытка найти тип предмета с помощью Roslyn:

ITextSnapshot snapshot = m_textBuffer.CurrentSnapshot;
SnapshotPoint? triggerPoint = session.GetTriggerPoint(snapshot);

var tree = SyntaxTree.ParseCompilationUnit(m_textBuffer.CurrentSnapshot.GetText());

var nodes = tree.GetRoot().DescendantNodes();

var element = nodes.Where(n => n.Span.End <= triggerPoint.Value.Position).Last();

var comp = Compilation.Create("test", syntaxTrees: new[] { tree });
var semModel = comp.GetSemanticModel(tree);

//I cant work out what to do here to get the type as the element doesnt seem to be of the required type
var s = semModel.GetTypeInfo((AttributeSyntax)element);
9
задан Not loved Not their people 4 July 2012 в 11:31
поделиться