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);