Exemple #1
0
        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);
            }
        }
Exemple #2
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);
        }
Exemple #3
0
        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();
        }
Exemple #4
0
        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));
        }
Exemple #5
0
        public Task <object?> GetAstAsync(IWorkSession session, CancellationToken cancellationToken)
        {
            var parseTree = session.FSharp().GetLastParseResults()?.ParseTree?.Value;

            return(Task.FromResult((object?)(parseTree as Ast.ParsedInput.ImplFile)));
        }
Exemple #6
0
 public Task <object> GetAstAsync(IWorkSession session, CancellationToken cancellationToken)
 {
     return(Task.FromResult((object)session.FSharp().GetLastParseResults().ParseTree.Value));
 }