Skip to content
This repository was archived by the owner on Jul 27, 2023. It is now read-only.

Commit 4d03b9b

Browse files
authored
Fix empty lambda args range (#35)
Previously, empty lambda arguments (e.g. `lambda: 1`) would get the range of the entire expression, which leads to incorrect comment placement. Now empty lambda arguments get an empty range between the `lambda` and the `:` tokens.
1 parent fb365c6 commit 4d03b9b

5 files changed

+71
-11
lines changed

parser/src/parser.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,13 @@ mod tests {
636636
insta::assert_debug_snapshot!(parse_ast);
637637
}
638638

639+
#[test]
640+
fn test_parse_lambda_no_args() {
641+
let source = "lambda: 1";
642+
let parse_ast = ast::Suite::parse(source, "<test>").unwrap();
643+
insta::assert_debug_snapshot!(parse_ast);
644+
}
645+
639646
#[test]
640647
fn test_parse_tuples() {
641648
let source = "a, b = 4, 5";

parser/src/python.lalrpop

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,10 +1245,10 @@ NamedExpression: ast::Expr = {
12451245
};
12461246

12471247
LambdaDef: ast::Expr = {
1248-
<location:@L> "lambda" <p:ParameterList<UntypedParameter, StarUntypedParameter, StarUntypedParameter>?> ":" <body:Test<"all">> <end_location:@R> =>? {
1248+
<location:@L> "lambda" <location_args:@L> <p:ParameterList<UntypedParameter, StarUntypedParameter, StarUntypedParameter>?> <end_location_args:@R> ":" <body:Test<"all">> <end_location:@R> =>? {
12491249
p.as_ref().map(validate_arguments).transpose()?;
12501250
let p = p
1251-
.unwrap_or_else(|| ast::Arguments::empty((location..end_location).into()));
1251+
.unwrap_or_else(|| ast::Arguments::empty((location_args..end_location_args).into()));
12521252

12531253
Ok(ast::Expr::Lambda(
12541254
ast::ExprLambda {

parser/src/python.rs

Lines changed: 28 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__function__tests__lambda_no_args.snap

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__parser__tests__parse_lambda_no_args.snap

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)