完成 digital-lsp 部署

This commit is contained in:
锦恢 2024-09-07 23:09:10 +08:00
parent fb3caa9ab1
commit 199b7a8af3
12 changed files with 199 additions and 20 deletions

3
.gitignore vendored
View File

@ -10,4 +10,5 @@ out-js/
*.pyd
resources/hdlParser/parser.js
resources/hdlParser/parser.wasm
resources/dide-viewer/view/*
resources/dide-viewer/view/*
resources/dide-lsp/server/*

View File

@ -4,6 +4,18 @@ All notable changes to the "digital-ide" extension will be documented in this fi
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
## [0.3.4] - 2024-08-28
Feature
wave 渲染器 https://nc-ai-lab.feishu.cn/wiki/K7gVwwU02iNMc8krIHucPwhqnff#share-NjuodrRQAoxEotxRicOc7BXDnOh
---
## [0.3.3] - 2024-02-05
Feature

69
package-lock.json generated
View File

@ -1,18 +1,19 @@
{
"name": "fpga-support",
"version": "0.3.2",
"version": "0.3.3",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "fpga-support",
"version": "0.3.2",
"version": "0.3.3",
"dependencies": {
"chokidar": "^3.5.3",
"puppeteer-core": "^19.4.1",
"showdown": "^2.1.0",
"state-machine-cat": "^9.2.5",
"temp": "^0.9.4",
"vscode-languageclient": "^7.0.0",
"vscode-textmate": "^9.0.0",
"wavedrom": "^2.9.1"
},
@ -3807,6 +3808,41 @@
"integrity": "sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==",
"deprecated": "no longer supported"
},
"node_modules/vscode-jsonrpc": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz",
"integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==",
"engines": {
"node": ">=8.0.0 || >=10.0.0"
}
},
"node_modules/vscode-languageclient": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz",
"integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==",
"dependencies": {
"minimatch": "^3.0.4",
"semver": "^7.3.4",
"vscode-languageserver-protocol": "3.16.0"
},
"engines": {
"vscode": "^1.52.0"
}
},
"node_modules/vscode-languageserver-protocol": {
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz",
"integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==",
"dependencies": {
"vscode-jsonrpc": "6.0.0",
"vscode-languageserver-types": "3.16.0"
}
},
"node_modules/vscode-languageserver-types": {
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
"integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA=="
},
"node_modules/vscode-textmate": {
"version": "9.0.0",
"resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz",
@ -7087,6 +7123,35 @@
"resolved": "https://registry.npmmirror.com/viz.js/-/viz.js-1.8.2.tgz",
"integrity": "sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ=="
},
"vscode-jsonrpc": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz",
"integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg=="
},
"vscode-languageclient": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz",
"integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==",
"requires": {
"minimatch": "^3.0.4",
"semver": "^7.3.4",
"vscode-languageserver-protocol": "3.16.0"
}
},
"vscode-languageserver-protocol": {
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz",
"integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==",
"requires": {
"vscode-jsonrpc": "6.0.0",
"vscode-languageserver-types": "3.16.0"
}
},
"vscode-languageserver-types": {
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
"integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA=="
},
"vscode-textmate": {
"version": "9.0.0",
"resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz",

View File

@ -1159,6 +1159,7 @@
"state-machine-cat": "^9.2.5",
"temp": "^0.9.4",
"vscode-textmate": "^9.0.0",
"wavedrom": "^2.9.1"
"wavedrom": "^2.9.1",
"vscode-languageclient": "^7.0.0"
}
}

View File

@ -0,0 +1,3 @@
dide-lsp
- server
- digital-lsp

View File

@ -0,0 +1,6 @@
dide-viewer
- view
- index.html
- css
- js
- ...

View File

@ -1 +0,0 @@
// require view folder

View File

@ -13,17 +13,32 @@ function selectSkin(skin) {
return darkSkin;
}
function replaceRectsWithCustomString(svgString, style) {
const regex = /<rect\s+([^>]*)\s*\/?>/gs;
const replacedSvgString = svgString.replace(regex, (match, attributes, content) => {
match = match.replace('fill:#FFF;', 'fill:var(--vscode-editor-background)');
return match;
});
return replacedSvgString;
}
/**
*
* @param {number} id
* @param {any} json
* @param {any} style 'dark' or 'light'
* @param {'dark' | 'light'} style
* @returns {string}
*/
function renderWaveDrom(id, json, style) {
const skin = selectSkin(style);
const renderObj = renderAny(id, json, skin);
const svgString = onmlStringify(renderObj);
let svgString = onmlStringify(renderObj);
// TODO: more elegant ? 这里是为了解决黑色模式下部分 rect 仍然是白色背景
svgString = replaceRectsWithCustomString(svgString, style);
return svgString;
}

View File

@ -7,6 +7,8 @@ import * as func from './function';
import { hdlMonitor } from './monitor';
import { extensionUrl } from '../resources/hdlParser';
import * as lspClient from './function/lsp-client';
async function registerCommand(context: vscode.ExtensionContext) {
manager.registerManagerCommands(context);
@ -16,6 +18,8 @@ async function registerCommand(context: vscode.ExtensionContext) {
func.registerFSM(context);
func.registerNetlist(context);
func.registerWaveViewer(context);
lspClient.activate(context);
}
@ -56,4 +60,6 @@ export function activate(context: vscode.ExtensionContext) {
launch(context);
}
export function deactivate() {}
export function deactivate() {
lspClient.deactivate();
}

View File

@ -71,13 +71,13 @@ function registerLsp(context: vscode.ExtensionContext) {
vscode.commands.registerCommand('digital-ide.vhdl2vlog', uri => lspTranslator.vhdl2vlog(uri));
// verilog lsp
vscode.languages.registerDocumentSymbolProvider(vlogSelector, lspDocSymbol.vlogDocSymbolProvider);
vscode.languages.registerDefinitionProvider(vlogSelector, lspDefinition.vlogDefinitionProvider);
vscode.languages.registerHoverProvider(vlogSelector, lspHover.vlogHoverProvider);
vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogIncludeCompletionProvider, '/', '"');
vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogMacroCompletionProvider, '`');
vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogPositionPortProvider, '.');
vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogCompletionProvider);
// vscode.languages.registerDocumentSymbolProvider(vlogSelector, lspDocSymbol.vlogDocSymbolProvider);
// vscode.languages.registerDefinitionProvider(vlogSelector, lspDefinition.vlogDefinitionProvider);
// vscode.languages.registerHoverProvider(vlogSelector, lspHover.vlogHoverProvider);
// vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogIncludeCompletionProvider, '/', '"');
// vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogMacroCompletionProvider, '`');
// vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogPositionPortProvider, '.');
// vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogCompletionProvider);
// vscode.languages.registerDocumentSemanticTokensProvider(vlogSelector, lspDocSemantic.vlogDocSenmanticProvider, lspDocSemantic.vlogLegend);

View File

@ -0,0 +1,75 @@
import {
LanguageClient,
LanguageClientOptions,
ServerOptions,
Executable,
} from "vscode-languageclient/node";
import * as vscode from 'vscode';
import * as path from 'path';
import * as fs from 'fs';
import { platform } from "os";
let client: LanguageClient;
function getLspServerExecutionName() {
const osname = platform();
if (osname === 'win32') {
return 'digital-lsp.exe';
}
return 'digital-lsp';
}
export function activate(context: vscode.ExtensionContext) {
const lspServerName = getLspServerExecutionName();
const lspServerPath = context.asAbsolutePath(
path.join('resources', 'dide-lsp', 'server', lspServerName)
);
if (fs.existsSync(lspServerPath)) {
console.log('lsp server found at ' + lspServerPath);
} else {
console.error('cannot found lsp server at ' + lspServerPath);
}
const run: Executable = {
command: lspServerPath,
};
// If the extension is launched in debug mode then the debug server options are used
// Otherwise the run options are used
let serverOptions: ServerOptions = {
run,
debug: run,
};
let clientOptions: LanguageClientOptions = {
documentSelector: [
{
scheme: 'file',
language: 'systemverilog'
},
{
scheme: 'file',
language: 'verilog'
}
],
};
client = new LanguageClient(
"Digital LSP",
"Digital LSP",
serverOptions,
clientOptions
);
client.start();
}
export function deactivate(): Thenable<void> | undefined {
if (!client) {
return undefined;
}
return client.stop();
}

View File

@ -13,11 +13,7 @@ class VlogDocSenmanticProvider implements vscode.DocumentSemanticTokensProvider
public async provideDocumentSemanticTokens(document: vscode.TextDocument, token: vscode.CancellationToken): Promise<vscode.SemanticTokens | null | undefined> {
// TODO : finish this
const tokensBuilder = new vscode.SemanticTokensBuilder(vlogLegend);
// const filePath = document.fileName;
// const vlogAll = await HdlSymbol.all(filePath);
// if (vlogAll) {
// this.prepareTokensBuilder(tokensBuilder, vlogAll);
// }
return tokensBuilder.build();
}