未验证 提交 70c5d5b5 编写于 作者: I Ivan Basov 提交者: GitHub

Completion: support local language identifiers and en-us keywords

......@@ -3018,6 +3018,176 @@ class C
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround3() As Task
Using New CultureContext(New CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateCSharpTestState(
<Document><![CDATA[
class TARIFE { }
class C
{
void goo(int x)
{
var t = new $$]]></Document>, extraExportedTypes:={GetType(CSharpEditorFormattingService)}.ToList())
state.SendTypeChars("tarif")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("TARIFE")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround4() As Task
Using New CultureContext(New CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateCSharpTestState(
<Document><![CDATA[
class IFADE {}
class ifTest {}
class C
{
void goo(int x)
{
IFADE ifade = null;
$$]]></Document>, extraExportedTypes:={GetType(CSharpEditorFormattingService)}.ToList())
state.SendTypeChars("if")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("if")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround5() As Task
Using New CultureContext(New CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateCSharpTestState(
<Document><![CDATA[
class İFADE {}
class ifTest {}
class C
{
void goo(int x)
{
İFADE ifade = null;
$$]]></Document>, extraExportedTypes:={GetType(CSharpEditorFormattingService)}.ToList())
state.SendTypeChars("if")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("if")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround6() As Task
Using New CultureContext(New CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateCSharpTestState(
<Document><![CDATA[
class TARİFE { }
class C
{
void goo(int x)
{
var obj = new $$]]></Document>, extraExportedTypes:={GetType(CSharpEditorFormattingService)}.ToList())
state.SendTypeChars("tarif")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("TARİFE")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround7() As Task
Using New CultureContext(New CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateCSharpTestState(
<Document><![CDATA[
class İFADE {}
class ifTest {}
class C
{
void goo(int x)
{
var obj = new $$]]></Document>, extraExportedTypes:={GetType(CSharpEditorFormattingService)}.ToList())
state.SendTypeChars("ifad")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("İFADE")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround8() As Task
Using New CultureContext(New CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateCSharpTestState(
<Document><![CDATA[
class IFADE {}
class ifTest {}
class C
{
void goo(int x)
{
var obj = new $$]]></Document>, extraExportedTypes:={GetType(CSharpEditorFormattingService)}.ToList())
state.SendTypeChars("ifad")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("IFADE")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround9() As Task
Using New CultureContext(New CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateCSharpTestState(
<Document><![CDATA[
class IFADE {}
class ifTest {}
class C
{
void goo(int x)
{
IFADE ifade = null;
$$]]></Document>, extraExportedTypes:={GetType(CSharpEditorFormattingService)}.ToList())
state.SendTypeChars("IF")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("if")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround10() As Task
Using New CultureContext(New CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateCSharpTestState(
<Document><![CDATA[
class İFADE {}
class ifTest {}
class C
{
void goo(int x)
{
İFADE ifade = null;
$$]]></Document>, extraExportedTypes:={GetType(CSharpEditorFormattingService)}.ToList())
state.SendTypeChars("IF")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("if")
End Using
End Using
End Function
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TargetTypePreselection1() As Task
Using state = TestStateFactory.CreateCSharpTestState(
......
......@@ -3008,6 +3008,235 @@ End Class
End Using
End Function
<WorkItem(588, "https://github.com/dotnet/roslyn/issues/588")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround1() As Task
Using New CultureContext(New Globalization.CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateVisualBasicTestState(
<Document><![CDATA[
Class C
Sub goo(x As Integer)
String.$$
]]></Document>)
state.SendTypeChars("is")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("IsInterned")
End Using
End Using
End Function
<WorkItem(588, "https://github.com/dotnet/roslyn/issues/588")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround2() As Task
Using New CultureContext(New Globalization.CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateVisualBasicTestState(
<Document><![CDATA[
Class C
Sub goo(x As Integer)
String.$$]]></Document>)
state.SendTypeChars("ı")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem()
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround3() As Task
Using New CultureContext(New Globalization.CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateVisualBasicTestState(
<Document><![CDATA[
Class TARIFE
End Class
Class C
Sub goo(x As Integer)
Dim t As $$
]]></Document>)
state.SendTypeChars("tarif")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("TARIFE")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround4() As Task
Using New CultureContext(New Globalization.CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateVisualBasicTestState(
<Document><![CDATA[
Class IFADE
End Class
Class ifTest
End Class
Class C
Sub goo(x As Integer)
Dim ifade As IFADE
$$]]></Document>)
state.SendTypeChars("if")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("If")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround5() As Task
Using New CultureContext(New Globalization.CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateVisualBasicTestState(
<Document><![CDATA[
Class İFADE
End Class
Class ifTest
End Class
Class C
Sub goo(x As Integer)
Dim ifade As İFADE
$$
]]></Document>)
state.SendTypeChars("if")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("If")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround6() As Task
Using New CultureContext(New Globalization.CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateVisualBasicTestState(
<Document><![CDATA[
Class TARİFE
End Class
Class C
Sub goo(x As Integer)
Dim obj As $$
]]></Document>)
state.SendTypeChars("tarif")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("TARİFE")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround7() As Task
Using New CultureContext(New Globalization.CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateVisualBasicTestState(
<Document><![CDATA[
Class İFADE
End Class
Class ifTest
End Class
Class C
Sub goo(x As Integer)
Dim obj As $$
]]></Document>)
state.SendTypeChars("ifad")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("İFADE")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround8() As Task
Using New CultureContext(New Globalization.CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateVisualBasicTestState(
<Document><![CDATA[
Class IFADE
End Class
Class ifTest
End Class
Class C
Sub goo(x As Integer)
Dim obj As $$
]]></Document>)
state.SendTypeChars("ifad")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("IFADE")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround9() As Task
Using New CultureContext(New Globalization.CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateVisualBasicTestState(
<Document><![CDATA[
Class IFADE
End Class
Class ifTest
End Class
Class C
Sub goo(x As Integer)
Dim ifade_ As İFADE
$$]]></Document>)
state.SendTypeChars("IF")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("If")
End Using
End Using
End Function
<WorkItem(29938, "https://github.com/dotnet/roslyn/issues/29938")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Completion)>
Public Async Function TestMatchWithTurkishIWorkaround10() As Task
Using New CultureContext(New Globalization.CultureInfo("tr-TR", useUserOverride:=False))
Using state = TestStateFactory.CreateVisualBasicTestState(
<Document><![CDATA[
Class İFADE
End Class
Class ifTest
End Class
Class C
Sub goo(x As Integer)
Dim ifade As İFADE
$$
]]></Document>)
state.SendTypeChars("IF")
Await state.WaitForAsynchronousOperationsAsync()
Await state.AssertSelectedCompletionItem("If")
End Using
End Using
End Function
<ExportLanguageService(GetType(ISnippetInfoService), LanguageNames.VisualBasic), System.Composition.Shared>
Friend Class MockSnippetInfoService
Implements ISnippetInfoService
......
......@@ -87,24 +87,32 @@ public bool MatchesPattern(string text, string pattern, CultureInfo culture)
var patternMatcher = GetPatternMatcher(pattern, culture, includeMatchSpans);
var match = patternMatcher.GetFirstMatch(completionItemText);
if (match != null)
// We still have making checks for language having different to English capitalization,
// for example, for Turkish with dotted and dotless i capitalization totally diferent from English.
// Now we escaping from the second check for English languages.
// Maybe we can escape as well for more similar languages in case if we meet performance issues.
if (culture.ThreeLetterWindowsLanguageName.Equals(EnUSCultureInfo.ThreeLetterWindowsLanguageName))
{
return match;
}
// Start with the culture-specific comparison, and fall back to en-US.
if (!culture.Equals(EnUSCultureInfo))
// Keywords in .NET are always in En-US.
// Identifiers can be in user language.
// Try to get matches for both and return the best of them.
patternMatcher = GetPatternMatcher(pattern, EnUSCultureInfo, includeMatchSpans);
var enUSCultureMatch = patternMatcher.GetFirstMatch(completionItemText);
if (match == null)
{
patternMatcher = GetPatternMatcher(pattern, EnUSCultureInfo, includeMatchSpans);
match = patternMatcher.GetFirstMatch(completionItemText);
return enUSCultureMatch;
}
if (match != null)
{
return match;
}
if (enUSCultureMatch == null)
{
return match;
}
return null;
return match.Value.CompareTo(enUSCultureMatch.Value) < 0 ? match.Value : enUSCultureMatch.Value;
}
private PatternMatcher GetPatternMatcher(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册