75 lines
1.7 KiB
Rust
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()
|
|
}
|
|
}
|
|
}
|
|
}
|