Wie bekomme ich Methodenargumente, um mit Roslyn eine Vervollständigung zu erreichen?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie bekomme ich Methodenargumente, um mit Roslyn eine Vervollständigung zu erreichen?

Post by Guest »

Ich versuche, den Code mit Roslyn und AvalonEdit zu vervollständigen.
Zum Beispiel hat der Benutzer Code:

Code: Select all

public void Completion(int i,int j) { }
Und er tippt:

Code: Select all

 Completion(
Ich möchte also Argumente der Methode (

Code: Select all

int i, int j
) und vervollständige den Code.
Ich schreibe einfachen Code, der mit „.“ funktioniert. und möglicherweise funktioniert dieser Code für den Buchstaben „(“?

Code: Select all

 public List GetCompletionData(String code,int offset,CompletionType completionType)
{
var syntaxTree = SyntaxFactory.ParseSyntaxTree(code);
var compilation = CSharpCompilation.Create("foo")
.AddReferences(Mscorlib)
.AddSyntaxTrees(syntaxTree);
var semanticModel = compilation.GetSemanticModel(syntaxTree);
var textSpan = GetTextSpan(offset,1);// '.' or '(' coordinates
ITypeSymbol lhsType = null;
if (completionType == CompletionType.DotCompletion)
{
var memberAccessNode = (MemberAccessExpressionSyntax)syntaxTree.GetRoot()
.DescendantNodes(textSpan).Last();
lhsType = semanticModel.GetTypeInfo(memberAccessNode.Expression).Type;
}
else if(completionType==CompletionType.ArgumentListCompletion)
{
var arr = syntaxTree.GetRoot().DescendantNodes(textSpan).Last();
var argumentListMode = (ArgumentListSyntax)syntaxTree.GetRoot().DescendantNodes(textSpan).Last();
var directive = argumentListMode.GetFirstDirective();
var arrgs=argumentListMode.Arguments;
//lhsType = semanticModel.GetTypeInfo(directive).Type;
//how to get lhsType?
}

if (lhsType == null)
return new List();
List completionDataColl = new List();

// and here I make completion data
foreach (var symbol in lhsType.GetMembers())
{
if (!symbol.CanBeReferencedByName
|| symbol.DeclaredAccessibility != Accessibility.Public
|| symbol.IsStatic)
continue;
}
}
Das Problem ist, dass ich ITypeSymbol lhsType nicht bekommen kann. Es ist null.
Wie bekomme ich lhsType?
Oder sollte ich vielleicht einen anderen Weg verwenden?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post