提交 bf422503 编写于 作者: C CyrusNajmabadi

Provide more common code instead of specializing for VB.

上级 015ff7e3
......@@ -108,9 +108,33 @@ protected static bool IsAllDigits(string filterText)
}
protected PatternMatch? GetMatch(CompletionItem item, string filterText, bool includeMatchSpans)
{
// If the item has a dot in it (i.e. for something like enum completion), then attempt
// to match what the user wrote against the last portion of the name. That way if they
// write "Bl" and we have "Blub" and "Color.Black", we'll consider hte latter to be a
// better match as they'll both be prefix matches, and the latter will have a higher
// priority.
var lastDotIndex = item.FilterText.LastIndexOf('.');
if (lastDotIndex >= 0)
{
var textAfterLastDot = item.FilterText.Substring(lastDotIndex + 1);
var match = GetMatchWorker(textAfterLastDot, filterText, includeMatchSpans);
if (match != null)
{
return match;
}
}
// Didn't have a dot, or the user text didn't match the portion after the dot.
// Just do a normal check against the entire completion item.
return GetMatchWorker(item.FilterText, filterText, includeMatchSpans);
}
private PatternMatch? GetMatchWorker(string completionItemText, string filterText, bool includeMatchSpans)
{
var patternMatcher = this.GetPatternMatcher(filterText, CultureInfo.CurrentCulture);
var match = patternMatcher.GetFirstMatch(item.FilterText, includeMatchSpans);
var match = patternMatcher.GetFirstMatch(completionItemText, includeMatchSpans);
if (match != null)
{
......@@ -121,7 +145,7 @@ protected static bool IsAllDigits(string filterText)
if (!CultureInfo.CurrentCulture.Equals(EnUSCultureInfo))
{
patternMatcher = this.GetEnUSPatternMatcher(filterText);
match = patternMatcher.GetFirstMatch(item.FilterText);
match = patternMatcher.GetFirstMatch(completionItemText);
if (match != null)
{
return match;
......@@ -228,11 +252,6 @@ protected static bool IsKeywordItem(CompletionItem item)
return item.Tags.Contains(CompletionTags.Keyword);
}
protected static bool IsEnumMemberItem(CompletionItem item)
{
return item.Tags.Contains(CompletionTags.EnumMember);
}
protected int CompareMatches(PatternMatch match1, PatternMatch match2, CompletionItem item1, CompletionItem item2)
{
// First see how the two items compare in a case insensitive fashion. Matches that
......
......@@ -11,7 +11,6 @@ Imports Microsoft.VisualStudio.Text.Projection
Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense
Public Class VisualBasicCompletionCommandHandlerTests
<WorkItem(546208, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546208")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function MultiWordKeywordCommitBehavior() As Task
......@@ -2293,4 +2292,4 @@ End Module]]></Document>)
End Using
End Function
End Class
End Namespace
End Namespace
\ No newline at end of file
Imports System.Collections.Immutable
Imports System.Composition
Imports Microsoft.CodeAnalysis.Completion
Imports System.Composition
Imports Microsoft.CodeAnalysis.Host
Imports Microsoft.CodeAnalysis.Host.Mef
Imports Microsoft.CodeAnalysis.Shared.Utilities
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Completion
......@@ -33,30 +30,5 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.Completion
Public Sub New()
MyBase.New(isCaseSensitive:=False)
End Sub
Public Overrides Function IsBetterFilterMatch(
item1 As CompletionItem, item2 As CompletionItem,
filterText As String, trigger As CompletionTrigger,
recentItems As ImmutableArray(Of String)) As Boolean
If IsEnumMemberItem(item2) Then
Dim match1 = GetMatch(item1, filterText)
Dim match2 = GetMatch(item2, filterText)
If match1.HasValue AndAlso match2.HasValue Then
If match1.Value.Kind = PatternMatchKind.Prefix AndAlso match2.Value.Kind = PatternMatchKind.Substring Then
' If an item from Enum completion Is an equally good match apart from
' being a substring rather than prefix match, take it.
If IsEnumMemberItem(item1) AndAlso
match1.Value.CamelCaseWeight.GetValueOrDefault() = match2.Value.CamelCaseWeight.GetValueOrDefault() AndAlso
match1.Value.IsCaseSensitive = match2.Value.IsCaseSensitive Then
Return False
End If
End If
End If
End If
Return MyBase.IsBetterFilterMatch(item1, item2, filterText, trigger, recentItems)
End Function
End Class
End Namespace
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册