提交 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
Dim namingStyle = CreateNamingStyle(wordSeparator:="_t_", capitalizationScheme:=Capitalization.PascalCase)
TestNameCompliance(namingStyle, "Pascal_t_Case")
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
#Region "camelCase"
......@@ -140,6 +146,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests
Dim namingStyle = CreateNamingStyle(wordSeparator:="_t_", capitalizationScheme:=Capitalization.CamelCase)
TestNameCompliance(namingStyle, "camel_t_Case")
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
#Region "Firstupper"
......@@ -190,6 +202,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests
Dim namingStyle = CreateNamingStyle(wordSeparator:="_T_", capitalizationScheme:=Capitalization.FirstUpper)
TestNameCompliance(namingStyle, "First_T_upper")
End Sub
<Fact, Trait(Traits.Feature, Traits.Features.NamingStyle)>
Public Sub TestFirstUpperAllowsUncasedCharacters()
Dim namingStyle = CreateNamingStyle(capitalizationScheme:=Capitalization.FirstUpper)
TestNameCompliance(namingStyle, "私の家")
End Sub
#End Region
#Region "ALLUPPER"
......@@ -234,6 +252,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests
Dim namingStyle = CreateNamingStyle(wordSeparator:="_t_", capitalizationScheme:=Capitalization.AllUpper)
TestNameCompliance(namingStyle, "ALL_t_UPPER")
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
#Region "alllower"
......@@ -278,6 +302,12 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests
Dim namingStyle = CreateNamingStyle(wordSeparator:="_T_", capitalizationScheme:=Capitalization.AllLower)
TestNameCompliance(namingStyle, "all_T_lower")
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 Class
End Namespace
......@@ -136,14 +136,14 @@ private WordSpanEnumerable GetWordSpans(string name, TextSpan nameSpan)
private static string Substring(string name, TextSpan wordSpan)
=> 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_firstCharIsUpperCase = (val, span) => char.IsUpper(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) => !DoesCharacterHaveCasing(val[span.Start]) || char.IsUpper(val[span.Start]);
private static Func<string, TextSpan, bool> s_wordIsAllUpperCase = (val, span) =>
{
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;
}
......@@ -156,7 +156,7 @@ private static string Substring(string name, TextSpan wordSpan)
{
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;
}
......@@ -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,
out reason);
private static bool DoesCharacterHaveCasing(char c) => char.ToLower(c) != char.ToUpper(c);
private string CreateCompliantNameDirectly(string name)
{
var addPrefix = !name.StartsWith(Prefix);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册