fix module and inst range
This commit is contained in:
parent
0c0ee48ae5
commit
e31f8ec8ac
@ -286,7 +286,7 @@ impl FastHdlparam {
|
|||||||
self.fast_macro.defines.push(define);
|
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 {
|
let module = Module {
|
||||||
name: name.to_string(),
|
name: name.to_string(),
|
||||||
params: Vec::new(),
|
params: Vec::new(),
|
||||||
@ -294,10 +294,10 @@ impl FastHdlparam {
|
|||||||
instances: Vec::new(),
|
instances: Vec::new(),
|
||||||
range: Range {
|
range: Range {
|
||||||
start: Position {
|
start: Position {
|
||||||
line, character
|
line: start_line, character: start_character
|
||||||
},
|
},
|
||||||
end: Position {
|
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<InstParameter>, ports_assign: Vec<InstPort>, line: u32, character: u32, end_character: u32,
|
pub fn add_instance(&mut self, name: &str, inst_type: &str, params_assign: Vec<InstParameter>, ports_assign: Vec<InstPort>, 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,
|
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 ) {
|
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() {
|
if let Some(last_module) = self.content.last_mut() {
|
||||||
@ -394,10 +394,10 @@ impl FastHdlparam {
|
|||||||
intstport_assignment: ports_assign,
|
intstport_assignment: ports_assign,
|
||||||
range: Range {
|
range: Range {
|
||||||
start: Position {
|
start: Position {
|
||||||
line, character
|
line: start_line, character: start_character
|
||||||
},
|
},
|
||||||
end: Position {
|
end: Position {
|
||||||
line, character: end_character
|
line: end_line, character: end_character
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -166,12 +166,16 @@ pub fn make_fast_from_syntaxtree(syntax_tree: &SyntaxTree, path: &PathBuf) -> Re
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
RefNode::ModuleDeclaration(x) => {
|
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 = unwrap_node!(x, ModuleIdentifier).unwrap();
|
||||||
let id = get_identifier(id).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();
|
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) => {
|
RefNode::ParameterDeclaration(param_dec) => {
|
||||||
let mut event_iter = param_dec.into_iter().event();
|
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) {
|
if let Some(id) = unwrap_node!(x, ModuleIdentifier) {
|
||||||
let id = get_identifier(id).unwrap();
|
let id = get_identifier(id).unwrap();
|
||||||
let inst_type = syntax_tree.get_str(&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) {
|
if let Some(id) = unwrap_node!(x, HierarchicalInstance) {
|
||||||
let hier_node = id.clone();
|
let hier_node = id.clone();
|
||||||
let id = get_identifier(id).unwrap();
|
let id = get_identifier(id).unwrap();
|
||||||
let name = syntax_tree.get_str(&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,
|
let (param_start_line, param_start_character,
|
||||||
param_end_line, param_end_character) = match unwrap_node!(x, ParameterValueAssignment) {
|
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 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);
|
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,
|
param_start_line, param_start_character, param_end_line, param_end_character,
|
||||||
port_start_line, port_start_character, port_end_line, port_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 = unwrap_node!(x, GateInstantiation).unwrap();
|
||||||
let id = get_identifier(id).unwrap();
|
let id = get_identifier(id).unwrap();
|
||||||
let inst_type = syntax_tree.get_str(&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) {
|
match unwrap_node!(x, NInputGateInstance, NOutputGateInstance) {
|
||||||
Some(id) => {
|
Some(id) => {
|
||||||
let gate_node = id.clone();
|
let gate_node = id.clone();
|
||||||
let id = get_identifier(id).unwrap();
|
let id = get_identifier(id).unwrap();
|
||||||
let name = syntax_tree.get_str(&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 (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 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);
|
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::<InstParameter>::new(), inst_port_assignments, line, character, end_character,
|
hdlparam.add_instance(name, inst_type, Vec::<InstParameter>::new(), inst_port_assignments, start_line, start_character, end_line, end_character,
|
||||||
param_start_line, param_start_character, param_end_line, param_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
|
port_start_line, port_start_character, port_end_line, port_end_character
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user