diff --git a/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.Generics.cs b/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.Generics.cs index b36242ba2..514d1e735 100644 --- a/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.Generics.cs +++ b/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.Generics.cs @@ -125,7 +125,10 @@ private IReadOnlyList EvaluateIndex(IndexExpression expr) { } } else { var index = GetValueFromExpression(expr.Index); - indices.Add(index ?? UnknownType); + // Don't count null indexes as arguments + if (index != null) { + indices.Add(index); + } } return indices; } diff --git a/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.cs b/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.cs index 7f878600d..143a58df7 100644 --- a/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.cs +++ b/src/Analysis/Ast/Impl/Analyzer/Evaluation/ExpressionEval.cs @@ -184,6 +184,10 @@ public IMember GetValueFromExpression(Expression expr, LookupOptions options = L case NamedExpression namedExpr: m = GetValueFromExpression(namedExpr.Value); break; + // indexing with nothing, e.g Generic[] + case ErrorExpression error: + m = null; + break; default: m = GetValueFromBinaryOp(expr) ?? GetConstantFromLiteral(expr, options); break; diff --git a/src/Analysis/Ast/Test/LintGenericTests.cs b/src/Analysis/Ast/Test/LintGenericTests.cs index 86f09faba..e0ce8b18a 100644 --- a/src/Analysis/Ast/Test/LintGenericTests.cs +++ b/src/Analysis/Ast/Test/LintGenericTests.cs @@ -80,7 +80,26 @@ public async Task GenericDuplicateArguments(string decl) { public async Task GenericArgumentsNoDiagnosticOnValid(string decl) { string code = GenericSetup + decl; var analysis = await GetAnalysisAsync(code); - analysis.Diagnostics.Should().HaveCount(0); + analysis.Diagnostics.Should().BeEmpty(); + } + + [TestMethod, Priority(0)] + public async Task GenericNoArgumentsNoDiagnostic() { + string code = GenericSetup + @" +x = Generic[] +"; + var analysis = await GetAnalysisAsync(code); + analysis.Diagnostics.Should().BeEmpty(); + } + + + [TestMethod, Priority(0)] + public async Task GenericArgumentSpaceNoDiagnostic() { + string code = GenericSetup + @" +x = Generic[ ] +"; + var analysis = await GetAnalysisAsync(code); + analysis.Diagnostics.Should().BeEmpty(); } } }