153 lines
3.8 KiB
C#
153 lines
3.8 KiB
C#
using Roslyn.Utilities;
|
|
|
|
namespace Microsoft.CodeAnalysis.CSharp;
|
|
|
|
public static class LanguageVersionFacts
|
|
{
|
|
internal const LanguageVersion CSharpNext = LanguageVersion.Preview;
|
|
|
|
internal static LanguageVersion CurrentVersion => LanguageVersion.CSharp12;
|
|
|
|
public static string ToDisplayString(this LanguageVersion version)
|
|
{
|
|
return version switch
|
|
{
|
|
LanguageVersion.CSharp1 => "1",
|
|
LanguageVersion.CSharp2 => "2",
|
|
LanguageVersion.CSharp3 => "3",
|
|
LanguageVersion.CSharp4 => "4",
|
|
LanguageVersion.CSharp5 => "5",
|
|
LanguageVersion.CSharp6 => "6",
|
|
LanguageVersion.CSharp7 => "7.0",
|
|
LanguageVersion.CSharp7_1 => "7.1",
|
|
LanguageVersion.CSharp7_2 => "7.2",
|
|
LanguageVersion.CSharp7_3 => "7.3",
|
|
LanguageVersion.CSharp8 => "8.0",
|
|
LanguageVersion.CSharp9 => "9.0",
|
|
LanguageVersion.CSharp10 => "10.0",
|
|
LanguageVersion.CSharp11 => "11.0",
|
|
LanguageVersion.CSharp12 => "12.0",
|
|
LanguageVersion.Default => "default",
|
|
LanguageVersion.Latest => "latest",
|
|
LanguageVersion.LatestMajor => "latestmajor",
|
|
LanguageVersion.Preview => "preview",
|
|
_ => throw ExceptionUtilities.UnexpectedValue((object)version),
|
|
};
|
|
}
|
|
|
|
public static bool TryParse(string? version, out LanguageVersion result)
|
|
{
|
|
if (version == null)
|
|
{
|
|
result = LanguageVersion.Default;
|
|
return true;
|
|
}
|
|
switch (CaseInsensitiveComparison.ToLower(version))
|
|
{
|
|
case "default":
|
|
result = LanguageVersion.Default;
|
|
return true;
|
|
case "latest":
|
|
result = LanguageVersion.Latest;
|
|
return true;
|
|
case "latestmajor":
|
|
result = LanguageVersion.LatestMajor;
|
|
return true;
|
|
case "preview":
|
|
result = LanguageVersion.Preview;
|
|
return true;
|
|
case "1":
|
|
case "1.0":
|
|
case "iso-1":
|
|
result = LanguageVersion.CSharp1;
|
|
return true;
|
|
case "2":
|
|
case "2.0":
|
|
case "iso-2":
|
|
result = LanguageVersion.CSharp2;
|
|
return true;
|
|
case "3":
|
|
case "3.0":
|
|
result = LanguageVersion.CSharp3;
|
|
return true;
|
|
case "4":
|
|
case "4.0":
|
|
result = LanguageVersion.CSharp4;
|
|
return true;
|
|
case "5":
|
|
case "5.0":
|
|
result = LanguageVersion.CSharp5;
|
|
return true;
|
|
case "6":
|
|
case "6.0":
|
|
result = LanguageVersion.CSharp6;
|
|
return true;
|
|
case "7":
|
|
case "7.0":
|
|
result = LanguageVersion.CSharp7;
|
|
return true;
|
|
case "7.1":
|
|
result = LanguageVersion.CSharp7_1;
|
|
return true;
|
|
case "7.2":
|
|
result = LanguageVersion.CSharp7_2;
|
|
return true;
|
|
case "7.3":
|
|
result = LanguageVersion.CSharp7_3;
|
|
return true;
|
|
case "8":
|
|
case "8.0":
|
|
result = LanguageVersion.CSharp8;
|
|
return true;
|
|
case "9":
|
|
case "9.0":
|
|
result = LanguageVersion.CSharp9;
|
|
return true;
|
|
case "10":
|
|
case "10.0":
|
|
result = LanguageVersion.CSharp10;
|
|
return true;
|
|
case "11":
|
|
case "11.0":
|
|
result = LanguageVersion.CSharp11;
|
|
return true;
|
|
case "12":
|
|
case "12.0":
|
|
result = LanguageVersion.CSharp12;
|
|
return true;
|
|
default:
|
|
result = LanguageVersion.Default;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static LanguageVersion MapSpecifiedToEffectiveVersion(this LanguageVersion version)
|
|
{
|
|
if (version == LanguageVersion.Default || version == LanguageVersion.LatestMajor || version == LanguageVersion.Latest)
|
|
{
|
|
return LanguageVersion.CSharp12;
|
|
}
|
|
return version;
|
|
}
|
|
|
|
internal static bool DisallowInferredTupleElementNames(this LanguageVersion self)
|
|
{
|
|
return self < MessageID.IDS_FeatureInferredTupleNames.RequiredVersion();
|
|
}
|
|
|
|
internal static bool AllowNonTrailingNamedArguments(this LanguageVersion self)
|
|
{
|
|
return self >= MessageID.IDS_FeatureNonTrailingNamedArguments.RequiredVersion();
|
|
}
|
|
|
|
internal static bool AllowAttributesOnBackingFields(this LanguageVersion self)
|
|
{
|
|
return self >= MessageID.IDS_FeatureAttributesOnBackingFields.RequiredVersion();
|
|
}
|
|
|
|
internal static bool AllowImprovedOverloadCandidates(this LanguageVersion self)
|
|
{
|
|
return self >= MessageID.IDS_FeatureImprovedOverloadCandidates.RequiredVersion();
|
|
}
|
|
}
|