75 lines
1.7 KiB
Rust

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<String>,
}
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()
}
}
}
}