From d36f23f892b68e79363a32820b20656fea8d4c5e Mon Sep 17 00:00:00 2001 From: Copilot Date: Thu, 6 Aug 2026 13:56:48 +0200 Subject: [PATCH 1/3] Remove always-on WildCardInForLoop language feature flag Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Compiler/FSComp.txt | 1 - src/Compiler/Facilities/LanguageFeatures.fs | 3 --- src/Compiler/Facilities/LanguageFeatures.fsi | 1 - src/Compiler/SyntaxTree/ParseHelpers.fs | 4 ++-- src/Compiler/SyntaxTree/ParseHelpers.fsi | 2 +- src/Compiler/pars.fsy | 2 +- src/Compiler/xlf/FSComp.txt.cs.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.de.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.es.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.fr.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.it.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.ja.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.ko.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.pl.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.pt-BR.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.ru.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.tr.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.zh-Hans.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.zh-Hant.xlf | 5 ----- 19 files changed, 4 insertions(+), 74 deletions(-) diff --git a/src/Compiler/FSComp.txt b/src/Compiler/FSComp.txt index 26699fa4d9b..14f96de819d 100644 --- a/src/Compiler/FSComp.txt +++ b/src/Compiler/FSComp.txt @@ -1564,7 +1564,6 @@ nativeResourceFormatError,"Stream does not begin with a null resource and is not nativeResourceHeaderMalformed,"Resource header beginning at offset %s is malformed." formatDashItem," - %s" featureSingleUnderscorePattern,"single underscore pattern" -featureWildCardInForLoop,"wild card in for loop" featureRelaxWhitespace,"whitespace relaxation" featureNameOf,"nameof" featureImplicitYield,"implicit yield" diff --git a/src/Compiler/Facilities/LanguageFeatures.fs b/src/Compiler/Facilities/LanguageFeatures.fs index ad170712e4a..712c566a5a4 100644 --- a/src/Compiler/Facilities/LanguageFeatures.fs +++ b/src/Compiler/Facilities/LanguageFeatures.fs @@ -17,7 +17,6 @@ module internal FSharp.Compiler.Features [] type LanguageFeature = | SingleUnderscorePattern - | WildCardInForLoop | RelaxWhitespace | RelaxWhitespace2 | NameOf @@ -153,7 +152,6 @@ type LanguageVersion(versionText, ?disabledFeaturesArray: LanguageFeature array) [ // F# 4.7 LanguageFeature.SingleUnderscorePattern, languageVersion47 - LanguageFeature.WildCardInForLoop, languageVersion47 LanguageFeature.RelaxWhitespace, languageVersion47 LanguageFeature.ImplicitYield, languageVersion47 @@ -365,7 +363,6 @@ type LanguageVersion(versionText, ?disabledFeaturesArray: LanguageFeature array) static member GetFeatureString feature = match feature with | LanguageFeature.SingleUnderscorePattern -> FSComp.SR.featureSingleUnderscorePattern () - | LanguageFeature.WildCardInForLoop -> FSComp.SR.featureWildCardInForLoop () | LanguageFeature.RelaxWhitespace -> FSComp.SR.featureRelaxWhitespace () | LanguageFeature.RelaxWhitespace2 -> FSComp.SR.featureRelaxWhitespace2 () | LanguageFeature.NameOf -> FSComp.SR.featureNameOf () diff --git a/src/Compiler/Facilities/LanguageFeatures.fsi b/src/Compiler/Facilities/LanguageFeatures.fsi index 8c7ebd7e3c3..6af28841f48 100644 --- a/src/Compiler/Facilities/LanguageFeatures.fsi +++ b/src/Compiler/Facilities/LanguageFeatures.fsi @@ -7,7 +7,6 @@ module internal FSharp.Compiler.Features [] type LanguageFeature = | SingleUnderscorePattern - | WildCardInForLoop | RelaxWhitespace | RelaxWhitespace2 | NameOf diff --git a/src/Compiler/SyntaxTree/ParseHelpers.fs b/src/Compiler/SyntaxTree/ParseHelpers.fs index 22eb96151e9..132cb28b3cc 100644 --- a/src/Compiler/SyntaxTree/ParseHelpers.fs +++ b/src/Compiler/SyntaxTree/ParseHelpers.fs @@ -978,9 +978,9 @@ let mkDefnBindings (mWhole, BindingSetPreAttrs(_, isRec, isUse, declsPreAttrs, _ attrDecls @ letDecls -let idOfPat (parseState: IParseState) m p = +let idOfPat m p = match p with - | SynPat.Wild r when parseState.LexBuffer.SupportsFeature LanguageFeature.WildCardInForLoop -> mkSynId r "_" + | SynPat.Wild r -> mkSynId r "_" | SynPat.Named(SynIdent(id, _), false, _, _) -> id | SynPat.LongIdent(longDotId = SynLongIdent([ id ], _, _); typarDecls = None; argPats = SynArgPats.Pats []; accessibility = None) -> id | _ -> raiseParseErrorAt m (FSComp.SR.parsIntegerForLoopRequiresSimpleIdentifier ()) diff --git a/src/Compiler/SyntaxTree/ParseHelpers.fsi b/src/Compiler/SyntaxTree/ParseHelpers.fsi index ca58bdb1534..56d7917c1f8 100644 --- a/src/Compiler/SyntaxTree/ParseHelpers.fsi +++ b/src/Compiler/SyntaxTree/ParseHelpers.fsi @@ -229,7 +229,7 @@ val mkDefnBindings: mWhole: range * BindingSet * attrs: SynAttributes * vis: SynAccess option * attrsm: range * mIn: range option -> SynModuleDecl list -val idOfPat: parseState: IParseState -> m: range -> p: SynPat -> Ident +val idOfPat: m: range -> p: SynPat -> Ident val checkForMultipleAugmentations: m: range -> a1: 'a list -> a2: 'a list -> 'a list diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index b83bcaefefd..3f34b7ad8c4 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -5750,7 +5750,7 @@ forLoopRange: | parenPattern EQUALS declExpr forLoopDirection declExpr { let mEquals = rhs parseState 2 let spTo = DebugPointAtInOrTo.Yes(rhs parseState 4) - idOfPat parseState (rhs parseState 1) $1, Some mEquals, $3, $4, $5, spTo } + idOfPat (rhs parseState 1) $1, Some mEquals, $3, $4, $5, spTo } forLoopDirection: | TO { true } diff --git a/src/Compiler/xlf/FSComp.txt.cs.xlf b/src/Compiler/xlf/FSComp.txt.cs.xlf index 8cb70b4c49e..f1bcc7660f4 100644 --- a/src/Compiler/xlf/FSComp.txt.cs.xlf +++ b/src/Compiler/xlf/FSComp.txt.cs.xlf @@ -747,11 +747,6 @@ Výraz „while!“ - - wild card in for loop - zástupný znak ve smyčce for - - witness passing for trait constraints in F# quotations Předávání kopie clusteru pro omezení vlastností v uvozovkách v jazyce F# diff --git a/src/Compiler/xlf/FSComp.txt.de.xlf b/src/Compiler/xlf/FSComp.txt.de.xlf index 5686312be6b..f01cb6670cd 100644 --- a/src/Compiler/xlf/FSComp.txt.de.xlf +++ b/src/Compiler/xlf/FSComp.txt.de.xlf @@ -747,11 +747,6 @@ while!-Ausdruck - - wild card in for loop - Platzhalter in for-Schleife - - witness passing for trait constraints in F# quotations Zeugenübergabe für Merkmalseinschränkungen in F#-Zitaten diff --git a/src/Compiler/xlf/FSComp.txt.es.xlf b/src/Compiler/xlf/FSComp.txt.es.xlf index a3b4cfce50b..5f611795502 100644 --- a/src/Compiler/xlf/FSComp.txt.es.xlf +++ b/src/Compiler/xlf/FSComp.txt.es.xlf @@ -747,11 +747,6 @@ expresión “while!” - - wild card in for loop - carácter comodín en bucle for - - witness passing for trait constraints in F# quotations Paso de testigo para las restricciones de rasgos en las expresiones de código delimitadas de F# diff --git a/src/Compiler/xlf/FSComp.txt.fr.xlf b/src/Compiler/xlf/FSComp.txt.fr.xlf index bf46f5ee12b..2ea9add4da8 100644 --- a/src/Compiler/xlf/FSComp.txt.fr.xlf +++ b/src/Compiler/xlf/FSComp.txt.fr.xlf @@ -747,11 +747,6 @@ 'alors que!' expression - - wild card in for loop - caractère générique dans une boucle for - - witness passing for trait constraints in F# quotations Passage de témoin pour les contraintes de trait dans les quotations F# diff --git a/src/Compiler/xlf/FSComp.txt.it.xlf b/src/Compiler/xlf/FSComp.txt.it.xlf index 6d705cdc2d1..6b07089eec9 100644 --- a/src/Compiler/xlf/FSComp.txt.it.xlf +++ b/src/Compiler/xlf/FSComp.txt.it.xlf @@ -747,11 +747,6 @@ Espressione "while!" - - wild card in for loop - carattere jolly nel ciclo for - - witness passing for trait constraints in F# quotations Passaggio del testimone per vincoli di tratto in quotation F# diff --git a/src/Compiler/xlf/FSComp.txt.ja.xlf b/src/Compiler/xlf/FSComp.txt.ja.xlf index 0b35b8e6dac..9fc9cd9175e 100644 --- a/src/Compiler/xlf/FSComp.txt.ja.xlf +++ b/src/Compiler/xlf/FSComp.txt.ja.xlf @@ -747,11 +747,6 @@ 'while!' 式 - - wild card in for loop - for ループのワイルド カード - - witness passing for trait constraints in F# quotations F# 引用での特性制約に対する監視の引き渡し diff --git a/src/Compiler/xlf/FSComp.txt.ko.xlf b/src/Compiler/xlf/FSComp.txt.ko.xlf index b00f54bfa76..fe7ccf050f4 100644 --- a/src/Compiler/xlf/FSComp.txt.ko.xlf +++ b/src/Compiler/xlf/FSComp.txt.ko.xlf @@ -747,11 +747,6 @@ 'while!' 식 - - wild card in for loop - for 루프의 와일드카드 - - witness passing for trait constraints in F# quotations F# 인용의 특성 제약 조건에 대한 감시 전달 diff --git a/src/Compiler/xlf/FSComp.txt.pl.xlf b/src/Compiler/xlf/FSComp.txt.pl.xlf index b6d4b78a2d8..96745f4e708 100644 --- a/src/Compiler/xlf/FSComp.txt.pl.xlf +++ b/src/Compiler/xlf/FSComp.txt.pl.xlf @@ -747,11 +747,6 @@ Wyrażenie „while!” - - wild card in for loop - symbol wieloznaczny w pętli for - - witness passing for trait constraints in F# quotations monitor, który przekazuje ograniczenia cech języka F# diff --git a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf index ba46752a529..769e3ac28f8 100644 --- a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf +++ b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf @@ -747,11 +747,6 @@ expressão "while!" - - wild card in for loop - curinga para loop - - witness passing for trait constraints in F# quotations Passagem de testemunha para restrições de característica nas citações do F# diff --git a/src/Compiler/xlf/FSComp.txt.ru.xlf b/src/Compiler/xlf/FSComp.txt.ru.xlf index 4a13225bc33..90b482e0315 100644 --- a/src/Compiler/xlf/FSComp.txt.ru.xlf +++ b/src/Compiler/xlf/FSComp.txt.ru.xlf @@ -747,11 +747,6 @@ выражение "while!" - - wild card in for loop - подстановочный знак в цикле for - - witness passing for trait constraints in F# quotations Передача свидетеля для ограничений признаков в цитированиях F# diff --git a/src/Compiler/xlf/FSComp.txt.tr.xlf b/src/Compiler/xlf/FSComp.txt.tr.xlf index 0d880a3f23a..cc829e8efbc 100644 --- a/src/Compiler/xlf/FSComp.txt.tr.xlf +++ b/src/Compiler/xlf/FSComp.txt.tr.xlf @@ -747,11 +747,6 @@ 'while!' ifadesi - - wild card in for loop - for döngüsünde joker karakter - - witness passing for trait constraints in F# quotations F# alıntılarındaki nitelik kısıtlamaları için tanık geçirme diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf index ce2c173e893..9b234d33786 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf @@ -747,11 +747,6 @@ "while!" 表达式 - - wild card in for loop - for 循环中的通配符 - - witness passing for trait constraints in F# quotations F# 引号中特征约束的见证传递 diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf index 09d5f37bea9..2767d4dfd26 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf @@ -747,11 +747,6 @@ 'while!' 運算式 - - wild card in for loop - for 迴圈中的萬用字元 - - witness passing for trait constraints in F# quotations 見證 F# 引號中特徵條件約束的傳遞 From 4126eba4020dc31aa244b0c4be37cb36db12487e Mon Sep 17 00:00:00 2001 From: Copilot Date: Thu, 6 Aug 2026 15:10:11 +0200 Subject: [PATCH 2/3] Add release note for WildCardInForLoop flag removal Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs/release-notes/.FSharp.Compiler.Service/11.0.100.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md b/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md index cf072e1c0ce..a616980a086 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md +++ b/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md @@ -163,6 +163,7 @@ * Lower string-typed interpolated strings to `System.String.Concat` rather than the reflection-based `printf` engine, making them trim- and NativeAOT-compatible. This generalizes and ungates the previous all-string `String.Concat` optimization, so it now applies to every string-typed interpolation. ([Language suggestion #1108](https://github.com/fsharp/fslang-suggestions/issues/1108), [PR #19971](https://github.com/dotnet/fsharp/pull/19971)) * Stabilized several `preview` language features into F# 11.0 (`--langversion:11.0`, enabled by default with a .NET 11 SDK): `MethodOverloadsCache`, `ErrorOnMissingSignatureAttribute`, `DirectDelegateConstruction`, `AccessProtectedBaseFieldFromClosure`, and `RecordSpreads`. `FromEndSlicing` intentionally remains in `preview`. ([PR #20199](https://github.com/dotnet/fsharp/pull/20199)) * Interpolated string holes (e.g. `$"{x}"`) are now formatted with invariant culture (via the `string` operator) instead of the current thread culture. ([PR #19971](https://github.com/dotnet/fsharp/pull/19971)) +* Removed the always-on `WildCardInForLoop` language feature flag; `--disableLanguageFeature:WildCardInForLoop` is no longer a recognised feature name. ([Issue #20142](https://github.com/dotnet/fsharp/issues/20142), [PR #20221](https://github.com/dotnet/fsharp/pull/20221)) ### Breaking Changes From 859e9e85fb6892bcbb9af9333deb98cffc626991 Mon Sep 17 00:00:00 2001 From: Copilot App <223556219+Copilot@users.noreply.github.com> Date: Thu, 6 Aug 2026 15:39:59 +0200 Subject: [PATCH 3/3] Strip release-notes changes (NO_RELEASE_NOTES) --- docs/release-notes/.FSharp.Compiler.Service/11.0.100.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md b/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md index a616980a086..cf072e1c0ce 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md +++ b/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md @@ -163,7 +163,6 @@ * Lower string-typed interpolated strings to `System.String.Concat` rather than the reflection-based `printf` engine, making them trim- and NativeAOT-compatible. This generalizes and ungates the previous all-string `String.Concat` optimization, so it now applies to every string-typed interpolation. ([Language suggestion #1108](https://github.com/fsharp/fslang-suggestions/issues/1108), [PR #19971](https://github.com/dotnet/fsharp/pull/19971)) * Stabilized several `preview` language features into F# 11.0 (`--langversion:11.0`, enabled by default with a .NET 11 SDK): `MethodOverloadsCache`, `ErrorOnMissingSignatureAttribute`, `DirectDelegateConstruction`, `AccessProtectedBaseFieldFromClosure`, and `RecordSpreads`. `FromEndSlicing` intentionally remains in `preview`. ([PR #20199](https://github.com/dotnet/fsharp/pull/20199)) * Interpolated string holes (e.g. `$"{x}"`) are now formatted with invariant culture (via the `string` operator) instead of the current thread culture. ([PR #19971](https://github.com/dotnet/fsharp/pull/19971)) -* Removed the always-on `WildCardInForLoop` language feature flag; `--disableLanguageFeature:WildCardInForLoop` is no longer a recognised feature name. ([Issue #20142](https://github.com/dotnet/fsharp/issues/20142), [PR #20221](https://github.com/dotnet/fsharp/pull/20221)) ### Breaking Changes