add linter
This commit is contained in:
parent
509fd1a506
commit
f42739e8ec
@ -3,5 +3,5 @@
|
||||
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
|
||||
cp target/primitive.bin /home/dide/project/Digital-IDE/resources/dide-lsp/static/xilinx
|
||||
cargo build --release
|
||||
cp target/release/digital-lsp /home/dide/project/Digital-IDE/resources/dide-lsp/server/0.4.0/
|
||||
#cargo build --release
|
||||
#cp target/release/digital-lsp /home/dide/project/Digital-IDE/resources/dide-lsp/server/0.4.0/
|
||||
|
@ -6,6 +6,10 @@ use std::process::{Command, Stdio};
|
||||
use tower_lsp::lsp_types::*;
|
||||
use walkdir::DirEntry;
|
||||
|
||||
mod modelsim;
|
||||
mod verible;
|
||||
mod verilator;
|
||||
mod vivado;
|
||||
|
||||
pub fn get_diagnostics(
|
||||
uri: Url,
|
||||
|
0
src/diagnostics/modelsim.rs
Normal file
0
src/diagnostics/modelsim.rs
Normal file
0
src/diagnostics/verible.rs
Normal file
0
src/diagnostics/verible.rs
Normal file
0
src/diagnostics/verilator.rs
Normal file
0
src/diagnostics/verilator.rs
Normal file
5
src/diagnostics/vivado.rs
Normal file
5
src/diagnostics/vivado.rs
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
|
||||
pub fn provide_diagnostics() {
|
||||
|
||||
}
|
@ -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};
|
||||
|
||||
/// 将 4'b0011 分解为 ("b", "0011")
|
||||
/// 需要支持的格式:
|
||||
/// - `4'b0011`
|
||||
/// - `8'b0000_1111`
|
||||
fn parse_digit_string(digit_string: &str) -> Option<(&str, &str)> {
|
||||
if digit_string.len() == 0 {
|
||||
return None;
|
||||
@ -29,7 +32,14 @@ fn parse_digit_string(digit_string: &str) -> Option<(&str, &str)> {
|
||||
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
|
||||
};
|
||||
@ -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)> {
|
||||
let radix = convert_tag_to_radix(tag);
|
||||
if radix.is_none() {
|
||||
return None;
|
||||
}
|
||||
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() {
|
||||
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) {
|
||||
let digit_title = LanguageString {
|
||||
language: language_id.to_string(),
|
||||
value: format!("{}'{}{}", digit.len(), tag, digit)
|
||||
value: format!("{}'{}{}", digit.replace("_", "").len(), tag, digit)
|
||||
};
|
||||
let markdown = HoverContents::Array(vec![
|
||||
MarkedString::LanguageString(digit_title),
|
||||
|
@ -284,8 +284,7 @@ impl LanguageServer for Backend {
|
||||
// .await;
|
||||
// } else {
|
||||
let diagnostics = self.server.did_open(params);
|
||||
self.client
|
||||
.publish_diagnostics(
|
||||
self.client.publish_diagnostics(
|
||||
diagnostics.uri,
|
||||
diagnostics.diagnostics,
|
||||
diagnostics.version,
|
||||
|
@ -52,12 +52,19 @@ impl LSPServer {
|
||||
} else {
|
||||
self.srcs.add(self, document);
|
||||
}
|
||||
// diagnostics
|
||||
|
||||
// 生成诊断信息
|
||||
let urls = self.srcs.names.read().unwrap().keys().cloned().collect();
|
||||
let file_id = self.srcs.get_id(&uri);
|
||||
if let Some(file) = self.srcs.get_file(file_id) {
|
||||
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 {
|
||||
PublishDiagnosticsParams {
|
||||
uri,
|
||||
|
Loading…
x
Reference in New Issue
Block a user