public async Task <SignatureHelp> GetSignatureHelp(int position) { var document = this.host.GetDocument(this.documentId); var signature = new SignatureHelp(); var invocation = await GetInvocation(document, position).ConfigureAwait(false); if (invocation == null) { return(null); } var methods = GetMethodOverloads(invocation.SemanticModel, invocation.Node); if (methods == null) { return(null); } foreach (var comma in invocation.ArgumentList.Arguments.GetSeparators()) { if (comma.Span.Start > invocation.Position) { break; } signature.ActiveParameter += 1; } var signatureHelpItemList = new List <SignatureHelpItem>(); var bestScore = int.MinValue; SignatureHelpItem bestScoredItem = null; var types = invocation.ArgumentList.Arguments .Select(argument => invocation.SemanticModel.GetTypeInfo(argument.Expression)); foreach (var method in methods) { var buildItem = BuildItem(method, invocation.SemanticModel, position); signatureHelpItemList.Add(buildItem); var score = InvocationScore(method, types); if (score <= bestScore) { continue; } bestScore = score; bestScoredItem = buildItem; } if (bestScoredItem == null) { return(null); } signature.ActiveSignature = signatureHelpItemList.IndexOf(bestScoredItem); signature.SignatureHelpItems = signatureHelpItemList; return(signature); }
public OverloadProvider(SignatureHelp signature) { this.signature = signature; if (signature.ActiveSignature > 0) { this.selectedIndex = signature.ActiveSignature; } this.BuildContent(); }