use std::{path::PathBuf, str::FromStr}; use serde::{Deserialize, Serialize}; use crate::utils::command::is_command_valid; use super::{AbstractLinterConfiguration, LinterStatus}; #[derive(Default, Debug, Serialize, Deserialize)] pub struct IverilogConfiguration { pub language_id: String, pub linter: IverilogLinter } #[derive(Debug, Serialize, Deserialize)] pub struct IverilogLinter { pub name: String, /// 目前是否启动 pub enabled: bool, pub path: String, pub args: Vec, } impl Default for IverilogLinter { fn default() -> Self { Self { name: "iverilog".to_string(), enabled: false, path: "iverilog".to_string(), args: Vec::new(), } } } impl AbstractLinterConfiguration for IverilogConfiguration { fn new(language_id: &str) -> Self { IverilogConfiguration { language_id: language_id.to_string(), linter: IverilogLinter::default() } } fn provide_diagnostics(&self) { } fn get_windows_extension(&self) -> &str { "exe" } fn get_linter_path(&self) -> &str { &self.linter.path } fn linter_status(&self) -> LinterStatus { match self.language_id.as_str() { "verilog" => { let invoke_name = self.get_invoke_name("iverilog"); let available = is_command_valid(&invoke_name); LinterStatus { tool_name: "iverilog".to_string(), available, invoke_name } } // 不支持 svlog // 不支持 vhdl _ => { LinterStatus::default() } } } }