提交 1478c7ba 编写于 作者: C Cyrus Najmabadi

Don't trigger Add-Using on an identifier being missing

上级 f010e8f9
......@@ -881,35 +881,6 @@ public async Task TestConflictedGenericName()
@"using System.Threading.Tasks; using Task = System.AccessViolationException; class X { Task<X> x; }");
}
[WorkItem(860648)]
[WorkItem(902014)]
[WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsAddUsing)]
public async Task TestIncompleteSimpleLambdaExpression()
{
await TestAsync(
@"using System.Linq;
class Program
{
static void Main(string[] args)
{
[|args[0].Any(x => IBindCtx|]
string a;
}
}",
@"using System.Linq;
using System.Runtime.InteropServices.ComTypes;
class Program
{
static void Main(string[] args)
{
args[0].Any(x => IBindCtx
string a;
}
}");
}
[WorkItem(913300)]
[WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsAddUsing)]
public async Task TestNoDuplicateReport()
......@@ -2168,8 +2139,37 @@ void Foo()
Action a = () => { IBindCtx };
string a;
}
}");
}
[WorkItem(860648)]
[WorkItem(902014)]
[WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsAddUsing)]
public async Task TestIncompleteSimpleLambdaExpression()
{
await TestAsync(
@"using System.Linq;
class Program
{
static void Main(string[] args)
{
args[0].Any(x => [|IBindCtx|]
string a;
}
}",
@"using System.Linq;
using System.Runtime.InteropServices.ComTypes;
class Program
{
static void Main(string[] args)
{
args[0].Any(x => IBindCtx
string a;
}
}");
}
}
}
}
}
\ No newline at end of file
......@@ -72,11 +72,6 @@ internal class CSharpAddImportCodeFixProvider : AbstractAddImportCodeFixProvider
/// </summary>
private const string CS0616 = "CS0616";
/// <summary>
/// Syntax error, 'A' expected
/// </summary>
private const string CS1003 = "CS1003";
/// <summary>
/// No overload for method 'X' takes 'N' arguments
/// </summary>
......@@ -126,7 +121,6 @@ public override ImmutableArray<string> FixableDiagnosticIds
CS0122,
CS0307,
CS0616,
CS1003,
CS1501,
CS1503,
CS1574,
......@@ -264,7 +258,6 @@ protected override bool CanAddImportForType(Diagnostic diagnostic, ref SyntaxNod
case CS0122:
case CS0307:
case CS0616:
case CS1003:
case CS1580:
case CS1581:
break;
......
......@@ -45,12 +45,28 @@ protected DiagnosticDescriptor GetDiagnosticDescriptor(string id, LocalizableStr
private void AnalyzeNode(SyntaxNodeAnalysisContext context)
{
if ((context.Node is TLambdaExpressionSyntax && context.Node.ContainsDiagnostics) || context.Node is TIncompleteMemberSyntax)
if (IsBrokenLambda(context) || context.Node is TIncompleteMemberSyntax)
{
ReportUnboundIdentifierNames(context, context.Node);
}
}
private static bool IsBrokenLambda(SyntaxNodeAnalysisContext context)
{
if (context.Node is TLambdaExpressionSyntax)
{
if (context.Node.ContainsDiagnostics)
{
return true;
}
var lastToken = context.Node.GetLastToken();
return lastToken.GetNextToken(includeZeroWidth: true).IsMissing;
}
return false;
}
private void ReportUnboundIdentifierNames(SyntaxNodeAnalysisContext context, SyntaxNode member)
{
Func<SyntaxNode, bool> isQualifiedOrSimpleName = (SyntaxNode n) => n is TQualifiedNameSyntax || n is TSimpleNameSyntax;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册