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
|
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/
|
||||||
|
@ -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,
|
||||||
|
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};
|
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),
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user