From babafb4d34a5310b728c9b4db1ecf11f06238e08 Mon Sep 17 00:00:00 2001 From: nub31 Date: Thu, 23 Oct 2025 17:55:21 +0200 Subject: [PATCH] ... --- compiler/NubLang.LSP/Program.cs | 5 +- .../NubLang.LSP/TextDocumentSyncHandler.cs | 8 +-- compiler/NubLang.LSP/WorkspaceManager.cs | 64 ++++++++++++------ vscode-lsp/get-latest.sh | 2 +- vscode-lsp/package.json | 18 ++++- vscode-lsp/server/nublsp | Bin 77421920 -> 77421920 bytes vscode-lsp/src/extension.ts | 18 ++--- 7 files changed, 75 insertions(+), 40 deletions(-) diff --git a/compiler/NubLang.LSP/Program.cs b/compiler/NubLang.LSP/Program.cs index b7020aa..095630f 100644 --- a/compiler/NubLang.LSP/Program.cs +++ b/compiler/NubLang.LSP/Program.cs @@ -24,10 +24,7 @@ var server = await LanguageServer.From(options => options if (request.RootPath != null) { - foreach (var file in Directory.GetFiles(request.RootPath, "*.nub", SearchOption.AllDirectories)) - { - workspaceManager.UpdateFile(file); - } + workspaceManager.Init(request.RootPath); } return Task.CompletedTask; diff --git a/compiler/NubLang.LSP/TextDocumentSyncHandler.cs b/compiler/NubLang.LSP/TextDocumentSyncHandler.cs index decb6c2..e29aa44 100644 --- a/compiler/NubLang.LSP/TextDocumentSyncHandler.cs +++ b/compiler/NubLang.LSP/TextDocumentSyncHandler.cs @@ -15,25 +15,25 @@ internal class TextDocumentSyncHandler(WorkspaceManager workspaceManager) : Text public override Task Handle(DidOpenTextDocumentParams request, CancellationToken cancellationToken) { - workspaceManager.UpdateFile(request.TextDocument.Uri); + workspaceManager.UpdateFile(request.TextDocument.Uri.GetFileSystemPath()); return Unit.Task; } public override Task Handle(DidChangeTextDocumentParams request, CancellationToken cancellationToken) { - workspaceManager.UpdateFile(request.TextDocument.Uri); + workspaceManager.UpdateFile(request.TextDocument.Uri.GetFileSystemPath()); return Unit.Task; } public override Task Handle(DidSaveTextDocumentParams request, CancellationToken cancellationToken) { - workspaceManager.UpdateFile(request.TextDocument.Uri); + workspaceManager.UpdateFile(request.TextDocument.Uri.GetFileSystemPath()); return Unit.Task; } public override Task Handle(DidCloseTextDocumentParams request, CancellationToken cancellationToken) { - workspaceManager.UpdateFile(request.TextDocument.Uri); + workspaceManager.UpdateFile(request.TextDocument.Uri.GetFileSystemPath()); return Unit.Task; } diff --git a/compiler/NubLang.LSP/WorkspaceManager.cs b/compiler/NubLang.LSP/WorkspaceManager.cs index f9be69e..ba24be7 100644 --- a/compiler/NubLang.LSP/WorkspaceManager.cs +++ b/compiler/NubLang.LSP/WorkspaceManager.cs @@ -8,64 +8,84 @@ namespace NubLang.LSP; public class WorkspaceManager(DiagnosticsPublisher diagnosticsPublisher, ILanguageServerFacade server) { - private readonly Dictionary _syntaxTrees = new(); - private readonly Dictionary _compilationUnits = new(); + private readonly Dictionary _syntaxTrees = new(); + private readonly Dictionary _compilationUnits = new(); - public void UpdateFile(DocumentUri path, bool typeCheck = true) + public void Init(string rootPath) { - var text = File.ReadAllText(path.GetFileSystemPath()); - var tokenizer = new Tokenizer(path.GetFileSystemPath(), text); + var files = Directory.GetFiles(rootPath, "*.nub", SearchOption.AllDirectories); + foreach (var path in files) + { + var text = File.ReadAllText(path); + var tokenizer = new Tokenizer(path, text); + + tokenizer.Tokenize(); + diagnosticsPublisher.Publish(path, tokenizer.Diagnostics); + + var parser = new Parser(); + var parseResult = parser.Parse(tokenizer.Tokens); + diagnosticsPublisher.Publish(path, parser.Diagnostics); + + _syntaxTrees[path] = parseResult; + } + + Generate(); + } + + public void UpdateFile(DocumentUri path) + { + var fsPath = path.GetFileSystemPath(); + var text = File.ReadAllText(fsPath); + var tokenizer = new Tokenizer(fsPath, text); tokenizer.Tokenize(); diagnosticsPublisher.Publish(path, tokenizer.Diagnostics); var parser = new Parser(); - var result = parser.Parse(tokenizer.Tokens); + var parseResult = parser.Parse(tokenizer.Tokens); diagnosticsPublisher.Publish(path, parser.Diagnostics); - _syntaxTrees[path] = result; + _syntaxTrees[fsPath] = parseResult; - if (typeCheck) - { - TypeCheck(); - } + Generate(); } - private void TypeCheck() + private void Generate() { var modules = Module.Collect(_syntaxTrees.Select(x => x.Value).ToList()); - foreach (var (path, syntaxTree) in _syntaxTrees) + foreach (var (documentUri, syntaxTree) in _syntaxTrees) { var typeChecker = new TypeChecker(syntaxTree, modules); var result = typeChecker.Check(); - diagnosticsPublisher.Publish(path, typeChecker.Diagnostics); - _compilationUnits[path] = result; + diagnosticsPublisher.Publish(documentUri, typeChecker.Diagnostics); + _compilationUnits[documentUri] = result; var generator = new Generator(result); var c = generator.Emit(); - + server.SendNotification("nub/output", new { content = c, - uri = path + uri = documentUri }); } } - public void RemoveFile(Uri path) + public void RemoveFile(DocumentUri path) { - _syntaxTrees.Remove(path); - _compilationUnits.Remove(path); + var fsPath = path.GetFileSystemPath(); + _syntaxTrees.Remove(fsPath); + _compilationUnits.Remove(fsPath); } - public Dictionary GetCompilationUnits() + public Dictionary GetCompilationUnits() { return _compilationUnits; } public CompilationUnit? GetCompilationUnit(DocumentUri path) { - return _compilationUnits.GetValueOrDefault(path); + return _compilationUnits.GetValueOrDefault(path.GetFileSystemPath()); } } \ No newline at end of file diff --git a/vscode-lsp/get-latest.sh b/vscode-lsp/get-latest.sh index 5853618..cef142e 100755 --- a/vscode-lsp/get-latest.sh +++ b/vscode-lsp/get-latest.sh @@ -1,4 +1,4 @@ #!/bin/bash dotnet publish -c Release ../compiler/NubLang.LSP/NubLang.LSP.csproj -cp ../compiler/NubLang.LSP/bin/Release/net9.0/linux-x64/publish/nublsp src/server/ \ No newline at end of file +cp ../compiler/NubLang.LSP/bin/Release/net9.0/linux-x64/publish/nublsp server/ \ No newline at end of file diff --git a/vscode-lsp/package.json b/vscode-lsp/package.json index 3cfe9de..8295429 100644 --- a/vscode-lsp/package.json +++ b/vscode-lsp/package.json @@ -31,7 +31,23 @@ "scopeName": "source.nub", "path": "./syntaxes/nub.tmLanguage.json" } - ] + ], + "commands": [ + { + "command": "nub.openOutput", + "title": "Nub: Show Output", + "icon": "$(open-preview)" + } + ], + "menus": { + "editor/title": [ + { + "command": "nub.openOutput", + "when": "editorLangId == nub || resourceExtname == .nub", + "group": "navigation" + } + ] + } }, "scripts": { "build": "tsc -p ./", diff --git a/vscode-lsp/server/nublsp b/vscode-lsp/server/nublsp index 01a0e23568492f3eab8c133f93a99c5d612593ec..5b3741e9704076ae82e98946735c928b3b353b38 100755 GIT binary patch delta 17378 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 CWHdtn delta 17247 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 = new Map(); + client.onNotification("nub/output", (params: { path: string, content: string }) => { + + }); + + vscode.commands.registerCommand('nub.openOutput', async () => { - client.onNotification("nub/output", (params) => { - const virtualUri = Uri.parse(`nub://${params.uri}`); - outputMap.set(virtualUri.toString(), params.content); }); client.start(); @@ -46,5 +47,6 @@ export function deactivate(): Thenable | undefined { if (!client) { return undefined; } + return client.stop(); -} +} \ No newline at end of file