public void TestCloseMatch() { Assert.True(EditDistance.IsCloseMatch("variabledeclaratorsyntax", "variabledeclaratorsyntaxextensions")); Assert.True(EditDistance.IsCloseMatch("expressionsyntax", "expressionsyntaxextensions")); Assert.True(EditDistance.IsCloseMatch("expressionsyntax", "expressionsyntaxgeneratorvisitor")); }
public void TestNotCloseMatch() { Assert.False(EditDistance.IsCloseMatch("propertyblocksyntax", "ipropertysymbol")); Assert.False(EditDistance.IsCloseMatch("propertyblocksyntax", "ipropertysymbolextensions")); Assert.False(EditDistance.IsCloseMatch("propertyblocksyntax", "typeblocksyntaxextensions")); Assert.False(EditDistance.IsCloseMatch("fielddeclarationsyntax", "declarationinfo")); Assert.False(EditDistance.IsCloseMatch("fielddeclarationsyntax", "declarationcomputer")); Assert.False(EditDistance.IsCloseMatch("fielddeclarationsyntax", "filelinepositionspan")); Assert.False(EditDistance.IsCloseMatch("variabledeclaratorsyntax", "visualbasicdeclarationcomputer")); Assert.False(EditDistance.IsCloseMatch("variabledeclaratorsyntax", "ilineseparatorservice")); Assert.False(EditDistance.IsCloseMatch("expressionsyntax", "awaitexpressioninfo")); }
private async Task CreateSpellCheckCodeIssueAsync(CodeFixContext context, TSimpleName nameNode, string nameText, CancellationToken cancellationToken) { var document = context.Document; var completionList = await CompletionService.GetCompletionListAsync( document, nameNode.SpanStart, CompletionTriggerInfo.CreateInvokeCompletionTriggerInfo(), cancellationToken : cancellationToken).ConfigureAwait(false); if (completionList == null) { return; } var completionRules = CompletionService.GetCompletionRules(document); var onlyConsiderGenerics = IsGeneric(nameNode); var results = new MultiDictionary <double, string>(); int closeMatchThreshold = EditDistance.GetCloseMatchThreshold(nameText); foreach (var item in completionList.Items) { if (onlyConsiderGenerics && !IsGeneric(item)) { continue; } var candidateText = item.FilterText; double matchCost; if (!EditDistance.IsCloseMatch(nameText, candidateText, closeMatchThreshold, out matchCost)) { continue; } var insertionText = completionRules.GetTextChange(item).NewText; results.Add(matchCost, insertionText); } var matches = results.OrderBy(kvp => kvp.Key) .SelectMany(kvp => kvp.Value.Order()) .Where(t => t != nameText) .Take(3) .Select(n => CreateCodeAction(nameNode, nameText, n, document)); context.RegisterFixes(matches, context.Diagnostics); }