private static Dictionary <Uri, ParseResult> ParseBuiltIns(ParsedDocumentsManager parsedDocumentsManager)
        {
            var symbolInfoPath = Path.Combine(AppDir, "DaedalusBuiltins", "symbols.json");
            Dictionary <string, string> documentations = null;

            if (File.Exists(symbolInfoPath))
            {
                var symbolInfos = JsonSerializer.Deserialize <List <SymbolDocumentation> >(File.ReadAllText(symbolInfoPath, Encoding.UTF8));
                documentations = symbolInfos.ToDictionary(x => x.Name, x => x.Documentation, StringComparer.OrdinalIgnoreCase);
            }
            var externals    = new Dictionary <Uri, ParseResult>();
            var buildInsPath = Path.Combine(AppDir, "DaedalusBuiltins");

            foreach (var builtIn in Directory.EnumerateFiles(buildInsPath, "*.d"))
            {
                var builtInUri = new Uri(builtIn);
                parsedDocumentsManager.Parse(builtInUri, File.ReadAllText(builtIn, Encoding.GetEncoding(1250)), default);
                var parsedResult = parsedDocumentsManager.GetParseResult(builtInUri);
                externals[builtInUri] = parsedResult;
                if (documentations != null)
                {
                    foreach (var symbol in parsedResult.EnumerateSymbols())
                    {
                        if (documentations.TryGetValue(symbol.Name, out var d))
                        {
                            symbol.Documentation = d;
                        }
                    }
                }
            }

            return(externals);
        }
        private static void ParseSrc(
            string srcPath,
            Dictionary <Uri, ParseResult> externals,
            OmniSharp.Extensions.LanguageServer.Protocol.Server.ILanguageServer router,
            ParsedDocumentsManager parsedDocumentsManager)
        {
            router.Window.LogInfo($"Parsing Gothic.Src. This might take a while.");
            var parseResults = FastCompiler.ParseSrc(srcPath, externals);

            foreach (var parseResult in parseResults)
            {
                parsedDocumentsManager.UpdateParseResult(parseResult.Key, parseResult.Value);
            }
            router.Window.LogInfo($"Parsed {parseResults.Count} scripts");

            var diagnostics = new List <PublishDiagnosticsParams>();

            foreach (var kvp in parseResults)
            {
                if (kvp.Value.SyntaxErrors.Count > 0)
                {
                    diagnostics.Add(new PublishDiagnosticsParams
                    {
                        Uri         = kvp.Key,
                        Diagnostics = new Container <Diagnostic>(
                            kvp.Value.SyntaxErrors.Select(x => new Diagnostic
                        {
                            Severity = ParsedDocumentsManager.DiagnosticSeverityFromSyntaxError(x),
                            Message  = x.ErrorCode.Description,
                            Code     = x.ErrorCode.Code,
                            Range    = new OmniSharp.Extensions.LanguageServer.Protocol.Models.Range(
                                new Position(x.Line - 1, x.Column),
                                new Position(x.Line - 1, x.Column)
                                )
                        }))
                    });
                }
            }
            foreach (var dp in diagnostics)
            {
                router.Document.PublishDiagnostics(dp);
            }
        }
示例#3
0
 public CompletionHandler(ParsedDocumentsManager documentsManager, BufferManager bufferManager)
 {
     this.documentsManager = documentsManager;
     this.bufferManager    = bufferManager;
 }
 public HoverHandler(ParsedDocumentsManager documentsManager, BufferManager bufferManager)
 {
     this.documentsManager = documentsManager;
     this.bufferManager    = bufferManager;
 }
示例#5
0
 public GoToDefinitionHandler(ParsedDocumentsManager documentsManager, BufferManager bufferManager)
 {
     this.documentsManager = documentsManager;
     this.bufferManager    = bufferManager;
 }
 public TextDocumentSyncHandler(ILanguageServer router, BufferManager bufferManager, ParsedDocumentsManager documentsManager)
 {
     this._router          = router;
     this._bufferManager   = bufferManager;
     this.documentsManager = documentsManager;
 }
示例#7
0
 public DocumentSymbolHandler(ParsedDocumentsManager documentsManager)
 {
     this.documentsManager = documentsManager;
 }
 public SignatureInfoHandler(ParsedDocumentsManager documentsManager, BufferManager bufferManager)
 {
     this.documentsManager = documentsManager;
     this.bufferManager    = bufferManager;
 }