From 749464f2344a42276123aa9f7d9724014556a041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BC=80=E6=99=BA?= Date: Sat, 25 May 2024 16:36:16 +0800 Subject: [PATCH 01/10] Fix import multi module FIX: Allow dotted names and list of imports in `import` statements. --- src/python.grammar | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/python.grammar b/src/python.grammar index d10d14e..72f2154 100644 --- a/src/python.grammar +++ b/src/python.grammar @@ -106,10 +106,10 @@ smallStatement { expressions { commaSep<"*" expression | test> } ImportStatement { - kw<"import"> dottedName (kw<"as"> VariableName)? | + kw<"import"> (importList | importedNames) | kw<"from"> (("." | "...")+ dottedName? | dottedName) kw<"import"> ("*" | importList | importedNames) } -importedNames { commaSep VariableName> } +importedNames { commaSep VariableName> } importList[@export] { "(" importedNames ")" } commaSep { expr ("," expr)* ","? } From 2a7e8e37e3cf1401cff8f0c35c6a46066e6663ce Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Sat, 25 May 2024 10:36:45 +0200 Subject: [PATCH 02/10] Mark version 1.1.14 --- CHANGELOG.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b2b64c..ba5cdcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.14 (2024-05-25) + +### Bug fixes + +Allow dotted names and list of imports in `import` statements. + ## 1.1.13 (2024-03-18) ### Bug fixes diff --git a/package.json b/package.json index 45bdec1..13e81ed 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lezer/python", - "version": "1.1.13", + "version": "1.1.14", "description": "Lezer-based Python grammar", "main": "dist/index.cjs", "type": "module", From 7606e067d67af1d5aba8eac678c0eb3046f81d09 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 25 Jun 2024 18:13:54 +0200 Subject: [PATCH 03/10] Accept a commented line at end of document FIX: Fix an issue where a commented line at the end of the input would emit an error node. Closes https://github.com/lezer-parser/python/issues/25 --- src/python.grammar | 2 +- test/statement.txt | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/python.grammar b/src/python.grammar index 72f2154..5823bf9 100644 --- a/src/python.grammar +++ b/src/python.grammar @@ -270,7 +270,7 @@ skw { @extend[@name={term}] } formatStringSpec { FormatSpec { ":" (formatStringSpecChars | nestedFormatReplacement)* } "}" } blankLine { - blankLineStart space? Comment? newline + blankLineStart space? Comment? (newline | eof) } } diff --git a/test/statement.txt b/test/statement.txt index b2baf04..2ca5073 100644 --- a/test/statement.txt +++ b/test/statement.txt @@ -261,6 +261,16 @@ Script( ExpressionStatement(VariableName))), ExpressionStatement(VariableName)) +# Script ending in a comment + +x = 1 + +# End + +==> + +Script(AssignStatement(VariableName,AssignOp,Number),Comment) + # Escaped newlines x = 1 + \ From b30dd80eb445a380ab5a2352330be8332b422655 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 6 Dec 2024 09:36:10 +0100 Subject: [PATCH 04/10] Mark version 1.1.15 --- CHANGELOG.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba5cdcf..0e35368 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.15 (2024-12-06) + +### Bug fixes + +Fix an issue where a commented line at the end of the input would emit an error node. + ## 1.1.14 (2024-05-25) ### Bug fixes diff --git a/package.json b/package.json index 13e81ed..4284a67 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lezer/python", - "version": "1.1.14", + "version": "1.1.15", "description": "Lezer-based Python grammar", "main": "dist/index.cjs", "type": "module", From ac7539eef06b1fc84298ce89061dcc712e35a648 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 5 Mar 2025 15:15:07 +0100 Subject: [PATCH 05/10] Allow type declarations on rest parameters FIX: Allow type declarations on rest parameters. Closes https://github.com/codemirror/dev/issues/1536 --- src/python.grammar | 2 +- test/statement.txt | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/python.grammar b/src/python.grammar index 5823bf9..03d2413 100644 --- a/src/python.grammar +++ b/src/python.grammar @@ -74,7 +74,7 @@ MappingPattern { "{" commaSep<"**" pattern | (VariableName | LiteralPattern) ":" ClassDefinition { kw<"class"> VariableName TypeParamList? ArgList? Body } -param { VariableName TypeDef? (AssignOp{"="} test)? | "*" VariableName? | "**" VariableName | "/" } +param { VariableName TypeDef? (AssignOp{"="} test)? | "*" (VariableName TypeDef?)? | "**" VariableName TypeDef? | "/" } TypeDef { ":" test } diff --git a/test/statement.txt b/test/statement.txt index 2ca5073..f5f5125 100644 --- a/test/statement.txt +++ b/test/statement.txt @@ -422,3 +422,15 @@ type Point = tuple[float, float] ==> Script(TypeDefinition(type,VariableName,MemberExpression(VariableName,VariableName,",",VariableName))) + +# Rest arg with type + +def f(*args: tuple[int]) -> int: + return 1 + +==> + +Script(FunctionDefinition(def,VariableName, + ParamList(VariableName,TypeDef(MemberExpression(VariableName,VariableName))), + TypeDef(VariableName), + Body(ReturnStatement(return,Number)))) From 14ef0d5eb27f7fb1f446b8a00358f6e603403764 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 5 Mar 2025 15:15:55 +0100 Subject: [PATCH 06/10] Mark version 1.1.16 --- CHANGELOG.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e35368..76c19c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.16 (2025-03-05) + +### Bug fixes + +Allow type declarations on rest parameters. + ## 1.1.15 (2024-12-06) ### Bug fixes diff --git a/package.json b/package.json index 4284a67..47927d3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lezer/python", - "version": "1.1.15", + "version": "1.1.16", "description": "Lezer-based Python grammar", "main": "dist/index.cjs", "type": "module", From fa126590769a4a3030d903c61482a8caa80c2034 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Sat, 29 Mar 2025 07:40:12 +0100 Subject: [PATCH 07/10] Allow escaped quotes in raw strings FIX: Support escaped quotes inside raw strings. Closes https://github.com/lezer-parser/python/issues/27 --- src/tokens.js | 3 +++ test/expression.txt | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/src/tokens.js b/src/tokens.js index 454bffb..bd6c6b5 100644 --- a/src/tokens.js +++ b/src/tokens.js @@ -180,6 +180,9 @@ export const strings = new ExternalTokenizer((input, stack) => { return } break + } else if (input.next == backslash && !escapes && input.peek(1) > -1) { + // Raw strings still ignore escaped quotes, weirdly. + input.advance(2) } else if (input.next == quote && (!long || input.peek(1) == quote && input.peek(2) == quote)) { if (input.pos == start) { input.acceptToken(stringEnd, long ? 3 : 1) diff --git a/test/expression.txt b/test/expression.txt index 596b64f..f847cb2 100644 --- a/test/expression.txt +++ b/test/expression.txt @@ -33,6 +33,14 @@ Script(ExpressionStatement(ContinuedString(String, String)), ExpressionStatement(String), ExpressionStatement(String)) +# Raw string + +r"foo\"" + r'\\' + +==> + +Script(ExpressionStatement(BinaryExpression(String,ArithOp,String))) + # Bracketed continued string print('00300:' From f26a8dd20fc0acc892e25ca2506749ab9d9996b7 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Sat, 29 Mar 2025 07:40:20 +0100 Subject: [PATCH 08/10] Mark version 1.1.17 --- CHANGELOG.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76c19c2..fe8fe58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.17 (2025-03-29) + +### Bug fixes + +Support escaped quotes inside raw strings. + ## 1.1.16 (2025-03-05) ### Bug fixes diff --git a/package.json b/package.json index 47927d3..0682782 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lezer/python", - "version": "1.1.16", + "version": "1.1.17", "description": "Lezer-based Python grammar", "main": "dist/index.cjs", "type": "module", From 0daf785f115307be352fdd34422fc84adbb81633 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 17 Apr 2025 08:00:20 +0200 Subject: [PATCH 09/10] Make match guards accept a test, not just and expression FIX: Fix parsing of match guards with conditional tests. Closes https://github.com/lezer-parser/python/issues/28 --- src/python.grammar | 2 +- test/statement.txt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/python.grammar b/src/python.grammar index 03d2413..ffd0534 100644 --- a/src/python.grammar +++ b/src/python.grammar @@ -42,7 +42,7 @@ MatchStatement { } MatchClause { - skw<"case"> commaSep Guard { kw<"if"> expression }? Body + skw<"case"> commaSep Guard { kw<"if"> test }? Body } pattern[@isGroup=Pattern] { diff --git a/test/statement.txt b/test/statement.txt index f5f5125..0b94056 100644 --- a/test/statement.txt +++ b/test/statement.txt @@ -368,6 +368,8 @@ match foo: pass case [a, b, *rest] | (p, q): pass + case (1, 2) if bar == 2: + pass ==> @@ -392,6 +394,10 @@ Script(MatchStatement(match,VariableName,MatchBody( StarPattern(CapturePattern(VariableName))), LogicOp, SequencePattern(CapturePattern(VariableName),CapturePattern(VariableName))), + Body(PassStatement(pass))), + MatchClause(case, + SequencePattern(LiteralPattern(Number),LiteralPattern(Number)), + Guard(if,BinaryExpression(VariableName,CompareOp,Number)), Body(PassStatement(pass)))))) # Type Params From 091aab4b36d8e430053ee5603db170cd4eaec776 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 17 Apr 2025 08:00:56 +0200 Subject: [PATCH 10/10] Mark version 1.1.18 --- CHANGELOG.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe8fe58..e0746e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.18 (2025-04-17) + +### Bug fixes + +Fix parsing of match guards with conditional tests. + ## 1.1.17 (2025-03-29) ### Bug fixes diff --git a/package.json b/package.json index 0682782..3ee6362 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lezer/python", - "version": "1.1.17", + "version": "1.1.18", "description": "Lezer-based Python grammar", "main": "dist/index.cjs", "type": "module",