From 7cf1043eede8bc9eb6af9d810fa17d4f9fccc677 Mon Sep 17 00:00:00 2001 From: Glyphack Date: Tue, 2 Apr 2024 23:04:15 +0200 Subject: [PATCH] parse stringized annotation --- crates/ruff_python_parser/src/parser.rs | 25 ++++ ..._parser__tests__stringized_annotation.snap | 117 ++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__stringized_annotation.snap diff --git a/crates/ruff_python_parser/src/parser.rs b/crates/ruff_python_parser/src/parser.rs index 659fac0b4aff8..a7a533b1ab532 100644 --- a/crates/ruff_python_parser/src/parser.rs +++ b/crates/ruff_python_parser/src/parser.rs @@ -1515,6 +1515,31 @@ a,b () (a,) ((a,b)) +"# + .trim(), + ) + .unwrap(); + insta::assert_debug_snapshot!(parse_ast); + } + + #[test] + fn test_stringized_annotation() { + let parse_ast = parse_suite( + r#" +from typing_extensions import TypeAlias + + +Alias1 = ( + int + | str + | bool +) # parentheses required + +Alias2: TypeAlias = """ + int + | str + | bool +""" "# .trim(), ) diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__stringized_annotation.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__stringized_annotation.snap new file mode 100644 index 0000000000000..72fb89e2aef05 --- /dev/null +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__stringized_annotation.snap @@ -0,0 +1,117 @@ +--- +source: crates/ruff_python_parser/src/parser.rs +expression: parse_ast +--- +[ + ImportFrom( + StmtImportFrom { + range: 0..39, + module: Some( + Identifier { + id: "typing_extensions", + range: 5..22, + }, + ), + names: [ + Alias { + range: 30..39, + name: Identifier { + id: "TypeAlias", + range: 30..39, + }, + asname: None, + }, + ], + level: Some( + 0, + ), + }, + ), + Assign( + StmtAssign { + range: 42..83, + targets: [ + Name( + ExprName { + range: 42..48, + id: "Alias1", + ctx: Store, + }, + ), + ], + value: BinOp( + ExprBinOp { + range: 57..81, + left: BinOp( + ExprBinOp { + range: 57..70, + left: Name( + ExprName { + range: 57..60, + id: "int", + ctx: Load, + }, + ), + op: BitOr, + right: Name( + ExprName { + range: 67..70, + id: "str", + ctx: Load, + }, + ), + }, + ), + op: BitOr, + right: Name( + ExprName { + range: 77..81, + id: "bool", + ctx: Load, + }, + ), + }, + ), + }, + ), + AnnAssign( + StmtAnnAssign { + range: 109..165, + target: Name( + ExprName { + range: 109..115, + id: "Alias2", + ctx: Store, + }, + ), + annotation: Name( + ExprName { + range: 117..126, + id: "TypeAlias", + ctx: Load, + }, + ), + value: Some( + StringLiteral( + ExprStringLiteral { + range: 129..165, + value: StringLiteralValue { + inner: Single( + StringLiteral { + range: 129..165, + value: "\n int\n | str\n | bool\n", + flags: StringLiteralFlags { + quote_style: Double, + prefix: Empty, + triple_quoted: true, + }, + }, + ), + }, + }, + ), + ), + simple: true, + }, + ), +]