add linter

This commit is contained in:
锦恢 2024-12-03 09:41:11 +08:00
parent 509fd1a506
commit f42739e8ec
9 changed files with 41 additions and 9 deletions

View File

@ -3,5 +3,5 @@
cargo test --release --package digital-lsp --lib -- core::primitive_parser::tests::gen_primitive_bin --exact --show-output --nocapture cargo test --release --package digital-lsp --lib -- core::primitive_parser::tests::gen_primitive_bin --exact --show-output --nocapture
mkdir -p /home/dide/project/Digital-IDE/resources/dide-lsp/static/xilinx mkdir -p /home/dide/project/Digital-IDE/resources/dide-lsp/static/xilinx
cp target/primitive.bin /home/dide/project/Digital-IDE/resources/dide-lsp/static/xilinx cp target/primitive.bin /home/dide/project/Digital-IDE/resources/dide-lsp/static/xilinx
cargo build --release #cargo build --release
cp target/release/digital-lsp /home/dide/project/Digital-IDE/resources/dide-lsp/server/0.4.0/ #cp target/release/digital-lsp /home/dide/project/Digital-IDE/resources/dide-lsp/server/0.4.0/

View File

@ -6,6 +6,10 @@ use std::process::{Command, Stdio};
use tower_lsp::lsp_types::*; use tower_lsp::lsp_types::*;
use walkdir::DirEntry; use walkdir::DirEntry;
mod modelsim;
mod verible;
mod verilator;
mod vivado;
pub fn get_diagnostics( pub fn get_diagnostics(
uri: Url, uri: Url,

View File

View File

View File

View File

@ -0,0 +1,5 @@
pub fn provide_diagnostics() {
}

View File

@ -10,6 +10,9 @@ use crate::{core::{self, hdlparam::{Define, FastHdlparam}, primitive_parser::Pri
use super::{get_language_id_by_path_str, get_word_range_at_position, resolve_path, to_escape_path}; use super::{get_language_id_by_path_str, get_word_range_at_position, resolve_path, to_escape_path};
/// 将 4'b0011 分解为 ("b", "0011") /// 将 4'b0011 分解为 ("b", "0011")
/// 需要支持的格式:
/// - `4'b0011`
/// - `8'b0000_1111`
fn parse_digit_string(digit_string: &str) -> Option<(&str, &str)> { fn parse_digit_string(digit_string: &str) -> Option<(&str, &str)> {
if digit_string.len() == 0 { if digit_string.len() == 0 {
return None; return None;
@ -29,7 +32,14 @@ fn parse_digit_string(digit_string: &str) -> Option<(&str, &str)> {
return None; return None;
} }
return Some((tag.unwrap(), digit.unwrap())); // 此时4'b0011 被自动分割成了
// tag: b
// digit: 0011
// 前面的 4 被丢弃了,因为 4 可以通过 0011 的长度判断出来
let tag = tag.unwrap();
let digit = digit.unwrap();
return Some((tag, digit));
}, },
None => return None None => return None
}; };
@ -46,13 +56,20 @@ fn convert_tag_to_radix(tag: &str) -> Option<u32> {
} }
/// 计算出有符号和无符号下的表示 /// 计算出有符号和无符号下的表示
/// - `tag`: b, o, h 这些代表进制的字符,
/// - `digit_string`: 进制数
///
/// 需要支持的格式:
/// - `4'b0011`
/// - `8'b0000_1111`
fn convert_to_sign_unsign<'a>(tag: &'a str, digit_string: &str) -> Option<(String, String)> { fn convert_to_sign_unsign<'a>(tag: &'a str, digit_string: &str) -> Option<(String, String)> {
let radix = convert_tag_to_radix(tag); let radix = convert_tag_to_radix(tag);
if radix.is_none() { if radix.is_none() {
return None; return None;
} }
let radix = radix.unwrap(); let radix = radix.unwrap();
let unsigned_decimal = u128::from_str_radix(digit_string, radix); let raw_digit_string = digit_string.replace("_", "");
let unsigned_decimal = u128::from_str_radix(&raw_digit_string, radix);
if unsigned_decimal.is_err() { if unsigned_decimal.is_err() {
return None; return None;
@ -87,7 +104,7 @@ pub fn hover_format_digit(line: &RopeSlice, pos: Position, language_id: &str) ->
if let Some((signed_string, unsigned_string)) = convert_to_sign_unsign(tag, digit) { if let Some((signed_string, unsigned_string)) = convert_to_sign_unsign(tag, digit) {
let digit_title = LanguageString { let digit_title = LanguageString {
language: language_id.to_string(), language: language_id.to_string(),
value: format!("{}'{}{}", digit.len(), tag, digit) value: format!("{}'{}{}", digit.replace("_", "").len(), tag, digit)
}; };
let markdown = HoverContents::Array(vec![ let markdown = HoverContents::Array(vec![
MarkedString::LanguageString(digit_title), MarkedString::LanguageString(digit_title),

View File

@ -284,8 +284,7 @@ impl LanguageServer for Backend {
// .await; // .await;
// } else { // } else {
let diagnostics = self.server.did_open(params); let diagnostics = self.server.did_open(params);
self.client self.client.publish_diagnostics(
.publish_diagnostics(
diagnostics.uri, diagnostics.uri,
diagnostics.diagnostics, diagnostics.diagnostics,
diagnostics.version, diagnostics.version,

View File

@ -52,12 +52,19 @@ impl LSPServer {
} else { } else {
self.srcs.add(self, document); self.srcs.add(self, document);
} }
// diagnostics
// 生成诊断信息
let urls = self.srcs.names.read().unwrap().keys().cloned().collect(); let urls = self.srcs.names.read().unwrap().keys().cloned().collect();
let file_id = self.srcs.get_id(&uri); let file_id = self.srcs.get_id(&uri);
if let Some(file) = self.srcs.get_file(file_id) { if let Some(file) = self.srcs.get_file(file_id) {
let file = file.read().unwrap(); let file = file.read().unwrap();
get_diagnostics(uri, &file.text, urls, &self.conf.read().unwrap()) let diagnostics = get_diagnostics(
uri,
&file.text,
urls,
&self.conf.read().unwrap()
);
diagnostics
} else { } else {
PublishDiagnosticsParams { PublishDiagnosticsParams {
uri, uri,