diff --git a/docs/compilers/CSharp/Compiler Breaking Changes - post VS2017.md b/docs/compilers/CSharp/Compiler Breaking Changes - post VS2017.md
index e02108a2c7f9c..f324e453a2591 100644
--- a/docs/compilers/CSharp/Compiler Breaking Changes - post VS2017.md
+++ b/docs/compilers/CSharp/Compiler Breaking Changes - post VS2017.md
@@ -6,3 +6,4 @@ In C# 7, the compiler accepted a pattern of the form `dynamic identifier`, e.g.
- https://github.com/dotnet/roslyn/issues/17674 In C# 7, the compiler accepted an assignment statement of the form `_ = M();` where M is a `void` method. The compiler now rejects that.
+- https://github.com/dotnet/roslyn/issues/17173 Before C# 7.1, `csc` would accept leading zeroes in the `/langversion` option. Now it should reject it. Example: `csc.exe source.cs /langversion:07`.
diff --git a/src/Compilers/CSharp/Portable/CSharpResources.Designer.cs b/src/Compilers/CSharp/Portable/CSharpResources.Designer.cs
index 69eb8c68614a2..b2d5452c58a30 100644
--- a/src/Compilers/CSharp/Portable/CSharpResources.Designer.cs
+++ b/src/Compilers/CSharp/Portable/CSharpResources.Designer.cs
@@ -4391,7 +4391,7 @@ internal static string ERR_FeatureIsUnimplemented {
}
///
- /// Looks up a localized string similar to Feature '{0}' is not available in C# 1. Please use language version {1} or greater..
+ /// Looks up a localized string similar to Feature '{0}' is not available in C# 1. Please use language version {1} or greater..
///
internal static string ERR_FeatureNotAvailableInVersion1 {
get {
@@ -4400,7 +4400,7 @@ internal static string ERR_FeatureNotAvailableInVersion1 {
}
///
- /// Looks up a localized string similar to Feature '{0}' is not available in C# 2. Please use language version {1} or greater..
+ /// Looks up a localized string similar to Feature '{0}' is not available in C# 2. Please use language version {1} or greater..
///
internal static string ERR_FeatureNotAvailableInVersion2 {
get {
@@ -4409,7 +4409,7 @@ internal static string ERR_FeatureNotAvailableInVersion2 {
}
///
- /// Looks up a localized string similar to Feature '{0}' is not available in C# 3. Please use language version {1} or greater..
+ /// Looks up a localized string similar to Feature '{0}' is not available in C# 3. Please use language version {1} or greater..
///
internal static string ERR_FeatureNotAvailableInVersion3 {
get {
@@ -4418,7 +4418,7 @@ internal static string ERR_FeatureNotAvailableInVersion3 {
}
///
- /// Looks up a localized string similar to Feature '{0}' is not available in C# 4. Please use language version {1} or greater..
+ /// Looks up a localized string similar to Feature '{0}' is not available in C# 4. Please use language version {1} or greater..
///
internal static string ERR_FeatureNotAvailableInVersion4 {
get {
@@ -4427,7 +4427,7 @@ internal static string ERR_FeatureNotAvailableInVersion4 {
}
///
- /// Looks up a localized string similar to Feature '{0}' is not available in C# 5. Please use language version {1} or greater..
+ /// Looks up a localized string similar to Feature '{0}' is not available in C# 5. Please use language version {1} or greater..
///
internal static string ERR_FeatureNotAvailableInVersion5 {
get {
@@ -4436,7 +4436,7 @@ internal static string ERR_FeatureNotAvailableInVersion5 {
}
///
- /// Looks up a localized string similar to Feature '{0}' is not available in C# 6. Please use language version {1} or greater..
+ /// Looks up a localized string similar to Feature '{0}' is not available in C# 6. Please use language version {1} or greater..
///
internal static string ERR_FeatureNotAvailableInVersion6 {
get {
@@ -4445,7 +4445,7 @@ internal static string ERR_FeatureNotAvailableInVersion6 {
}
///
- /// Looks up a localized string similar to Feature '{0}' is not available in C# 7. Please use language version {1} or greater..
+ /// Looks up a localized string similar to Feature '{0}' is not available in C# 7. Please use language version {1} or greater..
///
internal static string ERR_FeatureNotAvailableInVersion7 {
get {
@@ -4454,7 +4454,7 @@ internal static string ERR_FeatureNotAvailableInVersion7 {
}
///
- /// Looks up a localized string similar to Feature '{0}' is not available in C# 7.1. Please use language version {1} or greater..
+ /// Looks up a localized string similar to Feature '{0}' is not available in C# 7.1. Please use language version {1} or greater..
///
internal static string ERR_FeatureNotAvailableInVersion7_1 {
get {
@@ -5803,6 +5803,15 @@ internal static string ERR_LambdaInIsAs {
}
}
+ ///
+ /// Looks up a localized string similar to Specified language version '{0}' cannot have leading zeroes.
+ ///
+ internal static string ERR_LanguageVersionCannotHaveLeadingZeroes {
+ get {
+ return ResourceManager.GetString("ERR_LanguageVersionCannotHaveLeadingZeroes", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to { expected.
///
diff --git a/src/Compilers/CSharp/Portable/CSharpResources.resx b/src/Compilers/CSharp/Portable/CSharpResources.resx
index 2397593b97427..b97e92c32b452 100644
--- a/src/Compilers/CSharp/Portable/CSharpResources.resx
+++ b/src/Compilers/CSharp/Portable/CSharpResources.resx
@@ -4330,25 +4330,25 @@ To remove the warning, you can use /reference instead (set the Embed Interop Typ
lambda expression
- Feature '{0}' is not available in C# 1. Please use language version {1} or greater.
+ Feature '{0}' is not available in C# 1. Please use language version {1} or greater.
- Feature '{0}' is not available in C# 2. Please use language version {1} or greater.
+ Feature '{0}' is not available in C# 2. Please use language version {1} or greater.
- Feature '{0}' is not available in C# 3. Please use language version {1} or greater.
+ Feature '{0}' is not available in C# 3. Please use language version {1} or greater.
- Feature '{0}' is not available in C# 4. Please use language version {1} or greater.
+ Feature '{0}' is not available in C# 4. Please use language version {1} or greater.
- Feature '{0}' is not available in C# 5. Please use language version {1} or greater.
+ Feature '{0}' is not available in C# 5. Please use language version {1} or greater.
- Feature '{0}' is not available in C# 6. Please use language version {1} or greater.
+ Feature '{0}' is not available in C# 6. Please use language version {1} or greater.
- Feature '{0}' is not available in C# 7. Please use language version {1} or greater.
+ Feature '{0}' is not available in C# 7. Please use language version {1} or greater.
Feature '{0}' is experimental and unsupported; use '/features:{1}' to enable.
@@ -5033,7 +5033,10 @@ To remove the warning, you can use /reference instead (set the Embed Interop Typ
Invalid name for a preprocessing symbol; '{0}' is not a valid identifier
- Feature '{0}' is not available in C# 7.1. Please use language version {1} or greater.
+ Feature '{0}' is not available in C# 7.1. Please use language version {1} or greater.
+
+
+ Specified language version '{0}' cannot have leading zeroes
A value of type 'void' may not be assigned.
diff --git a/src/Compilers/CSharp/Portable/CommandLine/CSharpCommandLineParser.cs b/src/Compilers/CSharp/Portable/CommandLine/CSharpCommandLineParser.cs
index 89926ce2c350d..3c88dc8f96520 100644
--- a/src/Compilers/CSharp/Portable/CommandLine/CSharpCommandLineParser.cs
+++ b/src/Compilers/CSharp/Portable/CommandLine/CSharpCommandLineParser.cs
@@ -805,6 +805,12 @@ internal sealed override CommandLineArguments CommonParse(IEnumerable ar
{
AddDiagnostic(diagnostics, ErrorCode.ERR_SwitchNeedsString, MessageID.IDS_Text.Localize(), "/langversion:");
}
+ else if (value.StartsWith("0", StringComparison.Ordinal))
+ {
+ // This error was added in 7.1 to stop parsing versions as ints (behaviour in previous Roslyn compilers), and explicitly
+ // treat them as identifiers (behaviour in native compiler). This error helps users identify that breaking change.
+ AddDiagnostic(diagnostics, ErrorCode.ERR_LanguageVersionCannotHaveLeadingZeroes, value);
+ }
else if (!value.TryParse(out languageVersion))
{
AddDiagnostic(diagnostics, ErrorCode.ERR_BadCompatMode, value);
diff --git a/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs b/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs
index a08456975d41a..5814b2db8a06b 100644
--- a/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs
+++ b/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs
@@ -1470,5 +1470,6 @@ internal enum ErrorCode
ERR_Merge_conflict_marker_encountered = 8300,
ERR_InvalidPreprocessingSymbol = 8301,
ERR_FeatureNotAvailableInVersion7_1 = 8302,
+ ERR_LanguageVersionCannotHaveLeadingZeroes = 8303,
}
}
\ No newline at end of file
diff --git a/src/Compilers/CSharp/Portable/LanguageVersion.cs b/src/Compilers/CSharp/Portable/LanguageVersion.cs
index ee433a587f845..e57906438f3d5 100644
--- a/src/Compilers/CSharp/Portable/LanguageVersion.cs
+++ b/src/Compilers/CSharp/Portable/LanguageVersion.cs
@@ -174,7 +174,7 @@ public static string ToDisplayString(this LanguageVersion version)
}
///
- /// Parse a LanguageVersion from a string input, as the command-line compiler does.
+ /// Try parse a from a string input, returning default if input was null.
///
public static bool TryParse(this string version, out LanguageVersion result)
{
@@ -186,20 +186,49 @@ public static bool TryParse(this string version, out LanguageVersion result)
switch (version.ToLowerInvariant())
{
+ case "default":
+ result = LanguageVersion.Default;
+ return true;
+
+ case "latest":
+ result = LanguageVersion.Latest;
+ 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 "default":
- result = LanguageVersion.Default;
+ case "3":
+ case "3.0":
+ result = LanguageVersion.CSharp3;
return true;
- case "latest":
- result = LanguageVersion.Latest;
+ 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":
@@ -207,15 +236,6 @@ public static bool TryParse(this string version, out LanguageVersion result)
return true;
default:
- if (int.TryParse(version, NumberStyles.None, CultureInfo.InvariantCulture, out int versionNumber) && versionNumber <= 7)
- {
- result = (LanguageVersion)versionNumber;
- if (result.IsValid())
- {
- return true;
- }
- }
-
result = LanguageVersion.Default;
return false;
}
diff --git a/src/Compilers/CSharp/Test/CommandLine/CommandLineTests.cs b/src/Compilers/CSharp/Test/CommandLine/CommandLineTests.cs
index 6775f3a8d74fa..e757b3d184960 100644
--- a/src/Compilers/CSharp/Test/CommandLine/CommandLineTests.cs
+++ b/src/Compilers/CSharp/Test/CommandLine/CommandLineTests.cs
@@ -1188,142 +1188,115 @@ public void ArgumentParsing()
Assert.True(parsedArgs.SourceFiles.Any());
}
- [Fact]
- public void LangVersion()
- {
- LanguageVersion defaultEffectiveVersion = LanguageVersion.Default.MapSpecifiedToEffectiveVersion();
- LanguageVersion latestEffectiveVersion = LanguageVersion.Latest.MapSpecifiedToEffectiveVersion();
-
- var parsedArgs = DefaultParse(new[] { "/langversion:1", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp1, parsedArgs.ParseOptions.LanguageVersion);
-
- parsedArgs = DefaultParse(new[] { "/langversion:2", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp2, parsedArgs.ParseOptions.LanguageVersion);
-
- parsedArgs = DefaultParse(new[] { "/langversion:3", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp3, parsedArgs.ParseOptions.LanguageVersion);
-
- parsedArgs = DefaultParse(new[] { "/langversion:4", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp4, parsedArgs.ParseOptions.LanguageVersion);
-
- parsedArgs = DefaultParse(new[] { "/langversion:5", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp5, parsedArgs.ParseOptions.LanguageVersion);
-
- parsedArgs = DefaultParse(new[] { "/langversion:6", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp6, parsedArgs.ParseOptions.LanguageVersion);
-
- parsedArgs = DefaultParse(new[] { "/langversion:6", "/langversion:7", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp7, parsedArgs.ParseOptions.LanguageVersion);
-
- parsedArgs = DefaultParse(new[] { "/langversion:7", "/langversion:6", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp6, parsedArgs.ParseOptions.LanguageVersion);
+ [Theory]
+ [InlineData("iso-1", LanguageVersion.CSharp1)]
+ [InlineData("iso-2", LanguageVersion.CSharp2)]
+ [InlineData("1", LanguageVersion.CSharp1)]
+ [InlineData("1.0", LanguageVersion.CSharp1)]
+ [InlineData("2", LanguageVersion.CSharp2)]
+ [InlineData("2.0", LanguageVersion.CSharp2)]
+ [InlineData("3", LanguageVersion.CSharp3)]
+ [InlineData("3.0", LanguageVersion.CSharp3)]
+ [InlineData("4", LanguageVersion.CSharp4)]
+ [InlineData("4.0", LanguageVersion.CSharp4)]
+ [InlineData("5", LanguageVersion.CSharp5)]
+ [InlineData("5.0", LanguageVersion.CSharp5)]
+ [InlineData("6", LanguageVersion.CSharp6)]
+ [InlineData("6.0", LanguageVersion.CSharp6)]
+ [InlineData("7", LanguageVersion.CSharp7)]
+ [InlineData("7.0", LanguageVersion.CSharp7)]
+ [InlineData("7.1", LanguageVersion.CSharp7_1)]
+ public void LangVersion_CanParseCorrectVersions(string value, LanguageVersion expectedVersion)
+ {
+ var parsedArgs = DefaultParse(new[] { $"/langversion:{value}", "a.cs" }, _baseDirectory);
+ parsedArgs.Errors.Verify();
+ Assert.Equal(expectedVersion, parsedArgs.ParseOptions.LanguageVersion);
+ Assert.Equal(expectedVersion, parsedArgs.ParseOptions.SpecifiedLanguageVersion);
+ }
- parsedArgs = DefaultParse(new[] { "/langversion:7", "/langversion:1", "a.cs" }, _baseDirectory);
+ [Theory]
+ [InlineData("6", "7", LanguageVersion.CSharp7)]
+ [InlineData("7", "6", LanguageVersion.CSharp6)]
+ [InlineData("7", "1", LanguageVersion.CSharp1)]
+ [InlineData("6", "iso-1", LanguageVersion.CSharp1)]
+ [InlineData("6", "iso-2", LanguageVersion.CSharp2)]
+ [InlineData("6", "default", LanguageVersion.Default)]
+ [InlineData("7", "default", LanguageVersion.Default)]
+ [InlineData("iso-2", "6", LanguageVersion.CSharp6)]
+ public void LangVersion_LatterVersionOverridesFormerOne(string formerValue, string latterValue, LanguageVersion expectedVersion)
+ {
+ var parsedArgs = DefaultParse(new[] { $"/langversion:{formerValue}", $"/langversion:{latterValue}", "a.cs" }, _baseDirectory);
parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp1, parsedArgs.ParseOptions.LanguageVersion);
+ Assert.Equal(expectedVersion, parsedArgs.ParseOptions.SpecifiedLanguageVersion);
+ }
- parsedArgs = DefaultParse(new[] { "/langversion:7", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp7, parsedArgs.ParseOptions.LanguageVersion);
+ [Fact]
+ public void LangVersion_DefaultMapsCorrectly()
+ {
+ LanguageVersion defaultEffectiveVersion = LanguageVersion.Default.MapSpecifiedToEffectiveVersion();
+ Assert.NotEqual(defaultEffectiveVersion, LanguageVersion.Default);
- parsedArgs = DefaultParse(new[] { "/langversion:7.1", "a.cs" }, _baseDirectory);
+ var parsedArgs = DefaultParse(new[] { "/langversion:default", "a.cs" }, _baseDirectory);
parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp7_1, parsedArgs.ParseOptions.LanguageVersion);
- parsedArgs = DefaultParse(new[] { "/langversion:default", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
Assert.Equal(LanguageVersion.Default, parsedArgs.ParseOptions.SpecifiedLanguageVersion);
Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
+ }
- parsedArgs = DefaultParse(new[] { "/langversion:latest", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.Latest, parsedArgs.ParseOptions.SpecifiedLanguageVersion);
- Assert.Equal(latestEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
+ [Fact]
+ public void LangVersion_LatestMapsCorrectly()
+ {
+ LanguageVersion latestEffectiveVersion = LanguageVersion.Latest.MapSpecifiedToEffectiveVersion();
+ Assert.NotEqual(latestEffectiveVersion, LanguageVersion.Latest);
- parsedArgs = DefaultParse(new[] { "/langversion:iso-1", "a.cs" }, _baseDirectory);
+ var parsedArgs = DefaultParse(new[] { "/langversion:latest", "a.cs" }, _baseDirectory);
parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp1, parsedArgs.ParseOptions.LanguageVersion);
- parsedArgs = DefaultParse(new[] { "/langversion:iso-2", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp2, parsedArgs.ParseOptions.LanguageVersion);
+ Assert.Equal(LanguageVersion.Latest, parsedArgs.ParseOptions.SpecifiedLanguageVersion);
+ Assert.Equal(latestEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
+ }
- // default value
- parsedArgs = DefaultParse(new[] { "a.cs" }, _baseDirectory);
+ [Fact]
+ public void LangVersion_NoValueSpecified()
+ {
+ var parsedArgs = DefaultParse(new[] { "a.cs" }, _baseDirectory);
parsedArgs.Errors.Verify();
Assert.Equal(LanguageVersion.Default, parsedArgs.ParseOptions.SpecifiedLanguageVersion);
- Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
-
- // override value with iso-1
- parsedArgs = DefaultParse(new[] { "/langversion:6", "/langversion:iso-1", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp1, parsedArgs.ParseOptions.LanguageVersion);
-
- // override value with iso-2
- parsedArgs = DefaultParse(new[] { "/langversion:6", "/langversion:iso-2", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp2, parsedArgs.ParseOptions.LanguageVersion);
-
- // override value with default
- parsedArgs = DefaultParse(new[] { "/langversion:6", "/langversion:default", "a.cs" }, _baseDirectory);
- Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
- parsedArgs.Errors.Verify();
-
- // override value with default
- parsedArgs = DefaultParse(new[] { "/langversion:7", "/langversion:default", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
-
- // override value with numeric
- parsedArgs = DefaultParse(new[] { "/langversion:iso-2", "/langversion:6", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify();
- Assert.Equal(LanguageVersion.CSharp6, parsedArgs.ParseOptions.LanguageVersion);
-
- // errors
- parsedArgs = DefaultParse(new[] { "/langversion:iso-3", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify(Diagnostic(ErrorCode.ERR_BadCompatMode).WithArguments("iso-3"));
- Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
-
- parsedArgs = DefaultParse(new[] { "/langversion:iso1", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify(Diagnostic(ErrorCode.ERR_BadCompatMode).WithArguments("iso1"));
- Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
-
- parsedArgs = DefaultParse(new[] { "/langversion:0", "/langversion:7", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify(
- Diagnostic(ErrorCode.ERR_BadCompatMode).WithArguments("0"));
- Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
-
- parsedArgs = DefaultParse(new[] { "/langversion:0", "/langversion:8", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify(
- Diagnostic(ErrorCode.ERR_BadCompatMode).WithArguments("0"),
- Diagnostic(ErrorCode.ERR_BadCompatMode).WithArguments("8"));
- Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
-
- parsedArgs = DefaultParse(new[] { "/langversion:0", "/langversion:1000", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify(
- Diagnostic(ErrorCode.ERR_BadCompatMode).WithArguments("0"),
- Diagnostic(ErrorCode.ERR_BadCompatMode).WithArguments("1000"));
- Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
+ }
- parsedArgs = DefaultParse(new[] { "/langversion", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify(Diagnostic(ErrorCode.ERR_SwitchNeedsString).WithArguments("", "/langversion:"));
- Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
+ [Theory]
+ [InlineData("iso-3")]
+ [InlineData("iso1")]
+ [InlineData("8")]
+ [InlineData("1000")]
+ public void LangVersion_BadVersion(string value)
+ {
+ DefaultParse(new[] { $"/langversion:{value}", "a.cs" }, _baseDirectory).Errors.Verify(
+ // error CS1617: Invalid option 'XXX' for /langversion; must be ISO-1, ISO-2, Default, Latest or a valid version in range 1 to 7.1.
+ Diagnostic(ErrorCode.ERR_BadCompatMode).WithArguments(value).WithLocation(1, 1));
+ }
- parsedArgs = DefaultParse(new[] { "/LANGversion:", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify(Diagnostic(ErrorCode.ERR_SwitchNeedsString).WithArguments("", "/langversion:"));
- Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
+ [Theory]
+ [InlineData("0")]
+ [InlineData("05")]
+ [InlineData("07")]
+ [InlineData("07.1")]
+ public void LangVersion_LeadingZeroes(string value)
+ {
+ DefaultParse(new[] { $"/langversion:{value}", "a.cs" }, _baseDirectory).Errors.Verify(
+ // error CS8303: Specified language version 'XXX' cannot have leading zeroes
+ Diagnostic(ErrorCode.ERR_LanguageVersionCannotHaveLeadingZeroes).WithArguments(value).WithLocation(1, 1));
+ }
- parsedArgs = DefaultParse(new[] { "/langversion: ", "a.cs" }, _baseDirectory);
- parsedArgs.Errors.Verify(Diagnostic(ErrorCode.ERR_SwitchNeedsString).WithArguments("", "/langversion:"));
- Assert.Equal(defaultEffectiveVersion, parsedArgs.ParseOptions.LanguageVersion);
+ [Theory]
+ [InlineData("/langversion")]
+ [InlineData("/langversion:")]
+ [InlineData("/LANGversion:")]
+ public void LangVersion_NoVersion(string option)
+ {
+ DefaultParse(new[] { option, "a.cs" }, _baseDirectory).Errors.Verify(
+ // error CS2006: Command-line syntax error: Missing '' for '/langversion:' option
+ Diagnostic(ErrorCode.ERR_SwitchNeedsString).WithArguments("", "/langversion:").WithLocation(1, 1));
}
[Fact]
@@ -1346,6 +1319,28 @@ public void LanguageVersion_DisplayString()
// For minor versions, the format should be "x.y", such as "7.1"
}
+ [Fact]
+ public void LanguageVersion_GetErrorCode()
+ {
+ var versions = Enum.GetValues(typeof(LanguageVersion))
+ .Cast()
+ .Except(new[] { LanguageVersion.Default, LanguageVersion.Latest })
+ .Select(v => v.GetErrorCode());
+
+ var errorCodes = new[] {
+ ErrorCode.ERR_FeatureNotAvailableInVersion1,
+ ErrorCode.ERR_FeatureNotAvailableInVersion2,
+ ErrorCode.ERR_FeatureNotAvailableInVersion3,
+ ErrorCode.ERR_FeatureNotAvailableInVersion4,
+ ErrorCode.ERR_FeatureNotAvailableInVersion5,
+ ErrorCode.ERR_FeatureNotAvailableInVersion6,
+ ErrorCode.ERR_FeatureNotAvailableInVersion7,
+ ErrorCode.ERR_FeatureNotAvailableInVersion7_1
+ };
+
+ AssertEx.SetEqual(versions, errorCodes);
+ }
+
[Fact]
public void LanguageVersion_MapSpecifiedToEffectiveVersion()
{
@@ -1356,6 +1351,8 @@ public void LanguageVersion_MapSpecifiedToEffectiveVersion()
Assert.Equal(LanguageVersion.CSharp5, LanguageVersion.CSharp5.MapSpecifiedToEffectiveVersion());
Assert.Equal(LanguageVersion.CSharp6, LanguageVersion.CSharp6.MapSpecifiedToEffectiveVersion());
Assert.Equal(LanguageVersion.CSharp7, LanguageVersion.CSharp7.MapSpecifiedToEffectiveVersion());
+ Assert.Equal(LanguageVersion.CSharp7_1, LanguageVersion.CSharp7_1.MapSpecifiedToEffectiveVersion());
+
Assert.Equal(LanguageVersion.CSharp7, LanguageVersion.Default.MapSpecifiedToEffectiveVersion());
Assert.Equal(LanguageVersion.CSharp7_1, LanguageVersion.Latest.MapSpecifiedToEffectiveVersion());
@@ -1368,15 +1365,23 @@ public void LanguageVersion_MapSpecifiedToEffectiveVersion()
InlineData("ISO-1", true, LanguageVersion.CSharp1),
InlineData("iso-2", true, LanguageVersion.CSharp2),
InlineData("1", true, LanguageVersion.CSharp1),
+ InlineData("1.0", true, LanguageVersion.CSharp1),
InlineData("2", true, LanguageVersion.CSharp2),
+ InlineData("2.0", true, LanguageVersion.CSharp2),
InlineData("3", true, LanguageVersion.CSharp3),
+ InlineData("3.0", true, LanguageVersion.CSharp3),
InlineData("4", true, LanguageVersion.CSharp4),
+ InlineData("4.0", true, LanguageVersion.CSharp4),
InlineData("5", true, LanguageVersion.CSharp5),
- InlineData("05", true, LanguageVersion.CSharp5),
+ InlineData("5.0", true, LanguageVersion.CSharp5),
+ InlineData("05", false, LanguageVersion.Default),
InlineData("6", true, LanguageVersion.CSharp6),
+ InlineData("6.0", true, LanguageVersion.CSharp6),
InlineData("7", true, LanguageVersion.CSharp7),
- InlineData("07", true, LanguageVersion.CSharp7),
+ InlineData("7.0", true, LanguageVersion.CSharp7),
+ InlineData("07", false, LanguageVersion.Default),
InlineData("7.1", true, LanguageVersion.CSharp7_1),
+ InlineData("07.1", false, LanguageVersion.Default),
InlineData("default", true, LanguageVersion.Default),
InlineData("latest", true, LanguageVersion.Latest),
InlineData(null, true, LanguageVersion.Default),
diff --git a/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenDeconstructTests.cs b/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenDeconstructTests.cs
index 7b7b2109d6a01..9af74eec1cdb4 100644
--- a/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenDeconstructTests.cs
+++ b/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenDeconstructTests.cs
@@ -4183,10 +4183,10 @@ public void DeconstructionInCSharp6Script()
var comp = CreateCompilationWithMscorlib45(source, parseOptions: TestOptions.Script.WithLanguageVersion(LanguageVersion.CSharp6), options: TestOptions.DebugExe, references: s_valueTupleRefs);
comp.VerifyDiagnostics(
- // (2,5): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (2,5): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// var (x, y) = (1, 2);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(x, y)").WithArguments("tuples", "7").WithLocation(2, 5),
- // (2,14): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (2,14): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// var (x, y) = (1, 2);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(1, 2)").WithArguments("tuples", "7").WithLocation(2, 14)
);
@@ -5193,7 +5193,7 @@ static void Ok()
";
var comp = CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular6);
comp.VerifyDiagnostics(
- // (6,9): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (6,9): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// _ = M();
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "_").WithArguments("tuples", "7").WithLocation(6, 9)
);
@@ -5230,37 +5230,37 @@ static void M(out int x)
";
var comp = CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular6, references: s_valueTupleRefs);
comp.VerifyDiagnostics(
- // (6,9): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (6,9): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// (_, var _, int _) = (1, 2, 3);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(_, var _, int _)").WithArguments("tuples", "7").WithLocation(6, 9),
- // (6,29): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (6,29): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// (_, var _, int _) = (1, 2, 3);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(1, 2, 3)").WithArguments("tuples", "7").WithLocation(6, 29),
- // (7,13): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (7,13): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// var (_, _) = (1, 2);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(_, _)").WithArguments("tuples", "7").WithLocation(7, 13),
- // (7,22): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (7,22): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// var (_, _) = (1, 2);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(1, 2)").WithArguments("tuples", "7").WithLocation(7, 22),
- // (8,18): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
+ // (8,18): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
// bool b = 3 is int _;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "3 is int _").WithArguments("pattern matching", "7").WithLocation(8, 18),
- // (16,13): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
+ // (16,13): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
// case int _:
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "case int _:").WithArguments("pattern matching", "7").WithLocation(16, 13),
- // (19,19): error CS8059: Feature 'out variable declaration' is not available in C# 6. Please use language version 7 or greater.
+ // (19,19): error CS8059: Feature 'out variable declaration' is not available in C# 6. Please use language version 7 or greater.
// M(out var _);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "_").WithArguments("out variable declaration", "7").WithLocation(19, 19),
- // (20,19): error CS8059: Feature 'out variable declaration' is not available in C# 6. Please use language version 7 or greater.
+ // (20,19): error CS8059: Feature 'out variable declaration' is not available in C# 6. Please use language version 7 or greater.
// M(out int _);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "_").WithArguments("out variable declaration", "7").WithLocation(20, 19),
- // (6,10): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (6,10): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// (_, var _, int _) = (1, 2, 3);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "_").WithArguments("tuples", "7").WithLocation(6, 10),
// (11,18): error CS0103: The name '_' does not exist in the current context
// case _: // not a discard
Diagnostic(ErrorCode.ERR_NameNotInContext, "_").WithArguments("_").WithLocation(11, 18),
- // (21,15): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (21,15): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// M(out _);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "_").WithArguments("tuples", "7").WithLocation(21, 15),
// (12,17): warning CS0162: Unreachable code detected
diff --git a/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenExprLambdaTests.cs b/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenExprLambdaTests.cs
index 16d7da2dfd2ae..8808db84a476e 100644
--- a/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenExprLambdaTests.cs
+++ b/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenExprLambdaTests.cs
@@ -3652,7 +3652,7 @@ namespace global::((System.Linq.Expressions.Expression>)(() => B
// (2,19): error CS1001: Identifier expected
// namespace global::((System.Linq.Expressions.Expression>)(() => B )).Compile()(){}
Diagnostic(ErrorCode.ERR_IdentifierExpected, "(").WithLocation(2, 19),
- // (2,20): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (2,20): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// namespace global::((System.Linq.Expressions.Expression>)(() => B )).Compile()(){}
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(System.Linq.Expressions.Expression>)").WithArguments("tuples", "7").WithLocation(2, 20),
// (2,76): error CS1026: ) expected
@@ -3676,7 +3676,7 @@ namespace global::((System.Linq.Expressions.Expression>)(() => B
// (2,93): error CS1002: ; expected
// namespace global::((System.Linq.Expressions.Expression>)(() => B )).Compile()(){}
Diagnostic(ErrorCode.ERR_SemicolonExpected, "(").WithLocation(2, 93),
- // (2,93): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (2,93): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// namespace global::((System.Linq.Expressions.Expression>)(() => B )).Compile()(){}
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "()").WithArguments("tuples", "7").WithLocation(2, 93),
// (2,94): error CS8124: Tuple must contain at least two elements.
diff --git a/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenRefLocalTests.cs b/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenRefLocalTests.cs
index 258b8a84a62de..67235ff02b6cd 100644
--- a/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenRefLocalTests.cs
+++ b/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenRefLocalTests.cs
@@ -1591,10 +1591,10 @@ static void M()
";
var comp = CreateCompilationWithMscorlib(text, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp6));
comp.VerifyDiagnostics(
- // (6,9): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (6,9): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// ref int rl = ref (new int[1])[0];
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref int").WithArguments("byref locals and returns", "7").WithLocation(6, 9),
- // (6,22): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (6,22): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// ref int rl = ref (new int[1])[0];
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref").WithArguments("byref locals and returns", "7").WithLocation(6, 22)
);
diff --git a/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenRefReturnTests.cs b/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenRefReturnTests.cs
index 3956e8553b1a2..45746d25fc0e6 100644
--- a/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenRefReturnTests.cs
+++ b/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenRefReturnTests.cs
@@ -2262,10 +2262,10 @@ static ref int M()
var comp = CreateCompilationWithMscorlib(text, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp6));
comp.VerifyDiagnostics(
- // (4,12): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (4,12): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// static ref int M()
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref int").WithArguments("byref locals and returns", "7").WithLocation(4, 12),
- // (6,16): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (6,16): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// return ref (new int[1])[0];
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref").WithArguments("byref locals and returns", "7").WithLocation(6, 16)
);
@@ -2297,34 +2297,34 @@ ref int N()
";
var comp = CreateCompilationWithMscorlib(text, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp6));
comp.VerifyDiagnostics(
- // (4,12): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (4,12): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// static ref int M()
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref int").WithArguments("byref locals and returns", "7").WithLocation(4, 12),
- // (8,9): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (8,9): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// ref int N()
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref int").WithArguments("byref locals and returns", "7").WithLocation(8, 9),
- // (8,17): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
+ // (8,17): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
// ref int N()
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "N").WithArguments("local functions", "7").WithLocation(8, 17),
- // (10,13): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (10,13): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// ref int NN(ref int arg) => ref arg;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref int").WithArguments("byref locals and returns", "7").WithLocation(10, 13),
- // (10,21): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
+ // (10,21): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
// ref int NN(ref int arg) => ref arg;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "NN").WithArguments("local functions", "7").WithLocation(10, 21),
- // (10,40): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (10,40): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// ref int NN(ref int arg) => ref arg;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref").WithArguments("byref locals and returns", "7").WithLocation(10, 40),
- // (12,13): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (12,13): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// ref var r = ref NN(ref arr[0]);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref var").WithArguments("byref locals and returns", "7").WithLocation(12, 13),
- // (12,25): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (12,25): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// ref var r = ref NN(ref arr[0]);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref").WithArguments("byref locals and returns", "7").WithLocation(12, 25),
- // (15,20): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (15,20): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// return ref r;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref").WithArguments("byref locals and returns", "7").WithLocation(15, 20),
- // (18,16): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (18,16): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// return ref N();
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref").WithArguments("byref locals and returns", "7").WithLocation(18, 16)
);
@@ -2339,7 +2339,7 @@ public void RefDelegate_CSharp6()
var comp = CreateCompilationWithMscorlib(text, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp6));
comp.VerifyDiagnostics(
- // (2,10): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (2,10): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// delegate ref int D();
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref int").WithArguments("byref locals and returns", "7").WithLocation(2, 10)
);
@@ -2360,10 +2360,10 @@ static int M(ref int d)
var comp = CreateCompilationWithMscorlib(text, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp6));
comp.VerifyDiagnostics(
- // (6,14): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (6,14): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// for (ref int a = ref d; ;) { }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref int").WithArguments("byref locals and returns", "7").WithLocation(6, 14),
- // (6,26): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (6,26): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// for (ref int a = ref d; ;) { }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref").WithArguments("byref locals and returns", "7").WithLocation(6, 26)
);
@@ -2390,13 +2390,13 @@ static void M()
var comp = CreateCompilationWithMscorlib(text, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp6));
comp.VerifyDiagnostics(
- // (2,10): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (2,10): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// delegate ref int D(int x);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref int").WithArguments("byref locals and returns", "7").WithLocation(2, 10),
- // (11,19): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (11,19): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// MD((x) => ref i);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref").WithArguments("byref locals and returns", "7").WithLocation(11, 19),
- // (12,17): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (12,17): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// MD(x => ref i);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref").WithArguments("byref locals and returns", "7").WithLocation(12, 17)
);
diff --git a/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenTupleTest.cs b/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenTupleTest.cs
index f7387c4b2a074..52e573a6b45d4 100644
--- a/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenTupleTest.cs
+++ b/src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenTupleTest.cs
@@ -9209,10 +9209,10 @@ static void Main()
var comp = CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular6);
comp.VerifyDiagnostics(
- // (6,9): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (6,9): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// (int, int) x = (1, 1);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(int, int)").WithArguments("tuples", "7").WithLocation(6, 9),
- // (6,24): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (6,24): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// (int, int) x = (1, 1);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(1, 1)").WithArguments("tuples", "7").WithLocation(6, 24),
// (8,36): error CS1519: Invalid token '}' in class, struct, or interface member declaration
diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/ConstantTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/ConstantTests.cs
index 0a0d871653920..f3d9e71ae3f55 100644
--- a/src/Compilers/CSharp/Test/Semantic/Semantics/ConstantTests.cs
+++ b/src/Compilers/CSharp/Test/Semantic/Semantics/ConstantTests.cs
@@ -2839,7 +2839,7 @@ static void Main(string[] args)
}
";
CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp6)).VerifyDiagnostics(
- // (6,14): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
+ // (6,14): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
// void f() { if () const int i = 0; }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "f").WithArguments("local functions", "7").WithLocation(6, 14),
// (6,24): error CS1525: Invalid expression term ')'
diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/DeconstructionTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/DeconstructionTests.cs
index ea6e205c84736..4b4b5b715145d 100644
--- a/src/Compilers/CSharp/Test/Semantic/Semantics/DeconstructionTests.cs
+++ b/src/Compilers/CSharp/Test/Semantic/Semantics/DeconstructionTests.cs
@@ -1323,16 +1323,16 @@ static void Main()
var comp = CreateCompilationWithMscorlib(source, references: new[] { ValueTupleRef, SystemRuntimeFacadeRef }, parseOptions: TestOptions.Regular6);
comp.VerifyDiagnostics(
- // (6,13): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (6,13): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// var (x1, x2) = Pair.Create(1, 2);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(x1, x2)").WithArguments("tuples", "7").WithLocation(6, 13),
- // (7,9): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (7,9): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// (int x3, int x4) = Pair.Create(1, 2);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(int x3, int x4)").WithArguments("tuples", "7").WithLocation(7, 9),
- // (8,18): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (8,18): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// foreach ((int x5, var (x6, x7)) in new[] { Pair.Create(1, Pair.Create(2, 3)) }) { }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(int x5, var (x6, x7))").WithArguments("tuples", "7").WithLocation(8, 18),
- // (9,14): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (9,14): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// for ((int x8, var (x9, x10)) = Pair.Create(1, Pair.Create(2, 3)); ; ) { }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(int x8, var (x9, x10))").WithArguments("tuples", "7").WithLocation(9, 14)
);
diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/ExpressionBodiedMemberTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/ExpressionBodiedMemberTests.cs
index e4565992e0fe8..138fb701587ae 100644
--- a/src/Compilers/CSharp/Test/Semantic/Semantics/ExpressionBodiedMemberTests.cs
+++ b/src/Compilers/CSharp/Test/Semantic/Semantics/ExpressionBodiedMemberTests.cs
@@ -1038,13 +1038,13 @@ public class C
";
CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular).VerifyDiagnostics();
CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular6).VerifyDiagnostics(
- // (5,9): error CS8059: Feature 'expression body constructor and destructor' is not available in C# 6. Please use language version 7 or greater.
+ // (5,9): error CS8059: Feature 'expression body constructor and destructor' is not available in C# 6. Please use language version 7 or greater.
// C() => Console.WriteLine(1);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "=> Console.WriteLine(1)").WithArguments("expression body constructor and destructor", "7").WithLocation(5, 9),
- // (6,10): error CS8059: Feature 'expression body constructor and destructor' is not available in C# 6. Please use language version 7 or greater.
+ // (6,10): error CS8059: Feature 'expression body constructor and destructor' is not available in C# 6. Please use language version 7 or greater.
// ~C() => Console.WriteLine(2);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "=> Console.WriteLine(2)").WithArguments("expression body constructor and destructor", "7").WithLocation(6, 10),
- // (7,17): error CS8059: Feature 'expression body property accessor' is not available in C# 6. Please use language version 7 or greater.
+ // (7,17): error CS8059: Feature 'expression body property accessor' is not available in C# 6. Please use language version 7 or greater.
// int P { set => Console.WriteLine(value); }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "=> Console.WriteLine(value)").WithArguments("expression body property accessor", "7").WithLocation(7, 17)
);
diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/ImplicitlyTypedLocalsTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/ImplicitlyTypedLocalsTests.cs
index 37d3169238f4d..2c9f280e833ad 100644
--- a/src/Compilers/CSharp/Test/Semantic/Semantics/ImplicitlyTypedLocalsTests.cs
+++ b/src/Compilers/CSharp/Test/Semantic/Semantics/ImplicitlyTypedLocalsTests.cs
@@ -147,7 +147,7 @@ void M()
CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp3)).VerifyDiagnostics();
CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp2)).VerifyDiagnostics(
- // (6,9): error CS8023: Feature 'implicitly typed local variable' is not available in C# 2. Please use language version 3 or greater.
+ // (6,9): error CS8023: Feature 'implicitly typed local variable' is not available in C# 2. Please use language version 3 or greater.
// var v = 1;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "var").WithArguments("implicitly typed local variable", "3"));
}
diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/LocalFunctionTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/LocalFunctionTests.cs
index 38149cff2cfb5..f120d69008f4a 100644
--- a/src/Compilers/CSharp/Test/Semantic/Semantics/LocalFunctionTests.cs
+++ b/src/Compilers/CSharp/Test/Semantic/Semantics/LocalFunctionTests.cs
@@ -2168,7 +2168,7 @@ void Local() { }
";
var option = TestOptions.ReleaseExe;
CreateCompilationWithMscorlib(source, options: option, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp6)).VerifyDiagnostics(
- // (6,14): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
+ // (6,14): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
// void Local() { }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "Local").WithArguments("local functions", "7").WithLocation(6, 14)
);
diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/NameOfTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/NameOfTests.cs
index f25c1b5f18e08..e9e401273ccb0 100644
--- a/src/Compilers/CSharp/Test/Semantic/Semantics/NameOfTests.cs
+++ b/src/Compilers/CSharp/Test/Semantic/Semantics/NameOfTests.cs
@@ -541,7 +541,7 @@ class Program
", parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp5));
comp.VerifyDiagnostics(
- // (4,24): error CS8026: Feature 'nameof operator' is not available in C# 5. Please use language version 6 or greater.
+ // (4,24): error CS8026: Feature 'nameof operator' is not available in C# 5. Please use language version 6 or greater.
// Program(string s = nameof(Program))
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "nameof(Program)").WithArguments("nameof operator", "6").WithLocation(4, 24)
);
@@ -679,7 +679,7 @@ static void Main(string[] args)
source,
options: TestOptions.DebugExe,
parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp5)).VerifyDiagnostics(
- // (7,9): error CS8026: Feature 'nameof operator' is not available in C# 5. Please use language version 6 or greater.
+ // (7,9): error CS8026: Feature 'nameof operator' is not available in C# 5. Please use language version 6 or greater.
// nameof(N);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "nameof(N)").WithArguments("nameof operator", "6").WithLocation(7, 9),
// (7,9): error CS0201: Only assignment, call, increment, decrement, and new object expressions can be used as a statement
diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/OutVarTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/OutVarTests.cs
index 9b974b80d4368..9054b0b650b5f 100644
--- a/src/Compilers/CSharp/Test/Semantic/Semantics/OutVarTests.cs
+++ b/src/Compilers/CSharp/Test/Semantic/Semantics/OutVarTests.cs
@@ -41,7 +41,7 @@ static void Test2(object x, int y)
}";
var compilation = CreateCompilationWithMscorlib(text, options: TestOptions.ReleaseExe, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp6));
compilation.VerifyDiagnostics(
- // (6,29): error CS8059: Feature 'out variable declaration' is not available in C# 6. Please use language version 7 or greater.
+ // (6,29): error CS8059: Feature 'out variable declaration' is not available in C# 6. Please use language version 7 or greater.
// Test2(Test1(out int x1), x1);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "x1").WithArguments("out variable declaration", "7").WithLocation(6, 29)
);
@@ -74,10 +74,10 @@ public static void Test2()
}";
var compilation = CreateCompilationWithMscorlib(text, options: TestOptions.ReleaseDll, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp6));
compilation.VerifyDiagnostics(
- // (6,22): error CS8059: Feature 'out variable declaration' is not available in C# 6. Please use language version 7 or greater.
+ // (6,22): error CS8059: Feature 'out variable declaration' is not available in C# 6. Please use language version 7 or greater.
// Test(out int x1);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "x1").WithArguments("out variable declaration", "7").WithLocation(6, 22),
- // (11,33): error CS8059: Feature 'out variable declaration' is not available in C# 6. Please use language version 7 or greater.
+ // (11,33): error CS8059: Feature 'out variable declaration' is not available in C# 6. Please use language version 7 or greater.
// var x = new Cls(out int x2);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "x2").WithArguments("out variable declaration", "7").WithLocation(11, 33),
// (6,9): error CS0103: The name 'Test' does not exist in the current context
diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/PatternMatchingTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/PatternMatchingTests.cs
index f73c422c4800c..e46f4d17d6d89 100644
--- a/src/Compilers/CSharp/Test/Semantic/Semantics/PatternMatchingTests.cs
+++ b/src/Compilers/CSharp/Test/Semantic/Semantics/PatternMatchingTests.cs
@@ -44,22 +44,22 @@ public Vec(int x) {}
}
";
CreateCompilationWithMscorlib45(source, options: TestOptions.DebugExe, parseOptions: TestOptions.Regular6).VerifyDiagnostics(
- // (7,18): error CS8059: Feature 'binary literals' is not available in C# 6. Please use language version 7 or greater.
+ // (7,18): error CS8059: Feature 'binary literals' is not available in C# 6. Please use language version 7 or greater.
// int i1 = 0b001010; // binary literals
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "").WithArguments("binary literals", "7").WithLocation(7, 18),
- // (8,18): error CS8059: Feature 'digit separators' is not available in C# 6. Please use language version 7 or greater.
+ // (8,18): error CS8059: Feature 'digit separators' is not available in C# 6. Please use language version 7 or greater.
// int i2 = 23_554; // digit separators
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "").WithArguments("digit separators", "7").WithLocation(8, 18),
- // (12,13): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
+ // (12,13): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
// int f() => 2;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "f").WithArguments("local functions", "7").WithLocation(12, 13),
- // (13,9): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (13,9): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// ref int i3 = ref i1; // ref locals
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref int").WithArguments("byref locals and returns", "7").WithLocation(13, 9),
- // (13,22): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
+ // (13,22): error CS8059: Feature 'byref locals and returns' is not available in C# 6. Please use language version 7 or greater.
// ref int i3 = ref i1; // ref locals
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "ref").WithArguments("byref locals and returns", "7").WithLocation(13, 22),
- // (14,20): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
+ // (14,20): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
// string s = o is string k ? k : null; // pattern matching
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "o is string k").WithArguments("pattern matching", "7").WithLocation(14, 20),
// (12,13): warning CS0168: The variable 'f' is declared but never used
@@ -3398,7 +3398,7 @@ public static void Main(string[] args)
}";
var compilation = CreateCompilationWithMscorlib45(source, options: TestOptions.DebugExe, parseOptions: TestOptions.Regular6);
compilation.VerifyDiagnostics(
- // (7,13): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
+ // (7,13): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
// case 1 when true:
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "case 1 when true:").WithArguments("pattern matching", "7").WithLocation(7, 13)
);
@@ -4103,10 +4103,10 @@ class B
";
var compilation = CreateCompilationWithMscorlib45(source, options: TestOptions.DebugExe,
parseOptions: TestOptions.Regular6).VerifyDiagnostics(
- // (15,27): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
+ // (15,27): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
// Console.WriteLine(3 is One + 2); // should print True
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "3 is One + 2").WithArguments("pattern matching", "7").WithLocation(15, 27),
- // (16,27): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
+ // (16,27): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
// Console.WriteLine(One + 2 is 3); // should print True
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "One + 2 is 3").WithArguments("pattern matching", "7").WithLocation(16, 27)
);
diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/PatternSwitchTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/PatternSwitchTests.cs
index 6b042ff68548c..5b9e6a3bf9a04 100644
--- a/src/Compilers/CSharp/Test/Semantic/Semantics/PatternSwitchTests.cs
+++ b/src/Compilers/CSharp/Test/Semantic/Semantics/PatternSwitchTests.cs
@@ -787,7 +787,7 @@ public static void Main()
}
}";
CreateCompilationWithMscorlib45(source, options: TestOptions.DebugExe, parseOptions: TestOptions.Regular6).VerifyDiagnostics(
- // (18,13): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
+ // (18,13): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
// case Color x when false:
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "case Color x when false:").WithArguments("pattern matching", "7").WithLocation(18, 13),
// (11,17): warning CS0469: The 'goto case' value is not implicitly convertible to type 'Color'
diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/SemanticErrorTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/SemanticErrorTests.cs
index 990f1e17474fa..5e29e5833ff15 100644
--- a/src/Compilers/CSharp/Test/Semantic/Semantics/SemanticErrorTests.cs
+++ b/src/Compilers/CSharp/Test/Semantic/Semantics/SemanticErrorTests.cs
@@ -22801,7 +22801,7 @@ static void Main(string[] args)
}
";
CreateCompilationWithMscorlib(text, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp5)).VerifyDiagnostics(
- // (14,18): error CS8026: Feature 'null propagation operator' is not available in C# 5. Please use language version 6 or greater.
+ // (14,18): error CS8026: Feature 'null propagation operator' is not available in C# 5. Please use language version 6 or greater.
// var x1 = p.P1 ?.ToString;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "p.P1 ?.ToString").WithArguments("null propagating operator", "6").WithLocation(14, 18),
// (14,23): error CS0023: Operator '?' cannot be applied to operand of type 'method group'
@@ -23209,7 +23209,7 @@ static void Main()
CreateCompilationWithMscorlib45(text,
new[] { SystemRef_v4_0_30319_17929, SystemCoreRef_v4_0_30319_17929, CSharpRef },
parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp5)).VerifyDiagnostics(
- // (8,46): error CS8026: Feature 'dictionary initializer' is not available in C# 5. Please use language version 6 or greater.
+ // (8,46): error CS8026: Feature 'dictionary initializer' is not available in C# 5. Please use language version 6 or greater.
// var s = new Dictionary () {[1] = 2};
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "[1] = 2").WithArguments("dictionary initializer", "6").WithLocation(8, 46)
);
diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/SwitchTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/SwitchTests.cs
index 03819875558f1..cb1c539beb445 100644
--- a/src/Compilers/CSharp/Test/Semantic/Semantics/SwitchTests.cs
+++ b/src/Compilers/CSharp/Test/Semantic/Semantics/SwitchTests.cs
@@ -3009,7 +3009,7 @@ void M(bool b)
CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp2)).VerifyDiagnostics();
CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp1)).VerifyDiagnostics(
- // (6,16): error CS8022: Feature 'switch on boolean type' is not available in C# 1. Please use language version 2 or greater.
+ // (6,16): error CS8022: Feature 'switch on boolean type' is not available in C# 1. Please use language version 2 or greater.
// switch(b)
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion1, "b").WithArguments("switch on boolean type", "2"));
}
diff --git a/src/Compilers/CSharp/Test/Symbol/Compilation/CompilationAPITests.cs b/src/Compilers/CSharp/Test/Symbol/Compilation/CompilationAPITests.cs
index 17fead85a8428..542287f1be9a1 100644
--- a/src/Compilers/CSharp/Test/Symbol/Compilation/CompilationAPITests.cs
+++ b/src/Compilers/CSharp/Test/Symbol/Compilation/CompilationAPITests.cs
@@ -604,7 +604,7 @@ public void MetadataReferenceWithInvalidAliasWithCSharp6()
// (1,19): error CS1002: ; expected
// extern alias Alias(*#$@^%*&); class D : Alias(*#$@^%*&).C {}
Diagnostic(ErrorCode.ERR_SemicolonExpected, "(").WithLocation(1, 19),
- // (1,19): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (1,19): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// extern alias Alias(*#$@^%*&); class D : Alias(*#$@^%*&).C {}
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(*#$@^%*&); class D : Alias(*#$@^%*&).C {}").WithArguments("tuples", "7").WithLocation(1, 19),
// (1,20): error CS1031: Type expected
diff --git a/src/Compilers/CSharp/Test/Symbol/Symbols/Source/FieldTests.cs b/src/Compilers/CSharp/Test/Symbol/Symbols/Source/FieldTests.cs
index 79553256444ac..6fce00f4bca16 100644
--- a/src/Compilers/CSharp/Test/Symbol/Symbols/Source/FieldTests.cs
+++ b/src/Compilers/CSharp/Test/Symbol/Symbols/Source/FieldTests.cs
@@ -360,7 +360,7 @@ protected virtual void Finalize const () { }
// (5,37): error CS1002: ; expected
// protected virtual void Finalize const () { }
Diagnostic(ErrorCode.ERR_SemicolonExpected, "const").WithLocation(5, 37),
- // (5,43): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (5,43): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// protected virtual void Finalize const () { }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "()").WithArguments("tuples", "7").WithLocation(5, 43),
// (5,44): error CS8124: Tuple must contain at least two elements.
diff --git a/src/Compilers/CSharp/Test/Symbol/Symbols/Source/PropertyTests.cs b/src/Compilers/CSharp/Test/Symbol/Symbols/Source/PropertyTests.cs
index 7d37377c336d7..0a6e7a54b92ab 100644
--- a/src/Compilers/CSharp/Test/Symbol/Symbols/Source/PropertyTests.cs
+++ b/src/Compilers/CSharp/Test/Symbol/Symbols/Source/PropertyTests.cs
@@ -2816,7 +2816,7 @@ class C
";
CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp3)).VerifyDiagnostics();
CreateCompilationWithMscorlib(source, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp2)).VerifyDiagnostics(
- // (14,16): error CS8023: Feature 'automatically implemented properties' is not available in C# 2. Please use language version 3 or greater.
+ // (14,16): error CS8023: Feature 'automatically implemented properties' is not available in C# 2. Please use language version 3 or greater.
// public int P { get; set; } // Error
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "P").WithArguments("automatically implemented properties", "3"));
}
@@ -2925,7 +2925,7 @@ interface I1
var comp = CreateCompilationWithMscorlib(source, parseOptions: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp5));
comp.GetDeclarationDiagnostics().Verify(
- // (9,19): error CS8026: Feature 'readonly automatically implemented properties' is not available in C# 5. Please use language version 6 or greater.
+ // (9,19): error CS8026: Feature 'readonly automatically implemented properties' is not available in C# 5. Please use language version 6 or greater.
// public string Prop1 { get; }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "Prop1").WithArguments("readonly automatically implemented properties", "6").WithLocation(9, 19)
);
diff --git a/src/Compilers/CSharp/Test/Symbol/Symbols/SymbolErrorTests.cs b/src/Compilers/CSharp/Test/Symbol/Symbols/SymbolErrorTests.cs
index a8f24a20bdb21..c09fa1b5df0ba 100644
--- a/src/Compilers/CSharp/Test/Symbol/Symbols/SymbolErrorTests.cs
+++ b/src/Compilers/CSharp/Test/Symbol/Symbols/SymbolErrorTests.cs
@@ -1110,7 +1110,7 @@ int F() { } // CS0081
// (5,15): error CS1003: Syntax error, ',' expected
// int F() { } // CS0081
Diagnostic(ErrorCode.ERR_SyntaxError, "(").WithArguments(",", "(").WithLocation(5, 15),
- // (5,15): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (5,15): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// int F() { } // CS0081
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "()").WithArguments("tuples", "7").WithLocation(5, 15),
// (5,16): error CS8124: Tuple must contain at least two elements.
@@ -1965,7 +1965,7 @@ class B : A
// (8,34): error CS0112: A static member 'B.Q' cannot be marked as override, virtual, or abstract
// public static virtual object Q { get; }
Diagnostic(ErrorCode.ERR_StaticNotVirtual, "Q").WithArguments("B.Q").WithLocation(8, 34),
- // (8,34): error CS8026: Feature 'readonly automatically implemented properties' is not available in C# 5. Please use language version 6 or greater.
+ // (8,34): error CS8026: Feature 'readonly automatically implemented properties' is not available in C# 5. Please use language version 6 or greater.
// public static virtual object Q { get; }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "Q").WithArguments("readonly automatically implemented properties", "6").WithLocation(8, 34),
// (9,37): error CS0112: A static member 'B.R' cannot be marked as override, virtual, or abstract
diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/LocalFunctionParsingTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/LocalFunctionParsingTests.cs
index 5e88d060086e2..3d5851dbbc91f 100644
--- a/src/Compilers/CSharp/Test/Syntax/Parsing/LocalFunctionParsingTests.cs
+++ b/src/Compilers/CSharp/Test/Syntax/Parsing/LocalFunctionParsingTests.cs
@@ -456,10 +456,10 @@ void m2()
Assert.False(file.DescendantNodes().Any(n => n.Kind() == SyntaxKind.LocalFunctionStatement && !n.ContainsDiagnostics));
Assert.True(file.HasErrors);
file.SyntaxTree.GetDiagnostics().Verify(
- // (6,13): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
+ // (6,13): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
// int local() => 0;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "local").WithArguments("local functions", "7").WithLocation(6, 13),
- // (10,13): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
+ // (10,13): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
// int local() { return 0; }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "local").WithArguments("local functions", "7").WithLocation(10, 13)
);
diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs
index 7b1eaed46f940..b2b1fa31ec753 100644
--- a/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs
+++ b/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs
@@ -2191,7 +2191,7 @@ public static void Main()
// (9,21): error CS8181: 'new' cannot be used with tuple type. Use a tuple literal expression instead.
// e = new (); // CS1031, not a type
Diagnostic(ErrorCode.ERR_NewWithTupleTypeSyntax, "()").WithLocation(9, 21),
- // (9,21): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (9,21): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// e = new (); // CS1031, not a type
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "()").WithArguments("tuples", "7").WithLocation(9, 21),
// (9,22): error CS8124: Tuple must contain at least two elements.
@@ -2333,7 +2333,7 @@ public static A operator ()
// (4,32): error CS1041: Identifier expected; 'operator' is a keyword
// public static int explicit operator ()
Diagnostic(ErrorCode.ERR_IdentifierExpectedKW, "operator").WithArguments("", "operator").WithLocation(4, 32),
- // (4,41): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (4,41): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// public static int explicit operator ()
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "()").WithArguments("tuples", "7").WithLocation(4, 41),
// (4,42): error CS8124: Tuple must contain at least two elements.
@@ -3870,7 +3870,7 @@ public static int Main ()
// (3,32): error CS1041: Identifier expected; 'operator' is a keyword
// public static int implicit operator (foo f) { return 6; } // Error
Diagnostic(ErrorCode.ERR_IdentifierExpectedKW, "operator").WithArguments("", "operator").WithLocation(3, 32),
- // (3,41): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
+ // (3,41): error CS8059: Feature 'tuples' is not available in C# 6. Please use language version 7 or greater.
// public static int implicit operator (foo f) { return 6; } // Error
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "(foo f)").WithArguments("tuples", "7").WithLocation(3, 41),
// (3,47): error CS8124: Tuple must contain at least two elements.
@@ -4598,7 +4598,7 @@ partial class C
tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp1));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (2,1): error CS8022: Feature 'partial types' is not available in C# 1. Please use language version 2 or greater.
+ // (2,1): error CS8022: Feature 'partial types' is not available in C# 1. Please use language version 2 or greater.
// partial class C
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion1, "partial").WithArguments("partial types", "2"));
}
@@ -4617,7 +4617,7 @@ partial int Foo() { }
tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp2));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (4,5): error CS8023: Feature 'partial method' is not available in C# 2. Please use language version 3 or greater.
+ // (4,5): error CS8023: Feature 'partial method' is not available in C# 2. Please use language version 3 or greater.
// partial int Foo() { }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "partial").WithArguments("partial method", "3"));
}
@@ -4640,10 +4640,10 @@ void Foo()
tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp2));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (6,17): error CS8023: Feature 'query expression' is not available in C# 2. Please use language version 3 or greater.
+ // (6,17): error CS8023: Feature 'query expression' is not available in C# 2. Please use language version 3 or greater.
// var q = from a in b
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "from a in b").WithArguments("query expression", "3"),
- // (6,17): error CS8023: Feature 'query expression' is not available in C# 2. Please use language version 3 or greater.
+ // (6,17): error CS8023: Feature 'query expression' is not available in C# 2. Please use language version 3 or greater.
// var q = from a in b
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "from").WithArguments("query expression", "3"));
}
@@ -4665,7 +4665,7 @@ void Foo()
tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp2));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (6,17): error CS8023: Feature 'anonymous types' is not available in C# 2. Please use language version 3 or greater.
+ // (6,17): error CS8023: Feature 'anonymous types' is not available in C# 2. Please use language version 3 or greater.
// var q = new { };
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "new").WithArguments("anonymous types", "3"));
}
@@ -4687,7 +4687,7 @@ void Foo()
tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp2));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (6,17): error CS8023: Feature 'implicitly typed array' is not available in C# 2. Please use language version 3 or greater.
+ // (6,17): error CS8023: Feature 'implicitly typed array' is not available in C# 2. Please use language version 3 or greater.
// var q = new [] { };
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "new").WithArguments("implicitly typed array", "3"));
}
@@ -4709,7 +4709,7 @@ void Foo()
tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp2));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (6,25): error CS8023: Feature 'object initializer' is not available in C# 2. Please use language version 3 or greater.
+ // (6,25): error CS8023: Feature 'object initializer' is not available in C# 2. Please use language version 3 or greater.
// var q = new Foo { };
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "{").WithArguments("object initializer", "3"));
}
@@ -4731,7 +4731,7 @@ void Foo()
tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp2));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (6,19): error CS8023: Feature 'lambda expression' is not available in C# 2. Please use language version 3 or greater.
+ // (6,19): error CS8023: Feature 'lambda expression' is not available in C# 2. Please use language version 3 or greater.
// var q = a => b;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "=>").WithArguments("lambda expression", "3"));
}
@@ -4746,7 +4746,7 @@ public static void DoSomething(this int x) { }
}";
ParseAndValidate(code, new CSharpParseOptions(LanguageVersion.CSharp2),
- // (4,37): error CS8023: Feature 'extension method' is not available in C# 2. Please use language version 3 or greater.
+ // (4,37): error CS8023: Feature 'extension method' is not available in C# 2. Please use language version 3 or greater.
// public static void DoSomething(this int x) { }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "this").WithArguments("extension method", "3").WithLocation(4, 37));
@@ -4770,7 +4770,7 @@ public static int Main()
tree = Parse(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp5));
tree.GetDiagnostics().Verify(
- // (6,23): error CS8026: Feature 'exception filter' is not available in C# 5. Please use language version 6 or greater.
+ // (6,23): error CS8026: Feature 'exception filter' is not available in C# 5. Please use language version 6 or greater.
// try { } catch when (true) {}
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "when").WithArguments("exception filter", "6").WithLocation(6, 23)
);
@@ -4936,7 +4936,7 @@ partial class X
}
";
CreateCompilationWithMscorlib(test, parseOptions: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp2)).VerifyDiagnostics(
- // (4,5): error CS8023: Feature 'partial method' is not available in C# 2. Please use language version 3 or greater.
+ // (4,5): error CS8023: Feature 'partial method' is not available in C# 2. Please use language version 3 or greater.
// partial void M();
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "partial").WithArguments("partial method", "3"));
}
@@ -4955,7 +4955,7 @@ string M()
var tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp5));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (6,16): error CS8026: Feature 'interpolated strings' is not available in C# 5. Please use language version 6 or greater.
+ // (6,16): error CS8026: Feature 'interpolated strings' is not available in C# 5. Please use language version 6 or greater.
// return $"hello";
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, @"$""hello""").WithArguments("interpolated strings", "6").WithLocation(6, 16));
}
@@ -4975,7 +4975,7 @@ string M()
var tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp5));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (7,16): error CS8026: Feature 'interpolated strings' is not available in C# 5. Please use language version 6 or greater.
+ // (7,16): error CS8026: Feature 'interpolated strings' is not available in C# 5. Please use language version 6 or greater.
// return $"hello + {other}";
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, @"$""hello + {other}""").WithArguments("interpolated strings", "6").WithLocation(7, 16));
}
@@ -4995,7 +4995,7 @@ async void M() { }
tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp3));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (4,5): error CS8024: Feature 'async function' is not available in C# 3. Please use language version 5 or greater.
+ // (4,5): error CS8024: Feature 'async function' is not available in C# 3. Please use language version 5 or greater.
// async void M() { }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion3, "async").WithArguments("async function", "5"));
}
@@ -5015,7 +5015,7 @@ async static void M() { }
tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp3));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (4,5): error CS8024: Feature 'async function' is not available in C# 3. Please use language version 5 or greater.
+ // (4,5): error CS8024: Feature 'async function' is not available in C# 3. Please use language version 5 or greater.
// async static void M() { }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion3, "async").WithArguments("async function", "5"));
}
@@ -5037,7 +5037,7 @@ static void Main()
tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp4));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (6,34): error CS8025: Feature 'async function' is not available in C# 4. Please use language version 5 or greater.
+ // (6,34): error CS8025: Feature 'async function' is not available in C# 4. Please use language version 5 or greater.
// Func> f = async x => x;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion4, "async").WithArguments("async function", "5"));
}
@@ -5059,7 +5059,7 @@ static void Main()
tree = SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp4));
tree.GetCompilationUnitRoot().GetDiagnostics().Verify(
- // (6,34): error CS8025: Feature 'async function' is not available in C# 4. Please use language version 5 or greater.
+ // (6,34): error CS8025: Feature 'async function' is not available in C# 4. Please use language version 5 or greater.
// Func> f = async delegate (int x) { return x; };
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion4, "async").WithArguments("async function", "5"));
}
@@ -5079,10 +5079,10 @@ class C
";
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp4)).GetDiagnostics().Verify();
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp3)).GetDiagnostics().Verify(
- // (2,7): error CS8024: Feature 'named argument' is not available in C# 3. Please use language version 4 or greater.
+ // (2,7): error CS8024: Feature 'named argument' is not available in C# 3. Please use language version 4 or greater.
// [Attr(x:1)]
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion3, "x:").WithArguments("named argument", "4"),
- // (7,11): error CS8024: Feature 'named argument' is not available in C# 3. Please use language version 4 or greater.
+ // (7,11): error CS8024: Feature 'named argument' is not available in C# 3. Please use language version 4 or greater.
// M(y:2);
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion3, "y:").WithArguments("named argument", "4"));
}
@@ -5097,7 +5097,7 @@ class C : global::B
";
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp2)).GetDiagnostics().Verify();
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp1)).GetDiagnostics().Verify(
- // (2,11): error CS8022: Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.
+ // (2,11): error CS8022: Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.
// class C : global::B
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion1, "global").WithArguments("namespace alias qualifier", "2"));
}
@@ -5112,7 +5112,7 @@ class C : A::B
";
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp2)).GetDiagnostics().Verify();
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp1)).GetDiagnostics().Verify(
- // (2,11): error CS8022: Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.
+ // (2,11): error CS8022: Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.
// class C : A::B
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion1, "A").WithArguments("namespace alias qualifier", "2"));
}
@@ -5128,7 +5128,7 @@ void M(int x = 1) { }
";
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp4)).GetDiagnostics().Verify();
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp3)).GetDiagnostics().Verify(
- // (4,18): error CS8024: Feature 'optional parameter' is not available in C# 3. Please use language version 4 or greater.
+ // (4,18): error CS8024: Feature 'optional parameter' is not available in C# 3. Please use language version 4 or greater.
// void M(int x = 1) { }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion3, "= 1").WithArguments("optional parameter", "4"));
}
@@ -5147,7 +5147,7 @@ void M()
";
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp3)).GetDiagnostics().Verify();
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp2)).GetDiagnostics().Verify(
- // (6,22): error CS8023: Feature 'object initializer' is not available in C# 2. Please use language version 3 or greater.
+ // (6,22): error CS8023: Feature 'object initializer' is not available in C# 2. Please use language version 3 or greater.
// return new C { Foo = 1 };
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "{").WithArguments("object initializer", "3"));
}
@@ -5166,7 +5166,7 @@ void M()
";
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp3)).GetDiagnostics().Verify();
SyntaxFactory.ParseSyntaxTree(text, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp2)).GetDiagnostics().Verify(
- // (6,22): error CS8023: Feature 'collection initializer' is not available in C# 2. Please use language version 3 or greater.
+ // (6,22): error CS8023: Feature 'collection initializer' is not available in C# 2. Please use language version 3 or greater.
// return new C { 1, 2, 3 };
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion2, "{").WithArguments("collection initializer", "3"));
}
@@ -5186,9 +5186,9 @@ class C
// (2,16): warning CS1584: XML comment has syntactically incorrect cref attribute 'C{T}'
// ///
Diagnostic(ErrorCode.WRN_BadXMLRefSyntax, "C{T}").WithArguments("C{T}"),
- // (2,17): warning CS1658: Feature 'generics' is not available in C# 1. Please use language version 2 or greater.. See also error CS8022.
+ // (2,17): warning CS1658: Feature 'generics' is not available in C# 1. Please use language version 2 or greater.. See also error CS8022.
// ///
- Diagnostic(ErrorCode.WRN_ErrorOverride, "{").WithArguments("Feature 'generics' is not available in C# 1. Please use language version 2 or greater.", "8022"));
+ Diagnostic(ErrorCode.WRN_ErrorOverride, "{").WithArguments("Feature 'generics' is not available in C# 1. Please use language version 2 or greater.", "8022"));
}
[Fact]
@@ -5205,15 +5205,15 @@ class C { }
// (2,16): warning CS1584: XML comment has syntactically incorrect cref attribute 'Alias::Foo'
// ///
Diagnostic(ErrorCode.WRN_BadXMLRefSyntax, "Alias::Foo").WithArguments("Alias::Foo"),
- // (2,16): warning CS1658: Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.. See also error CS8022.
+ // (2,16): warning CS1658: Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.. See also error CS8022.
// ///
- Diagnostic(ErrorCode.WRN_ErrorOverride, "Alias").WithArguments("Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.", "8022"),
+ Diagnostic(ErrorCode.WRN_ErrorOverride, "Alias").WithArguments("Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.", "8022"),
// (3,16): warning CS1584: XML comment has syntactically incorrect cref attribute 'global::Foo'
// ///
Diagnostic(ErrorCode.WRN_BadXMLRefSyntax, "global::Foo").WithArguments("global::Foo"),
- // (3,16): warning CS1658: Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.. See also error CS8022.
+ // (3,16): warning CS1658: Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.. See also error CS8022.
// ///
- Diagnostic(ErrorCode.WRN_ErrorOverride, "global").WithArguments("Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.", "8022"));
+ Diagnostic(ErrorCode.WRN_ErrorOverride, "global").WithArguments("Feature 'namespace alias qualifier' is not available in C# 1. Please use language version 2 or greater.", "8022"));
}
[Fact]
@@ -5226,10 +5226,10 @@ class C { }
";
SyntaxFactory.ParseSyntaxTree(text, options: TestOptions.RegularWithDocumentationComments.WithLanguageVersion(LanguageVersion.CSharp2)).GetDiagnostics().Verify();
SyntaxFactory.ParseSyntaxTree(text, options: TestOptions.RegularWithDocumentationComments.WithLanguageVersion(LanguageVersion.CSharp1)).GetDiagnostics().Verify(
- // (2,2): error CS8022: Feature '#pragma' is not available in C# 1. Please use language version 2 or greater.
+ // (2,2): error CS8022: Feature '#pragma' is not available in C# 1. Please use language version 2 or greater.
// #pragma warning disable 1584
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion1, "pragma").WithArguments("#pragma", "2"),
- // (3,2): error CS8022: Feature '#pragma' is not available in C# 1. Please use language version 2 or greater.
+ // (3,2): error CS8022: Feature '#pragma' is not available in C# 1. Please use language version 2 or greater.
// #pragma checksum "file.txt" "{00000000-0000-0000-0000-000000000000}" "2453"
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion1, "pragma").WithArguments("#pragma", "2"));
}
@@ -5300,31 +5300,31 @@ void P(object o)
SyntaxFactory.ParseSyntaxTree(source, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp6)).GetDiagnostics().Verify();
SyntaxFactory.ParseSyntaxTree(source, options: CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp5)).GetDiagnostics().Verify(
- // (3,20): error CS8026: Feature 'auto property initializer' is not available in C# 5. Please use language version 6 or greater.
+ // (3,20): error CS8026: Feature 'auto property initializer' is not available in C# 5. Please use language version 6 or greater.
// int L { get; } = 12; // auto property initializer
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "= 12").WithArguments("auto property initializer", "6").WithLocation(3, 20),
- // (5,13): error CS8026: Feature 'expression-bodied method' is not available in C# 5. Please use language version 6 or greater.
+ // (5,13): error CS8026: Feature 'expression-bodied method' is not available in C# 5. Please use language version 6 or greater.
// int M() => 12; // expression-bodied method
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "=> 12").WithArguments("expression-bodied method", "6").WithLocation(5, 13),
- // (7,11): error CS8026: Feature 'expression-bodied property' is not available in C# 5. Please use language version 6 or greater.
+ // (7,11): error CS8026: Feature 'expression-bodied property' is not available in C# 5. Please use language version 6 or greater.
// int N => 12; // expression-bodied property
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "=> 12").WithArguments("expression-bodied property", "6").WithLocation(7, 11),
- // (9,21): error CS8026: Feature 'expression-bodied indexer' is not available in C# 5. Please use language version 6 or greater.
+ // (9,21): error CS8026: Feature 'expression-bodied indexer' is not available in C# 5. Please use language version 6 or greater.
// int this[int a] => a + 1; // expression-bodied indexer
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "=> a + 1").WithArguments("expression-bodied indexer", "6").WithLocation(9, 21),
- // (11,48): error CS8026: Feature 'expression-bodied method' is not available in C# 5. Please use language version 6 or greater.
+ // (11,48): error CS8026: Feature 'expression-bodied method' is not available in C# 5. Please use language version 6 or greater.
// public static int operator +(Foo a, Foo b) => null; // expression-bodied operator
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "=> null").WithArguments("expression-bodied method", "6").WithLocation(11, 48),
- // (13,49): error CS8026: Feature 'expression-bodied method' is not available in C# 5. Please use language version 6 or greater.
+ // (13,49): error CS8026: Feature 'expression-bodied method' is not available in C# 5. Please use language version 6 or greater.
// public static explicit operator bool(Foo a) => false; // expression-bodied conversion operator
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "=> false").WithArguments("expression-bodied method", "6").WithLocation(13, 49),
- // (18,32): error CS8026: Feature 'exception filter' is not available in C# 5. Please use language version 6 or greater.
+ // (18,32): error CS8026: Feature 'exception filter' is not available in C# 5. Please use language version 6 or greater.
// } catch (Exception ex) when (ex.ToString() == null) { // exception filter
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "when").WithArguments("exception filter", "6").WithLocation(18, 32),
- // (21,17): error CS8026: Feature 'null propagating operator' is not available in C# 5. Please use language version 6 or greater.
+ // (21,17): error CS8026: Feature 'null propagating operator' is not available in C# 5. Please use language version 6 or greater.
// var s = o?.ToString(); // null propagating operator
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, "o?.ToString()").WithArguments("null propagating operator", "6").WithLocation(21, 17),
- // (22,17): error CS8026: Feature 'interpolated strings' is not available in C# 5. Please use language version 6 or greater.
+ // (22,17): error CS8026: Feature 'interpolated strings' is not available in C# 5. Please use language version 6 or greater.
// var x = $"hello world";
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion5, @"$""hello world""").WithArguments("interpolated strings", "6").WithLocation(22, 17)
);
diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/PatternParsingTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/PatternParsingTests.cs
index fc52a6cbd83be..9d28788ffb8d2 100644
--- a/src/Compilers/CSharp/Test/Syntax/Parsing/PatternParsingTests.cs
+++ b/src/Compilers/CSharp/Test/Syntax/Parsing/PatternParsingTests.cs
@@ -37,13 +37,13 @@ public static void Main(string[] args)
}
";
CreateCompilationWithMscorlib(test, parseOptions: TestOptions.Regular.WithLanguageVersion(LanguageVersion.CSharp6)).VerifyDiagnostics(
- // (9,13): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
+ // (9,13): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
// case 2 when args.Length == 2:
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "case 2 when args.Length == 2:").WithArguments("pattern matching", "7").WithLocation(9, 13),
- // (11,13): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
+ // (11,13): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
// case string s:
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "case string s:").WithArguments("pattern matching", "7").WithLocation(11, 13),
- // (15,18): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
+ // (15,18): error CS8059: Feature 'pattern matching' is not available in C# 6. Please use language version 7 or greater.
// bool b = args[0] is string s;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "args[0] is string s").WithArguments("pattern matching", "7").WithLocation(15, 18)
);
@@ -68,28 +68,28 @@ public static void Sample(bool b, string s)
}";
CreateCompilationWithMscorlib(test).VerifyDiagnostics();
CreateCompilationWithMscorlib(test, parseOptions: TestOptions.Regular6).VerifyDiagnostics(
- // (6,14): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
+ // (6,14): error CS8059: Feature 'local functions' is not available in C# 6. Please use language version 7 or greater.
// void NeverReturnsFunction() => throw new NullReferenceException();
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "NeverReturnsFunction").WithArguments("local functions", "7").WithLocation(6, 14),
- // (6,40): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
+ // (6,40): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
// void NeverReturnsFunction() => throw new NullReferenceException();
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "throw new NullReferenceException()").WithArguments("throw expression", "7").WithLocation(6, 40),
- // (7,21): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
+ // (7,21): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
// int x = b ? throw new NullReferenceException() : 1;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "throw new NullReferenceException()").WithArguments("throw expression", "7").WithLocation(7, 21),
- // (8,21): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
+ // (8,21): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
// x = b ? 2 : throw new NullReferenceException();
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "throw new NullReferenceException()").WithArguments("throw expression", "7").WithLocation(8, 21),
- // (9,18): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
+ // (9,18): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
// s = s ?? throw new NullReferenceException();
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "throw new NullReferenceException()").WithArguments("throw expression", "7").WithLocation(9, 18),
- // (11,47): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
+ // (11,47): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
// throw new NullReferenceException() ?? throw new NullReferenceException() ?? throw null;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "throw new NullReferenceException() ?? throw null").WithArguments("throw expression", "7").WithLocation(11, 47),
- // (11,85): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
+ // (11,85): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
// throw new NullReferenceException() ?? throw new NullReferenceException() ?? throw null;
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "throw null").WithArguments("throw expression", "7").WithLocation(11, 85),
- // (13,42): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
+ // (13,42): error CS8059: Feature 'throw expression' is not available in C# 6. Please use language version 7 or greater.
// public static void NeverReturns() => throw new NullReferenceException();
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion6, "throw new NullReferenceException()").WithArguments("throw expression", "7").WithLocation(13, 42)
);
diff --git a/src/Features/CSharp/Portable/UpgradeProject/CSharpUpgradeProjectCodeFixProvider.cs b/src/Features/CSharp/Portable/UpgradeProject/CSharpUpgradeProjectCodeFixProvider.cs
index e1df4e147a9bc..504e942cd69df 100644
--- a/src/Features/CSharp/Portable/UpgradeProject/CSharpUpgradeProjectCodeFixProvider.cs
+++ b/src/Features/CSharp/Portable/UpgradeProject/CSharpUpgradeProjectCodeFixProvider.cs
@@ -16,12 +16,12 @@ namespace Microsoft.CodeAnalysis.CSharp.UpgradeProject
[ExportCodeFixProvider(LanguageNames.CSharp), Shared]
internal class CSharpUpgradeProjectCodeFixProvider : AbstractUpgradeProjectCodeFixProvider
{
- private const string CS8022 = nameof(CS8022); // error CS8022: Feature is not available in C# 1. Please use language version X or greater.
- private const string CS8023 = nameof(CS8023); // error CS8023: Feature is not available in C# 2. Please use language version X or greater.
- private const string CS8024 = nameof(CS8024); // error CS8024: Feature is not available in C# 3. Please use language version X or greater.
- private const string CS8025 = nameof(CS8025); // error CS8025: Feature is not available in C# 4. Please use language version X or greater.
- private const string CS8026 = nameof(CS8026); // error CS8026: Feature is not available in C# 5. Please use language version X or greater.
- private const string CS8059 = nameof(CS8059); // error CS8059: Feature is not available in C# 6. Please use language version X or greater.
+ private const string CS8022 = nameof(CS8022); // error CS8022: Feature is not available in C# 1. Please use language version X or greater.
+ private const string CS8023 = nameof(CS8023); // error CS8023: Feature is not available in C# 2. Please use language version X or greater.
+ private const string CS8024 = nameof(CS8024); // error CS8024: Feature is not available in C# 3. Please use language version X or greater.
+ private const string CS8025 = nameof(CS8025); // error CS8025: Feature is not available in C# 4. Please use language version X or greater.
+ private const string CS8026 = nameof(CS8026); // error CS8026: Feature is not available in C# 5. Please use language version X or greater.
+ private const string CS8059 = nameof(CS8059); // error CS8059: Feature is not available in C# 6. Please use language version X or greater.
public override ImmutableArray FixableDiagnosticIds { get; } =
ImmutableArray.Create(CS8022, CS8023, CS8024, CS8025, CS8026, CS8059);