Skip to content

Commit

Permalink
[GH-35] - handling casts in arg matcher analyzers
Browse files Browse the repository at this point in the history
  • Loading branch information
tpodolak committed Sep 22, 2019
1 parent 117dcc4 commit ffd19f2
Show file tree
Hide file tree
Showing 29 changed files with 126 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,26 @@ internal sealed class ArgumentMatcherCompilationAnalyzer : AbstractArgumentMatch
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression),
ImmutableArray.Create(
(int)SyntaxKind.Argument,
(int)SyntaxKind.BracketedArgumentList,
(int)SyntaxKind.ElementAccessExpression),
ImmutableArray.Create(
(int)SyntaxKind.CastExpression,
(int)SyntaxKind.Argument,
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression),
ImmutableArray.Create(
(int)SyntaxKind.AsExpression,
(int)SyntaxKind.Argument,
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression),
ImmutableArray.Create(
(int)SyntaxKind.CastExpression,
(int)SyntaxKind.Argument,
(int)SyntaxKind.BracketedArgumentList,
(int)SyntaxKind.ElementAccessExpression),
ImmutableArray.Create(
(int)SyntaxKind.AsExpression,
(int)SyntaxKind.Argument,
(int)SyntaxKind.BracketedArgumentList,
(int)SyntaxKind.ElementAccessExpression));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,21 @@ internal sealed class ArgumentMatcherCompilationAnalyzer : AbstractArgumentMatch
{
private static ImmutableArray<ImmutableArray<int>> AllowedPaths { get; } = ImmutableArray.Create(
ImmutableArray.Create(
(int)SyntaxKind.SimpleArgument,
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression),
ImmutableArray.Create(
(int)SyntaxKind.TryCastExpression,
(int)SyntaxKind.SimpleArgument,
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression),
ImmutableArray.Create(
(int)SyntaxKind.DirectCastExpression,
(int)SyntaxKind.SimpleArgument,
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression),
ImmutableArray.Create(
(int)SyntaxKind.CTypeExpression,
(int)SyntaxKind.SimpleArgument,
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,32 @@ public abstract class ArgumentMatcherDiagnosticVerifier : CSharpDiagnosticVerifi

[CombinatoryTheory]
[InlineData("Arg.Any<int>()")]
[InlineData("(int)Arg.Any<int>()")]
[InlineData("Arg.Any<int>() as int?")]
[InlineData("Arg.Compat.Any<int>()")]
[InlineData("(int)Arg.Compat.Any<int>()")]
[InlineData("Arg.Compat.Any<int>() as int?")]
[InlineData("Arg.Is(1)")]
[InlineData("(int)Arg.Is(1)")]
[InlineData("Arg.Is(1) as int?")]
[InlineData("Arg.Compat.Is(1)")]
[InlineData("(int)Arg.Compat.Is(1)")]
[InlineData("Arg.Compat.Is(1) as int?")]
public abstract Task ReportsNoDiagnostics_WhenUsedWithSubstituteMethod_ForMethodCall(string method, string arg);

[CombinatoryTheory]
[InlineData("Arg.Any<int>()")]
[InlineData("(int)Arg.Any<int>()")]
[InlineData("Arg.Any<int>() as int?")]
[InlineData("Arg.Compat.Any<int>()")]
[InlineData("(int)Arg.Compat.Any<int>()")]
[InlineData("Arg.Compat.Any<int>() as int?")]
[InlineData("Arg.Is(1)")]
[InlineData("(int)Arg.Is(1)")]
[InlineData("Arg.Is(1) as int?")]
[InlineData("Arg.Compat.Is(1)")]
[InlineData("(int)Arg.Compat.Is(1)")]
[InlineData("Arg.Compat.Is(1) as int?")]
public abstract Task ReportsNoDiagnostics_WhenUsedWithSubstituteMethod_ForIndexerCall(string method, string arg);

[CombinatoryTheory]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int Bar(int x);
public abstract int Bar(int? x);
}}
public class FooTests
Expand All @@ -38,7 +38,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int this[int x] {{ get; }}
public abstract int this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int Bar(int x);
public abstract int Bar(int? x);
}}
public class FooTests
Expand All @@ -49,7 +49,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int this[int x] {{ get; }}
public abstract int this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int Bar(int x);
public abstract int Bar(int? x);
}}
public class FooTests
Expand All @@ -40,7 +40,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int this[int x] {{ get; }}
public abstract int this[int? x] {{ get; }}
}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int Bar(int x);
public abstract int Bar(int? x);
}}
public class FooTests
Expand All @@ -38,7 +38,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int this[int x] {{ get; }}
public abstract int this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int Bar(int x);
public abstract int Bar(int? x);
}}
public class FooTests
Expand All @@ -44,7 +44,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int this[int x] {{ get; }}
public abstract int this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract Foo Bar(int x);
public abstract Foo Bar(int? x);
}}
public class FooTests
Expand All @@ -40,7 +40,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract Foo this[int x] {{ get; }}
public abstract Foo this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract Foo Bar(int x);
public abstract Foo Bar(int? x);
}}
public class FooTests
Expand All @@ -40,7 +40,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract Foo this[int x] {{ get; }}
public abstract Foo this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int Bar(int x);
public abstract int Bar(int? x);
}}
public class FooTests
Expand All @@ -42,7 +42,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int this[int x] {{ get; }}
public abstract int this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int Bar(int x);
public abstract int Bar(int? x);
}}
public class FooTests
Expand All @@ -42,7 +42,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int this[int x] {{ get; }}
public abstract int this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int Bar(int x);
public abstract int Bar(int? x);
}}
public class FooTests
Expand All @@ -42,7 +42,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int this[int x] {{ get; }}
public abstract int this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int Bar(int x);
public abstract int Bar(int? x);
}}
public class FooTests
Expand All @@ -42,7 +42,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int this[int x] {{ get; }}
public abstract int this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int Bar(int x);
public abstract int Bar(int? x);
}}
public class FooTests
Expand Down Expand Up @@ -50,7 +50,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int this[int x] {{ get; }}
public abstract int this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int Bar(int x);
public abstract int Bar(int? x);
}}
public class FooTests
Expand Down Expand Up @@ -49,7 +49,7 @@ namespace MyNamespace
{{
public abstract class Foo
{{
public abstract int this[int x] {{ get; }}
public abstract int this[int? x] {{ get; }}
}}
public class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,40 @@ public abstract class ArgumentMatcherDiagnosticVerifier : VisualBasicDiagnosticV

[CombinatoryTheory]
[InlineData("Arg.Any(Of Integer)()")]
[InlineData("TryCast(Arg.Any(Of Integer)(), Object)")]
[InlineData("CType(Arg.Any(Of Integer)(), Integer)")]
[InlineData("DirectCast(Arg.Any(Of Integer)(), Integer)")]
[InlineData("Arg.Compat.Any(Of Integer)()")]
[InlineData("TryCast(Arg.Compat.Any(Of Integer)(), Object)")]
[InlineData("CType(Arg.Compat.Any(Of Integer)(), Integer)")]
[InlineData("DirectCast(Arg.Compat.Any(Of Integer)(), Integer)")]
[InlineData("Arg.Is(1)")]
[InlineData("TryCast(Arg.Is(1), Object)")]
[InlineData("CType(Arg.Is(1), Integer)")]
[InlineData("DirectCast(Arg.Is(1), Integer)")]
[InlineData("Arg.Compat.Is(1)")]
[InlineData("TryCast(Arg.Compat.Is(1), Object)")]
[InlineData("CType(Arg.Compat.Is(1), Integer)")]
[InlineData("DirectCast(Arg.Compat.Is(1), Integer)")]
public abstract Task ReportsNoDiagnostics_WhenUsedWithSubstituteMethod_ForMethodCall(string method, string arg);

[CombinatoryTheory]
[InlineData("Arg.Any(Of Integer)()")]
[InlineData("TryCast(Arg.Any(Of Integer)(), Object)")]
[InlineData("CType(Arg.Any(Of Integer)(), Integer)")]
[InlineData("DirectCast(Arg.Any(Of Integer)(), Integer)")]
[InlineData("Arg.Compat.Any(Of Integer)()")]
[InlineData("TryCast(Arg.Compat.Any(Of Integer)(), Object)")]
[InlineData("CType(Arg.Compat.Any(Of Integer)(), Integer)")]
[InlineData("DirectCast(Arg.Compat.Any(Of Integer)(), Integer)")]
[InlineData("Arg.Is(1)")]
[InlineData("TryCast(Arg.Is(1), Object)")]
[InlineData("CType(Arg.Is(1), Integer)")]
[InlineData("DirectCast(Arg.Is(1), Integer)")]
[InlineData("Arg.Compat.Is(1)")]
[InlineData("TryCast(Arg.Compat.Is(1), Object)")]
[InlineData("CType(Arg.Compat.Is(1), Integer)")]
[InlineData("DirectCast(Arg.Compat.Is(1), Integer)")]
public abstract Task ReportsNoDiagnostics_WhenUsedWithSubstituteMethod_ForIndexerCall(string method, string arg);

[CombinatoryTheory]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public override async Task ReportsNoDiagnostics_WhenUsedWithSubstituteMethod_For
Namespace MyNamespace
Public MustInherit Class Foo
Public MustOverride Function Bar(ByVal x As Integer) As Integer
Public MustOverride Function Bar(ByVal x As Object) As Integer
End Class
Public Class FooTests
Expand All @@ -33,7 +33,7 @@ public override async Task ReportsNoDiagnostics_WhenUsedWithSubstituteMethod_For
Namespace MyNamespace
Public MustInherit Class Foo
Default Public MustOverride ReadOnly Property Item(ByVal x As Integer) As Integer
Default Public MustOverride ReadOnly Property Item(ByVal x As Object) As Integer
End Class
Public Class FooTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public override async Task ReportsNoDiagnostics_WhenUsedWithSubstituteMethod_For
Namespace MyNamespace
Public MustInherit Class Foo
Public MustOverride Function Bar(ByVal x As Integer) As Integer
Public MustOverride Function Bar(ByVal x As Object) As Integer
End Class
Public Class FooTests
Expand All @@ -41,7 +41,7 @@ public override async Task ReportsNoDiagnostics_WhenUsedWithSubstituteMethod_For
Namespace MyNamespace
Public MustInherit Class Foo
Default Public MustOverride ReadOnly Property Item(ByVal x As Integer) As Integer
Default Public MustOverride ReadOnly Property Item(ByVal x As Object) As Integer
End Class
Public Class FooTests
Expand Down
Loading

0 comments on commit ffd19f2

Please sign in to comment.