Skip to content
This repository was archived by the owner on Dec 23, 2024. It is now read-only.

Commit 93104e3

Browse files
KevinRansomnosami
authored andcommitted
Lang version for interpolated strings (dotnet#10049)
* Update lang version for interpolated strings * error messages
1 parent 8bbfb45 commit 93104e3

File tree

3 files changed

+25
-22
lines changed

3 files changed

+25
-22
lines changed

src/fsharp/LanguageFeatures.fs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type LanguageFeature =
2323
| RelaxWhitespace
2424
| NameOf
2525
| ImplicitYield
26-
| OpenStaticClasses
26+
| OpenTypeDeclaration
2727
| DotlessFloat32Literal
2828
| PackageManagement
2929
| FromEndSlicing
@@ -34,6 +34,7 @@ type LanguageFeature =
3434
| WitnessPassing
3535
| InterfacesWithMultipleGenericInstantiation
3636
| StringInterpolation
37+
| OverloadsForCustomOperations
3738

3839
/// LanguageVersion management
3940
type LanguageVersion (specifiedVersionAsString) =
@@ -64,15 +65,16 @@ type LanguageVersion (specifiedVersionAsString) =
6465
LanguageFeature.AndBang, languageVersion50
6566
LanguageFeature.NullableOptionalInterop, languageVersion50
6667
LanguageFeature.DefaultInterfaceMemberConsumption, languageVersion50
67-
LanguageFeature.OpenStaticClasses, languageVersion50
68+
LanguageFeature.OpenTypeDeclaration, languageVersion50
6869
LanguageFeature.PackageManagement, languageVersion50
6970
LanguageFeature.WitnessPassing, languageVersion50
7071
LanguageFeature.InterfacesWithMultipleGenericInstantiation, languageVersion50
7172
LanguageFeature.NameOf, languageVersion50
73+
LanguageFeature.StringInterpolation, languageVersion50
7274

7375
// F# preview
7476
LanguageFeature.FromEndSlicing, previewVersion
75-
LanguageFeature.StringInterpolation, previewVersion
77+
LanguageFeature.OverloadsForCustomOperations, previewVersion
7678
]
7779

7880
let specified =
@@ -133,7 +135,7 @@ type LanguageVersion (specifiedVersionAsString) =
133135
| LanguageFeature.RelaxWhitespace -> FSComp.SR.featureRelaxWhitespace()
134136
| LanguageFeature.NameOf -> FSComp.SR.featureNameOf()
135137
| LanguageFeature.ImplicitYield -> FSComp.SR.featureImplicitYield()
136-
| LanguageFeature.OpenStaticClasses -> FSComp.SR.featureOpenStaticClasses()
138+
| LanguageFeature.OpenTypeDeclaration -> FSComp.SR.featureOpenTypeDeclaration()
137139
| LanguageFeature.DotlessFloat32Literal -> FSComp.SR.featureDotlessFloat32Literal()
138140
| LanguageFeature.PackageManagement -> FSComp.SR.featurePackageManagement()
139141
| LanguageFeature.FromEndSlicing -> FSComp.SR.featureFromEndSlicing()
@@ -144,6 +146,7 @@ type LanguageVersion (specifiedVersionAsString) =
144146
| LanguageFeature.WitnessPassing -> FSComp.SR.featureWitnessPassing()
145147
| LanguageFeature.InterfacesWithMultipleGenericInstantiation -> FSComp.SR.featureInterfacesWithMultipleGenericInstantiation()
146148
| LanguageFeature.StringInterpolation -> FSComp.SR.featureStringInterpolation()
149+
| LanguageFeature.OverloadsForCustomOperations -> FSComp.SR.featureOverloadsForCustomOperations()
147150

148151
/// Get a version string associated with the given feature.
149152
member _.GetFeatureVersionString feature =

tests/fsharp/Compiler/Language/InterfaceTests.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ assertion (fun (x:float) -> x * 3.0) (fun v ->
210210
let MultipleTypedInterfacesFSharp50VerifyIl() =
211211
CompilerAssert.CompileLibraryAndVerifyILWithOptions
212212
[|
213-
"--langversion:preview";
213+
"--langversion:5.0";
214214
"--deterministic+";
215215
"--define:NO_ANONYMOUS";
216216
#if NETSTANDARD

tests/fsharp/Compiler/Language/StringInterpolation.fs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ open FSharp.Test.Utilities
1010
module StringInterpolationTests =
1111

1212
let SimpleCheckTest text =
13-
CompilerAssert.CompileExeAndRunWithOptions [| "--langversion:preview" |] ("""
13+
CompilerAssert.CompileExeAndRunWithOptions [| "--langversion:5.0" |] ("""
1414
let check msg a b =
1515
if a = b then printfn "test case '%s' succeeded" msg else failwithf "test case '%s' failed, expected %A, got %A" msg b a
1616
@@ -616,7 +616,7 @@ check "vcewweh23" $"abc{({| A=1 |})}def" "abc{ A = 1 }def"
616616
let x = $"one"
617617
"""
618618
[|(FSharpErrorSeverity.Error, 3350, (2, 9, 2, 15),
619-
"Feature 'string interpolation' is not available in F# 4.7. Please use language version 'preview' or greater.")|]
619+
"Feature 'string interpolation' is not available in F# 4.7. Please use language version 5.0 or greater.")|]
620620

621621

622622
[<Test>]
@@ -635,7 +635,7 @@ let xa = $"one %d{3:N}" // mix of formats
635635
let xc = $"5%6" // bad F# format specifier
636636
let xe = $"%A{{1}}" // fake expression (delimiters escaped)
637637
"""
638-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
638+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
639639
code
640640
[|(FSharpErrorSeverity.Error, 1, (2, 19, 2, 38),
641641
"The type 'string' is not compatible with any of the types byte,int16,int32,int64,sbyte,uint16,uint32,uint64,nativeint,unativeint, arising from the use of a printf-style format string");
@@ -669,7 +669,7 @@ but here has type
669669
let code = """
670670
let xb = $"{%5d{1:N3}}" // inner error that looks like format specifiers
671671
"""
672-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
672+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
673673
code
674674
[|(FSharpErrorSeverity.Error, 1156, (2, 14, 2, 16),
675675
"This is not a valid numeric literal. Valid numeric literals include 1, 0x1, 0o1, 0b1, 1l (int), 1u (uint32), 1L (int64), 1UL (uint64), 1s (int16), 1y (sbyte), 1uy (byte), 1.0 (float), 1.0f (float32), 1.0m (decimal), 1I (BigInteger).");
@@ -681,7 +681,7 @@ let xb = $"{%5d{1:N3}}" // inner error that looks like format specifiers
681681
let code = """
682682
let xd = $"%A{}" // empty expression
683683
"""
684-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
684+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
685685
code
686686
[|(FSharpErrorSeverity.Error, 3382, (2, 15, 2, 15),
687687
"Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected.")
@@ -690,7 +690,7 @@ let xd = $"%A{}" // empty expression
690690
let code = """
691691
let xd = $"%A{ }" // empty expression
692692
"""
693-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
693+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
694694
code
695695
[|(FSharpErrorSeverity.Error, 3382, (2, 15, 2, 17),
696696
"Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected.")
@@ -705,7 +705,7 @@ let x1 : FormattableString = $"one %d{100}" // no %d in FormattableString
705705
let x2 : FormattableString = $"one %s{String.Empty}" // no %s in FormattableString
706706
let x3 : FormattableString = $"one %10s{String.Empty}" // no %10s in FormattableString
707707
"""
708-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
708+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
709709
code
710710
[|(FSharpErrorSeverity.Error, 3376, (4, 30, 4, 44),
711711
"Invalid interpolated string. Interpolated strings used as type IFormattable or type FormattableString may not use '%' specifiers, only .NET-style interpolands such as '{expr}', '{expr,3}' or '{expr:N5}' may be used.");
@@ -730,7 +730,7 @@ let s7 = @$"123{456}789{$"012"}345"
730730
let s8 = $@"123{456}789{@$"012"}345"
731731
let s9 = @$"123{456}789{$@"012"}345"
732732
"""
733-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
733+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
734734
code
735735
[|(FSharpErrorSeverity.Error, 3373, (4, 24, 4, 25),
736736
"Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal.");
@@ -763,7 +763,7 @@ let TripleInterpolatedInTripleInterpolated = $\"\"\"123{456}789{$\"\"\"012\"\"
763763
let TripleInterpolatedInSingleInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}345\"
764764
let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}345\"
765765
"
766-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
766+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
767767
code
768768
[|(FSharpErrorSeverity.Error, 3374, (4, 52, 4, 55),
769769
"Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression.");
@@ -781,7 +781,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3
781781
[<Test>]
782782
let ``String interpolation negative incomplete string`` () =
783783
let code = """let x1 = $"one %d{System.String.Empty}"""
784-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
784+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
785785
code
786786
[|(FSharpErrorSeverity.Error, 10, (1, 1, 1, 39),
787787
"Incomplete structured construct at or before this point in binding. Expected interpolated string (final part), interpolated string (part) or other token.");
@@ -791,7 +791,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3
791791
[<Test>]
792792
let ``String interpolation negative incomplete string fill`` () =
793793
let code = """let x1 = $"one %d{System.String.Empty"""
794-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
794+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
795795
code
796796
[|(FSharpErrorSeverity.Error, 10, (1, 1, 1, 38),
797797
"Incomplete structured construct at or before this point in binding. Expected interpolated string (final part), interpolated string (part) or other token.");
@@ -801,7 +801,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3
801801
[<Test>]
802802
let ``String interpolation negative incomplete verbatim string`` () =
803803
let code = """let x1 = @$"one %d{System.String.Empty} """
804-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
804+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
805805
code
806806
[|(FSharpErrorSeverity.Error, 10, (1, 1, 1, 41),
807807
"Incomplete structured construct at or before this point in binding. Expected interpolated string (final part), interpolated string (part) or other token.");
@@ -811,7 +811,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3
811811
[<Test>]
812812
let ``String interpolation negative incomplete triple quote string`` () =
813813
let code = "let x1 = $\"\"\"one"
814-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
814+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
815815
code
816816
[|(FSharpErrorSeverity.Warning, 58, (1, 1, 1, 17),
817817
"Possible incorrect indentation: this token is offside of context started at position (1:1). Try indenting this token further or using standard formatting conventions.");
@@ -825,31 +825,31 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3
825825
[<Test>]
826826
let ``String interpolation extra right brace single quote`` () =
827827
let code = "let x1 = $\"}\""
828-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
828+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
829829
code
830830
[|(FSharpErrorSeverity.Error, 3383, (1, 10, 1, 14),
831831
"A '}' character must be escaped (by doubling) in an interpolated string.")|]
832832

833833
[<Test>]
834834
let ``String interpolation extra right brace verbatim`` () =
835835
let code = "let x1 = @$\"}\""
836-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
836+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
837837
code
838838
[|(FSharpErrorSeverity.Error, 3383, (1, 10, 1, 15),
839839
"A '}' character must be escaped (by doubling) in an interpolated string.")|]
840840

841841
[<Test>]
842842
let ``String interpolation extra right brace triple`` () =
843843
let code = "let x1 = $\"\"\"}\"\"\""
844-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
844+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
845845
code
846846
[|(FSharpErrorSeverity.Error, 3383, (1, 10, 1, 18),
847847
"A '}' character must be escaped (by doubling) in an interpolated string.")|]
848848

849849
[<Test>]
850850
let ``String interpolation extra right brace single quote with hole`` () =
851851
let code = "let x1 = $\"{0}}\""
852-
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |]
852+
CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |]
853853
code
854854
[|(FSharpErrorSeverity.Error, 3383, (1, 14, 1, 17),
855855
"A '}' character must be escaped (by doubling) in an interpolated string.")|]

0 commit comments

Comments
 (0)