From 83d6608ac4a1dd022610c1164c211fc9e84f9f8e Mon Sep 17 00:00:00 2001 From: nub31 Date: Thu, 23 Oct 2025 17:15:50 +0200 Subject: [PATCH] ... --- compiler/NubLang.LSP/WorkspaceManager.cs | 13 ++++++++++++- vscode-lsp/media/output.html | 13 +++++++++++++ vscode-lsp/src/extension.ts | 13 ++++++++++--- 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 vscode-lsp/media/output.html diff --git a/compiler/NubLang.LSP/WorkspaceManager.cs b/compiler/NubLang.LSP/WorkspaceManager.cs index da3f48e..f9be69e 100644 --- a/compiler/NubLang.LSP/WorkspaceManager.cs +++ b/compiler/NubLang.LSP/WorkspaceManager.cs @@ -1,10 +1,12 @@ using NubLang.Ast; +using NubLang.Generation; using NubLang.Syntax; using OmniSharp.Extensions.LanguageServer.Protocol; +using OmniSharp.Extensions.LanguageServer.Protocol.Server; namespace NubLang.LSP; -public class WorkspaceManager(DiagnosticsPublisher diagnosticsPublisher) +public class WorkspaceManager(DiagnosticsPublisher diagnosticsPublisher, ILanguageServerFacade server) { private readonly Dictionary _syntaxTrees = new(); private readonly Dictionary _compilationUnits = new(); @@ -39,6 +41,15 @@ public class WorkspaceManager(DiagnosticsPublisher diagnosticsPublisher) var result = typeChecker.Check(); diagnosticsPublisher.Publish(path, typeChecker.Diagnostics); _compilationUnits[path] = result; + + var generator = new Generator(result); + var c = generator.Emit(); + + server.SendNotification("nub/output", new + { + content = c, + uri = path + }); } } diff --git a/vscode-lsp/media/output.html b/vscode-lsp/media/output.html new file mode 100644 index 0000000..dbbf116 --- /dev/null +++ b/vscode-lsp/media/output.html @@ -0,0 +1,13 @@ + + + + + + generated c soruce + + + +
{{assembly}}
+ + + \ No newline at end of file diff --git a/vscode-lsp/src/extension.ts b/vscode-lsp/src/extension.ts index f50c5ec..cb9db46 100644 --- a/vscode-lsp/src/extension.ts +++ b/vscode-lsp/src/extension.ts @@ -1,11 +1,11 @@ import path from 'path'; -import { workspace, ExtensionContext, window } from 'vscode'; +import { workspace, ExtensionContext, window, Uri, commands, StatusBarAlignment, ViewColumn } from 'vscode'; import { LanguageClient, TransportKind } from 'vscode-languageclient/node'; let client: LanguageClient; export function activate(context: ExtensionContext) { - const serverExecutable = path.join(context.asAbsolutePath('src/server'), "nublsp"); + const serverExecutable = path.join(context.asAbsolutePath('server'), "nublsp"); client = new LanguageClient( 'nub', @@ -32,6 +32,13 @@ export function activate(context: ExtensionContext) { } ); + let outputMap: Map = new Map(); + + client.onNotification("nub/output", (params) => { + const virtualUri = Uri.parse(`nub://${params.uri}`); + outputMap.set(virtualUri.toString(), params.content); + }); + client.start(); } @@ -40,4 +47,4 @@ export function deactivate(): Thenable | undefined { return undefined; } return client.stop(); -} \ No newline at end of file +}