完成 digital-lsp 部署
This commit is contained in:
parent
fb3caa9ab1
commit
199b7a8af3
1
.gitignore
vendored
1
.gitignore
vendored
@ -11,3 +11,4 @@ out-js/
|
||||
resources/hdlParser/parser.js
|
||||
resources/hdlParser/parser.wasm
|
||||
resources/dide-viewer/view/*
|
||||
resources/dide-lsp/server/*
|
12
CHANGELOG.md
12
CHANGELOG.md
@ -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
69
package-lock.json
generated
@ -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",
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
3
resources/dide-lsp/README.md
Normal file
3
resources/dide-lsp/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
dide-lsp
|
||||
- server
|
||||
- digital-lsp
|
6
resources/dide-viewer/README.md
Normal file
6
resources/dide-viewer/README.md
Normal file
@ -0,0 +1,6 @@
|
||||
dide-viewer
|
||||
- view
|
||||
- index.html
|
||||
- css
|
||||
- js
|
||||
- ...
|
@ -1 +0,0 @@
|
||||
// require view folder
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
@ -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);
|
||||
|
||||
|
||||
|
75
src/function/lsp-client/index.ts
Normal file
75
src/function/lsp-client/index.ts
Normal 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();
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user