Skip to content

Commit 565bf9f

Browse files
Pass otherFSharpOptions to fable-standalone
1 parent 32f1090 commit 565bf9f

File tree

4 files changed

+36
-30
lines changed

4 files changed

+36
-30
lines changed

src/fable-standalone/src/Interfaces.fs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ type IChecker =
4040
interface end
4141

4242
type IParseResults =
43+
abstract OtherFSharpOptions: string[]
4344
abstract Errors: Error[]
4445

4546
type IBabelResult =
@@ -50,9 +51,9 @@ type IFableManager =
5051
abstract CreateChecker: references: string[] * readAllBytes: (string -> byte[]) * defines: string[] * optimize: bool -> IChecker
5152
abstract CreateChecker: references: string[] * readAllBytes: (string -> byte[]) * otherOptions: string[] -> IChecker
5253
abstract ClearParseCaches: checker: IChecker -> unit
53-
abstract ParseFSharpScript: checker: IChecker * fileName: string * source: string -> IParseResults
54-
abstract ParseFSharpProject: checker: IChecker * projectFileName: string * fileNames: string[] * sources: string[] -> IParseResults
55-
abstract ParseFSharpFileInProject: checker: IChecker * fileName: string * projectFileName: string * fileNames: string[] * sources: string[] -> IParseResults
54+
abstract ParseFSharpScript: checker: IChecker * fileName: string * source: string * ?otherFSharpOptions: string[] -> IParseResults
55+
abstract ParseFSharpProject: checker: IChecker * projectFileName: string * fileNames: string[] * sources: string[] * ?otherFSharpOptions: string[] -> IParseResults
56+
abstract ParseFSharpFileInProject: checker: IChecker * fileName: string * projectFileName: string * fileNames: string[] * sources: string[] * ?otherFSharpOptions: string[] -> IParseResults
5657
abstract GetParseErrors: parseResults: IParseResults -> Error[]
5758
abstract GetDeclarationLocation: parseResults: IParseResults * line: int * col: int * lineText: string -> Async<Range option>
5859
abstract GetToolTipText: parseResults: IParseResults * line: int * col: int * lineText: string -> Async<string[]>

src/fable-standalone/src/Main.fs

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ type ParseResults (optimizedProject: Lazy<Project>,
2929
unoptimizedProject: Lazy<Project>,
3030
parseFileResultsOpt: FSharpParseFileResults option,
3131
checkFileResultsOpt: FSharpCheckFileResults option,
32-
checkProjectResults: FSharpCheckProjectResults) =
32+
checkProjectResults: FSharpCheckProjectResults,
33+
otherFSharpOptions: string[]) =
3334

3435
member __.GetProject (optimized: bool) =
3536
if optimized
@@ -41,6 +42,7 @@ type ParseResults (optimizedProject: Lazy<Project>,
4142
member __.CheckProjectResults = checkProjectResults
4243

4344
interface IParseResults with
45+
member __.OtherFSharpOptions = otherFSharpOptions
4446
member __.Errors = checkProjectResults.Errors |> Array.map mapError
4547

4648
let inline private tryGetLexerSymbolIslands (sym: Lexer.LexerSymbol) =
@@ -104,12 +106,12 @@ let convertGlyph glyph =
104106
| FSharpGlyph.Event ->
105107
Glyph.Event
106108

107-
let makeProjOptions projectFileName fileNames =
109+
let makeProjOptions projectFileName fileNames otherFSharpOptions =
108110
let projOptions: FSharpProjectOptions =
109111
{ ProjectFileName = projectFileName
110112
ProjectId = None
111113
SourceFiles = fileNames
112-
OtherOptions = [| |]
114+
OtherOptions = otherFSharpOptions
113115
ReferencedProjects = [| |]
114116
IsIncompleteTypeCheckEnvironment = false
115117
UseScriptResolutionRules = false
@@ -131,27 +133,27 @@ let makeProject projectOptions (projectResults: FSharpCheckProjectResults) optim
131133
implFiles |> Seq.map (fun file -> Fable.Path.normalizePathAndEnsureFsExtension file.FileName, file) |> dict
132134
Project(projectOptions, implFilesMap, projectResults.Errors)
133135

134-
let parseFSharpScript (checker: InteractiveChecker) projectFileName fileName source =
136+
let parseFSharpScript (checker: InteractiveChecker) projectFileName fileName source otherFSharpOptions =
135137
let parseResults, checkResults, projectResults =
136138
checker.ParseAndCheckScript (projectFileName, fileName, source)
137-
let projectOptions = makeProjOptions projectFileName [| fileName |]
139+
let projectOptions = makeProjOptions projectFileName [| fileName |] otherFSharpOptions
138140
let optimizedProject = lazy (makeProject projectOptions projectResults true)
139141
let unoptimizedProject = lazy (makeProject projectOptions projectResults false)
140-
ParseResults (optimizedProject, unoptimizedProject, Some parseResults, Some checkResults, projectResults)
142+
ParseResults (optimizedProject, unoptimizedProject, Some parseResults, Some checkResults, projectResults, otherFSharpOptions)
141143

142-
let parseFSharpProject (checker: InteractiveChecker) projectFileName fileNames sources =
144+
let parseFSharpProject (checker: InteractiveChecker) projectFileName fileNames sources otherFSharpOptions =
143145
let projectResults = checker.ParseAndCheckProject (projectFileName, fileNames, sources)
144-
let projectOptions = makeProjOptions projectFileName fileNames
146+
let projectOptions = makeProjOptions projectFileName fileNames otherFSharpOptions
145147
let optimizedProject = lazy (makeProject projectOptions projectResults true)
146148
let unoptimizedProject = lazy (makeProject projectOptions projectResults false)
147-
ParseResults (optimizedProject, unoptimizedProject, None, None, projectResults)
149+
ParseResults (optimizedProject, unoptimizedProject, None, None, projectResults, otherFSharpOptions)
148150

149-
let parseFSharpFileInProject (checker: InteractiveChecker) fileName projectFileName fileNames sources =
151+
let parseFSharpFileInProject (checker: InteractiveChecker) fileName projectFileName fileNames sources otherFSharpOptions =
150152
let parseResults, checkResultsOpt, projectResults = checker.ParseAndCheckFileInProject (fileName, projectFileName, fileNames, sources)
151-
let projectOptions = makeProjOptions projectFileName fileNames
153+
let projectOptions = makeProjOptions projectFileName fileNames otherFSharpOptions
152154
let optimizedProject = lazy (makeProject projectOptions projectResults true)
153155
let unoptimizedProject = lazy (makeProject projectOptions projectResults false)
154-
ParseResults (optimizedProject, unoptimizedProject, Some parseResults, checkResultsOpt, projectResults)
156+
ParseResults (optimizedProject, unoptimizedProject, Some parseResults, checkResultsOpt, projectResults, otherFSharpOptions)
155157

156158
let tooltipToString (el: FSharpToolTipElement<string>): string[] =
157159
let dataToString (data: FSharpToolTipElementData<string>) =
@@ -218,11 +220,11 @@ let getCompletionsAtLocation (parseResults: ParseResults) (line: int) (col: int)
218220
return [||]
219221
}
220222

221-
let makeCompiler fableLibrary fileName (project: Project) precompiledLib =
223+
let makeCompiler fableLibrary fileName (project: Project) precompiledLib (otherFSharpOptions: string[]) =
222224
let options: Fable.CompilerOptions =
223225
{ typedArrays = true
224226
clampByteArrays = false
225-
debugMode = true
227+
debugMode = otherFSharpOptions |> Array.exists ((=) "--define:DEBUG")
226228
verbosity = Fable.Verbosity.Normal
227229
outputPublicInlinedFunctions = false
228230
precompiledLib = precompiledLib }
@@ -248,18 +250,21 @@ let init () =
248250
let c = checker :?> CheckerImpl
249251
c.Checker.ClearCache()
250252

251-
member __.ParseFSharpScript(checker, fileName, source) =
253+
member __.ParseFSharpScript(checker, fileName, source, ?otherFSharpOptions) =
252254
let c = checker :?> CheckerImpl
255+
let otherFSharpOptions = defaultArg otherFSharpOptions [||]
253256
let projectFileName = "project" // TODO: make it an argument
254-
parseFSharpScript c.Checker projectFileName fileName source :> IParseResults
257+
parseFSharpScript c.Checker projectFileName fileName source otherFSharpOptions :> IParseResults
255258

256-
member __.ParseFSharpProject(checker, projectFileName, fileNames, sources) =
259+
member __.ParseFSharpProject(checker, projectFileName, fileNames, sources, ?otherFSharpOptions) =
257260
let c = checker :?> CheckerImpl
258-
parseFSharpProject c.Checker projectFileName fileNames sources :> IParseResults
261+
let otherFSharpOptions = defaultArg otherFSharpOptions [||]
262+
parseFSharpProject c.Checker projectFileName fileNames sources otherFSharpOptions :> IParseResults
259263

260-
member __.ParseFSharpFileInProject(checker, fileName, projectFileName, fileNames, sources) =
264+
member __.ParseFSharpFileInProject(checker, fileName, projectFileName, fileNames, sources, ?otherFSharpOptions) =
261265
let c = checker :?> CheckerImpl
262-
parseFSharpFileInProject c.Checker fileName projectFileName fileNames sources :> IParseResults
266+
let otherFSharpOptions = defaultArg otherFSharpOptions [||]
267+
parseFSharpFileInProject c.Checker fileName projectFileName fileNames sources otherFSharpOptions :> IParseResults
263268

264269
member __.GetParseErrors(parseResults:IParseResults) =
265270
parseResults.Errors
@@ -279,7 +284,7 @@ let init () =
279284
member __.CompileToBabelAst(fableLibrary:string, parseResults:IParseResults, fileName:string, optimized: bool, ?precompiledLib) =
280285
let res = parseResults :?> ParseResults
281286
let project = res.GetProject (optimized)
282-
let com = makeCompiler fableLibrary fileName project precompiledLib
287+
let com = makeCompiler fableLibrary fileName project precompiledLib parseResults.OtherFSharpOptions
283288
let ast = compileAst com project
284289
let errors =
285290
com.GetLogs()

src/fable-standalone/src/Worker/Shared.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ open Thoth.Json
99
type WorkerRequest =
1010
/// * refsExtraSuffix: e.g. add .txt extension to enable gzipping in Github Pages
1111
| CreateChecker of refsDirUrl: string * extraRefs: string[] * refsExtraSuffix: string option * libJsonUrl: string option
12-
| ParseCode of fsharpCode: string
13-
| CompileCode of fsharpCode: string * optimize: bool
12+
| ParseCode of fsharpCode: string * otherFSharpOptions: string[]
13+
| CompileCode of fsharpCode: string * otherFSharpOptions: string[] * optimize: bool
1414
| GetTooltip of id: Guid * line: int * column: int * lineText: string
1515
| GetCompletions of id: Guid * line: int * column: int * lineText: string
1616
| GetDeclarationLocation of id: Guid * line: int * column: int * lineText: string

src/fable-standalone/src/Worker/Worker.fs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,14 @@ let rec loop (box: MailboxProcessor<WorkerRequest>) (state: State) = async {
7373
| None, _
7474
| Some _, CreateChecker _ -> return! loop box state
7575

76-
| Some fable, ParseCode fsharpCode ->
77-
let res = fable.Manager.ParseFSharpScript(fable.Checker, FILE_NAME, fsharpCode)
76+
| Some fable, ParseCode(fsharpCode, otherFSharpOptions) ->
77+
let res = fable.Manager.ParseFSharpScript(fable.Checker, FILE_NAME, fsharpCode, otherFSharpOptions)
7878
ParsedCode res.Errors |> state.Worker.Post
7979
return! loop box { state with CurrentResults = Some res }
8080

81-
| Some fable, CompileCode(fsharpCode, optimize) ->
81+
| Some fable, CompileCode(fsharpCode, otherFSharpOptions, optimize) ->
8282
try
83-
let (parseResults, parsingTime) = measureTime fable.Manager.ParseFSharpScript (fable.Checker, FILE_NAME, fsharpCode)
83+
let (parseResults, parsingTime) = measureTime (fun () -> fable.Manager.ParseFSharpScript(fable.Checker, FILE_NAME, fsharpCode, otherFSharpOptions)) ()
8484
let (res, fableTransformTime) = measureTime (fun () ->
8585
fable.Manager.CompileToBabelAst("fable-library", parseResults, FILE_NAME, optimize, fun x -> resolveLibCall(fable.LibMap, x))) ()
8686
let (jsCode, babelTime, babelErrors) =

0 commit comments

Comments
 (0)