From d9fe1e9ed5b76f5d2e8fe02dc1f85c3822242cab Mon Sep 17 00:00:00 2001 From: LSTM-Kirigaya <1193466151@qq.com> Date: Tue, 3 Dec 2024 22:10:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E5=8A=A0=E4=B8=B0=E5=AF=8C=E7=9A=84?= =?UTF-8?q?=20vlog=20=E7=9A=84=20sys=20task=20=E8=A1=A5=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/completion/sv.rs | 16 +++++++--- src/completion/sys_tasks.rs | 63 +++++++++++++++++++++++++++++++++++-- src/server.rs | 8 ++--- 3 files changed, 76 insertions(+), 11 deletions(-) diff --git a/src/completion/sv.rs b/src/completion/sv.rs index 1fe5922..67dd633 100644 --- a/src/completion/sv.rs +++ b/src/completion/sv.rs @@ -39,11 +39,11 @@ pub fn completion(server: &LSPServer, params: &CompletionParams) -> Option Some(CompletionList { is_incomplete: false, - items: server.sys_tasks.clone(), + items: server.vlog_sys_tasks_completion_items.clone(), }), "`" => Some(CompletionList { is_incomplete: false, - items: server.directives.clone(), + items: server.vlog_directives.clone(), }), "/" => { info!("trigger include"); @@ -80,7 +80,13 @@ pub fn completion(server: &LSPServer, params: &CompletionParams) -> Option>( + server.vlog_sys_tasks_completion_items + .iter() + .filter(|x| x.label.starts_with(&token)) + .cloned() + .collect(), + ); // 4. 加入例化自动补全的 completion_items.items.extend::>( @@ -105,11 +111,11 @@ pub fn completion(server: &LSPServer, params: &CompletionParams) -> Option Some(CompletionList { is_incomplete: false, - items: server.sys_tasks.clone(), + items: server.vlog_sys_tasks_completion_items.clone(), }), '`' => Some(CompletionList { is_incomplete: false, - items: server.directives.clone(), + items: server.vlog_directives.clone(), }), _ => { let mut completion_items = server.srcs.get_completions( diff --git a/src/completion/sys_tasks.rs b/src/completion/sys_tasks.rs index f50df2f..fff25b4 100644 --- a/src/completion/sys_tasks.rs +++ b/src/completion/sys_tasks.rs @@ -310,10 +310,62 @@ pub const VLOG_REAL_MATH_FUNCTIONS_TASKS: &[(&str, &str, &str)] = &[ ("atanh", "$atanh($1);", "计算反双曲正切函数。\n```verilog\nreal result;\nresult = $atanh(value);\n```"), ]; -fn make_function_profile(section: &str, description: &str) -> MarkupContent { +/// Specifying name of dump file ($dumpfile) tasks ieee1364 18.1.1 +/// (&str, &str, &str): (label, snippet, description) +pub const VLOG_DUMPFILE_TASKS: &[(&str, &str, &str)] = &[ + ("dumpfile", "$dumpfile($1);", "指定波形转储文件的名称。\n```verilog\n$dumpfile(\"waveform.vcd\");\n```"), +]; + +/// Specifying variables to be dumped ($dumpvars) tasks ieee1364 18.1.2 +/// (&str, &str, &str): (label, snippet, description) +pub const VLOG_DUMPVARS_TASKS: &[(&str, &str, &str)] = &[ + ("dumpvars", "$dumpvars($1, $2);", "指定要转储的变量。\n```verilog\n$dumpvars(1, module_instance);\n```"), +]; + +/// Stopping and resuming the dump ($dumpoff/$dumpon) tasks ieee1364 18.1.3 +/// (&str, &str, &str): (label, snippet, description) +pub const VLOG_DUMPOFF_DUMPON_TASKS: &[(&str, &str, &str)] = &[ + ("dumpoff", "$dumpoff;", "暂停波形转储。\n```verilog\n$dumpoff;\n```"), + ("dumpon", "$dumpon;", "恢复波形转储。\n```verilog\n$dumpon;\n```"), +]; + +/// Generating a checkpoint ($dumpall) tasks ieee1364 18.1.4 +/// (&str, &str, &str): (label, snippet, description) +pub const VLOG_DUMPALL_TASKS: &[(&str, &str, &str)] = &[ + ("dumpall", "$dumpall;", "生成一个检查点,转储所有变量的当前状态。\n```verilog\n$dumpall;\n```"), +]; + +/// Limiting size of dump file ($dumplimit) tasks ieee1364 18.1.5 +/// (&str, &str, &str): (label, snippet, description) +pub const VLOG_DUMPLIMIT_TASKS: &[(&str, &str, &str)] = &[ + ("dumplimit", "$dumplimit($1);", "限制波形转储文件的大小。\n```verilog\n$dumplimit(1000000);\n```"), +]; + +/// Reading dump file during simulation ($dumpflush) tasks ieee1364 18.1.6 +/// (&str, &str, &str): (label, snippet, description) +pub const VLOG_DUMPFLUSH_TASKS: &[(&str, &str, &str)] = &[ + ("dumpflush", "$dumpflush;", "刷新波形转储文件,确保所有数据都写入文件。\n```verilog\n$dumpflush;\n```"), +]; + +/// FSDB related tasks +/// (&str, &str, &str): (label, snippet, description) +pub const VLOG_FSDB_TASKS: &[(&str, &str, &str)] = &[ + ("fsdbDumpfile", "$fsdbDumpfile($1);", "指定 FSDB 文件的名称。\n```verilog\n$fsdbDumpfile(\"waveform.fsdb\");\n```"), + ("fsdbDumpvars", "$fsdbDumpvars($1, $2);", "指定要转储到 FSDB 文件的变量。\n```verilog\n$fsdbDumpvars(1, module_instance);\n```"), + ("fsdbDumpoff", "$fsdbDumpoff;", "暂停 FSDB 文件的转储。\n```verilog\n$fsdbDumpoff;\n```"), + ("fsdbDumpon", "$fsdbDumpon;", "恢复 FSDB 文件的转储。\n```verilog\n$fsdbDumpon;\n```"), + ("fsdbDumpflush", "$fsdbDumpflush;", "刷新 FSDB 文件,确保所有数据都写入文件。\n```verilog\n$fsdbDumpflush;\n```"), +]; + + +fn make_function_profile( + #[allow(unused)] + section: &str, + description: &str +) -> MarkupContent { MarkupContent { kind: MarkupKind::Markdown, - value: format!("{}\n---\n{}", section, description) + value: format!("{}", description) } } @@ -377,6 +429,13 @@ pub fn provide_vlog_sys_tasks_completions() -> Vec { update_task_completions(&mut items, VLOG_INTEGER_MATH_FUNCTIONS_TASKS, "Integer math functions tasks ieee1364 17.11.1"); update_task_completions(&mut items, VLOG_REAL_MATH_FUNCTIONS_TASKS, "Real math functions tasks ieee1364 17.11.2"); + update_task_completions(&mut items, VLOG_DUMPFILE_TASKS, "Specifying name of dump file ($dumpfile) tasks ieee1364 18.1.1"); + update_task_completions(&mut items, VLOG_DUMPVARS_TASKS, "Specifying variables to be dumped ($dumpvars) tasks ieee1364 18.1.2"); + update_task_completions(&mut items, VLOG_DUMPOFF_DUMPON_TASKS, "Stopping and resuming the dump ($dumpoff/$dumpon) tasks ieee1364 18.1.3"); + update_task_completions(&mut items, VLOG_DUMPALL_TASKS, "Generating a checkpoint ($dumpall) tasks ieee1364 18.1.4"); + update_task_completions(&mut items, VLOG_DUMPLIMIT_TASKS, "Limiting size of dump file ($dumplimit) tasks ieee1364 18.1.5"); + update_task_completions(&mut items, VLOG_DUMPFLUSH_TASKS, "Reading dump file during simulation ($dumpflush) tasks ieee1364 18.1.6"); + update_task_completions(&mut items, VLOG_FSDB_TASKS, "FSDB related tasks"); items } \ No newline at end of file diff --git a/src/server.rs b/src/server.rs index ea686a3..f6b2062 100644 --- a/src/server.rs +++ b/src/server.rs @@ -15,8 +15,8 @@ pub struct LSPServer { pub cache: CacheManager, pub vlog_keyword_completion_items: Vec, pub vhdl_keyword_completiom_items: Vec, - pub sys_tasks: Vec, - pub directives: Vec, + pub vlog_sys_tasks_completion_items: Vec, + pub vlog_directives: Vec, pub conf: Arc>, #[allow(unused)] pub log_handle: Mutex>, @@ -31,8 +31,8 @@ impl LSPServer { cache: CacheManager::new(dide_home), vlog_keyword_completion_items: keyword_completions(VLOG_KEYWORDS), vhdl_keyword_completiom_items: keyword_completions(VHDL_KEYWORDS), - sys_tasks: provide_vlog_sys_tasks_completions(), - directives: other_completions(DIRECTIVES), + vlog_sys_tasks_completion_items: provide_vlog_sys_tasks_completions(), + vlog_directives: other_completions(DIRECTIVES), conf: Arc::new(RwLock::new(ProjectConfig::default())), log_handle: Mutex::new(log_handle), }