...
This commit is contained in:
@@ -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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
13
vscode-lsp/media/output.html
Normal file
13
vscode-lsp/media/output.html
Normal 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>
|
||||
Binary file not shown.
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user