Skip to content

Commit 0aa107e

Browse files
authored
Merge pull request #2932 from vweijsters/fix-2928
Fixed issue in UsingCodeFixProvider with ValueTuple definitions under C# 7
2 parents ed2f145 + a69cd9c commit 0aa107e

2 files changed

Lines changed: 57 additions & 2 deletions

File tree

StyleCop.Analyzers/StyleCop.Analyzers.CodeFixes/OrderingRules/UsingCodeFixProvider.UsingsSorter.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ namespace StyleCop.Analyzers.OrderingRules
1313
using Microsoft.CodeAnalysis.CSharp;
1414
using Microsoft.CodeAnalysis.CSharp.Syntax;
1515
using StyleCop.Analyzers.Helpers;
16+
using StyleCop.Analyzers.Lightup;
1617
using StyleCop.Analyzers.Settings.ObjectModel;
1718

1819
/// <summary>
@@ -365,15 +366,19 @@ private UsingDirectiveSyntax QualifyUsingDirective(UsingDirectiveSyntax usingDir
365366
rewrittenName = replacement.WithTriviaFrom(originalName);
366367
break;
367368
}
368-
else if (symbol is INamedTypeSymbol)
369+
else if (symbol is INamedTypeSymbol namedTypeSymbol)
369370
{
370371
// TODO: Preserve inner trivia
371372
// TODO: simplify after qualification
372373
string fullName;
373-
if (SpecialTypeHelper.IsPredefinedType(((INamedTypeSymbol)symbol).OriginalDefinition.SpecialType))
374+
if (SpecialTypeHelper.IsPredefinedType(namedTypeSymbol.OriginalDefinition.SpecialType))
374375
{
375376
fullName = "global::System." + symbol.Name;
376377
}
378+
else if (namedTypeSymbol.IsTupleType())
379+
{
380+
fullName = namedTypeSymbol.TupleUnderlyingType().ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
381+
}
377382
else
378383
{
379384
fullName = symbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);

StyleCop.Analyzers/StyleCop.Analyzers.Test/OrderingRules/SA1200OutsideNamespaceUnitTests.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,56 @@ namespace TestNamespace
298298
await VerifyCSharpFixAsync(testCode, expectedResults, fixedTestCode, CancellationToken.None).ConfigureAwait(false);
299299
}
300300

301+
[Fact]
302+
[WorkItem(2928, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/2928")]
303+
public async Task TestMovingValueTupleAliasOutsideAsync()
304+
{
305+
var testCode = @"using System;
306+
307+
namespace MyNamespace
308+
{
309+
using QuotesRange = ValueTuple<QuoteType, DateTime, DateTime>;
310+
311+
public class QuoteType
312+
{
313+
}
314+
315+
public class UseClass
316+
{
317+
private void Test()
318+
{
319+
QuotesRange t;
320+
}
321+
}
322+
}
323+
";
324+
var fixedTestCode = @"using System;
325+
using QuotesRange = System.ValueTuple<MyNamespace.QuoteType, System.DateTime, System.DateTime>;
326+
327+
namespace MyNamespace
328+
{
329+
public class QuoteType
330+
{
331+
}
332+
333+
public class UseClass
334+
{
335+
private void Test()
336+
{
337+
QuotesRange t;
338+
}
339+
}
340+
}
341+
";
342+
343+
DiagnosticResult[] expectedResults =
344+
{
345+
Diagnostic(SA1200UsingDirectivesMustBePlacedCorrectly.DescriptorOutside).WithLocation(5, 5),
346+
};
347+
348+
await VerifyCSharpFixAsync(testCode, expectedResults, fixedTestCode, CancellationToken.None).ConfigureAwait(false);
349+
}
350+
301351
private static DiagnosticResult Diagnostic(DiagnosticDescriptor descriptor)
302352
=> StyleCopCodeFixVerifier<SA1200UsingDirectivesMustBePlacedCorrectly, UsingCodeFixProvider>.Diagnostic(descriptor);
303353

0 commit comments

Comments
 (0)