Skip to content

Commit c6c74bd

Browse files
committed
disable #r
1 parent 380130c commit c6c74bd

File tree

10 files changed

+111
-56
lines changed

10 files changed

+111
-56
lines changed

src/Compiler/Driver/CompilerConfig.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -925,7 +925,7 @@ type TcConfigBuilder =
925925
member tcConfigB.TurnWarningOff(m, s: string) =
926926
use _ = UseBuildPhase BuildPhase.Parameter
927927

928-
match GetWarningNumber(m, s, tcConfigB.langVersion.SupportsFeature(LanguageFeature.ParsedHashDirectiveArgumentNonString)) with
928+
match GetWarningNumber(m, s, tcConfigB.langVersion.SupportsFeature(LanguageFeature.ParsedHashDirectiveArgumentNonQuotes)) with
929929
| None -> ()
930930
| Some n ->
931931
// nowarn:62 turns on mlCompatibility, e.g. shows ML compat items in intellisense menus
@@ -940,7 +940,7 @@ type TcConfigBuilder =
940940
member tcConfigB.TurnWarningOn(m, s: string) =
941941
use _ = UseBuildPhase BuildPhase.Parameter
942942

943-
match GetWarningNumber(m, s, tcConfigB.langVersion.SupportsFeature(LanguageFeature.ParsedHashDirectiveArgumentNonString)) with
943+
match GetWarningNumber(m, s, tcConfigB.langVersion.SupportsFeature(LanguageFeature.ParsedHashDirectiveArgumentNonQuotes)) with
944944
| None -> ()
945945
| Some n ->
946946
// warnon 62 turns on mlCompatibility, e.g. shows ML compat items in intellisense menus

src/Compiler/Driver/ParseAndCheckInputs.fs

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ let PostParseModuleSpec (_i, defaultNamespace, isLastCompiland, fileName, intf)
218218

219219
let GetScopedPragmasForHashDirective hd (langVersion: LanguageVersion) =
220220
let supportsNonStringArguments =
221-
langVersion.SupportsFeature(LanguageFeature.ParsedHashDirectiveArgumentNonString)
221+
langVersion.SupportsFeature(LanguageFeature.ParsedHashDirectiveArgumentNonQuotes)
222222

223223
[
224224
match hd with
@@ -897,11 +897,14 @@ let ProcessMetaCommandsFromInput
897897

898898
try
899899
match hash with
900-
| ParsedHashDirective("I", ParsedHashDirectiveStringArguments args, m) ->
900+
| ParsedHashDirective("I", hashArguments, m) ->
901901
if not canHaveScriptMetaCommands then
902902
errorR (HashIncludeNotAllowedInNonScript m)
903903

904-
match args with
904+
let arguments =
905+
parsedHashDirectiveStringArguments hashArguments tcConfig.langVersion
906+
907+
match arguments with
905908
| [ path ] ->
906909
matchedm <- m
907910
tcConfig.AddIncludePath(m, path, pathOfMetaCommandSource)
@@ -910,34 +913,47 @@ let ProcessMetaCommandsFromInput
910913
errorR (Error(FSComp.SR.buildInvalidHashIDirective (), m))
911914
state
912915

913-
| ParsedHashDirective("nowarn", ParsedHashDirectiveArguments numbers, m) ->
914-
List.fold (fun state d -> nowarnF state (m, d)) state numbers
916+
| ParsedHashDirective("nowarn", hashArguments, m) ->
917+
let arguments = parsedHashDirectiveArguments hashArguments tcConfig.langVersion
918+
List.fold (fun state d -> nowarnF state (m, d)) state arguments
915919

916-
| ParsedHashDirective(("reference" | "r"), ParsedHashDirectiveStringArguments args, m) ->
920+
| ParsedHashDirective(("reference" | "r"), hashArguments, m) ->
917921
matchedm <- m
918-
ProcessDependencyManagerDirective Directive.Resolution args m state
919922

920-
| ParsedHashDirective("i", ParsedHashDirectiveStringArguments args, m) ->
923+
let arguments =
924+
parsedHashDirectiveStringArguments hashArguments tcConfig.langVersion
925+
926+
ProcessDependencyManagerDirective Directive.Resolution arguments m state
927+
928+
| ParsedHashDirective("i", hashArguments, m) ->
921929
matchedm <- m
922-
ProcessDependencyManagerDirective Directive.Include args m state
923930

924-
| ParsedHashDirective("load", ParsedHashDirectiveArguments args, m) ->
931+
let arguments =
932+
parsedHashDirectiveStringArguments hashArguments tcConfig.langVersion
933+
934+
ProcessDependencyManagerDirective Directive.Include arguments m state
935+
936+
| ParsedHashDirective("load", hashArguments, m) ->
925937
if not canHaveScriptMetaCommands then
926938
errorR (HashDirectiveNotAllowedInNonScript m)
927939

928-
match args with
940+
let arguments = parsedHashDirectiveArguments hashArguments tcConfig.langVersion
941+
942+
match arguments with
929943
| _ :: _ ->
930944
matchedm <- m
931-
args |> List.iter (fun path -> loadSourceF state (m, path))
945+
arguments |> List.iter (fun path -> loadSourceF state (m, path))
932946
| _ -> errorR (Error(FSComp.SR.buildInvalidHashloadDirective (), m))
933947

934948
state
935949

936-
| ParsedHashDirective("time", ParsedHashDirectiveArguments args, m) ->
950+
| ParsedHashDirective("time", hashArguments, m) ->
937951
if not canHaveScriptMetaCommands then
938952
errorR (HashDirectiveNotAllowedInNonScript m)
939953

940-
match args with
954+
let arguments = parsedHashDirectiveArguments hashArguments tcConfig.langVersion
955+
956+
match arguments with
941957
| [] -> ()
942958
| [ "on" | "off" ] -> ()
943959
| _ -> errorR (Error(FSComp.SR.buildInvalidHashtimeDirective (), m))

src/Compiler/Facilities/LanguageFeatures.fs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ type LanguageFeature =
8989
| LowerInterpolatedStringToConcat
9090
| LowerIntegralRangesToFastLoops
9191
| LowerSimpleMappingsInComprehensionsToDirectCallsToMap
92-
| ParsedHashDirectiveArgumentNonString
92+
| ParsedHashDirectiveArgumentNonQuotes
9393

9494
/// LanguageVersion management
9595
type LanguageVersion(versionText) =
@@ -206,7 +206,7 @@ type LanguageVersion(versionText) =
206206
LanguageFeature.LowerInterpolatedStringToConcat, previewVersion
207207
LanguageFeature.LowerIntegralRangesToFastLoops, previewVersion
208208
LanguageFeature.LowerSimpleMappingsInComprehensionsToDirectCallsToMap, previewVersion
209-
LanguageFeature.ParsedHashDirectiveArgumentNonString, previewVersion
209+
LanguageFeature.ParsedHashDirectiveArgumentNonQuotes, previewVersion
210210
]
211211

212212
static let defaultLanguageVersion = LanguageVersion("default")
@@ -355,7 +355,7 @@ type LanguageVersion(versionText) =
355355
| LanguageFeature.LowerIntegralRangesToFastLoops -> FSComp.SR.featureLowerIntegralRangesToFastLoops ()
356356
| LanguageFeature.LowerSimpleMappingsInComprehensionsToDirectCallsToMap ->
357357
FSComp.SR.featureLowerSimpleMappingsInComprehensionsToDirectCallsToMap ()
358-
| LanguageFeature.ParsedHashDirectiveArgumentNonString -> FSComp.SR.featureParsedHashDirectiveArgumentNonString ()
358+
| LanguageFeature.ParsedHashDirectiveArgumentNonQuotes -> FSComp.SR.featureParsedHashDirectiveArgumentNonString ()
359359

360360
/// Get a version string associated with the given feature.
361361
static member GetFeatureVersionString feature =

src/Compiler/Facilities/LanguageFeatures.fsi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ type LanguageFeature =
8080
| LowerInterpolatedStringToConcat
8181
| LowerIntegralRangesToFastLoops
8282
| LowerSimpleMappingsInComprehensionsToDirectCallsToMap
83-
| ParsedHashDirectiveArgumentNonString
83+
| ParsedHashDirectiveArgumentNonQuotes
8484

8585
/// LanguageVersion management
8686
type LanguageVersion =

src/Compiler/Interactive/fsi.fs

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3727,34 +3727,60 @@ type FsiInteractionProcessor
37273727
/// Partially process a hash directive, leaving state in packageManagerLines and required assemblies
37283728
let PartiallyProcessHashDirective (ctok, istate, hash, diagnosticsLogger: DiagnosticsLogger) =
37293729
match hash with
3730-
| ParsedHashDirective("load", ParsedHashDirectiveArguments sourceFiles, m) ->
3730+
| ParsedHashDirective("load", hashArguments, m) ->
3731+
let sourceFiles = parsedHashDirectiveArguments hashArguments tcConfigB.langVersion
3732+
37313733
let istate =
37323734
fsiDynamicCompiler.EvalSourceFiles(ctok, istate, m, sourceFiles, lexResourceManager, diagnosticsLogger)
37333735

37343736
istate, Completed None
37353737

3736-
| ParsedHashDirective(("reference" | "r"), ParsedHashDirectiveStringArguments [ path ], m) ->
3738+
| ParsedHashDirective(("reference" | "r"), hashArguments, m) ->
3739+
let path =
3740+
(parsedHashDirectiveStringArguments hashArguments tcConfigB.langVersion)
3741+
|> List.head
3742+
37373743
fsiDynamicCompiler.PartiallyProcessReferenceOrPackageIncudePathDirective(ctok, istate, Directive.Resolution, path, true, m)
37383744

3739-
| ParsedHashDirective("i", ParsedHashDirectiveStringArguments [ path ], m) ->
3745+
| ParsedHashDirective("i", hashArguments, m) ->
3746+
let path =
3747+
(parsedHashDirectiveStringArguments hashArguments tcConfigB.langVersion)
3748+
|> List.head
3749+
37403750
fsiDynamicCompiler.PartiallyProcessReferenceOrPackageIncudePathDirective(ctok, istate, Directive.Include, path, true, m)
37413751

3742-
| ParsedHashDirective("I", ParsedHashDirectiveStringArguments [ path ], m) ->
3752+
| ParsedHashDirective("I", hashArguments, m) ->
3753+
let path =
3754+
(parsedHashDirectiveStringArguments hashArguments tcConfigB.langVersion)
3755+
|> List.head
3756+
37433757
tcConfigB.AddIncludePath(m, path, tcConfigB.implicitIncludeDir)
37443758
let tcConfig = TcConfig.Create(tcConfigB, validate = false)
37453759
fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiDidAHashI (tcConfig.MakePathAbsolute path))
37463760
istate, Completed None
37473761

3748-
| ParsedHashDirective("cd", ParsedHashDirectiveStringArguments [ path ], m) ->
3762+
| ParsedHashDirective("cd", hashArguments, m) ->
3763+
let path =
3764+
(parsedHashDirectiveStringArguments hashArguments tcConfigB.langVersion)
3765+
|> List.head
3766+
37493767
ChangeDirectory path m
37503768
istate, Completed None
37513769

3752-
| ParsedHashDirective("silentCd", ParsedHashDirectiveStringArguments [ path ], m) ->
3770+
| ParsedHashDirective("silentCd", hashArguments, m) ->
3771+
let path =
3772+
(parsedHashDirectiveStringArguments hashArguments tcConfigB.langVersion)
3773+
|> List.head
3774+
37533775
ChangeDirectory path m
37543776
fsiConsolePrompt.SkipNext() (* "silent" directive *)
37553777
istate, Completed None
37563778

3757-
| ParsedHashDirective("interactiveprompt", ParsedHashDirectiveArguments [ "show" | "hide" | "skip" as showPrompt ], m) ->
3779+
| ParsedHashDirective("interactiveprompt", hashArguments, m) ->
3780+
let showPrompt =
3781+
(parsedHashDirectiveStringArguments hashArguments tcConfigB.langVersion)
3782+
|> List.head
3783+
37583784
match showPrompt with
37593785
| "show" -> fsiConsolePrompt.ShowPrompt <- true
37603786
| "hide" -> fsiConsolePrompt.ShowPrompt <- false
@@ -3780,7 +3806,10 @@ type FsiInteractionProcessor
37803806

37813807
istate, Completed None
37823808

3783-
| ParsedHashDirective("time", ParsedHashDirectiveArguments [ "on" | "off" as v ], _) ->
3809+
| ParsedHashDirective("time", hashArguments, _) ->
3810+
let v =
3811+
(parsedHashDirectiveArguments hashArguments tcConfigB.langVersion) |> List.head
3812+
37843813
if v <> "on" then
37853814
fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiTurnedTimingOff ())
37863815
else
@@ -3789,7 +3818,8 @@ type FsiInteractionProcessor
37893818
let istate = { istate with timing = (v = "on") }
37903819
istate, Completed None
37913820

3792-
| ParsedHashDirective("nowarn", ParsedHashDirectiveArguments numbers, m) ->
3821+
| ParsedHashDirective("nowarn", hashArguments, m) ->
3822+
let numbers = (parsedHashDirectiveArguments hashArguments tcConfigB.langVersion)
37933823
List.iter (fun (d: string) -> tcConfigB.TurnWarningOff(m, d)) numbers
37943824
istate, Completed None
37953825

@@ -3820,7 +3850,8 @@ type FsiInteractionProcessor
38203850
fsiOptions.ShowHelp(m)
38213851
istate, Completed None
38223852

3823-
| ParsedHashDirective(c, ParsedHashDirectiveArguments arg, m) ->
3853+
| ParsedHashDirective(c, hashArguments, m) ->
3854+
let arg = (parsedHashDirectiveArguments hashArguments tcConfigB.langVersion)
38243855
warning (Error((FSComp.SR.fsiInvalidDirective (c, String.concat " " arg)), m))
38253856
istate, Completed None
38263857

src/Compiler/SyntaxTree/SyntaxTree.fs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,13 +281,9 @@ type DebugPointAtWhile =
281281
[<RequireQualifiedAccess>]
282282
type DebugPointAtBinding =
283283
| Yes of range: range
284-
285284
| NoneAtDo
286-
287285
| NoneAtLet
288-
289286
| NoneAtSticky
290-
291287
| NoneAtInvisible
292288

293289
member x.Combine(y: DebugPointAtBinding) =

src/Compiler/SyntaxTree/SyntaxTreeOps.fs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module FSharp.Compiler.SyntaxTreeOps
44

55
open Internal.Utilities.Library
66
open FSharp.Compiler.DiagnosticsLogger
7+
open FSharp.Compiler.Features
78
open FSharp.Compiler.Syntax
89
open FSharp.Compiler.SyntaxTrivia
910
open FSharp.Compiler.Syntax.PrettyNaming
@@ -982,33 +983,46 @@ let rec synExprContainsError inpExpr =
982983

983984
walkExpr inpExpr
984985

985-
let longIdentToString (ident:SynLongIdent) =
986+
let longIdentToString (ident: SynLongIdent) =
986987
System.String.Join(".", ident.LongIdent |> List.map (fun ident -> ident.idText.ToString()))
987988

988-
let (|ParsedHashDirectiveArguments|) (input: ParsedHashDirectiveArgument list) =
989+
let parsedHashDirectiveArguments (input: ParsedHashDirectiveArgument list) (langVersion: LanguageVersion) =
989990
List.map
990991
(function
991992
| ParsedHashDirectiveArgument.String(s, _, _) -> s
992-
| ParsedHashDirectiveArgument.Int32(n, _) -> string n
993993
| ParsedHashDirectiveArgument.SourceIdentifier(_, v, _) -> v
994-
| ParsedHashDirectiveArgument.Ident(ident, _) -> ident.idText
995-
| ParsedHashDirectiveArgument.LongIdent(ident, _) -> longIdentToString ident)
994+
| ParsedHashDirectiveArgument.Int32(n, m) ->
995+
checkLanguageFeatureAndRecover langVersion LanguageFeature.ParsedHashDirectiveArgumentNonQuotes m
996+
string n
997+
| ParsedHashDirectiveArgument.Ident(ident, m) ->
998+
checkLanguageFeatureAndRecover langVersion LanguageFeature.ParsedHashDirectiveArgumentNonQuotes m
999+
ident.idText
1000+
| ParsedHashDirectiveArgument.LongIdent(ident, m) ->
1001+
checkLanguageFeatureAndRecover langVersion LanguageFeature.ParsedHashDirectiveArgumentNonQuotes m
1002+
longIdentToString ident)
9961003
input
9971004

998-
let (|ParsedHashDirectiveStringArguments|) (input: ParsedHashDirectiveArgument list) =
999-
1005+
let parsedHashDirectiveStringArguments (input: ParsedHashDirectiveArgument list) (langVersion: LanguageVersion) =
10001006
let value =
10011007
List.map
10021008
(function
10031009
| ParsedHashDirectiveArgument.String(s, _, _) -> Some s
1004-
| ParsedHashDirectiveArgument.Int32(n, m) -> errorR (Error(FSComp.SR.featureParsedHashDirectiveUnexpectedInteger(n), m)); None
1010+
| ParsedHashDirectiveArgument.Int32(n, m) ->
1011+
checkLanguageFeatureAndRecover langVersion LanguageFeature.ParsedHashDirectiveArgumentNonQuotes m
1012+
errorR (Error(FSComp.SR.featureParsedHashDirectiveUnexpectedInteger (n), m))
1013+
None
10051014
| ParsedHashDirectiveArgument.SourceIdentifier(_, v, _) -> Some v
1006-
| ParsedHashDirectiveArgument.Ident(ident, m) -> errorR (Error(FSComp.SR.featureParsedHashDirectiveUnexpectedIdentifier(ident.idText), m)); None
1007-
| ParsedHashDirectiveArgument.LongIdent(ident, m) -> errorR (Error(FSComp.SR.featureParsedHashDirectiveUnexpectedIdentifier(longIdentToString ident), m)); None)
1015+
| ParsedHashDirectiveArgument.Ident(ident, m) ->
1016+
checkLanguageFeatureAndRecover langVersion LanguageFeature.ParsedHashDirectiveArgumentNonQuotes m
1017+
errorR (Error(FSComp.SR.featureParsedHashDirectiveUnexpectedIdentifier (ident.idText), m))
1018+
None
1019+
| ParsedHashDirectiveArgument.LongIdent(ident, m) ->
1020+
checkLanguageFeatureAndRecover langVersion LanguageFeature.ParsedHashDirectiveArgumentNonQuotes m
1021+
errorR (Error(FSComp.SR.featureParsedHashDirectiveUnexpectedIdentifier (longIdentToString ident), m))
1022+
None)
10081023
input
1009-
value
1010-
|> List.filter Option.isSome
1011-
|> List.map (Option.defaultValue "")
1024+
1025+
value |> List.filter Option.isSome |> List.map (Option.defaultValue "")
10121026

10131027
let prependIdentInLongIdentWithTrivia (SynIdent(ident, identTrivia)) mDot lid =
10141028
match lid with

src/Compiler/SyntaxTree/SyntaxTreeOps.fsi

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
module internal FSharp.Compiler.SyntaxTreeOps
44

5+
open FSharp.Compiler.Features
56
open FSharp.Compiler.Text
67
open FSharp.Compiler.Xml
78
open FSharp.Compiler.Syntax
@@ -319,9 +320,9 @@ val unionBindingAndMembers: bindings: SynBinding list -> members: SynMemberDefn
319320

320321
val synExprContainsError: inpExpr: SynExpr -> bool
321322

322-
val (|ParsedHashDirectiveArguments|): ParsedHashDirectiveArgument list -> string list
323+
val parsedHashDirectiveArguments: ParsedHashDirectiveArgument list -> LanguageVersion -> string list
323324

324-
val (|ParsedHashDirectiveStringArguments|): ParsedHashDirectiveArgument list -> string list
325+
val parsedHashDirectiveStringArguments: ParsedHashDirectiveArgument list -> LanguageVersion -> string list
325326

326327
/// 'e1 && e2'
327328
[<return: Struct>]

src/Compiler/pars.fsy

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -493,15 +493,12 @@ hashDirectiveArg:
493493
ParsedHashDirectiveArgument.String(s, kind, lhs parseState) }
494494
| INT32
495495
{ let n, _ = $1
496-
parseState.LexBuffer.CheckLanguageFeatureAndRecover LanguageFeature.ParsedHashDirectiveArgumentNonString (rhs parseState 1)
497496
ParsedHashDirectiveArgument.Int32(n, lhs parseState) }
498497
| IDENT
499498
{ let m = rhs parseState 1
500-
parseState.LexBuffer.CheckLanguageFeatureAndRecover LanguageFeature.ParsedHashDirectiveArgumentNonString (rhs parseState 1)
501499
ParsedHashDirectiveArgument.Ident(Ident($1, m), lhs parseState) }
502500
| pathOp
503501
{ let path = $1
504-
parseState.LexBuffer.CheckLanguageFeatureAndRecover LanguageFeature.ParsedHashDirectiveArgumentNonString (rhs parseState 1)
505502
ParsedHashDirectiveArgument.LongIdent(path, lhs parseState) }
506503
| sourceIdentifier
507504
{ let c, v = $1

0 commit comments

Comments
 (0)