add primitives param hover

This commit is contained in:
light-ly 2024-11-13 02:25:59 +08:00
parent 41b2db2eba
commit 290d1aec05
2 changed files with 47 additions and 9 deletions

View File

@ -32,7 +32,7 @@ impl PrimitiveText {
pub fn get_comment(&self, name: &str, text: &str) -> String { pub fn get_comment(&self, name: &str, text: &str) -> String {
if let Some(comment) = PrimitiveText::extract_pattern_comments(text).get(name) { if let Some(comment) = PrimitiveText::extract_pattern_comments(text).get(name) {
(*comment).clone() "// ".to_string() + comment
} else { } else {
"".to_string() "".to_string()
} }

View File

@ -227,11 +227,25 @@ fn goto_instantiation<'a>(
// info!("param_range: {param_range:#?}"); // info!("param_range: {param_range:#?}");
// info!("position param find belong module: {:?}", module); // info!("position param find belong module: {:?}", module);
for param in &module.params { let file_type = server.srcs.hdl_param.find_file_type_by_module_name(&instance.inst_type);
if token_name == param.name { if file_type == "primitives" {
let file_type = server.srcs.hdl_param.find_file_type_by_module_name(&instance.inst_type); let primitives_text = server.srcs.primitive_text.clone();
let hover = make_param_desc_hover(&file_type, param, range, language_id); let params_assignments = &module.instances.first().unwrap().intstparam_assignments;
return Some(hover); for assignment in params_assignments {
if assignment.parameter.clone().unwrap() == token_name {
let hover = make_primitives_param_desc_hover(
primitives_text, &instance.inst_type,
assignment, range, language_id
);
return Some(hover);
}
}
} else {
for param in &module.params {
if token_name == param.name {
let hover = make_param_desc_hover(&file_type, param, range, language_id);
return Some(hover);
}
} }
} }
return None; return None;
@ -252,8 +266,8 @@ fn goto_instantiation<'a>(
let file_type = server.srcs.hdl_param.find_file_type_by_module_name(&instance.inst_type); let file_type = server.srcs.hdl_param.find_file_type_by_module_name(&instance.inst_type);
if file_type == "primitives" { if file_type == "primitives" {
let primitives_text = server.srcs.primitive_text.clone(); let primitives_text = server.srcs.primitive_text.clone();
let instance_assignments = &module.instances.first().unwrap().intstport_assignments; let port_assignments = &module.instances.first().unwrap().intstport_assignments;
for assignment in instance_assignments { for assignment in port_assignments {
if assignment.port.clone().unwrap() == token_name { if assignment.port.clone().unwrap() == token_name {
let hover = make_primitives_port_desc_hover( let hover = make_primitives_port_desc_hover(
primitives_text, &instance.inst_type, primitives_text, &instance.inst_type,
@ -310,6 +324,30 @@ pub fn hover_position_port_param(
None None
} }
fn make_primitives_param_desc_hover(
primitives_text: Arc<PrimitiveText>,
primitives_name: &str,
inst_param: &crate::core::hdlparam::InstParameter,
range: &Range, language_id: &str) -> Hover {
let name = inst_param.parameter.clone().unwrap();
let text_map = primitives_text.name_to_text.read().unwrap();
let comment = if let Some(text) = text_map.get(primitives_name) {
primitives_text.get_comment(&name, text)
} else {
"".to_string()
};
let language_string = LanguageString {
language: language_id.to_string(),
value: "parameter ".to_string() + &name + " " + &comment,
};
Hover {
contents: HoverContents::Scalar(MarkedString::LanguageString(language_string)),
range: Some(range.clone())
}
}
fn make_primitives_port_desc_hover( fn make_primitives_port_desc_hover(
primitives_text: Arc<PrimitiveText>, primitives_text: Arc<PrimitiveText>,
primitives_name: &str, primitives_name: &str,
@ -326,7 +364,7 @@ fn make_primitives_port_desc_hover(
let language_string = LanguageString { let language_string = LanguageString {
language: language_id.to_string(), language: language_id.to_string(),
value: name + " // " + &comment, value: "port ".to_string() + &name + " " + &comment,
}; };
Hover { Hover {
contents: HoverContents::Scalar(MarkedString::LanguageString(language_string)), contents: HoverContents::Scalar(MarkedString::LanguageString(language_string)),