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

Adjust upgrade project fixer to support new error code

上级 828d7fe4
......@@ -53,7 +53,7 @@ public async Task UpgradeProjectFromCSharp7_2ToCSharp8()
{
object F = [|null!|];
}",
LanguageVersion.CSharp8,
LanguageVersion.Preview,
new CSharpParseOptions(LanguageVersion.CSharp7_2));
}
......@@ -65,7 +65,7 @@ public async Task UpgradeProjectFromCSharp7ToCSharp8()
{
object F = [|null!|];
}",
LanguageVersion.CSharp8,
LanguageVersion.Preview,
new CSharpParseOptions(LanguageVersion.CSharp7));
}
......@@ -384,7 +384,7 @@ class C
<Project Language=""Visual Basic"">
</Project>
</Workspace>",
LanguageVersion.CSharp8,
LanguageVersion.Preview,
parseOptions: null,
index: 1);
}
......@@ -450,6 +450,7 @@ void A()
[Fact]
public async Task ListAllSuggestions_CSharp8()
{
var version8 = LanguageVersion.CSharp8.ToDisplayString();
await TestExactActionSetOfferedAsync(
@"<Workspace>
......@@ -470,10 +471,9 @@ void A()
</Project>
</Workspace>",
new[] {
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "8.0 *beta*"),
string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_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, version8)
});
// https://github.com/dotnet/roslyn/issues/29819 Remove beta label once C# 8.0 is RTM
}
[Fact]
......@@ -531,18 +531,19 @@ void A()
[Fact]
public async Task OnlyOfferFixAllProjectsFromCSharp6ToDefaultWhenApplicable()
{
var defaultVersion = LanguageVersion.Default.MapSpecifiedToEffectiveVersion().ToDisplayString();
await TestExactActionSetOfferedAsync(
@"<Workspace>
$@"<Workspace>
<Project Language=""C#"" LanguageVersion=""6"">
<Document>
class C
{
{{
void A()
{
var x = [|(1, 2)|];
}
}
{{
#error version:[|{defaultVersion}|]
}}
}}
</Document>
</Project>
<Project Language=""C#"" LanguageVersion=""Default"">
......@@ -551,13 +552,15 @@ void A()
</Project>
</Workspace>",
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]
public async Task OnlyOfferFixAllProjectsToCSharp8WhenApplicable()
{
var previewVersion = LanguageVersion.Preview.ToDisplayString();
await TestExactActionSetOfferedAsync(
@"<Workspace>
......@@ -575,7 +578,8 @@ class C
</Project>
</Workspace>",
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()
</Project>
</Workspace>",
new[] {
string.Format(CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0, "8.0 *beta*"),
string.Format(CSharpFeaturesResources.Upgrade_all_csharp_projects_to_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, defaultEffectiveVersion)
});
}
......
......@@ -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.
"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.
"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;
......@@ -41,16 +42,6 @@ public override string SuggestedVersion(ImmutableArray<Diagnostic> diagnostics)
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)
{
LanguageVersion max = 0;
......@@ -61,6 +52,11 @@ private static LanguageVersion RequiredVersion(ImmutableArray<Diagnostic> diagno
{
max = max > required ? max : required;
}
else if (diagnostic.Id == "CS8652")
{
max = LanguageVersion.Preview;
break;
}
}
return max;
......
......@@ -19,7 +19,6 @@ internal abstract partial class AbstractUpgradeProjectCodeFixProvider : CodeFixP
public abstract bool IsUpgrade(ParseOptions projectOptions, string newVersion);
public abstract string UpgradeThisProjectResource { get; }
public abstract string UpgradeAllProjectsResource { get; }
public abstract string AddBetaIfNeeded(string version);
public override FixAllProvider GetFixAllProvider()
{
......@@ -43,14 +42,14 @@ protected ImmutableArray<CodeAction> GetUpgradeProjectCodeActionsAsync(CodeFixCo
var result = new List<CodeAction>();
var language = project.Language;
var fixOneProjectTitle = string.Format(UpgradeThisProjectResource, AddBetaIfNeeded(newVersion));
var fixOneProjectTitle = string.Format(UpgradeThisProjectResource, newVersion);
var fixOneProject = new ParseOptionsChangeAction(fixOneProjectTitle,
_ => Task.FromResult(UpgradeProject(project, newVersion)));
result.Add(fixOneProject);
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,
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.
先完成此消息的编辑!
想要评论请 注册