Skip to content

Commit 67f160e

Browse files
authored
Merge pull request #28 from dotnet-campus/t/lvyi/case
更准确判断 PascalCase 命名规则 + 消除所有警告
2 parents d874bfb + 6e837a4 commit 67f160e

32 files changed

+152
-113
lines changed

build/Version.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<Project>
22
<PropertyGroup>
3-
<Version>3.2.0</Version>
3+
<Version>3.2.1</Version>
44
</PropertyGroup>
55
</Project>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
; Shipped analyzer releases
2+
; https://github.com/dotnet/roslyn-analyzers/blob/master/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md
3+
4+
## Release 3.2
5+
6+
### New Rules
7+
Rule ID | Category | Severity | Notes
8+
--------|----------|----------|-------
9+
DCL101 | dotnetCampus.Naming | Error | <https://github.com/dotnet-campus/dotnetCampus.CommandLine/blob/master/docs/analyzers/DCL101.md>
10+
DCL201 | dotnetCampus.Usage | Hidden | <https://github.com/dotnet-campus/dotnetCampus.CommandLine/blob/master/docs/analyzers/DCL201.md>
11+
DCL202 | dotnetCampus.Usage | Error | <https://github.com/dotnet-campus/dotnetCampus.CommandLine/blob/master/docs/analyzers/DCL202.md>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
; Unshipped analyzer release
2+
; https://github.com/dotnet/roslyn-analyzers/blob/master/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md

src/dotnetCampus.CommandLine.Analyzer/Analyzers/OptionLongNameMustBePascalCaseAnalyzer.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,18 @@ private void AnalyzeProperty(SyntaxNodeAnalysisContext context)
101101
var argumentList = attributeSyntax.ChildNodes().OfType<AttributeArgumentListSyntax>().FirstOrDefault();
102102
if (argumentList != null)
103103
{
104-
var expressions = argumentList.ChildNodes().OfType<AttributeArgumentSyntax>().Select(x => x.Expression);
105-
foreach (var expressionSyntax in expressions)
104+
var attributeArguments = argumentList.ChildNodes().OfType<AttributeArgumentSyntax>();
105+
foreach (var attributeArgument in attributeArguments)
106106
{
107+
var expressionSyntax = attributeArgument.Expression;
107108
var expression = expressionSyntax.ToString();
109+
var nameEqualsExists = attributeArgument.ChildNodes().OfType<NameEqualsSyntax>().Any();
110+
var longNameEqualsExists = attributeArgument.ChildNodes().OfType<NameEqualsSyntax>().Any(x => x.Name.ToString() == "LongName");
111+
var mayBeLongName = !nameEqualsExists || longNameEqualsExists;
108112
if (expression != null
109113
&& expression.StartsWith("\"", StringComparison.OrdinalIgnoreCase)
110-
&& expression.EndsWith("\"", StringComparison.OrdinalIgnoreCase))
114+
&& expression.EndsWith("\"", StringComparison.OrdinalIgnoreCase)
115+
&& mayBeLongName)
111116
{
112117
var value = expression.Substring(1, expression.Length - 2);
113118
if (value.Length >= 2)

src/dotnetCampus.CommandLine/CommandLine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ private static string[] ConvertUrlToArgs(string url)
271271
if (url != null)
272272
{
273273
url = HttpUtility.UrlDecode(url);
274-
var start = url.IndexOf('?');
274+
var start = url.IndexOf('?', StringComparison.OrdinalIgnoreCase);
275275
if (start >= 0 && url != null)
276276
{
277277
var arguments = url.Substring(start + 1);

src/dotnetCampus.CommandLine/CommandLineHandlers.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System;
1+
#pragma warning disable CA1303 // 请不要将文本作为本地化参数传递
2+
3+
using System;
24
using System.Diagnostics.Contracts;
35
using System.Threading.Tasks;
46

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#if NETCOREAPP3_0 || NETCOREAPP3_1 || NETCOREAPP5_0 || NET5_0 || NET6_0
2+
#else
3+
namespace System
4+
{
5+
internal static class NET45Compatibility
6+
{
7+
public static int IndexOf(this string @string, char value, StringComparison stringComparison)
8+
{
9+
return @string.IndexOf(value.ToString(), stringComparison);
10+
}
11+
}
12+
}
13+
#endif

src/dotnetCampus.CommandLine/Core/SingleOptimizedList.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ internal class SingleOptimizedList<T> : IReadOnlyList<T>
1919
private List<T>? _restValues;
2020

2121
/// <summary>
22-
/// 创建带有一个值的 <see cref="SingleOptimizedList"/> 的实例。
22+
/// 创建带有一个值的 <see cref="SingleOptimizedList{T}"/> 的实例。
2323
/// </summary>
2424
/// <param name="firstValue"></param>
2525
public SingleOptimizedList(T firstValue)

src/dotnetCampus.CommandLine/Parsers/ImmutableRuntimeOptionParser.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System;
1+
#pragma warning disable CA1303 // 请不要将文本作为本地化参数传递
2+
3+
using System;
24
using System.Collections.Generic;
35
using System.Linq;
46
using System.Reflection;
@@ -39,7 +41,7 @@ public ImmutableRuntimeOptionParser(string? verb, IReadOnlyList<PropertyInfo> at
3941
_shortNameDictionary[attribute.ShortName.Value] = propertyInfo;
4042
}
4143

42-
if (string.IsNullOrWhiteSpace(attribute.LongName))
44+
if (attribute.LongName is null || string.IsNullOrWhiteSpace(attribute.LongName))
4345
{
4446
_longNameDictionary[propertyInfo.Name] = propertyInfo;
4547
}

src/dotnetCampus.CommandLine/Parsers/RuntimeCommandLineOptionParser.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System;
1+
#pragma warning disable CA1303 // 请不要将文本作为本地化参数传递
2+
3+
using System;
24
using System.Collections.Generic;
35
using System.Linq;
46
using System.Reflection;

0 commit comments

Comments
 (0)