From 5540b0b1f2e982bfa4b87092588dbb0cfddbaff1 Mon Sep 17 00:00:00 2001 From: LSTM-Kirigaya <1193466151@qq.com> Date: Mon, 11 Nov 2024 21:41:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=A8=E5=B1=80=20conf=20?= =?UTF-8?q?=E5=B1=9E=E6=80=A7:=20extensionPath?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/sv_parser.rs | 1 + src/server.rs | 40 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/core/sv_parser.rs b/src/core/sv_parser.rs index acefe27..c58d9fb 100644 --- a/src/core/sv_parser.rs +++ b/src/core/sv_parser.rs @@ -2,6 +2,7 @@ use std::fs::{self, File}; use std::io::BufRead; use std::io::BufReader; use std::path::PathBuf; +#[allow(unused)] use log::info; use regex::Regex; use ropey::Rope; diff --git a/src/server.rs b/src/server.rs index 3cf7d9d..c8d7f93 100644 --- a/src/server.rs +++ b/src/server.rs @@ -69,15 +69,38 @@ pub enum LogLevel { #[derive(Debug, Serialize, Deserialize)] #[serde(default)] pub struct ProjectConfig { + // 用户工作目录的路径 pub workspace_folder: Option, - pub tool_chain: String + // 插件安装的根路径 + pub extension_path: String, + // 当前工具链 + pub tool_chain: String, + // if true, recursively search the working directory for files to run diagnostics on + pub auto_search_workdir: bool, + // list of directories with header files + pub include_dirs: Vec, + // list of directories to recursively search for SystemVerilog/Verilog sources + pub source_dirs: Vec, + // config options for verible tools + pub verible: Verible, + // config options for verilator tools + pub verilator: Verilator, + // log level + pub log_level: LogLevel } impl Default for ProjectConfig { fn default() -> Self { ProjectConfig { workspace_folder: None, - tool_chain: "xilinx".to_string() + extension_path: "".to_string(), + tool_chain: "xilinx".to_string(), + auto_search_workdir: true, + include_dirs: Vec::new(), + source_dirs: Vec::new(), + verible: Verible::default(), + verilator: Verilator::default(), + log_level: LogLevel::Info, } } } @@ -171,7 +194,18 @@ impl LanguageServer for Backend { let mut configure = self.server.conf.write().unwrap(); configure.workspace_folder = root_uri.clone(); - info!("当前客户端配置 workspaceFolder: {:?}", params.root_uri); + + if let Some(serde_json::Value::Object(options)) = params.initialization_options { + let extension_path = options.get("extensionPath").unwrap().as_str().unwrap(); + let tool_chain = options.get("toolChain").unwrap().as_str().unwrap(); + configure.tool_chain = tool_chain.to_string(); + configure.extension_path = extension_path.to_string(); + } + + info!("当前客户端初始化结果"); + info!("workspaceFolder: {:?}", configure.workspace_folder); + info!("extensionPath: {:?}", configure.extension_path); + info!("toolChain: {:?}", configure.tool_chain); let text_document_sync = TextDocumentSyncCapability::Options( TextDocumentSyncOptions {