...
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
using NubLang.Ast;
|
using NubLang.Ast;
|
||||||
|
using NubLang.Generation;
|
||||||
using NubLang.Syntax;
|
using NubLang.Syntax;
|
||||||
using OmniSharp.Extensions.LanguageServer.Protocol;
|
using OmniSharp.Extensions.LanguageServer.Protocol;
|
||||||
|
using OmniSharp.Extensions.LanguageServer.Protocol.Server;
|
||||||
|
|
||||||
namespace NubLang.LSP;
|
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, SyntaxTree> _syntaxTrees = new();
|
||||||
private readonly Dictionary<DocumentUri, CompilationUnit> _compilationUnits = new();
|
private readonly Dictionary<DocumentUri, CompilationUnit> _compilationUnits = new();
|
||||||
@@ -39,6 +41,15 @@ public class WorkspaceManager(DiagnosticsPublisher diagnosticsPublisher)
|
|||||||
var result = typeChecker.Check();
|
var result = typeChecker.Check();
|
||||||
diagnosticsPublisher.Publish(path, typeChecker.Diagnostics);
|
diagnosticsPublisher.Publish(path, typeChecker.Diagnostics);
|
||||||
_compilationUnits[path] = result;
|
_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>
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
import path from 'path';
|
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';
|
import { LanguageClient, TransportKind } from 'vscode-languageclient/node';
|
||||||
|
|
||||||
let client: LanguageClient;
|
let client: LanguageClient;
|
||||||
|
|
||||||
export function activate(context: ExtensionContext) {
|
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(
|
client = new LanguageClient(
|
||||||
'nub',
|
'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();
|
client.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user