Skip to content

Commit

Permalink
fix(parser): span of keyword expression (nushell#14928)
Browse files Browse the repository at this point in the history
# Description

This PR fixes nushell#14816 , so that expression-contains-position check won't
need special treatment for keyword expressions.
e.g.

```nushell
overlay use foo as bar
                  # |_______ cursor here

if true { } else { }
                # |_______ here
```

as mentioned in nushell#14924

# User-Facing Changes

# Tests + Formatting

# After Submitting
  • Loading branch information
blindFS authored Jan 27, 2025
1 parent 5ca4e90 commit b53271b
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 8 deletions.
7 changes: 0 additions & 7 deletions crates/nu-lsp/src/ast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -444,13 +444,6 @@ fn find_id_in_expr(
) -> Option<Vec<(Id, Span)>> {
// skip the entire expression if the location is not in it
if !expr.span.contains(*location) {
// TODO: the span of Keyword does not include its subsidiary expression
// resort to `expr_flat_map` if location found in its expr
if let Expr::Keyword(kw) = &expr.expr {
if kw.expr.span.contains(*location) {
return None;
}
}
return Some(Vec::new());
}
let span = expr.span;
Expand Down
18 changes: 18 additions & 0 deletions crates/nu-lsp/src/goto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -475,6 +475,24 @@ mod tests {
})
);

let resp = send_goto_definition_request(&client_connection, script.clone(), 1, 25);
let result = if let Message::Response(response) = resp {
response.result
} else {
panic!()
};

assert_json_include!(
actual: result,
expected: serde_json::json!({
"uri": script.to_string().replace("use_module", "module"),
"range": {
"start": { "line": 0, "character": 0 },
"end": { "line": 3 }
}
})
);

let resp = send_goto_definition_request(&client_connection, script.clone(), 2, 30);
let result = if let Message::Response(response) = resp {
response.result
Expand Down
2 changes: 1 addition & 1 deletion crates/nu-parser/src/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -919,7 +919,7 @@ pub fn parse_multispan_value(
Expression::new(
working_set,
Expr::Keyword(Box::new(keyword.clone())),
arg_span,
keyword.span.merge(keyword.expr.span),
keyword.expr.ty,
)
}
Expand Down

0 comments on commit b53271b

Please sign in to comment.