From f5115464ec29b5558473a14ad214dec8897dafb2 Mon Sep 17 00:00:00 2001 From: Erez Sh Date: Mon, 30 Aug 2021 13:56:27 +0100 Subject: [PATCH 1/5] ast_utils: Added support for WithMeta (Initial) --- lark/ast_utils.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lark/ast_utils.py b/lark/ast_utils.py index b5463a2..f1ab317 100644 --- a/lark/ast_utils.py +++ b/lark/ast_utils.py @@ -19,13 +19,22 @@ class AsList(object): Subclasses will be instanciated with the parse results as a single list, instead of as arguments. """ +class WithMeta(object): + pass + def camel_to_snake(name): return re.sub(r'(? Date: Mon, 30 Aug 2021 13:59:05 +0100 Subject: [PATCH 2/5] Oops --- lark/ast_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lark/ast_utils.py b/lark/ast_utils.py index f1ab317..a92dcbe 100644 --- a/lark/ast_utils.py +++ b/lark/ast_utils.py @@ -54,6 +54,7 @@ def create_transformer(ast_module, transformer=None): if not name.startswith('_') and inspect.isclass(obj): if issubclass(obj, Ast): if not issubclass(obj, AsList): + if issubclass(obj, WithMeta): obj = with_meta_inline(obj).__get__(t) else: obj = inline(obj).__get__(t) From 9638ad8edb62b6fa932b6020a934440d2a1c02b0 Mon Sep 17 00:00:00 2001 From: Erez Sh Date: Tue, 31 Aug 2021 11:37:09 +0100 Subject: [PATCH 3/5] ast_utils: Refactor and improve interface --- examples/advanced/create_ast.py | 3 ++- lark/ast_utils.py | 29 +++++++++-------------------- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/examples/advanced/create_ast.py b/examples/advanced/create_ast.py index 537e8a8..c855d84 100644 --- a/examples/advanced/create_ast.py +++ b/examples/advanced/create_ast.py @@ -31,7 +31,8 @@ class _Statement(_Ast): pass @dataclass -class Value(_Ast): +class Value(_Ast, ast_utils.WithMeta): + meta: object value: object @dataclass diff --git a/lark/ast_utils.py b/lark/ast_utils.py index a92dcbe..3b8a12a 100644 --- a/lark/ast_utils.py +++ b/lark/ast_utils.py @@ -20,23 +20,16 @@ class AsList(object): """ class WithMeta(object): + """Abstract class + + Subclasses will be instanciated the Meta instance of the tree. (see ``v_args`` for more detail) + """ pass def camel_to_snake(name): return re.sub(r'(? Date: Tue, 31 Aug 2021 11:42:27 +0100 Subject: [PATCH 4/5] Examples: Added correct type-info to the create_ast example --- examples/advanced/create_ast.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/advanced/create_ast.py b/examples/advanced/create_ast.py index c855d84..95ce520 100644 --- a/examples/advanced/create_ast.py +++ b/examples/advanced/create_ast.py @@ -15,6 +15,7 @@ from typing import List from dataclasses import dataclass from lark import Lark, ast_utils, Transformer, v_args +from lark.tree import Meta this_module = sys.modules[__name__] @@ -32,7 +33,8 @@ class _Statement(_Ast): @dataclass class Value(_Ast, ast_utils.WithMeta): - meta: object + "Uses WithMeta to include line-number metadata in the meta attribute" + meta: Meta value: object @dataclass From 2b5f98478578a65fe0be4c4de8b72f90178133db Mon Sep 17 00:00:00 2001 From: Erez Sh Date: Tue, 31 Aug 2021 12:16:39 +0100 Subject: [PATCH 5/5] ast_utils: Fix docstring --- lark/ast_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lark/ast_utils.py b/lark/ast_utils.py index 3b8a12a..0c03d45 100644 --- a/lark/ast_utils.py +++ b/lark/ast_utils.py @@ -22,7 +22,7 @@ class AsList(object): class WithMeta(object): """Abstract class - Subclasses will be instanciated the Meta instance of the tree. (see ``v_args`` for more detail) + Subclasses will be instanciated with the Meta instance of the tree. (see ``v_args`` for more detail) """ pass