From 93f3433e77f26fc273c5b2730bd6a4c64cadd7d6 Mon Sep 17 00:00:00 2001 From: harupy Date: Sat, 10 Dec 2022 17:49:57 +0900 Subject: [PATCH 1/4] Fix the end location of an implicitly-concatenated string --- ...tpython_parser__string__tests__parse_f_string_concat_1.snap | 2 +- ...tpython_parser__string__tests__parse_f_string_concat_2.snap | 2 +- ...tpython_parser__string__tests__parse_f_string_concat_3.snap | 2 +- ...ython_parser__string__tests__parse_u_f_string_concat_1.snap | 2 +- ...ython_parser__string__tests__parse_u_f_string_concat_2.snap | 2 +- compiler/parser/src/string.rs | 3 ++- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_1.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_1.snap index f57f903bc2..9b1f5668d7 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_1.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_1.snap @@ -24,7 +24,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 8, + column: 17, }, ), custom: (), diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_2.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_2.snap index f57f903bc2..9b1f5668d7 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_2.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_2.snap @@ -24,7 +24,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 8, + column: 17, }, ), custom: (), diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap index 68582508b0..0d7ebcab71 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap @@ -24,7 +24,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 8, + column: 22, }, ), custom: (), diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_1.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_1.snap index d9d57865ed..2449dff357 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_1.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_1.snap @@ -24,7 +24,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 9, + column: 18, }, ), custom: (), diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_2.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_2.snap index a9f10f062c..f56ae0f2d5 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_2.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_2.snap @@ -24,7 +24,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 9, + column: 22, }, ), custom: (), diff --git a/compiler/parser/src/string.rs b/compiler/parser/src/string.rs index 838da94c7e..5a8e3e6eae 100644 --- a/compiler/parser/src/string.rs +++ b/compiler/parser/src/string.rs @@ -12,6 +12,7 @@ pub fn parse_strings( // Preserve the initial location and kind. let initial_start = values[0].0; let initial_end = values[0].2; + let last_end = values.last().unwrap().2; let initial_kind = (values[0].1 .1 == StringKind::U).then(|| "u".to_owned()); // Optimization: fast-track the common case of a single string. @@ -84,7 +85,7 @@ pub fn parse_strings( Ok(if has_fstring { Expr::new( initial_start, - initial_end, + last_end, ExprKind::JoinedStr { values: deduped }, ) } else { From 991c8299f8ebec2028b6b192a0eea5f2c0501dd4 Mon Sep 17 00:00:00 2001 From: harupy Date: Sat, 10 Dec 2022 18:09:26 +0900 Subject: [PATCH 2/4] Fix plain string --- ...n_parser__string__tests__parse_string_concat.snap | 2 +- ...rser__string__tests__parse_u_string_concat_1.snap | 2 +- ...rser__string__tests__parse_u_string_concat_2.snap | 2 +- compiler/parser/src/string.rs | 12 +++++------- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_string_concat.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_string_concat.snap index 0052f8df6c..a8744263f5 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_string_concat.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_string_concat.snap @@ -24,7 +24,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 8, + column: 16, }, ), custom: (), diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_string_concat_1.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_string_concat_1.snap index 503d5b5c13..868ba813e8 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_string_concat_1.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_string_concat_1.snap @@ -24,7 +24,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 8, + column: 17, }, ), custom: (), diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_string_concat_2.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_string_concat_2.snap index 432625993a..a24fc2b347 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_string_concat_2.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_string_concat_2.snap @@ -24,7 +24,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 9, + column: 17, }, ), custom: (), diff --git a/compiler/parser/src/string.rs b/compiler/parser/src/string.rs index 5a8e3e6eae..3d0a452598 100644 --- a/compiler/parser/src/string.rs +++ b/compiler/parser/src/string.rs @@ -82,18 +82,16 @@ pub fn parse_strings( deduped.push(take_current(&mut current)); } - Ok(if has_fstring { - Expr::new( - initial_start, - last_end, - ExprKind::JoinedStr { values: deduped }, - ) + let node = if has_fstring { + ExprKind::JoinedStr { values: deduped } } else { deduped .into_iter() .exactly_one() .expect("String must be concatenated to a single element.") - }) + .node + }; + Ok(Expr::new(initial_start, last_end, node)) } #[cfg(test)] From d6d50d463507716c3ab26c2b7ca665e922e60329 Mon Sep 17 00:00:00 2001 From: harupy Date: Sat, 10 Dec 2022 18:45:36 +0900 Subject: [PATCH 3/4] Fix --- ...ython_parser__string__tests__parse_f_string_concat_1.snap | 2 +- ...ython_parser__string__tests__parse_f_string_concat_2.snap | 2 +- ...ython_parser__string__tests__parse_f_string_concat_3.snap | 2 +- ...hon_parser__string__tests__parse_u_f_string_concat_1.snap | 2 +- ...hon_parser__string__tests__parse_u_f_string_concat_2.snap | 2 +- compiler/parser/src/string.rs | 5 ++--- 6 files changed, 7 insertions(+), 8 deletions(-) diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_1.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_1.snap index 9b1f5668d7..bfe109e114 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_1.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_1.snap @@ -38,7 +38,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 8, + column: 17, }, ), custom: (), diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_2.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_2.snap index 9b1f5668d7..bfe109e114 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_2.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_2.snap @@ -38,7 +38,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 8, + column: 17, }, ), custom: (), diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap index 0d7ebcab71..87b92127c2 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap @@ -38,7 +38,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 8, + column: 22, }, ), custom: (), diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_1.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_1.snap index 2449dff357..76e6b1d220 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_1.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_1.snap @@ -38,7 +38,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 9, + column: 18, }, ), custom: (), diff --git a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_2.snap b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_2.snap index f56ae0f2d5..8c073fd901 100644 --- a/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_2.snap +++ b/compiler/parser/src/snapshots/rustpython_parser__string__tests__parse_u_f_string_concat_2.snap @@ -38,7 +38,7 @@ expression: parse_ast end_location: Some( Location { row: 1, - column: 9, + column: 22, }, ), custom: (), diff --git a/compiler/parser/src/string.rs b/compiler/parser/src/string.rs index 3d0a452598..cf18de9c2c 100644 --- a/compiler/parser/src/string.rs +++ b/compiler/parser/src/string.rs @@ -11,7 +11,6 @@ pub fn parse_strings( ) -> Result { // Preserve the initial location and kind. let initial_start = values[0].0; - let initial_end = values[0].2; let last_end = values.last().unwrap().2; let initial_kind = (values[0].1 .1 == StringKind::U).then(|| "u".to_owned()); @@ -20,7 +19,7 @@ pub fn parse_strings( let value = values.into_iter().last().unwrap().1 .0; return Ok(Expr::new( initial_start, - initial_end, + last_end, ExprKind::Constant { value: Constant::Str(value), kind: initial_kind, @@ -39,7 +38,7 @@ pub fn parse_strings( let take_current = |current: &mut Vec| -> Expr { Expr::new( initial_start, - initial_end, + last_end, ExprKind::Constant { value: Constant::Str(current.drain(..).join("")), kind: initial_kind.clone(), From d3ba7e0d8a6efd77ef29182bee38eb9784c41ebc Mon Sep 17 00:00:00 2001 From: harupy Date: Sat, 10 Dec 2022 19:45:34 +0900 Subject: [PATCH 4/4] Remove expectedFailure decorator --- Lib/test/test_ast.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 1b6025e364..66b03043d7 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -1978,8 +1978,6 @@ def test_multi_line_str(self): self._check_end_pos(assign, 3, 40) self._check_end_pos(assign.value, 3, 40) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_continued_str(self): s = dedent(''' x = "first part" \\