提交 d0434bd9 编写于 作者: D David Poeschl 提交者: GitHub

Merge pull request #16597 from dpoeschl/NamingStylesHandleCasingBetter

Don't emit casing-related naming violations when the violating character has no casing (making the feature noisy/unusable in other cultures)
...@@ -90,6 +90,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests ...@@ -90,6 +90,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests
Dim namingStyle = CreateNamingStyle(wordSeparator:="_t_", capitalizationScheme:=Capitalization.PascalCase) Dim namingStyle = CreateNamingStyle(wordSeparator:="_t_", capitalizationScheme:=Capitalization.PascalCase)
TestNameCompliance(namingStyle, "Pascal_t_Case") TestNameCompliance(namingStyle, "Pascal_t_Case")
End Sub End Sub
<Fact, Trait(Traits.Feature, Traits.Features.NamingStyle)>
Public Sub TestPascalCaseAllowsUncasedCharacters()
Dim namingStyle = CreateNamingStyle(wordSeparator:="_", capitalizationScheme:=Capitalization.PascalCase)
TestNameCompliance(namingStyle, "私の家_2nd")
End Sub
#End Region #End Region
#Region "camelCase" #Region "camelCase"
...@@ -140,6 +146,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests ...@@ -140,6 +146,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests
Dim namingStyle = CreateNamingStyle(wordSeparator:="_t_", capitalizationScheme:=Capitalization.CamelCase) Dim namingStyle = CreateNamingStyle(wordSeparator:="_t_", capitalizationScheme:=Capitalization.CamelCase)
TestNameCompliance(namingStyle, "camel_t_Case") TestNameCompliance(namingStyle, "camel_t_Case")
End Sub End Sub
<Fact, Trait(Traits.Feature, Traits.Features.NamingStyle)>
Public Sub TestCamelCaseAllowsUncasedCharacters()
Dim namingStyle = CreateNamingStyle(wordSeparator:="_", capitalizationScheme:=Capitalization.CamelCase)
TestNameCompliance(namingStyle, "私の家_2nd")
End Sub
#End Region #End Region
#Region "Firstupper" #Region "Firstupper"
...@@ -190,6 +202,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests ...@@ -190,6 +202,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests
Dim namingStyle = CreateNamingStyle(wordSeparator:="_T_", capitalizationScheme:=Capitalization.FirstUpper) Dim namingStyle = CreateNamingStyle(wordSeparator:="_T_", capitalizationScheme:=Capitalization.FirstUpper)
TestNameCompliance(namingStyle, "First_T_upper") TestNameCompliance(namingStyle, "First_T_upper")
End Sub End Sub
<Fact, Trait(Traits.Feature, Traits.Features.NamingStyle)>
Public Sub TestFirstUpperAllowsUncasedCharacters()
Dim namingStyle = CreateNamingStyle(capitalizationScheme:=Capitalization.FirstUpper)
TestNameCompliance(namingStyle, "私の家")
End Sub
#End Region #End Region
#Region "ALLUPPER" #Region "ALLUPPER"
...@@ -234,6 +252,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests ...@@ -234,6 +252,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests
Dim namingStyle = CreateNamingStyle(wordSeparator:="_t_", capitalizationScheme:=Capitalization.AllUpper) Dim namingStyle = CreateNamingStyle(wordSeparator:="_t_", capitalizationScheme:=Capitalization.AllUpper)
TestNameCompliance(namingStyle, "ALL_t_UPPER") TestNameCompliance(namingStyle, "ALL_t_UPPER")
End Sub End Sub
<Fact, Trait(Traits.Feature, Traits.Features.NamingStyle)>
Public Sub TestAllUpperAllowsUncasedCharacters()
Dim namingStyle = CreateNamingStyle(capitalizationScheme:=Capitalization.AllUpper)
TestNameCompliance(namingStyle, "私AB23CのDE家")
End Sub
#End Region #End Region
#Region "alllower" #Region "alllower"
...@@ -278,6 +302,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests ...@@ -278,6 +302,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests
Dim namingStyle = CreateNamingStyle(wordSeparator:="_T_", capitalizationScheme:=Capitalization.AllLower) Dim namingStyle = CreateNamingStyle(wordSeparator:="_T_", capitalizationScheme:=Capitalization.AllLower)
TestNameCompliance(namingStyle, "all_T_lower") TestNameCompliance(namingStyle, "all_T_lower")
End Sub End Sub
<Fact, Trait(Traits.Feature, Traits.Features.NamingStyle)>
Public Sub TestAllLowerAllowsUncasedCharacters()
Dim namingStyle = CreateNamingStyle(capitalizationScheme:=Capitalization.AllLower)
TestNameCompliance(namingStyle, "私ab23cのde家")
End Sub
#End Region #End Region
End Class End Class
End Namespace End Namespace
...@@ -136,14 +136,14 @@ private WordSpanEnumerable GetWordSpans(string name, TextSpan nameSpan) ...@@ -136,14 +136,14 @@ private WordSpanEnumerable GetWordSpans(string name, TextSpan nameSpan)
private static string Substring(string name, TextSpan wordSpan) private static string Substring(string name, TextSpan wordSpan)
=> name.Substring(wordSpan.Start, wordSpan.Length); => name.Substring(wordSpan.Start, wordSpan.Length);
private static Func<string, TextSpan, bool> s_firstCharIsLowerCase = (val, span) => char.IsLower(val[span.Start]); private static Func<string, TextSpan, bool> s_firstCharIsLowerCase = (val, span) => !DoesCharacterHaveCasing(val[span.Start]) || char.IsLower(val[span.Start]);
private static Func<string, TextSpan, bool> s_firstCharIsUpperCase = (val, span) => char.IsUpper(val[span.Start]); private static Func<string, TextSpan, bool> s_firstCharIsUpperCase = (val, span) => !DoesCharacterHaveCasing(val[span.Start]) || char.IsUpper(val[span.Start]);
private static Func<string, TextSpan, bool> s_wordIsAllUpperCase = (val, span) => private static Func<string, TextSpan, bool> s_wordIsAllUpperCase = (val, span) =>
{ {
for (int i = span.Start, n = span.End; i < n; i++) for (int i = span.Start, n = span.End; i < n; i++)
{ {
if (!char.IsUpper(val[i])) if (DoesCharacterHaveCasing(val[i]) && !char.IsUpper(val[i]))
{ {
return false; return false;
} }
...@@ -156,7 +156,7 @@ private static string Substring(string name, TextSpan wordSpan) ...@@ -156,7 +156,7 @@ private static string Substring(string name, TextSpan wordSpan)
{ {
for (int i = span.Start, n = span.End; i < n; i++) for (int i = span.Start, n = span.End; i < n; i++)
{ {
if (!char.IsLower(val[i])) if (DoesCharacterHaveCasing(val[i]) && !char.IsLower(val[i]))
{ {
return false; return false;
} }
...@@ -264,6 +264,8 @@ private bool CheckFirstUpper(string name, TextSpan nameSpan, out string reason) ...@@ -264,6 +264,8 @@ private bool CheckFirstUpper(string name, TextSpan nameSpan, out string reason)
WorkspacesResources.These_non_leading_words_must_begin_with_a_lowercase_letter_colon_0, WorkspacesResources.These_non_leading_words_must_begin_with_a_lowercase_letter_colon_0,
out reason); out reason);
private static bool DoesCharacterHaveCasing(char c) => char.ToLower(c) != char.ToUpper(c);
private string CreateCompliantNameDirectly(string name) private string CreateCompliantNameDirectly(string name)
{ {
var addPrefix = !name.StartsWith(Prefix); var addPrefix = !name.StartsWith(Prefix);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册