diff --git a/src/core/hdlparam.rs b/src/core/hdlparam.rs index fc6401e..0b6450c 100644 --- a/src/core/hdlparam.rs +++ b/src/core/hdlparam.rs @@ -286,7 +286,7 @@ impl FastHdlparam { self.fast_macro.defines.push(define); } - pub fn new_module(&mut self, name: &str, line: u32, character: u32, end_character: u32) { + pub fn new_module(&mut self, name: &str, start_line: u32, start_character: u32, end_line: u32, end_character: u32) { let module = Module { name: name.to_string(), params: Vec::new(), @@ -294,10 +294,10 @@ impl FastHdlparam { instances: Vec::new(), range: Range { start: Position { - line, character + line: start_line, character: start_character }, end: Position { - line, character: end_character + line: end_line, character: end_character } } }; @@ -355,7 +355,7 @@ impl FastHdlparam { } } - pub fn add_instance(&mut self, name: &str, inst_type: &str, params_assign: Vec, ports_assign: Vec, line: u32, character: u32, end_character: u32, + pub fn add_instance(&mut self, name: &str, inst_type: &str, params_assign: Vec, ports_assign: Vec, start_line: u32, start_character: u32, end_line: u32, end_character: u32, param_start_line: u32, param_start_character: u32, param_end_line: u32, param_end_character: u32, port_start_line: u32, port_start_character: u32, port_end_line: u32, port_end_character: u32 ) { if let Some(last_module) = self.content.last_mut() { @@ -394,10 +394,10 @@ impl FastHdlparam { intstport_assignment: ports_assign, range: Range { start: Position { - line, character + line: start_line, character: start_character }, end: Position { - line, character: end_character + line: end_line, character: end_character } } }; diff --git a/src/core/sv_parser.rs b/src/core/sv_parser.rs index ec88f8f..d648fab 100644 --- a/src/core/sv_parser.rs +++ b/src/core/sv_parser.rs @@ -166,12 +166,16 @@ pub fn make_fast_from_syntaxtree(syntax_tree: &SyntaxTree, path: &PathBuf) -> Re } } RefNode::ModuleDeclaration(x) => { + let start_keyword = unwrap_node!(x, Keyword).unwrap(); + let start_keyword = get_identifier(start_keyword).unwrap(); + let start_pos = get_position(&doc, start_keyword); + let (start_line, start_character) = (start_pos.line, start_pos.character); + let (_, _, end_line, end_character) = get_pp_range(&doc, RefNode::ModuleDeclaration(x)); + let id = unwrap_node!(x, ModuleIdentifier).unwrap(); let id = get_identifier(id).unwrap(); - let (line, character) = (id.line, get_column_by_offset(&content, id.offset) as u32); - let end_character = character + id.len as u32; let name = syntax_tree.get_str(&id).unwrap(); - hdlparam.new_module(name, line, character, end_character); + hdlparam.new_module(name, start_line, start_character, end_line, end_character); } RefNode::ParameterDeclaration(param_dec) => { let mut event_iter = param_dec.into_iter().event(); @@ -301,13 +305,14 @@ pub fn make_fast_from_syntaxtree(syntax_tree: &SyntaxTree, path: &PathBuf) -> Re if let Some(id) = unwrap_node!(x, ModuleIdentifier) { let id = get_identifier(id).unwrap(); let inst_type = syntax_tree.get_str(&id).unwrap(); + let start_pos = get_position(&doc, id); + let (start_line, start_character) = (start_pos.line, start_pos.character); + let (_, _, end_line, end_character) = get_pp_range(&doc, RefNode::ModuleInstantiation(x)); if let Some(id) = unwrap_node!(x, HierarchicalInstance) { let hier_node = id.clone(); let id = get_identifier(id).unwrap(); let name = syntax_tree.get_str(&id).unwrap(); - let (line, character) = (id.line, get_column_by_offset(&content, id.offset) as u32); - let end_character = character + id.len as u32; let (param_start_line, param_start_character, param_end_line, param_end_character) = match unwrap_node!(x, ParameterValueAssignment) { @@ -326,7 +331,7 @@ pub fn make_fast_from_syntaxtree(syntax_tree: &SyntaxTree, path: &PathBuf) -> Re let inst_port_assignments = get_instance_ports(&syntax_tree, &doc, hier_node.clone()); let (port_start_line, port_start_character, port_end_line, port_end_character) = get_pp_range(&doc, hier_node); - hdlparam.add_instance(name, inst_type, inst_param_assignments, inst_port_assignments, line, character, end_character, + hdlparam.add_instance(name, inst_type, inst_param_assignments, inst_port_assignments, start_line, start_character, end_line, end_character, param_start_line, param_start_character, param_end_line, param_end_character, port_start_line, port_start_character, port_end_line, port_end_character ); @@ -337,20 +342,21 @@ pub fn make_fast_from_syntaxtree(syntax_tree: &SyntaxTree, path: &PathBuf) -> Re let id = unwrap_node!(x, GateInstantiation).unwrap(); let id = get_identifier(id).unwrap(); let inst_type = syntax_tree.get_str(&id).unwrap(); + let start_pos = get_position(&doc, id); + let (start_line, start_character) = (start_pos.line, start_pos.character); + let (_, _, end_line, end_character) = get_pp_range(&doc, RefNode::GateInstantiation(x)); match unwrap_node!(x, NInputGateInstance, NOutputGateInstance) { Some(id) => { let gate_node = id.clone(); let id = get_identifier(id).unwrap(); let name = syntax_tree.get_str(&id).unwrap(); - let (line, character) = (id.line, get_column_by_offset(&content, id.offset) as u32); - let end_character = character + id.len as u32; let (param_start_line, param_start_character, param_end_line, param_end_character) = (0, 0, 0, 0); let inst_port_assignments = get_instance_ports(&syntax_tree, &doc, gate_node.clone()); let (port_start_line, port_start_character, port_end_line, port_end_character) = get_pp_range(&doc, gate_node); - hdlparam.add_instance(name, inst_type, Vec::::new(), inst_port_assignments, line, character, end_character, + hdlparam.add_instance(name, inst_type, Vec::::new(), inst_port_assignments, start_line, start_character, end_line, end_character, param_start_line, param_start_character, param_end_line, param_end_character, port_start_line, port_start_character, port_end_line, port_end_character );