提交 b1ef7f55 编写于 作者: A Andy Gocke

Adjust upgrade project fixer to support new error code

上级 828d7fe4
...@@ -53,7 +53,7 @@ public async Task UpgradeProjectFromCSharp7_2ToCSharp8() ...@@ -53,7 +53,7 @@ public async Task UpgradeProjectFromCSharp7_2ToCSharp8()
{ {
object F = [|null!|]; object F = [|null!|];
}", }",
LanguageVersion.CSharp8, LanguageVersion.Preview,
new CSharpParseOptions(LanguageVersion.CSharp7_2)); new CSharpParseOptions(LanguageVersion.CSharp7_2));
} }
...@@ -65,7 +65,7 @@ public async Task UpgradeProjectFromCSharp7ToCSharp8() ...@@ -65,7 +65,7 @@ public async Task UpgradeProjectFromCSharp7ToCSharp8()
{ {
object F = [|null!|]; object F = [|null!|];
}", }",
LanguageVersion.CSharp8, LanguageVersion.Preview,
new CSharpParseOptions(LanguageVersion.CSharp7)); new CSharpParseOptions(LanguageVersion.CSharp7));
} }
...@@ -384,7 +384,7 @@ class C ...@@ -384,7 +384,7 @@ class C
<Project Language=""Visual Basic""> <Project Language=""Visual Basic"">
</Project> </Project>
</Workspace>", </Workspace>",
LanguageVersion.CSharp8, LanguageVersion.Preview,
parseOptions: null, parseOptions: null,
index: 1); index: 1);
} }
...@@ -450,6 +450,7 @@ void A() ...@@ -450,6 +450,7 @@ void A()
[Fact] [Fact]
public async Task ListAllSuggestions_CSharp8() public async Task ListAllSuggestions_CSharp8()
{ {
var version8 = LanguageVersion.CSharp8.ToDisplayString();
await TestExactActionSetOfferedAsync( await TestExactActionSetOfferedAsync(
@"<Workspace> @"<Workspace>
...@@ -470,10 +471,9 @@ void A() ...@@ -470,10 +471,9 @@ void A()
</Project> </Project>
</Workspace>", </Workspace>",
new[] { new[] {
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "8.0 *beta*"), string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, version8),
string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_language_version_0, "8.0 *beta*") string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_language_version_0, version8)
}); });
// https://github.com/dotnet/roslyn/issues/29819 Remove beta label once C# 8.0 is RTM
} }
[Fact] [Fact]
...@@ -531,18 +531,19 @@ void A() ...@@ -531,18 +531,19 @@ void A()
[Fact] [Fact]
public async Task OnlyOfferFixAllProjectsFromCSharp6ToDefaultWhenApplicable() public async Task OnlyOfferFixAllProjectsFromCSharp6ToDefaultWhenApplicable()
{ {
var defaultVersion = LanguageVersion.Default.MapSpecifiedToEffectiveVersion().ToDisplayString();
await TestExactActionSetOfferedAsync( await TestExactActionSetOfferedAsync(
@"<Workspace> $@"<Workspace>
<Project Language=""C#"" LanguageVersion=""6""> <Project Language=""C#"" LanguageVersion=""6"">
<Document> <Document>
class C class C
{ {{
void A() void A()
{ {{
var x = [|(1, 2)|]; #error version:[|{defaultVersion}|]
} }}
} }}
</Document> </Document>
</Project> </Project>
<Project Language=""C#"" LanguageVersion=""Default""> <Project Language=""C#"" LanguageVersion=""Default"">
...@@ -551,13 +552,15 @@ void A() ...@@ -551,13 +552,15 @@ void A()
</Project> </Project>
</Workspace>", </Workspace>",
new[] { new[] {
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "7.0"), string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, defaultVersion),
string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_language_version_0, defaultVersion)
}); });
} }
[Fact] [Fact]
public async Task OnlyOfferFixAllProjectsToCSharp8WhenApplicable() public async Task OnlyOfferFixAllProjectsToCSharp8WhenApplicable()
{ {
var previewVersion = LanguageVersion.Preview.ToDisplayString();
await TestExactActionSetOfferedAsync( await TestExactActionSetOfferedAsync(
@"<Workspace> @"<Workspace>
...@@ -575,7 +578,8 @@ class C ...@@ -575,7 +578,8 @@ class C
</Project> </Project>
</Workspace>", </Workspace>",
new[] { new[] {
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "8.0 *beta*"), string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, previewVersion),
string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_language_version_0, previewVersion)
}); });
} }
...@@ -603,8 +607,8 @@ void A() ...@@ -603,8 +607,8 @@ void A()
</Project> </Project>
</Workspace>", </Workspace>",
new[] { new[] {
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "8.0 *beta*"), string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, defaultEffectiveVersion),
string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_language_version_0, "8.0 *beta*") string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_language_version_0, defaultEffectiveVersion)
}); });
} }
......
...@@ -31,6 +31,7 @@ internal class CSharpUpgradeProjectCodeFixProvider : AbstractUpgradeProjectCodeF ...@@ -31,6 +31,7 @@ internal class CSharpUpgradeProjectCodeFixProvider : AbstractUpgradeProjectCodeF
"CS8371", // warning CS8371: Field-targeted attributes on auto-properties are not supported in language version 7.2. Please use language version 7.3 or greater. "CS8371", // warning CS8371: Field-targeted attributes on auto-properties are not supported in language version 7.2. Please use language version 7.3 or greater.
"CS8400", // error CS8400: Feature is not available in C# 8.0. Please use language version X or greater. "CS8400", // error CS8400: Feature is not available in C# 8.0. Please use language version X or greater.
"CS8401", // error CS8401: To use '@$' instead of '$@" for a verbatim interpolated string, please use language version 8.0 or greater. "CS8401", // error CS8401: To use '@$' instead of '$@" for a verbatim interpolated string, please use language version 8.0 or greater.
"CS8652", // error CS8652: The feature '' is currently in Preview and *unsupported*. To use Preview features, use the 'preview' language version.
}); });
public override string UpgradeThisProjectResource => CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0; public override string UpgradeThisProjectResource => CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0;
...@@ -41,16 +42,6 @@ public override string SuggestedVersion(ImmutableArray<Diagnostic> diagnostics) ...@@ -41,16 +42,6 @@ public override string SuggestedVersion(ImmutableArray<Diagnostic> diagnostics)
return RequiredVersion(diagnostics).ToDisplayString(); return RequiredVersion(diagnostics).ToDisplayString();
} }
public override string AddBetaIfNeeded(string version)
{
if (version == "8.0")
{
// https://github.com/dotnet/roslyn/issues/29819 Remove once C# 8.0 is RTM
return "8.0 *beta*";
}
return version;
}
private static LanguageVersion RequiredVersion(ImmutableArray<Diagnostic> diagnostics) private static LanguageVersion RequiredVersion(ImmutableArray<Diagnostic> diagnostics)
{ {
LanguageVersion max = 0; LanguageVersion max = 0;
...@@ -61,6 +52,11 @@ private static LanguageVersion RequiredVersion(ImmutableArray<Diagnostic> diagno ...@@ -61,6 +52,11 @@ private static LanguageVersion RequiredVersion(ImmutableArray<Diagnostic> diagno
{ {
max = max > required ? max : required; max = max > required ? max : required;
} }
else if (diagnostic.Id == "CS8652")
{
max = LanguageVersion.Preview;
break;
}
} }
return max; return max;
......
...@@ -19,7 +19,6 @@ internal abstract partial class AbstractUpgradeProjectCodeFixProvider : CodeFixP ...@@ -19,7 +19,6 @@ internal abstract partial class AbstractUpgradeProjectCodeFixProvider : CodeFixP
public abstract bool IsUpgrade(ParseOptions projectOptions, string newVersion); public abstract bool IsUpgrade(ParseOptions projectOptions, string newVersion);
public abstract string UpgradeThisProjectResource { get; } public abstract string UpgradeThisProjectResource { get; }
public abstract string UpgradeAllProjectsResource { get; } public abstract string UpgradeAllProjectsResource { get; }
public abstract string AddBetaIfNeeded(string version);
public override FixAllProvider GetFixAllProvider() public override FixAllProvider GetFixAllProvider()
{ {
...@@ -43,14 +42,14 @@ protected ImmutableArray<CodeAction> GetUpgradeProjectCodeActionsAsync(CodeFixCo ...@@ -43,14 +42,14 @@ protected ImmutableArray<CodeAction> GetUpgradeProjectCodeActionsAsync(CodeFixCo
var result = new List<CodeAction>(); var result = new List<CodeAction>();
var language = project.Language; var language = project.Language;
var fixOneProjectTitle = string.Format(UpgradeThisProjectResource, AddBetaIfNeeded(newVersion)); var fixOneProjectTitle = string.Format(UpgradeThisProjectResource, newVersion);
var fixOneProject = new ParseOptionsChangeAction(fixOneProjectTitle, var fixOneProject = new ParseOptionsChangeAction(fixOneProjectTitle,
_ => Task.FromResult(UpgradeProject(project, newVersion))); _ => Task.FromResult(UpgradeProject(project, newVersion)));
result.Add(fixOneProject); 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, AddBetaIfNeeded(newVersion)); var fixAllProjectsTitle = string.Format(UpgradeAllProjectsResource, newVersion);
var fixAllProjects = new ParseOptionsChangeAction(fixAllProjectsTitle, var fixAllProjects = new ParseOptionsChangeAction(fixAllProjectsTitle,
ct => Task.FromResult(UpgradeAllProjects(solution, language, newVersion, ct))); ct => Task.FromResult(UpgradeAllProjects(solution, language, newVersion, ct)));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册