未验证 提交 98f12bba 编写于 作者: C CyrusNajmabadi 提交者: GitHub

Merge pull request #41999 from mazhou-msft/mazhou/issue-26610

Fix issue #26610
......@@ -122,12 +122,15 @@ private static int ComputeSymbolMatchPriority(ISymbol symbol)
var position = SymbolCompletionItem.GetContextPosition(item);
var name = SymbolCompletionItem.GetSymbolName(item);
var kind = SymbolCompletionItem.GetKind(item);
var isGeneric = SymbolCompletionItem.GetSymbolIsGeneric(item);
var relatedDocumentIds = document.Project.Solution.GetRelatedDocumentIds(document.Id).Concat(document.Id);
var options = document.Project.Solution.Workspace.Options;
var totalSymbols = await base.GetPerContextSymbolsAsync(document, position, options, relatedDocumentIds, preselect: false, cancellationToken: cancellationToken).ConfigureAwait(false);
foreach (var (documentId, syntaxContext, symbols) in totalSymbols)
{
var bestSymbols = symbols.Where(s => kind != null && s.Kind == kind && s.Name == name).ToImmutableArray();
var bestSymbols = symbols.WhereAsArray(
s => kind != null && s.Kind == kind && s.Name == name && isGeneric == (s.GetArity() > 0));
if (bestSymbols.Any())
{
return await SymbolCompletionItem.GetDescriptionAsync(item, bestSymbols, document, syntaxContext.SemanticModel, cancellationToken).ConfigureAwait(false);
......
......@@ -59,11 +59,16 @@ public static CompletionItem AddSymbolEncoding(IReadOnlyList<ISymbol> symbols, C
return item.AddProperty("Symbols", EncodeSymbols(symbols));
}
public static CompletionItem AddSymbolNameAndKind(IReadOnlyList<ISymbol> symbols, CompletionItem item)
public static CompletionItem AddSymbolInfo(IReadOnlyList<ISymbol> symbols, CompletionItem item)
{
var symbol = symbols[0];
return item.AddProperty("SymbolKind", ((int)symbol.Kind).ToString())
.AddProperty("SymbolName", symbol.Name);
var isGeneric = symbol.GetArity() > 0;
item = item
.AddProperty("SymbolKind", ((int)symbol.Kind).ToString())
.AddProperty("SymbolName", symbol.Name);
return isGeneric ? item.AddProperty("IsGeneric", isGeneric.ToString()) : item;
}
public static string EncodeSymbols(IReadOnlyList<ISymbol> symbols)
......@@ -302,29 +307,18 @@ public static string GetInsertionText(CompletionItem item)
{
return CreateWorker(
displayText, displayTextSuffix, symbols, rules, contextPosition,
AddSymbolNameAndKind, sortText, insertionText,
AddSymbolInfo, sortText, insertionText,
filterText, supportedPlatforms, properties, tags);
}
internal static string GetSymbolName(CompletionItem item)
{
if (item.Properties.TryGetValue("SymbolName", out var name))
{
return name;
}
return null;
}
=> item.Properties.TryGetValue("SymbolName", out var name) ? name : null;
internal static SymbolKind? GetKind(CompletionItem item)
{
if (item.Properties.TryGetValue("SymbolKind", out var kind))
{
return (SymbolKind)int.Parse(kind);
}
=> item.Properties.TryGetValue("SymbolKind", out var kind) ? (SymbolKind?)int.Parse(kind) : null;
return null;
}
internal static bool GetSymbolIsGeneric(CompletionItem item)
=> item.Properties.TryGetValue("IsGeneric", out var v) && bool.TryParse(v, out var isGeneric) && isGeneric;
public static async Task<CompletionDescription> GetDescriptionAsync(
CompletionItem item, ImmutableArray<ISymbol> symbols, Document document, SemanticModel semanticModel, CancellationToken cancellationToken)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册