提交 58dabd0b 编写于 作者: R Ravi Chande

Merge pull request #3122 from rchande/stabilization

Port VB filtering changes (#3088)
......@@ -2123,5 +2123,25 @@ Class C
state.AssertNoCompletionSession()
End Using
End Sub
<WorkItem(3088, "https://github.com/dotnet/roslyn/issues/3088")>
<Fact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Sub DoNotPreferParameterNames()
Using state = TestState.CreateVisualBasicTestState(
<Document><![CDATA[
Module Program
Sub Main(args As String())
Dim Table As Integer
foo(table$$)
End Sub
Sub foo(table As String)
End Sub
End Module]]></Document>)
state.SendInvokeCompletionList()
state.AssertSelectedCompletionItem("Table")
End Using
End Sub
End Class
End Namespace
......@@ -80,7 +80,7 @@ private bool IsAllDigits(string filterText)
if (match1 != null && match2 != null)
{
var result = match1.Value.CompareTo(match2.Value);
var result = CompareMatches(match1.Value, match2.Value, item1, item2);
if (result != 0)
{
return result < 0;
......@@ -118,6 +118,11 @@ private bool IsAllDigits(string filterText)
return item1MRUIndex < item2MRUIndex;
}
protected virtual int CompareMatches(PatternMatch match1, PatternMatch match2, CompletionItem item1, CompletionItem item2)
{
return match1.CompareTo(match2);
}
public virtual bool? ShouldSoftSelectItem(CompletionItem item, string filterText, CompletionTriggerInfo triggerInfo)
{
return filterText.Length == 0 && !item.Preselect;
......
......@@ -51,7 +51,7 @@ public int CompareTo(PatternMatch other)
return 0;
}
private int ComparePunctuation(PatternMatch result1, PatternMatch result2)
internal static int ComparePunctuation(PatternMatch result1, PatternMatch result2)
{
// Consider a match to be better if it was successful without stripping punctuation
// versus a match that had to strip punctuation to succeed.
......@@ -63,7 +63,7 @@ private int ComparePunctuation(PatternMatch result1, PatternMatch result2)
return 0;
}
private static int CompareCase(PatternMatch result1, PatternMatch result2)
internal static int CompareCase(PatternMatch result1, PatternMatch result2)
{
if (result1.IsCaseSensitive != result2.IsCaseSensitive)
{
......@@ -73,12 +73,12 @@ private static int CompareCase(PatternMatch result1, PatternMatch result2)
return 0;
}
private static int CompareType(PatternMatch result1, PatternMatch result2)
internal static int CompareType(PatternMatch result1, PatternMatch result2)
{
return result1.Kind - result2.Kind;
}
private static int CompareCamelCase(PatternMatch result1, PatternMatch result2)
internal static int CompareCamelCase(PatternMatch result1, PatternMatch result2)
{
if (result1.Kind == PatternMatchKind.CamelCase && result2.Kind == PatternMatchKind.CamelCase)
{
......
......@@ -14,6 +14,41 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion
MyBase.New(service)
End Sub
Protected Overrides Function CompareMatches(leftMatch As PatternMatch, rightMatch As PatternMatch, leftItem As CompletionItem, rightItem As CompletionItem) As Integer
Dim diff As Integer
diff = PatternMatch.CompareType(leftMatch, rightMatch)
If diff <> 0 Then
Return diff
End If
diff = PatternMatch.CompareCamelCase(leftMatch, rightMatch)
If diff <> 0 Then
Return diff
End If
' More important than the case sensitivity is that "left" isn't an argument name
Dim leftIsNamedArgument = TypeOf leftItem.CompletionProvider Is NamedParameterCompletionProvider
Dim rightIsNamedArgument = TypeOf rightItem.CompletionProvider Is NamedParameterCompletionProvider
If leftIsNamedArgument AndAlso Not rightIsNamedArgument Then
Return 1
End If
If rightIsNamedArgument AndAlso Not leftIsNamedArgument Then
Return -1
End If
diff = PatternMatch.CompareCase(leftMatch, rightMatch)
If diff <> 0 Then
Return diff
End If
diff = PatternMatch.ComparePunctuation(leftMatch, rightMatch)
If diff <> 0 Then
Return diff
End If
Return 0
End Function
Public Overrides Function IsBetterFilterMatch(item1 As CompletionItem, item2 As CompletionItem, filterText As String, triggerInfo As CompletionTriggerInfo, filterReason As CompletionFilterReason) As Boolean?
If filterReason = CompletionFilterReason.BackspaceOrDelete Then
Dim prefixLength1 = GetPrefixLength(item1.FilterText, filterText)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册