This commit is contained in:
nub31
2025-10-23 17:15:50 +02:00
parent de4dfd5d90
commit a5ac25dcae
4 changed files with 35 additions and 4 deletions

View File

@@ -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<DocumentUri, SyntaxTree> _syntaxTrees = new();
private readonly Dictionary<DocumentUri, CompilationUnit> _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
});
}
}

View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>generated c soruce</title>
</head>
<body>
<pre id="assembly">{{assembly}}</pre>
</body>
</html>

View File

@@ -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<string, string> = 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<void> | undefined {
return undefined;
}
return client.stop();
}
}