未验证 提交 82c77117 编写于 作者: S Sam Harwell 提交者: GitHub

Merge pull request #23393 from sharwell/latest-version-fixer

Remove suggestion to upgrade to latest language version
......@@ -32,29 +32,13 @@ internal override (DiagnosticAnalyzer, CodeFixProvider) CreateDiagnosticProvider
var appliedChanges = ApplyOperationsAndGetSolution(workspace, operations);
var oldSolution = appliedChanges.Item1;
var newSolution = appliedChanges.Item2;
Assert.True(newSolution.Projects.Where(p => p.Language == LanguageNames.CSharp)
.All(p => ((CSharpParseOptions)p.ParseOptions).SpecifiedLanguageVersion == expected));
Assert.All(newSolution.Projects.Where(p => p.Language == LanguageNames.CSharp),
p => Assert.Equal(expected, ((CSharpParseOptions)p.ParseOptions).SpecifiedLanguageVersion));
}
await TestAsync(initialMarkup, initialMarkup, parseOptions); // no change to markup
}
[Fact]
public async Task UpgradeProjectFromCSharp6ToDefault()
{
await TestLanguageVersionUpgradedAsync(
@"
class Program
{
void A()
{
var x = [|(1, 2)|];
}
}",
LanguageVersion.Default,
new CSharpParseOptions(LanguageVersion.CSharp6));
}
[Fact]
public async Task UpgradeProjectFromCSharp6ToCSharp7()
{
......@@ -68,8 +52,7 @@ void A()
}
}",
LanguageVersion.CSharp7,
new CSharpParseOptions(LanguageVersion.CSharp6),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp6));
}
[Fact]
......@@ -85,8 +68,7 @@ void A()
}
}",
LanguageVersion.CSharp6,
new CSharpParseOptions(LanguageVersion.CSharp5),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp5));
}
[Fact]
......@@ -102,25 +84,24 @@ void A()
}
}",
LanguageVersion.CSharp5,
new CSharpParseOptions(LanguageVersion.CSharp4),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp4));
}
[Fact]
public async Task UpgradeProjectFromCSharp7ToLatest()
{
await TestLanguageVersionUpgradedAsync(
@"
$@"
class Program
{
#error version:[|7.1|]
}",
LanguageVersion.Latest,
{{
#error version:[|{LanguageVersion.Latest.MapSpecifiedToEffectiveVersion().ToDisplayString()}|]
}}",
LanguageVersion.Latest.MapSpecifiedToEffectiveVersion(),
new CSharpParseOptions(LanguageVersion.CSharp7));
}
[Fact]
public async Task UpgradeProjectFromCSharp7ToLatest_TriggeredByInferredTupleNames()
public async Task UpgradeProjectFromCSharp7To7_1_TriggeredByInferredTupleNames()
{
await TestLanguageVersionUpgradedAsync(
@"
......@@ -149,7 +130,7 @@ public ValueTuple(T1 item1, T2 item2)
}
}
",
LanguageVersion.Latest,
LanguageVersion.CSharp7_1,
new CSharpParseOptions(LanguageVersion.CSharp7));
}
......@@ -157,28 +138,15 @@ public ValueTuple(T1 item1, T2 item2)
public async Task UpgradeProjectFromCSharp7_1ToLatest()
{
await TestLanguageVersionUpgradedAsync(
@"
$@"
class Program
{
#error version:[|7.1|]
}",
LanguageVersion.Latest,
{{
#error version:[|{LanguageVersion.Latest.MapSpecifiedToEffectiveVersion().ToDisplayString()}|]
}}",
LanguageVersion.Latest.MapSpecifiedToEffectiveVersion(),
new CSharpParseOptions(LanguageVersion.CSharp7_1));
}
[Fact]
public async Task UpgradeProjectFromCSharp7_2ToLatest()
{
await TestLanguageVersionUpgradedAsync(
@"
class Program
{
#error version:[|7.2|]
}",
LanguageVersion.Latest,
new CSharpParseOptions(LanguageVersion.CSharp7_2));
}
[Fact]
public async Task UpgradeProjectFromCSharp7ToCSharp7_1()
{
......@@ -189,8 +157,7 @@ class Program
#error [|version:7.1|]
}",
LanguageVersion.CSharp7_1,
new CSharpParseOptions(LanguageVersion.CSharp7),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp7));
}
[Fact]
......@@ -206,8 +173,7 @@ void M()
}
}",
LanguageVersion.CSharp7_2,
new CSharpParseOptions(LanguageVersion.CSharp7_1),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp7_1));
}
[Fact]
......@@ -225,26 +191,25 @@ public class Program
}
",
LanguageVersion.CSharp7_1,
new CSharpParseOptions(LanguageVersion.CSharp7),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp7));
}
#region C# 7.3
#region C# 7.3
[Fact]
public async Task UpgradeProjectFromCSharp7_3ToLatest()
public async Task UpgradeProjectFromCSharp7_2ToLatest()
{
await TestLanguageVersionUpgradedAsync(
@"
$@"
class Program
{
#error version:[|7.3|]
}",
LanguageVersion.Latest,
{{
#error version:[|{LanguageVersion.Latest.MapSpecifiedToEffectiveVersion().ToDisplayString()}|]
}}",
LanguageVersion.Latest.MapSpecifiedToEffectiveVersion(),
new CSharpParseOptions(LanguageVersion.CSharp7_2));
}
[Fact]
public async Task UpgradeProjectFromCSharp7_2ToLatest_TriggeredByAttributeOnBackingField()
public async Task UpgradeProjectFromCSharp7_2To7_3_TriggeredByAttributeOnBackingField()
{
await TestLanguageVersionUpgradedAsync(
@"
......@@ -254,12 +219,12 @@ class Program
[|[field: A]|]
int P { get; set; }
}",
LanguageVersion.Latest,
LanguageVersion.CSharp7_3,
new CSharpParseOptions(LanguageVersion.CSharp7_2));
}
[Fact]
public async Task UpgradeProjectFromCSharp7_2ToLatest_EnumConstraint()
public async Task UpgradeProjectFromCSharp7_2To7_3_EnumConstraint()
{
await TestLanguageVersionUpgradedAsync(
@"public class X<T> where T : [|System.Enum|]
......@@ -267,12 +232,11 @@ public async Task UpgradeProjectFromCSharp7_2ToLatest_EnumConstraint()
}
",
LanguageVersion.CSharp7_3,
new CSharpParseOptions(LanguageVersion.CSharp7_2),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp7_2));
}
[Fact]
public async Task UpgradeProjectFromCSharp7_2ToLatest_DelegateConstraint()
public async Task UpgradeProjectFromCSharp7_2To7_3_DelegateConstraint()
{
await TestLanguageVersionUpgradedAsync(
@"public class X<T> where T : [|System.Delegate|]
......@@ -280,12 +244,11 @@ public async Task UpgradeProjectFromCSharp7_2ToLatest_DelegateConstraint()
}
",
LanguageVersion.CSharp7_3,
new CSharpParseOptions(LanguageVersion.CSharp7_2),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp7_2));
}
[Fact]
public async Task UpgradeProjectFromCSharp7_2ToLatest_MulticastDelegateConstraint()
public async Task UpgradeProjectFromCSharp7_2To7_3_MulticastDelegateConstraint()
{
await TestLanguageVersionUpgradedAsync(
@"public class X<T> where T : [|System.MulticastDelegate|]
......@@ -293,42 +256,10 @@ public async Task UpgradeProjectFromCSharp7_2ToLatest_MulticastDelegateConstrain
}
",
LanguageVersion.CSharp7_3,
new CSharpParseOptions(LanguageVersion.CSharp7_2),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp7_2));
}
#endregion C# 7.3
[Fact]
public async Task UpgradeAllProjectsToDefault()
{
await TestLanguageVersionUpgradedAsync(
@"<Workspace>
<Project Language=""C#"" LanguageVersion=""6"">
<Document>
class C
{
void A()
{
var x = [|(1, 2)|];
}
}
</Document>
</Project>
<Project Language=""C#"" LanguageVersion=""6"">
</Project>
<Project Language=""C#"" LanguageVersion=""Default"">
</Project>
<Project Language=""C#"" LanguageVersion=""7"">
</Project>
<Project Language=""Visual Basic"">
</Project>
</Workspace>",
LanguageVersion.Default,
parseOptions: null,
index: 2);
}
[Fact]
public async Task UpgradeAllProjectsToCSharp7()
{
......@@ -354,9 +285,9 @@ void A()
<Project Language=""Visual Basic"">
</Project>
</Workspace>",
LanguageVersion.Default,
LanguageVersion.CSharp7,
parseOptions: null,
index: 2);
index: 1);
}
[Fact]
......@@ -382,9 +313,7 @@ void A()
</Project>
</Workspace>",
new[] {
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "default"),
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "7.0"),
string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_language_version_0, "default"),
string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_language_version_0, "7.0")
});
}
......@@ -410,7 +339,6 @@ void A()
</Project>
</Workspace>",
new[] {
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "default"),
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "7.0")
});
}
......@@ -438,9 +366,7 @@ void A()
</Project>
</Workspace>",
new[] {
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "default"),
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "7.0"),
string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_language_version_0, "default")
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "7.0")
});
}
......@@ -467,7 +393,6 @@ void A()
</Project>
</Workspace>",
new[] {
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "default"),
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "7.0"),
string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_language_version_0, "7.0")
});
......@@ -482,8 +407,7 @@ class Test<T> where T : [|unmanaged|]
{
}",
LanguageVersion.CSharp7_3,
new CSharpParseOptions(LanguageVersion.CSharp7),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp7));
}
[Fact]
......@@ -513,8 +437,7 @@ class Test
public void M<T>() where T : [|unmanaged|] { }
}",
LanguageVersion.CSharp7_3,
new CSharpParseOptions(LanguageVersion.CSharp7),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp7));
}
[Fact]
......@@ -541,8 +464,7 @@ public async Task UpgradeProjectWithUnmanagedConstraintTo7_3_Delegate()
await TestLanguageVersionUpgradedAsync(
@"delegate void D<T>() where T : [|unmanaged|];",
LanguageVersion.CSharp7_3,
new CSharpParseOptions(LanguageVersion.CSharp7),
index: 1);
new CSharpParseOptions(LanguageVersion.CSharp7));
}
[Fact]
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Composition;
using System.Linq;
using System.Threading;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.PooledObjects;
using Microsoft.CodeAnalysis.UpgradeProject;
using Roslyn.Utilities;
......@@ -38,19 +33,9 @@ internal class CSharpUpgradeProjectCodeFixProvider : AbstractUpgradeProjectCodeF
public override string UpgradeThisProjectResource => CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0;
public override string UpgradeAllProjectsResource => CSharpFeaturesResources.Upgrade_all_csharp_projects_to_language_version_0;
public override ImmutableArray<string> SuggestedVersions(ImmutableArray<Diagnostic> diagnostics)
public override string SuggestedVersion(ImmutableArray<Diagnostic> diagnostics)
{
var required = RequiredVersion(diagnostics);
var builder = ArrayBuilder<string>.GetInstance(1);
var generic = required <= LanguageVersion.Default.MapSpecifiedToEffectiveVersion()
? LanguageVersion.Default // for all versions prior to current Default
: LanguageVersion.Latest; // for more recent versions
builder.Add(generic.ToDisplayString());
builder.Add(required.ToDisplayString()); // also suggest the specific required version
return builder.ToImmutableAndFree();
return RequiredVersion(diagnostics).ToDisplayString();
}
private static LanguageVersion RequiredVersion(ImmutableArray<Diagnostic> diagnostics)
......
......@@ -12,16 +12,20 @@
namespace Microsoft.CodeAnalysis.UpgradeProject
{
#pragma warning disable RS1016 // Code fix providers should provide FixAll support. https://github.com/dotnet/roslyn/issues/23528
internal abstract partial class AbstractUpgradeProjectCodeFixProvider : CodeFixProvider
#pragma warning restore RS1016 // Code fix providers should provide FixAll support.
{
public abstract ImmutableArray<string> SuggestedVersions(ImmutableArray<Diagnostic> diagnostics);
public abstract string SuggestedVersion(ImmutableArray<Diagnostic> diagnostics);
public abstract Solution UpgradeProject(Project project, string version);
public abstract bool IsUpgrade(ParseOptions projectOptions, string newVersion);
public abstract string UpgradeThisProjectResource { get; }
public abstract string UpgradeAllProjectsResource { get; }
public override FixAllProvider GetFixAllProvider()
{
// This code fix uses a dedicated action for fixing all instances in a solution
return null;
}
public override Task RegisterCodeFixesAsync(CodeFixContext context)
{
var diagnostics = context.Diagnostics;
......@@ -34,31 +38,23 @@ protected ImmutableArray<CodeAction> GetUpgradeProjectCodeActionsAsync(CodeFixCo
{
var project = context.Document.Project;
var solution = project.Solution;
var newVersions = SuggestedVersions(context.Diagnostics);
var newVersion = SuggestedVersion(context.Diagnostics);
var result = new List<CodeAction>();
var language = project.Language;
foreach (var newVersion in newVersions)
{
var fixOneProjectTitle = string.Format(UpgradeThisProjectResource, newVersion);
var fixOneProject = new ParseOptionsChangeAction(fixOneProjectTitle,
_ => Task.FromResult(UpgradeProject(project, newVersion)));
var fixOneProjectTitle = string.Format(UpgradeThisProjectResource, newVersion);
var fixOneProject = new ParseOptionsChangeAction(fixOneProjectTitle,
_ => Task.FromResult(UpgradeProject(project, newVersion)));
result.Add(fixOneProject);
}
foreach (var newVersion in newVersions)
result.Add(fixOneProject);
if (solution.Projects.Count(p => CanUpgrade(p, language, newVersion)) > 1)
{
if (solution.Projects.Count(p => CanUpgrade(p, language, newVersion)) > 1)
{
var fixAllProjectsTitle = string.Format(UpgradeAllProjectsResource, newVersion);
var fixAllProjectsTitle = string.Format(UpgradeAllProjectsResource, newVersion);
var fixAllProjects = new ParseOptionsChangeAction(fixAllProjectsTitle,
ct => Task.FromResult(UpgradeAllProjects(solution, language, newVersion, ct)));
var fixAllProjects = new ParseOptionsChangeAction(fixAllProjectsTitle,
ct => Task.FromResult(UpgradeAllProjects(solution, language, newVersion, ct)));
result.Add(fixAllProjects);
}
result.Add(fixAllProjects);
}
return result.AsImmutable();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册