mirror of
https://github.com/Tyrrrz/CliFx.git
synced 2025-10-25 15:19:17 +00:00
Use CSharpier
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Basic.Reference.Assemblies.Net70" Version="1.4.2" />
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.0" PrivateAssets="all" />
|
||||
<PackageReference Include="CSharpier.MsBuild" Version="0.25.0" PrivateAssets="all" />
|
||||
<PackageReference Include="GitHubActionsTestLogger" Version="2.3.2" PrivateAssets="all" />
|
||||
<PackageReference Include="FluentAssertions" Version="6.11.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.0" />
|
||||
|
||||
@@ -13,8 +13,7 @@ public class CommandMustBeAnnotatedAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
public ValueTask ExecuteAsync(IConsole console) => default;
|
||||
@@ -30,8 +29,7 @@ public class CommandMustBeAnnotatedAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public abstract class MyCommand : ICommand
|
||||
{
|
||||
@@ -48,8 +46,7 @@ public class CommandMustBeAnnotatedAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public abstract class MyCommand : ICommand
|
||||
{
|
||||
public ValueTask ExecuteAsync(IConsole console) => default;
|
||||
@@ -65,8 +62,7 @@ public class CommandMustBeAnnotatedAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class Foo
|
||||
{
|
||||
public int Bar { get; init; } = 5;
|
||||
@@ -76,4 +72,4 @@ public class CommandMustBeAnnotatedAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class CommandMustImplementInterfaceAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new CommandMustImplementInterfaceAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new CommandMustImplementInterfaceAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_a_command_does_not_implement_ICommand_interface()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand
|
||||
{
|
||||
@@ -31,8 +31,7 @@ public class CommandMustImplementInterfaceAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -49,8 +48,7 @@ public class CommandMustImplementInterfaceAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class Foo
|
||||
{
|
||||
public int Bar { get; init; } = 5;
|
||||
@@ -60,4 +58,4 @@ public class CommandMustImplementInterfaceAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,10 @@ public class GeneralSpecs
|
||||
public void All_analyzers_have_unique_diagnostic_IDs()
|
||||
{
|
||||
// Arrange
|
||||
var analyzers = typeof(AnalyzerBase)
|
||||
.Assembly
|
||||
var analyzers = typeof(AnalyzerBase).Assembly
|
||||
.GetTypes()
|
||||
.Where(t => !t.IsAbstract && t.IsAssignableTo(typeof(DiagnosticAnalyzer)))
|
||||
.Select(t => (DiagnosticAnalyzer) Activator.CreateInstance(t)!)
|
||||
.Select(t => (DiagnosticAnalyzer)Activator.CreateInstance(t)!)
|
||||
.ToArray();
|
||||
|
||||
// Act
|
||||
@@ -27,4 +26,4 @@ public class GeneralSpecs
|
||||
// Assert
|
||||
diagnosticIds.Should().OnlyHaveUniqueItems();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,7 @@ public class OptionMustBeInsideCommandAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyClass
|
||||
{
|
||||
[CommandOption("foo")]
|
||||
@@ -31,8 +30,7 @@ public class OptionMustBeInsideCommandAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -52,8 +50,7 @@ public class OptionMustBeInsideCommandAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public abstract class MyCommand
|
||||
{
|
||||
[CommandOption("foo")]
|
||||
@@ -70,8 +67,7 @@ public class OptionMustBeInsideCommandAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -84,4 +80,4 @@ public class OptionMustBeInsideCommandAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class OptionMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new OptionMustBeRequiredIfPropertyRequiredAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new OptionMustBeRequiredIfPropertyRequiredAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_a_non_required_option_is_bound_to_a_required_property()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -34,8 +34,7 @@ public class OptionMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -55,8 +54,7 @@ public class OptionMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -76,8 +74,7 @@ public class OptionMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -97,8 +94,7 @@ public class OptionMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -111,4 +107,4 @@ public class OptionMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class OptionMustHaveNameOrShortNameAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new OptionMustHaveNameOrShortNameAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new OptionMustHaveNameOrShortNameAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_an_option_does_not_have_a_name_or_short_name()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -34,8 +34,7 @@ public class OptionMustHaveNameOrShortNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -55,8 +54,7 @@ public class OptionMustHaveNameOrShortNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -76,8 +74,7 @@ public class OptionMustHaveNameOrShortNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -90,4 +87,4 @@ public class OptionMustHaveNameOrShortNameAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,7 @@ public class OptionMustHaveUniqueNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -37,8 +36,7 @@ public class OptionMustHaveUniqueNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -61,8 +59,7 @@ public class OptionMustHaveUniqueNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -82,8 +79,7 @@ public class OptionMustHaveUniqueNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -96,4 +92,4 @@ public class OptionMustHaveUniqueNameAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class OptionMustHaveUniqueShortNameAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new OptionMustHaveUniqueShortNameAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new OptionMustHaveUniqueShortNameAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_an_option_has_the_same_short_name_as_another_option()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -37,8 +37,7 @@ public class OptionMustHaveUniqueShortNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -61,8 +60,7 @@ public class OptionMustHaveUniqueShortNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -85,8 +83,7 @@ public class OptionMustHaveUniqueShortNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -106,8 +103,7 @@ public class OptionMustHaveUniqueShortNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -120,4 +116,4 @@ public class OptionMustHaveUniqueShortNameAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class OptionMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new OptionMustHaveValidConverterAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new OptionMustHaveValidConverterAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_an_option_has_a_converter_that_does_not_derive_from_BindingConverter()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyConverter
|
||||
{
|
||||
public string Convert(string? rawValue) => rawValue;
|
||||
@@ -39,8 +39,7 @@ public class OptionMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyConverter : BindingConverter<int>
|
||||
{
|
||||
public override int Convert(string? rawValue) => 42;
|
||||
@@ -65,8 +64,7 @@ public class OptionMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyConverter : BindingConverter<string>
|
||||
{
|
||||
public override string Convert(string? rawValue) => rawValue;
|
||||
@@ -91,8 +89,7 @@ public class OptionMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyConverter : BindingConverter<int>
|
||||
{
|
||||
public override int Convert(string? rawValue) => 42;
|
||||
@@ -117,8 +114,7 @@ public class OptionMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyConverter : BindingConverter<string>
|
||||
{
|
||||
public override string Convert(string? rawValue) => rawValue;
|
||||
@@ -143,8 +139,7 @@ public class OptionMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -164,8 +159,7 @@ public class OptionMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -178,4 +172,4 @@ public class OptionMustHaveValidConverterAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,7 @@ public class OptionMustHaveValidNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -34,8 +33,7 @@ public class OptionMustHaveValidNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -55,8 +53,7 @@ public class OptionMustHaveValidNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -76,8 +73,7 @@ public class OptionMustHaveValidNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -97,8 +93,7 @@ public class OptionMustHaveValidNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -111,4 +106,4 @@ public class OptionMustHaveValidNameAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class OptionMustHaveValidShortNameAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new OptionMustHaveValidShortNameAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new OptionMustHaveValidShortNameAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_an_option_has_a_short_name_which_is_not_a_letter_character()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -34,8 +34,7 @@ public class OptionMustHaveValidShortNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -55,8 +54,7 @@ public class OptionMustHaveValidShortNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -76,8 +74,7 @@ public class OptionMustHaveValidShortNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -90,4 +87,4 @@ public class OptionMustHaveValidShortNameAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class OptionMustHaveValidValidatorsAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new OptionMustHaveValidValidatorsAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new OptionMustHaveValidValidatorsAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_an_option_has_a_validator_that_does_not_derive_from_BindingValidator()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyValidator
|
||||
{
|
||||
public void Validate(string value) {}
|
||||
@@ -39,8 +39,7 @@ public class OptionMustHaveValidValidatorsAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyValidator : BindingValidator<int>
|
||||
{
|
||||
public override BindingValidationError Validate(int value) => Ok();
|
||||
@@ -65,8 +64,7 @@ public class OptionMustHaveValidValidatorsAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyValidator : BindingValidator<string>
|
||||
{
|
||||
public override BindingValidationError Validate(string value) => Ok();
|
||||
@@ -91,8 +89,7 @@ public class OptionMustHaveValidValidatorsAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -112,8 +109,7 @@ public class OptionMustHaveValidValidatorsAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -126,4 +122,4 @@ public class OptionMustHaveValidValidatorsAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class ParameterMustBeInsideCommandAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new ParameterMustBeInsideCommandAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new ParameterMustBeInsideCommandAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_a_parameter_is_inside_a_class_that_is_not_a_command()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyClass
|
||||
{
|
||||
[CommandParameter(0)]
|
||||
@@ -31,8 +31,7 @@ public class ParameterMustBeInsideCommandAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -52,8 +51,7 @@ public class ParameterMustBeInsideCommandAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public abstract class MyCommand
|
||||
{
|
||||
[CommandParameter(0)]
|
||||
@@ -70,8 +68,7 @@ public class ParameterMustBeInsideCommandAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -84,4 +81,4 @@ public class ParameterMustBeInsideCommandAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class ParameterMustBeLastIfNonRequiredAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new ParameterMustBeLastIfNonRequiredAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new ParameterMustBeLastIfNonRequiredAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_a_non_required_parameter_is_not_the_last_in_order()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -37,8 +37,7 @@ public class ParameterMustBeLastIfNonRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -61,8 +60,7 @@ public class ParameterMustBeLastIfNonRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -85,8 +83,7 @@ public class ParameterMustBeLastIfNonRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -99,4 +96,4 @@ public class ParameterMustBeLastIfNonRequiredAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class ParameterMustBeLastIfNonScalarAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new ParameterMustBeLastIfNonScalarAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new ParameterMustBeLastIfNonScalarAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_a_non_scalar_parameter_is_not_the_last_in_order()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -37,8 +37,7 @@ public class ParameterMustBeLastIfNonScalarAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -61,8 +60,7 @@ public class ParameterMustBeLastIfNonScalarAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -85,8 +83,7 @@ public class ParameterMustBeLastIfNonScalarAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -99,4 +96,4 @@ public class ParameterMustBeLastIfNonScalarAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class ParameterMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new ParameterMustBeRequiredIfPropertyRequiredAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new ParameterMustBeRequiredIfPropertyRequiredAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_a_non_required_parameter_is_bound_to_a_required_property()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -34,8 +34,7 @@ public class ParameterMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -55,8 +54,7 @@ public class ParameterMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -76,8 +74,7 @@ public class ParameterMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -97,8 +94,7 @@ public class ParameterMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -111,4 +107,4 @@ public class ParameterMustBeRequiredIfPropertyRequiredAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class ParameterMustBeSingleIfNonRequiredAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new ParameterMustBeSingleIfNonRequiredAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new ParameterMustBeSingleIfNonRequiredAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_more_than_one_non_required_parameters_are_defined()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -37,8 +37,7 @@ public class ParameterMustBeSingleIfNonRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -61,8 +60,7 @@ public class ParameterMustBeSingleIfNonRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -85,8 +83,7 @@ public class ParameterMustBeSingleIfNonRequiredAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -99,4 +96,4 @@ public class ParameterMustBeSingleIfNonRequiredAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class ParameterMustBeSingleIfNonScalarAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new ParameterMustBeSingleIfNonScalarAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new ParameterMustBeSingleIfNonScalarAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_more_than_one_non_scalar_parameters_are_defined()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -37,8 +37,7 @@ public class ParameterMustBeSingleIfNonScalarAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -61,8 +60,7 @@ public class ParameterMustBeSingleIfNonScalarAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -85,8 +83,7 @@ public class ParameterMustBeSingleIfNonScalarAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -99,4 +96,4 @@ public class ParameterMustBeSingleIfNonScalarAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,7 @@ public class ParameterMustHaveUniqueNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -37,8 +36,7 @@ public class ParameterMustHaveUniqueNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -61,8 +59,7 @@ public class ParameterMustHaveUniqueNameAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -75,4 +72,4 @@ public class ParameterMustHaveUniqueNameAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class ParameterMustHaveUniqueOrderAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new ParameterMustHaveUniqueOrderAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new ParameterMustHaveUniqueOrderAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_a_parameter_has_the_same_order_as_another_parameter()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -37,8 +37,7 @@ public class ParameterMustHaveUniqueOrderAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -61,8 +60,7 @@ public class ParameterMustHaveUniqueOrderAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -75,4 +73,4 @@ public class ParameterMustHaveUniqueOrderAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class ParameterMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new ParameterMustHaveValidConverterAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new ParameterMustHaveValidConverterAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_a_parameter_has_a_converter_that_does_not_derive_from_BindingConverter()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyConverter
|
||||
{
|
||||
public string Convert(string? rawValue) => rawValue;
|
||||
@@ -39,8 +39,7 @@ public class ParameterMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyConverter : BindingConverter<int>
|
||||
{
|
||||
public override int Convert(string? rawValue) => 42;
|
||||
@@ -56,7 +55,6 @@ public class ParameterMustHaveValidConverterAnalyzerSpecs
|
||||
}
|
||||
""";
|
||||
|
||||
|
||||
// Act & assert
|
||||
Analyzer.Should().ProduceDiagnostics(code);
|
||||
}
|
||||
@@ -66,8 +64,7 @@ public class ParameterMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyConverter : BindingConverter<string>
|
||||
{
|
||||
public override string Convert(string? rawValue) => rawValue;
|
||||
@@ -92,8 +89,7 @@ public class ParameterMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyConverter : BindingConverter<int>
|
||||
{
|
||||
public override int Convert(string? rawValue) => 42;
|
||||
@@ -118,8 +114,7 @@ public class ParameterMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyConverter : BindingConverter<string>
|
||||
{
|
||||
public override string Convert(string? rawValue) => rawValue;
|
||||
@@ -144,8 +139,7 @@ public class ParameterMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -165,8 +159,7 @@ public class ParameterMustHaveValidConverterAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -179,4 +172,4 @@ public class ParameterMustHaveValidConverterAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class ParameterMustHaveValidValidatorsAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new ParameterMustHaveValidValidatorsAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new ParameterMustHaveValidValidatorsAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_a_parameter_has_a_validator_that_does_not_derive_from_BindingValidator()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyValidator
|
||||
{
|
||||
public void Validate(string value) {}
|
||||
@@ -39,8 +39,7 @@ public class ParameterMustHaveValidValidatorsAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyValidator : BindingValidator<int>
|
||||
{
|
||||
public override BindingValidationError Validate(int value) => Ok();
|
||||
@@ -65,8 +64,7 @@ public class ParameterMustHaveValidValidatorsAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
public class MyValidator : BindingValidator<string>
|
||||
{
|
||||
public override BindingValidationError Validate(string value) => Ok();
|
||||
@@ -91,8 +89,7 @@ public class ParameterMustHaveValidValidatorsAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -112,8 +109,7 @@ public class ParameterMustHaveValidValidatorsAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -126,4 +122,4 @@ public class ParameterMustHaveValidValidatorsAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace CliFx.Analyzers.Tests;
|
||||
|
||||
public class SystemConsoleShouldBeAvoidedAnalyzerSpecs
|
||||
{
|
||||
private static DiagnosticAnalyzer Analyzer { get; } = new SystemConsoleShouldBeAvoidedAnalyzer();
|
||||
private static DiagnosticAnalyzer Analyzer { get; } =
|
||||
new SystemConsoleShouldBeAvoidedAnalyzer();
|
||||
|
||||
[Fact]
|
||||
public void Analyzer_reports_an_error_if_a_command_calls_a_method_on_SystemConsole()
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -35,8 +35,7 @@ public class SystemConsoleShouldBeAvoidedAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -57,8 +56,7 @@ public class SystemConsoleShouldBeAvoidedAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -79,8 +77,7 @@ public class SystemConsoleShouldBeAvoidedAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -101,8 +98,7 @@ public class SystemConsoleShouldBeAvoidedAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -121,8 +117,7 @@ public class SystemConsoleShouldBeAvoidedAnalyzerSpecs
|
||||
{
|
||||
// Arrange
|
||||
// lang=csharp
|
||||
const string code =
|
||||
"""
|
||||
const string code = """
|
||||
[Command]
|
||||
public class MyCommand : ICommand
|
||||
{
|
||||
@@ -136,4 +131,4 @@ public class SystemConsoleShouldBeAvoidedAnalyzerSpecs
|
||||
// Act & assert
|
||||
Analyzer.Should().NotProduceDiagnostics(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,9 +18,7 @@ internal class AnalyzerAssertions : ReferenceTypeAssertions<DiagnosticAnalyzer,
|
||||
protected override string Identifier { get; } = "analyzer";
|
||||
|
||||
public AnalyzerAssertions(DiagnosticAnalyzer analyzer)
|
||||
: base(analyzer)
|
||||
{
|
||||
}
|
||||
: base(analyzer) { }
|
||||
|
||||
private Compilation Compile(string sourceCode)
|
||||
{
|
||||
@@ -33,8 +31,7 @@ internal class AnalyzerAssertions : ReferenceTypeAssertions<DiagnosticAnalyzer,
|
||||
};
|
||||
|
||||
// Get default CliFx namespaces
|
||||
var defaultCliFxNamespaces = typeof(ICommand)
|
||||
.Assembly
|
||||
var defaultCliFxNamespaces = typeof(ICommand).Assembly
|
||||
.GetTypes()
|
||||
.Where(t => t.IsPublic)
|
||||
.Select(t => t.Namespace)
|
||||
@@ -43,10 +40,10 @@ internal class AnalyzerAssertions : ReferenceTypeAssertions<DiagnosticAnalyzer,
|
||||
|
||||
// Append default imports to the source code
|
||||
var sourceCodeWithUsings =
|
||||
string.Join(Environment.NewLine, defaultSystemNamespaces.Select(n => $"using {n};")) +
|
||||
string.Join(Environment.NewLine, defaultCliFxNamespaces.Select(n => $"using {n};")) +
|
||||
Environment.NewLine +
|
||||
sourceCode;
|
||||
string.Join(Environment.NewLine, defaultSystemNamespaces.Select(n => $"using {n};"))
|
||||
+ string.Join(Environment.NewLine, defaultCliFxNamespaces.Select(n => $"using {n};"))
|
||||
+ Environment.NewLine
|
||||
+ sourceCode;
|
||||
|
||||
// Parse the source code
|
||||
var ast = SyntaxFactory.ParseSyntaxTree(
|
||||
@@ -58,8 +55,9 @@ internal class AnalyzerAssertions : ReferenceTypeAssertions<DiagnosticAnalyzer,
|
||||
var compilation = CSharpCompilation.Create(
|
||||
"CliFxTests_DynamicAssembly_" + Guid.NewGuid(),
|
||||
new[] { ast },
|
||||
Net70.References.All
|
||||
.Append(MetadataReference.CreateFromFile(typeof(ICommand).Assembly.Location)),
|
||||
Net70.References.All.Append(
|
||||
MetadataReference.CreateFromFile(typeof(ICommand).Assembly.Location)
|
||||
),
|
||||
// DLL to avoid having to define the Main() method
|
||||
new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)
|
||||
);
|
||||
@@ -103,44 +101,46 @@ internal class AnalyzerAssertions : ReferenceTypeAssertions<DiagnosticAnalyzer,
|
||||
var producedDiagnosticIds = producedDiagnostics.Select(d => d.Id).Distinct().ToArray();
|
||||
|
||||
var isSuccessfulAssertion =
|
||||
expectedDiagnosticIds.Intersect(producedDiagnosticIds).Count() ==
|
||||
expectedDiagnosticIds.Length;
|
||||
expectedDiagnosticIds.Intersect(producedDiagnosticIds).Count()
|
||||
== expectedDiagnosticIds.Length;
|
||||
|
||||
Execute.Assertion.ForCondition(isSuccessfulAssertion).FailWith(() =>
|
||||
{
|
||||
var buffer = new StringBuilder();
|
||||
|
||||
buffer.AppendLine("Expected and produced diagnostics do not match.");
|
||||
buffer.AppendLine();
|
||||
|
||||
buffer.AppendLine("Expected diagnostics:");
|
||||
|
||||
foreach (var expectedDiagnostic in expectedDiagnostics)
|
||||
Execute.Assertion
|
||||
.ForCondition(isSuccessfulAssertion)
|
||||
.FailWith(() =>
|
||||
{
|
||||
buffer.Append(" - ");
|
||||
buffer.Append(expectedDiagnostic.Id);
|
||||
var buffer = new StringBuilder();
|
||||
|
||||
buffer.AppendLine("Expected and produced diagnostics do not match.");
|
||||
buffer.AppendLine();
|
||||
}
|
||||
|
||||
buffer.AppendLine();
|
||||
buffer.AppendLine("Expected diagnostics:");
|
||||
|
||||
buffer.AppendLine("Produced diagnostics:");
|
||||
|
||||
if (producedDiagnostics.Any())
|
||||
{
|
||||
foreach (var producedDiagnostic in producedDiagnostics)
|
||||
foreach (var expectedDiagnostic in expectedDiagnostics)
|
||||
{
|
||||
buffer.Append(" - ");
|
||||
buffer.Append(producedDiagnostic);
|
||||
buffer.Append(expectedDiagnostic.Id);
|
||||
buffer.AppendLine();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer.AppendLine(" < none >");
|
||||
}
|
||||
|
||||
return new FailReason(buffer.ToString());
|
||||
});
|
||||
buffer.AppendLine();
|
||||
|
||||
buffer.AppendLine("Produced diagnostics:");
|
||||
|
||||
if (producedDiagnostics.Any())
|
||||
{
|
||||
foreach (var producedDiagnostic in producedDiagnostics)
|
||||
{
|
||||
buffer.Append(" - ");
|
||||
buffer.Append(producedDiagnostic);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer.AppendLine(" < none >");
|
||||
}
|
||||
|
||||
return new FailReason(buffer.ToString());
|
||||
});
|
||||
}
|
||||
|
||||
public void NotProduceDiagnostics(string sourceCode)
|
||||
@@ -148,27 +148,29 @@ internal class AnalyzerAssertions : ReferenceTypeAssertions<DiagnosticAnalyzer,
|
||||
var producedDiagnostics = GetProducedDiagnostics(sourceCode);
|
||||
var isSuccessfulAssertion = !producedDiagnostics.Any();
|
||||
|
||||
Execute.Assertion.ForCondition(isSuccessfulAssertion).FailWith(() =>
|
||||
{
|
||||
var buffer = new StringBuilder();
|
||||
|
||||
buffer.AppendLine("Expected no produced diagnostics.");
|
||||
buffer.AppendLine();
|
||||
|
||||
buffer.AppendLine("Produced diagnostics:");
|
||||
|
||||
foreach (var producedDiagnostic in producedDiagnostics)
|
||||
Execute.Assertion
|
||||
.ForCondition(isSuccessfulAssertion)
|
||||
.FailWith(() =>
|
||||
{
|
||||
buffer.Append(" - ");
|
||||
buffer.Append(producedDiagnostic);
|
||||
}
|
||||
var buffer = new StringBuilder();
|
||||
|
||||
return new FailReason(buffer.ToString());
|
||||
});
|
||||
buffer.AppendLine("Expected no produced diagnostics.");
|
||||
buffer.AppendLine();
|
||||
|
||||
buffer.AppendLine("Produced diagnostics:");
|
||||
|
||||
foreach (var producedDiagnostic in producedDiagnostics)
|
||||
{
|
||||
buffer.Append(" - ");
|
||||
buffer.Append(producedDiagnostic);
|
||||
}
|
||||
|
||||
return new FailReason(buffer.ToString());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
internal static class AnalyzerAssertionsExtensions
|
||||
{
|
||||
public static AnalyzerAssertions Should(this DiagnosticAnalyzer analyzer) => new(analyzer);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user