|
1 | | -namespace FSharpLint.Framework |
| 1 | +namespace FSharpLint.Framework |
2 | 2 |
|
3 | 3 | /// Provides functionality to parse F# files using `FSharp.Compiler.Service`. |
4 | 4 | module ParseFile = |
@@ -37,49 +37,51 @@ module ParseFile = |
37 | 37 | | Failed of ParseFileFailure |
38 | 38 | | Success of 'Content |
39 | 39 |
|
40 | | - let private parse file source (checker:FSharpChecker, options) = |
| 40 | + let private parse file source (checker:FSharpChecker, options) = async { |
41 | 41 | let sourceText = SourceText.ofString source |
42 | | - let (parseResults, checkFileAnswer) = |
| 42 | + let! parseResults, checkFileAnswer = |
43 | 43 | checker.ParseAndCheckFileInProject(file, 0, sourceText, options) |
44 | | - |> Async.RunSynchronously |
45 | 44 |
|
46 | 45 | match checkFileAnswer with |
47 | 46 | | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> |
48 | | - Success |
| 47 | + return Success |
49 | 48 | { |
50 | 49 | Text = source |
51 | 50 | Ast = parseResults.ParseTree |
52 | 51 | TypeCheckResults = Some(typeCheckResults) |
53 | 52 | File = file |
54 | 53 | } |
55 | | - | FSharpCheckFileAnswer.Aborted -> Failed(AbortedTypeCheck) |
| 54 | + | FSharpCheckFileAnswer.Aborted -> return Failed(AbortedTypeCheck) |
| 55 | + } |
56 | 56 |
|
57 | | - let getProjectOptionsFromScript (checker:FSharpChecker) file (source:string) = |
| 57 | + let getProjectOptionsFromScript (checker:FSharpChecker) file (source:string) = async { |
58 | 58 | let sourceText = SourceText.ofString source |
59 | 59 | let assumeDotNetFramework = false |
60 | 60 | let otherOpts = [| "--targetprofile:netstandard" |] |
61 | 61 |
|
62 | | - let (options, _diagnostics) = |
| 62 | + let! options, _diagnostics = |
63 | 63 | checker.GetProjectOptionsFromScript(file, sourceText, assumeDotNetFramework = assumeDotNetFramework, useSdkRefs = not assumeDotNetFramework, otherFlags = otherOpts) |
64 | | - |> Async.RunSynchronously |
65 | | - options |
| 64 | + return options |
| 65 | + } |
66 | 66 |
|
67 | 67 | /// Parses a file using `FSharp.Compiler.Service`. |
68 | | - let parseFile file (checker:FSharpChecker) projectOptions = |
| 68 | + let parseFile file (checker:FSharpChecker) projectOptions = async { |
69 | 69 | let source = File.ReadAllText(file) |
70 | 70 |
|
71 | | - let projectOptions = |
| 71 | + let! projectOptions = |
72 | 72 | match projectOptions with |
73 | | - | Some(existingOptions) -> existingOptions |
| 73 | + | Some(existingOptions) -> async { return existingOptions } |
74 | 74 | | None -> getProjectOptionsFromScript checker file source |
75 | 75 |
|
76 | | - parse file source (checker, projectOptions) |
| 76 | + return! parse file source (checker, projectOptions) |
| 77 | + } |
77 | 78 |
|
78 | 79 | /// Parses source code using `FSharp.Compiler.Service`. |
79 | | - let parseSourceFile fileName source (checker:FSharpChecker) = |
80 | | - let options = getProjectOptionsFromScript checker fileName source |
| 80 | + let parseSourceFile fileName source (checker:FSharpChecker) = async { |
| 81 | + let! options = getProjectOptionsFromScript checker fileName source |
81 | 82 |
|
82 | | - parse fileName source (checker, options) |
| 83 | + return! parse fileName source (checker, options) |
| 84 | + } |
83 | 85 |
|
84 | 86 | let parseSource source (checker:FSharpChecker) = |
85 | 87 | let fileName = Path.ChangeExtension(Path.GetTempFileName(), "fsx") |
|
0 commit comments