private async Task <bool> TryCompileFSharpToStreamAsync(MemoryStream assemblyStream, IWorkSession session, IList <Diagnostic> diagnostics, CancellationToken cancellationToken) { var fsharp = session.FSharp(); // GetLastParseResults are guaranteed to be available here as MirrorSharp's SlowUpdate does the parse var parsed = fsharp.GetLastParseResults(); using (var virtualAssemblyFile = FSharpFileSystem.RegisterVirtualFile(assemblyStream)) { var compiled = await FSharpAsync.StartAsTask(fsharp.Checker.Compile( // ReSharper disable once PossibleNullReferenceException FSharpList <Ast.ParsedInput> .Cons(parsed.ParseTree.Value, FSharpList <Ast.ParsedInput> .Empty), "_", virtualAssemblyFile.Name, fsharp.AssemblyReferencePathsAsFSharpList, pdbFile: null, executable: false, noframework: true ), null, cancellationToken).ConfigureAwait(false); foreach (var error in compiled.Item1) { // no reason to add warnings as check would have added them anyways if (error.Severity.Tag == FSharpErrorSeverity.Tags.Error) { diagnostics.Add(fsharp.ConvertToDiagnostic(error)); } } return(virtualAssemblyFile.Stream.Length > 0); } }
public void SetOptimize([NotNull] IWorkSession session, [NotNull] string optimize) { var debug = optimize == Optimize.Debug; var fsharp = session.FSharp(); fsharp.ProjectOptions = fsharp.ProjectOptions .WithOtherOptionDebug(debug) .WithOtherOptionOptimize(!debug); }
public void SerializeAst(object ast, IFastJsonWriter writer, IWorkSession session) { var root = ((SyntaxTree.ParsedInput.ImplFile)ast).Item; writer.WriteStartArray(); var childrenStarted = true; SerializeNode(root, writer, null, ref childrenStarted, session.FSharp()); writer.WriteEndArray(); }
public Task <object> GetAstAsync(IWorkSession session, CancellationToken cancellationToken) { var parseResult = session.FSharp().GetLastParseResults(); if (parseResult == null) { throw new InvalidOperationException("Current session does not include F# parse results yet."); } return(Task.FromResult((object)parseResult.ParseTree.Value)); }
public Task <object?> GetAstAsync(IWorkSession session, CancellationToken cancellationToken) { var parseTree = session.FSharp().GetLastParseResults()?.ParseTree?.Value; return(Task.FromResult((object?)(parseTree as Ast.ParsedInput.ImplFile))); }
public Task <object> GetAstAsync(IWorkSession session, CancellationToken cancellationToken) { return(Task.FromResult((object)session.FSharp().GetLastParseResults().ParseTree.Value)); }