Skip to content

Commit 4842f38

Browse files
committed
Add handling for soft keywords as type alias names
1 parent 6a6a583 commit 4842f38

File tree

3 files changed

+131
-14
lines changed

3 files changed

+131
-14
lines changed

parser/src/parser.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -904,16 +904,12 @@ type()[a:
904904
b] # (type())[a: b]
905905
if type := 1: pass
906906
type = lambda query: query == event
907+
type type = int | str
907908
print(type(12))
909+
type(type)
910+
type match = int # other soft keyword
911+
type case = int
908912
"#;
909-
910-
use crate::lexer::lex;
911-
let lexer = lex(source, Mode::Module);
912-
println!(
913-
"tokens {:#?}",
914-
lexer.map(|x| x.unwrap().0).collect::<Vec<_>>()
915-
);
916-
917913
insta::assert_debug_snapshot!(ast::Suite::parse(source, "<test>").unwrap());
918914
}
919915

parser/src/snapshots/rustpython_parser__parser__tests__type_as_identifier.snap

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

parser/src/soft_keywords.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ where
102102
match tok {
103103
Tok::Newline => break,
104104
Tok::Name { .. } if nesting == 0 => seen_name = true,
105+
// We treat a soft keyword token following a type token as a
106+
// name to support cases like `type type = int` or `type match = int`
107+
Tok::Type | Tok::Match | Tok::Case if nesting == 0 => seen_name = true,
105108
Tok::Equal if nesting == 0 && seen_name => seen_equal = true,
106109
Tok::Lpar | Tok::Lsqb | Tok::Lbrace => nesting += 1,
107110
Tok::Rpar | Tok::Rsqb | Tok::Rbrace => nesting -= 1,

0 commit comments

Comments
 (0)