完成 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.js
|
||||||
resources/hdlParser/parser.wasm
|
resources/hdlParser/parser.wasm
|
||||||
resources/dide-viewer/view/*
|
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.
|
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
|
## [0.3.3] - 2024-02-05
|
||||||
|
|
||||||
Feature
|
Feature
|
||||||
|
69
package-lock.json
generated
69
package-lock.json
generated
@ -1,18 +1,19 @@
|
|||||||
{
|
{
|
||||||
"name": "fpga-support",
|
"name": "fpga-support",
|
||||||
"version": "0.3.2",
|
"version": "0.3.3",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "fpga-support",
|
"name": "fpga-support",
|
||||||
"version": "0.3.2",
|
"version": "0.3.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chokidar": "^3.5.3",
|
"chokidar": "^3.5.3",
|
||||||
"puppeteer-core": "^19.4.1",
|
"puppeteer-core": "^19.4.1",
|
||||||
"showdown": "^2.1.0",
|
"showdown": "^2.1.0",
|
||||||
"state-machine-cat": "^9.2.5",
|
"state-machine-cat": "^9.2.5",
|
||||||
"temp": "^0.9.4",
|
"temp": "^0.9.4",
|
||||||
|
"vscode-languageclient": "^7.0.0",
|
||||||
"vscode-textmate": "^9.0.0",
|
"vscode-textmate": "^9.0.0",
|
||||||
"wavedrom": "^2.9.1"
|
"wavedrom": "^2.9.1"
|
||||||
},
|
},
|
||||||
@ -3807,6 +3808,41 @@
|
|||||||
"integrity": "sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==",
|
"integrity": "sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==",
|
||||||
"deprecated": "no longer supported"
|
"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": {
|
"node_modules/vscode-textmate": {
|
||||||
"version": "9.0.0",
|
"version": "9.0.0",
|
||||||
"resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz",
|
"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",
|
"resolved": "https://registry.npmmirror.com/viz.js/-/viz.js-1.8.2.tgz",
|
||||||
"integrity": "sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ=="
|
"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": {
|
"vscode-textmate": {
|
||||||
"version": "9.0.0",
|
"version": "9.0.0",
|
||||||
"resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz",
|
"resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz",
|
||||||
|
@ -1159,6 +1159,7 @@
|
|||||||
"state-machine-cat": "^9.2.5",
|
"state-machine-cat": "^9.2.5",
|
||||||
"temp": "^0.9.4",
|
"temp": "^0.9.4",
|
||||||
"vscode-textmate": "^9.0.0",
|
"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;
|
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 {number} id
|
||||||
* @param {any} json
|
* @param {any} json
|
||||||
* @param {any} style 'dark' or 'light'
|
* @param {'dark' | 'light'} style
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
function renderWaveDrom(id, json, style) {
|
function renderWaveDrom(id, json, style) {
|
||||||
const skin = selectSkin(style);
|
const skin = selectSkin(style);
|
||||||
const renderObj = renderAny(id, json, skin);
|
const renderObj = renderAny(id, json, skin);
|
||||||
const svgString = onmlStringify(renderObj);
|
let svgString = onmlStringify(renderObj);
|
||||||
|
|
||||||
|
// TODO: more elegant ? 这里是为了解决黑色模式下部分 rect 仍然是白色背景
|
||||||
|
svgString = replaceRectsWithCustomString(svgString, style);
|
||||||
|
|
||||||
return svgString;
|
return svgString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@ import * as func from './function';
|
|||||||
import { hdlMonitor } from './monitor';
|
import { hdlMonitor } from './monitor';
|
||||||
import { extensionUrl } from '../resources/hdlParser';
|
import { extensionUrl } from '../resources/hdlParser';
|
||||||
|
|
||||||
|
import * as lspClient from './function/lsp-client';
|
||||||
|
|
||||||
async function registerCommand(context: vscode.ExtensionContext) {
|
async function registerCommand(context: vscode.ExtensionContext) {
|
||||||
manager.registerManagerCommands(context);
|
manager.registerManagerCommands(context);
|
||||||
|
|
||||||
@ -16,6 +18,8 @@ async function registerCommand(context: vscode.ExtensionContext) {
|
|||||||
func.registerFSM(context);
|
func.registerFSM(context);
|
||||||
func.registerNetlist(context);
|
func.registerNetlist(context);
|
||||||
func.registerWaveViewer(context);
|
func.registerWaveViewer(context);
|
||||||
|
|
||||||
|
lspClient.activate(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -56,4 +60,6 @@ export function activate(context: vscode.ExtensionContext) {
|
|||||||
launch(context);
|
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));
|
vscode.commands.registerCommand('digital-ide.vhdl2vlog', uri => lspTranslator.vhdl2vlog(uri));
|
||||||
|
|
||||||
// verilog lsp
|
// verilog lsp
|
||||||
vscode.languages.registerDocumentSymbolProvider(vlogSelector, lspDocSymbol.vlogDocSymbolProvider);
|
// vscode.languages.registerDocumentSymbolProvider(vlogSelector, lspDocSymbol.vlogDocSymbolProvider);
|
||||||
vscode.languages.registerDefinitionProvider(vlogSelector, lspDefinition.vlogDefinitionProvider);
|
// vscode.languages.registerDefinitionProvider(vlogSelector, lspDefinition.vlogDefinitionProvider);
|
||||||
vscode.languages.registerHoverProvider(vlogSelector, lspHover.vlogHoverProvider);
|
// vscode.languages.registerHoverProvider(vlogSelector, lspHover.vlogHoverProvider);
|
||||||
vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogIncludeCompletionProvider, '/', '"');
|
// vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogIncludeCompletionProvider, '/', '"');
|
||||||
vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogMacroCompletionProvider, '`');
|
// vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogMacroCompletionProvider, '`');
|
||||||
vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogPositionPortProvider, '.');
|
// vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogPositionPortProvider, '.');
|
||||||
vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogCompletionProvider);
|
// vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogCompletionProvider);
|
||||||
// vscode.languages.registerDocumentSemanticTokensProvider(vlogSelector, lspDocSemantic.vlogDocSenmanticProvider, lspDocSemantic.vlogLegend);
|
// 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> {
|
public async provideDocumentSemanticTokens(document: vscode.TextDocument, token: vscode.CancellationToken): Promise<vscode.SemanticTokens | null | undefined> {
|
||||||
// TODO : finish this
|
// TODO : finish this
|
||||||
const tokensBuilder = new vscode.SemanticTokensBuilder(vlogLegend);
|
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();
|
return tokensBuilder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user