diff --git a/src/core/sv_parser.rs b/src/core/sv_parser.rs index 87ba0f4..54fe03b 100644 --- a/src/core/sv_parser.rs +++ b/src/core/sv_parser.rs @@ -351,10 +351,17 @@ fn get_first_last_locate(x: &sv_parser::NeedGetLocate) -> Option<(Locate, Locate } } Some(RefNode::OutputTerminal(x)) => { - let id = unwrap_node!(x, Identifier).unwrap(); - let locate = get_identifier(id).unwrap(); - if locate != last_locate { last_locate = locate; } - if first_locate.offset == 0 { first_locate = locate; }; + if let Some(id) = unwrap_node!(x, Identifier) { + let locate = get_identifier(id).unwrap(); + if locate != last_locate { last_locate = locate; } + if first_locate.offset == 0 { first_locate = locate; }; + } else if let Some(RefNode::Expression(x)) = unwrap_node!(x, Expression) { + let exp = sv_parser::NeedParseExpression::Expression(x.clone()); + if let Some(locate) = parse_expression_only_locate(&exp) { + if locate != last_locate { last_locate = locate; } + if first_locate.offset == 0 { first_locate = locate; }; + } + } } _ => () }