diff --git a/INTERNAL.md b/INTERNAL.md
index 180d8119e2e..6207180fd31 100644
--- a/INTERNAL.md
+++ b/INTERNAL.md
@@ -64,15 +64,48 @@ it's a good idea to check the previous link for any old or stalled insertions in
Update the `insertTargetBranch` value at the bottom of `azure-pipelines.yml` in the appropriate release branch. E.g., when VS 17.3 snapped and switched to ask mode, [this PR](https://github.com/dotnet/fsharp/pull/13456/files) correctly updates the insertion target so that future builds from that F# branch will get auto-inserted to VS.
### When VS `main` is open for insertions for preview releases of VS:
-
-1. Create a new `release/dev*` branch (e.g., `release/dev17.4`) and initially set its HEAD commit to that of the previous release (e.g., `release/dev17.3` in this case).
+0. Disable auto-merges from `main` to **current** release branch, please make a change for the following file and create a pull request:
+https://github.com/dotnet/roslyn-tools/blob/6d7c182c46f8319d7922561e2c1586c7aadce19e/src/GitHubCreateMergePRs/config.xml#L52-L74
+> You should comment out the `main -> release/devXX.X` flow until step #4 is completed (``)
+2. Create a new `release/dev*` branch (e.g., `release/dev17.4`) and initially set its HEAD commit to that of the previous release (e.g., `release/dev17.3` in this case).
```console
git checkout -b release/dev17.4
git reset --hard upstream/release/dev17.3
git push --set-upstream upstream release/dev17.4
```
-3. Set the new branch to receive auto-merges from `main`, and also set the old release branch to flow into the new one. [This PR](https://github.com/dotnet/roslyn-tools/pull/1245/files) is a good example of what to do when a new `release/dev17.4` branch is created that should receive merges from both `main` and the previous release branch, `release/dev17.3`.
-4. Set the packages from the new branch to flow into the correct package feeds via the `darc` tool. To do this:
+3. Update versions in both `main` and new release branch **they need to match, so release notes bot knows which changelog file to check**
+4. Update target insertion branches in the `azure-pipelines.yml`:
+ 1. F# release branch
+ ```yaml
+ # Release branch for F#
+ # Should be 'current' release branch name, i.e. 'release/dev17.10' in dotnet/fsharp/refs/heads/main, 'release/dev17.10' in dotnet/fsharp/refs/heads/release/dev17.10 and 'release/dev17.9' in dotnet/fsharp/refs/heads/release/dev17.9
+ # Should **never** be 'main' in dotnet/fsharp/refs/heads/main, since it will start inserting to VS twice.
+ - name: FSharpReleaseBranchName
+ value: release/dev17.13
+ ```
+ 2. VS insertion branch
+ ```yaml
+ # VS Insertion branch name (NOT the same as F# branch)
+ # Should be previous release branch or 'main' in 'main' and 'main' in release branch
+ # (since for all *new* release branches we insert into VS main and for all *previous* releases we insert into corresponding VS release),
+ # i.e. 'rel/d17.9' *or* 'main' in dotnet/fsharp/refs/heads/main and 'main' in F# dotnet/fsharp/refs/heads/release/dev17.10 (latest release branch)
+ - name: VSInsertionTargetBranchName
+ value: main
+ ```
+ > [!NOTE] Note
+ > For the **old** release branch `VSInsertionTargetBranchName` should point to corresponding VS release target branch (e.g. should be `rel/d17.13` in the F# repo branch `release/dev17.13`)
+ > For both `main` and **new** release branch `VSInsertionTargetBranchName` should be `main`.
+ >
+ > `FSharpReleaseBranchName` should **always** be the most recent in `main` and corresponding release branch name in release branches.
+
+ 3. Oneloc branch:
+ ```yaml
+ # Localization: we only run it for specific release branches
+ - ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/release/dev17.13') }}:
+ ```
+5. Set the new branch to receive auto-merges from `main`, and also set the old release branch to flow into the new one. [This PR](https://github.com/dotnet/roslyn-tools/pull/1245/files) is a good example of what to do when a new `release/dev17.4` branch is created that should receive merges from both `main` and the previous release branch, `release/dev17.3`. Old release branch should stop receiving updates from the `main`.
+
+6. Set the packages from the new branch to flow into the correct package feeds via the `darc` tool. To do this:
1. Ensure the latest `darc` tool is installed by running `eng/common/darc-init.ps1`.
2. (only needed once) Run the command `darc authenticate`. A text file will be opened with instructions on how to populate access tokens.
3. Check the current package/channel subscriptions by running `darc get-default-channels --source-repo fsharp`. For this example, notice that the latest subscription shows the F# branch `release/dev17.3` is getting added to the `VS 17.3` channel.
diff --git a/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md b/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md
index de4626be28d..d0d1023dae6 100644
--- a/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md
+++ b/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md
@@ -28,5 +28,6 @@
* Better ranges for `inherit` error reporting. ([PR #17879](https://github.com/dotnet/fsharp/pull/17879))
* Better ranges for `inherit` `struct` error reporting. ([PR #17886](https://github.com/dotnet/fsharp/pull/17886))
* Better ranges for `inherit` objects error reporting. ([PR #17893](https://github.com/dotnet/fsharp/pull/17893))
+* Better ranges for #nowarn error reporting; bring back #nowarn warnings for --langVersion:80; add warnings under feature flag ([PR #17871](https://github.com/dotnet/fsharp/pull/17871))
### Breaking Changes
diff --git a/src/Compiler/Driver/CompilerConfig.fs b/src/Compiler/Driver/CompilerConfig.fs
index bbdc6ad5933..ac39792977a 100644
--- a/src/Compiler/Driver/CompilerConfig.fs
+++ b/src/Compiler/Driver/CompilerConfig.fs
@@ -22,6 +22,7 @@ open FSharp.Compiler.DiagnosticsLogger
open FSharp.Compiler.Features
open FSharp.Compiler.IO
open FSharp.Compiler.CodeAnalysis
+open FSharp.Compiler.Syntax
open FSharp.Compiler.Text
open FSharp.Compiler.Text.Range
open FSharp.Compiler.Xml
@@ -91,24 +92,61 @@ let ResolveFileUsingPaths (paths, m, fileName) =
let searchMessage = String.concat "\n " paths
raise (FileNameNotResolved(fileName, searchMessage, m))
-let GetWarningNumber (m, warningNumber: string, prefixSupported) =
- try
- let warningNumber =
- if warningNumber.StartsWithOrdinal "FS" then
- if prefixSupported then
- warningNumber.Substring 2
- else
- raise (new ArgumentException())
- else
- warningNumber
+[]
+type WarningNumberSource =
+ | CommandLineOption
+ | CompilerDirective
+
+[]
+type WarningDescription =
+ | Int32 of int
+ | String of string
+ | Ident of Ident
+
+let GetWarningNumber (m, description: WarningDescription, langVersion: LanguageVersion, source: WarningNumberSource) =
+ let argFeature = LanguageFeature.ParsedHashDirectiveArgumentNonQuotes
+
+ let parse (numStr: string) =
+ let trimPrefix (s: string) =
+ if s.StartsWithOrdinal "FS" then s[2..] else s
+
+ let tryParseIntWithFailAction (s: string) (failAction: unit -> unit) =
+ match Int32.TryParse s with
+ | true, n -> Some n
+ | false, _ ->
+ failAction ()
+ None
+
+ let warnInvalid () =
+ warning (Error(FSComp.SR.buildInvalidWarningNumber numStr, m))
+
+ if source = WarningNumberSource.CommandLineOption then
+ tryParseIntWithFailAction (trimPrefix numStr) id
+ elif langVersion.SupportsFeature(argFeature) then
+ tryParseIntWithFailAction (trimPrefix numStr) warnInvalid
+ else
+ tryParseIntWithFailAction numStr id
- if Char.IsDigit(warningNumber[0]) then
- Some(int32 warningNumber)
+ match description with
+ | WarningDescription.Int32 n ->
+ if tryCheckLanguageFeatureAndRecover langVersion argFeature m then
+ Some n
+ else
+ None
+ | WarningDescription.String s ->
+ if
+ source = WarningNumberSource.CompilerDirective
+ && not (langVersion.SupportsFeature argFeature)
+ && s.StartsWithOrdinal "FS"
+ then
+ warning (Error(FSComp.SR.buildInvalidWarningNumber s, m))
+
+ parse s
+ | WarningDescription.Ident ident ->
+ if tryCheckLanguageFeatureAndRecover langVersion argFeature m then
+ parse ident.idText
else
None
- with _ ->
- warning (Error(FSComp.SR.buildInvalidWarningNumber warningNumber, m))
- None
let ComputeMakePathAbsolute implicitIncludeDir (path: string) =
try
@@ -934,7 +972,7 @@ type TcConfigBuilder =
member tcConfigB.TurnWarningOff(m, s: string) =
use _ = UseBuildPhase BuildPhase.Parameter
- match GetWarningNumber(m, s, tcConfigB.langVersion.SupportsFeature(LanguageFeature.ParsedHashDirectiveArgumentNonQuotes)) with
+ match GetWarningNumber(m, WarningDescription.String s, tcConfigB.langVersion, WarningNumberSource.CommandLineOption) with
| None -> ()
| Some n ->
// nowarn:62 turns on mlCompatibility, e.g. shows ML compat items in intellisense menus
@@ -949,7 +987,7 @@ type TcConfigBuilder =
member tcConfigB.TurnWarningOn(m, s: string) =
use _ = UseBuildPhase BuildPhase.Parameter
- match GetWarningNumber(m, s, tcConfigB.langVersion.SupportsFeature(LanguageFeature.ParsedHashDirectiveArgumentNonQuotes)) with
+ match GetWarningNumber(m, WarningDescription.String s, tcConfigB.langVersion, WarningNumberSource.CommandLineOption) with
| None -> ()
| Some n ->
// warnon 62 turns on mlCompatibility, e.g. shows ML compat items in intellisense menus
diff --git a/src/Compiler/Driver/CompilerConfig.fsi b/src/Compiler/Driver/CompilerConfig.fsi
index 24bcbf82817..8ea6f5afe5d 100644
--- a/src/Compiler/Driver/CompilerConfig.fsi
+++ b/src/Compiler/Driver/CompilerConfig.fsi
@@ -17,6 +17,7 @@ open FSharp.Compiler.Diagnostics
open FSharp.Compiler.DiagnosticsLogger
open FSharp.Compiler.Features
open FSharp.Compiler.CodeAnalysis
+open FSharp.Compiler.Syntax
open FSharp.Compiler.Text
open FSharp.Compiler.BuildGraph
@@ -926,7 +927,20 @@ val TryResolveFileUsingPaths: paths: string seq * m: range * fileName: string ->
val ResolveFileUsingPaths: paths: string seq * m: range * fileName: string -> string
-val GetWarningNumber: m: range * warningNumber: string * prefixSupported: bool -> int option
+[]
+type WarningNumberSource =
+ | CommandLineOption
+ | CompilerDirective
+
+[]
+type WarningDescription =
+ | Int32 of int
+ | String of string
+ | Ident of Ident
+
+val GetWarningNumber:
+ m: range * description: WarningDescription * langVersion: LanguageVersion * source: WarningNumberSource ->
+ int option
/// Get the name used for FSharp.Core
val GetFSharpCoreLibraryName: unit -> string
diff --git a/src/Compiler/Driver/CompilerOptions.fs b/src/Compiler/Driver/CompilerOptions.fs
index 96c40724ef4..ee57936c7ee 100644
--- a/src/Compiler/Driver/CompilerOptions.fs
+++ b/src/Compiler/Driver/CompilerOptions.fs
@@ -832,7 +832,7 @@ let errorsAndWarningsFlags (tcConfigB: TcConfigBuilder) =
CompilerOption(
"nowarn",
tagWarnList,
- OptionStringList(fun n -> tcConfigB.TurnWarningOff(rangeCmdArgs, trimFS n)),
+ OptionStringList(fun n -> tcConfigB.TurnWarningOff(rangeCmdArgs, n)),
None,
Some(FSComp.SR.optsNowarn ())
)
@@ -840,7 +840,7 @@ let errorsAndWarningsFlags (tcConfigB: TcConfigBuilder) =
CompilerOption(
"warnon",
tagWarnList,
- OptionStringList(fun n -> tcConfigB.TurnWarningOn(rangeCmdArgs, trimFS n)),
+ OptionStringList(fun n -> tcConfigB.TurnWarningOn(rangeCmdArgs, n)),
None,
Some(FSComp.SR.optsWarnOn ())
)
diff --git a/src/Compiler/Driver/ParseAndCheckInputs.fs b/src/Compiler/Driver/ParseAndCheckInputs.fs
index a6804bfe746..6423e5f9f19 100644
--- a/src/Compiler/Driver/ParseAndCheckInputs.fs
+++ b/src/Compiler/Driver/ParseAndCheckInputs.fs
@@ -217,25 +217,23 @@ let PostParseModuleSpec (_i, defaultNamespace, isLastCompiland, fileName, intf)
SynModuleOrNamespaceSig(lid, isRecursive, kind, decls, xmlDoc, attributes, None, range, trivia)
let GetScopedPragmasForHashDirective hd (langVersion: LanguageVersion) =
- let supportsNonStringArguments =
- langVersion.SupportsFeature(LanguageFeature.ParsedHashDirectiveArgumentNonQuotes)
-
[
match hd with
- | ParsedHashDirective("nowarn", numbers, m) ->
- for s in numbers do
- let warningNumber =
- match supportsNonStringArguments, s with
- | _, ParsedHashDirectiveArgument.SourceIdentifier _ -> None
- | true, ParsedHashDirectiveArgument.LongIdent _ -> None
- | true, ParsedHashDirectiveArgument.Int32(n, _) -> GetWarningNumber(m, string n, true)
- | true, ParsedHashDirectiveArgument.Ident(s, _) -> GetWarningNumber(m, s.idText, true)
- | _, ParsedHashDirectiveArgument.String(s, _, _) -> GetWarningNumber(m, s, true)
+ | ParsedHashDirective("nowarn", args, _) ->
+ for arg in args do
+ let rangeAndDescription =
+ match arg with
+ | ParsedHashDirectiveArgument.Int32(n, m) -> Some(m, WarningDescription.Int32 n)
+ | ParsedHashDirectiveArgument.Ident(ident, m) -> Some(m, WarningDescription.Ident ident)
+ | ParsedHashDirectiveArgument.String(s, _, m) -> Some(m, WarningDescription.String s)
| _ -> None
- match warningNumber with
+ match rangeAndDescription with
| None -> ()
- | Some n -> ScopedPragma.WarningOff(m, n)
+ | Some(m, description) ->
+ match GetWarningNumber(m, description, langVersion, WarningNumberSource.CompilerDirective) with
+ | None -> ()
+ | Some n -> ScopedPragma.WarningOff(m, n)
| _ -> ()
]
@@ -912,7 +910,8 @@ let ProcessMetaCommandsFromInput
state
| ParsedHashDirective("nowarn", hashArguments, m) ->
- let arguments = parsedHashDirectiveArguments hashArguments tcConfig.langVersion
+ let arguments = parsedHashDirectiveArgumentsNoCheck hashArguments
+
List.fold (fun state d -> nowarnF state (m, d)) state arguments
| ParsedHashDirective(("reference" | "r") as c, [], m) ->
diff --git a/src/Compiler/Interactive/fsi.fs b/src/Compiler/Interactive/fsi.fs
index 63e99d1b148..02dbb98e2df 100644
--- a/src/Compiler/Interactive/fsi.fs
+++ b/src/Compiler/Interactive/fsi.fs
@@ -3839,7 +3839,8 @@ type FsiInteractionProcessor
istate, Completed None
| ParsedHashDirective("nowarn", nowarnArguments, m) ->
- let numbers = (parsedHashDirectiveArguments nowarnArguments tcConfigB.langVersion)
+ let numbers = (parsedHashDirectiveArgumentsNoCheck nowarnArguments)
+
List.iter (fun (d: string) -> tcConfigB.TurnWarningOff(m, d)) numbers
istate, Completed None
diff --git a/src/Compiler/SyntaxTree/SyntaxTreeOps.fs b/src/Compiler/SyntaxTree/SyntaxTreeOps.fs
index 8dc46313341..7b392487adb 100644
--- a/src/Compiler/SyntaxTree/SyntaxTreeOps.fs
+++ b/src/Compiler/SyntaxTree/SyntaxTreeOps.fs
@@ -1005,6 +1005,16 @@ let parsedHashDirectiveArguments (input: ParsedHashDirectiveArgument list) (lang
| false -> None)
input
+let parsedHashDirectiveArgumentsNoCheck (input: ParsedHashDirectiveArgument list) =
+ List.map
+ (function
+ | ParsedHashDirectiveArgument.String(s, _, _) -> s
+ | ParsedHashDirectiveArgument.SourceIdentifier(_, v, _) -> v
+ | ParsedHashDirectiveArgument.Int32(n, m) -> string n
+ | ParsedHashDirectiveArgument.Ident(ident, m) -> ident.idText
+ | ParsedHashDirectiveArgument.LongIdent(ident, m) -> longIdentToString ident)
+ input
+
let parsedHashDirectiveStringArguments (input: ParsedHashDirectiveArgument list) (_langVersion: LanguageVersion) =
List.choose
(function
diff --git a/src/Compiler/SyntaxTree/SyntaxTreeOps.fsi b/src/Compiler/SyntaxTree/SyntaxTreeOps.fsi
index 568e745a167..3ca2b58be43 100644
--- a/src/Compiler/SyntaxTree/SyntaxTreeOps.fsi
+++ b/src/Compiler/SyntaxTree/SyntaxTreeOps.fsi
@@ -322,6 +322,8 @@ val synExprContainsError: inpExpr: SynExpr -> bool
val parsedHashDirectiveArguments: ParsedHashDirectiveArgument list -> LanguageVersion -> string list
+val parsedHashDirectiveArgumentsNoCheck: ParsedHashDirectiveArgument list -> string list
+
val parsedHashDirectiveStringArguments: ParsedHashDirectiveArgument list -> LanguageVersion -> string list
/// 'e1 && e2'
diff --git a/tests/FSharp.Compiler.ComponentTests/CompilerDirectives/NonStringArgs.fs b/tests/FSharp.Compiler.ComponentTests/CompilerDirectives/NonStringArgs.fs
index 080811bd7c2..32f40de89d2 100644
--- a/tests/FSharp.Compiler.ComponentTests/CompilerDirectives/NonStringArgs.fs
+++ b/tests/FSharp.Compiler.ComponentTests/CompilerDirectives/NonStringArgs.fs
@@ -24,15 +24,20 @@ module NonStringArgs =
|> asExe
|> compile
|> shouldFail
- |> withDiagnostics[
+ |> withDiagnostics [
if languageVersion = "8.0" then
- (Warning 203, Line 6, Col 1, Line 6, Col 13, "Invalid warning number 'FS'")
(Error 3350, Line 3, Col 9, Line 3, Col 11, "Feature '# directives with non-quoted string arguments' is not available in F# 8.0. Please use language version 9.0 or greater.")
(Error 3350, Line 4, Col 9, Line 4, Col 15, "Feature '# directives with non-quoted string arguments' is not available in F# 8.0. Please use language version 9.0 or greater.")
(Error 3350, Line 5, Col 9, Line 5, Col 13, "Feature '# directives with non-quoted string arguments' is not available in F# 8.0. Please use language version 9.0 or greater.")
+ (Warning 203, Line 6, Col 9, Line 6, Col 13, "Invalid warning number 'FS'");
+ (Warning 203, Line 7, Col 9, Line 7, Col 17, "Invalid warning number 'FSBLAH'");
else
- (Warning 203, Line 3, Col 1, Line 3, Col 11, "Invalid warning number 'FS'")
- (Warning 203, Line 6, Col 1, Line 6, Col 13, "Invalid warning number 'FS'")
+ (Warning 203, Line 3, Col 9, Line 3, Col 11, "Invalid warning number 'FS'");
+ (Warning 203, Line 4, Col 9, Line 4, Col 15, "Invalid warning number 'FSBLAH'");
+ (Warning 203, Line 5, Col 9, Line 5, Col 13, "Invalid warning number 'ACME'");
+ (Warning 203, Line 6, Col 9, Line 6, Col 13, "Invalid warning number 'FS'");
+ (Warning 203, Line 7, Col 9, Line 7, Col 17, "Invalid warning number 'FSBLAH'");
+ (Warning 203, Line 8, Col 9, Line 8, Col 15, "Invalid warning number 'ACME'")
]
@@ -55,14 +60,20 @@ module NonStringArgs =
|> asExe
|> compile
|> shouldFail
- |> withDiagnostics[
+ |> withDiagnostics [
if languageVersion = "8.0" then
- (Warning 203, Line 2, Col 1, Line 9, Col 11, "Invalid warning number 'FS'")
(Error 3350, Line 4, Col 5, Line 4, Col 7, "Feature '# directives with non-quoted string arguments' is not available in F# 8.0. Please use language version 9.0 or greater.")
(Error 3350, Line 5, Col 5, Line 5, Col 11, "Feature '# directives with non-quoted string arguments' is not available in F# 8.0. Please use language version 9.0 or greater.")
(Error 3350, Line 6, Col 5, Line 6, Col 9, "Feature '# directives with non-quoted string arguments' is not available in F# 8.0. Please use language version 9.0 or greater.")
+ (Warning 203, Line 7, Col 5, Line 7, Col 9, "Invalid warning number 'FS'");
+ (Warning 203, Line 8, Col 5, Line 8, Col 13, "Invalid warning number 'FSBLAH'");
else
- (Warning 203, Line 2, Col 1, Line 9, Col 11, "Invalid warning number 'FS'")
+ (Warning 203, Line 4, Col 5, Line 4, Col 7, "Invalid warning number 'FS'");
+ (Warning 203, Line 5, Col 5, Line 5, Col 11, "Invalid warning number 'FSBLAH'");
+ (Warning 203, Line 6, Col 5, Line 6, Col 9, "Invalid warning number 'ACME'");
+ (Warning 203, Line 7, Col 5, Line 7, Col 9, "Invalid warning number 'FS'");
+ (Warning 203, Line 8, Col 5, Line 8, Col 13, "Invalid warning number 'FSBLAH'");
+ (Warning 203, Line 9, Col 5, Line 9, Col 11, "Invalid warning number 'ACME'")
]
@@ -81,12 +92,18 @@ module NonStringArgs =
|> shouldFail
|> withDiagnostics [
if languageVersion = "8.0" then
- (Warning 203, Line 3, Col 1, Line 3, Col 44, "Invalid warning number 'FS'")
(Error 3350, Line 3, Col 9, Line 3, Col 11, "Feature '# directives with non-quoted string arguments' is not available in F# 8.0. Please use language version 9.0 or greater.")
(Error 3350, Line 3, Col 12, Line 3, Col 18, "Feature '# directives with non-quoted string arguments' is not available in F# 8.0. Please use language version 9.0 or greater.")
(Error 3350, Line 3, Col 19, Line 3, Col 23, "Feature '# directives with non-quoted string arguments' is not available in F# 8.0. Please use language version 9.0 or greater.")
+ (Warning 203, Line 3, Col 24, Line 3, Col 28, "Invalid warning number 'FS'");
+ (Warning 203, Line 3, Col 29, Line 3, Col 37, "Invalid warning number 'FSBLAH'");
else
- (Warning 203, Line 3, Col 1, Line 3, Col 44, "Invalid warning number 'FS'")
+ (Warning 203, Line 3, Col 9, Line 3, Col 11, "Invalid warning number 'FS'");
+ (Warning 203, Line 3, Col 12, Line 3, Col 18, "Invalid warning number 'FSBLAH'");
+ (Warning 203, Line 3, Col 19, Line 3, Col 23, "Invalid warning number 'ACME'");
+ (Warning 203, Line 3, Col 24, Line 3, Col 28, "Invalid warning number 'FS'");
+ (Warning 203, Line 3, Col 29, Line 3, Col 37, "Invalid warning number 'FSBLAH'");
+ (Warning 203, Line 3, Col 38, Line 3, Col 44, "Invalid warning number 'ACME'")
]
@@ -128,12 +145,32 @@ module DoBinding =
(Warning 1104, Line 5, Col 15, Line 5, Col 31, "Identifiers containing '@' are reserved for use in F# code generation")
(Error 3350, Line 2, Col 9, Line 2, Col 11, "Feature '# directives with non-quoted string arguments' is not available in F# 8.0. Please use language version 9.0 or greater.")
(Error 3350, Line 2, Col 12, Line 2, Col 18, "Feature '# directives with non-quoted string arguments' is not available in F# 8.0. Please use language version 9.0 or greater.")
+ (Warning 203, Line 2, Col 26, Line 2, Col 34, "Invalid warning number 'FS3221'")
]
else
compileResult
|> shouldSucceed
+ []
+ []
+ []
+ let ``#nowarn - errors - compiler options`` (languageVersion) =
+
+ FSharp """
+match None with None -> () // creates FS0025 - ignored due to flag
+"" // creates FS0020 - ignored due to flag
+ """ // creates FS0988 - not ignored, different flag prefix
+ |> withLangVersion languageVersion
+ |> withOptions ["--nowarn:NU0988"; "--nowarn:FS25"; "--nowarn:20"; "--nowarn:FS"; "--nowarn:FSBLAH"]
+ |> asExe
+ |> compile
+ |> shouldFail
+ |> withDiagnostics [
+ (Warning 988, Line 3, Col 3, Line 3, Col 3, "Main module of program is empty: nothing will happen when it is run")
+ ]
+
+
[]
[]
[]
@@ -248,7 +285,7 @@ printfn "Hello, World"
|> asExe
|> compile
|> shouldFail
- |> withDiagnostics[
+ |> withDiagnostics [
(Error 76, Line 2, Col 9, Line 2, Col 11, "This directive may only be used in F# script files (extensions .fsx or .fsscript). Either remove the directive, move this code to a script file or delimit the directive with '#if INTERACTIVE'/'#endif'.")
(Error 76, Line 3, Col 9, Line 3, Col 14, "This directive may only be used in F# script files (extensions .fsx or .fsscript). Either remove the directive, move this code to a script file or delimit the directive with '#if INTERACTIVE'/'#endif'.")
(Error 76, Line 4, Col 9, Line 4, Col 17, "This directive may only be used in F# script files (extensions .fsx or .fsscript). Either remove the directive, move this code to a script file or delimit the directive with '#if INTERACTIVE'/'#endif'.")
diff --git a/tests/service/data/SyntaxTree/ParsedHashDirective/TripleQuoteStringAsParsedHashDirectiveArgument.fs.bsl b/tests/service/data/SyntaxTree/ParsedHashDirective/TripleQuoteStringAsParsedHashDirectiveArgument.fs.bsl
index 391a462d0b8..fd629563d32 100644
--- a/tests/service/data/SyntaxTree/ParsedHashDirective/TripleQuoteStringAsParsedHashDirectiveArgument.fs.bsl
+++ b/tests/service/data/SyntaxTree/ParsedHashDirective/TripleQuoteStringAsParsedHashDirectiveArgument.fs.bsl
@@ -2,7 +2,7 @@ ImplFile
(ParsedImplFileInput
("/root/ParsedHashDirective/TripleQuoteStringAsParsedHashDirectiveArgument.fs",
false, QualifiedNameOfFile TripleQuoteStringAsParsedHashDirectiveArgument,
- [WarningOff ((2,0--2,16), 40)], [],
+ [WarningOff ((2,8--2,16), 40)], [],
[SynModuleOrNamespace
([TripleQuoteStringAsParsedHashDirectiveArgument], false, AnonModule,
[HashDirective