@@ -381,8 +381,10 @@ def KW_TOPIC(self, token: Token) -> str: # noqa: N802
381381 def COMPARATOR (self , token : Token ) -> str : # noqa: N802
382382 return token .value
383383
384- @v_args (meta = True )
385- def project_block (self , meta : Any , items : List [Any ]) -> ProjectNode :
384+ @v_args (tree = True )
385+ def project_block (self , tree : Any ) -> ProjectNode :
386+ meta = tree .meta
387+ items = tree .children
386388 name = items [1 ]
387389 template_path : Optional [Path ] = None
388390 include_nodes : List [IncludeNode ] = []
@@ -458,13 +460,15 @@ def includes(self, items: List[Any]) -> Tuple[Optional[Path], List[IncludeNode]]
458460
459461 return (template_path , include_nodes )
460462
461- @v_args (meta = True )
462- def include_stmt (self , meta : Any , items : List [ Any ] ) -> Any :
463+ @v_args (tree = True )
464+ def include_stmt (self , tree : Any ) -> Any :
463465 """
464466 Grammar: include_stmt: KW_TEMPLATE STRING NEWLINE | KW_INCLUDE include_type STRING NEWLINE
465467 For TEMPLATE: items = [KW_TEMPLATE, STRING, NEWLINE] = ["TEMPLATE", string, newline]
466468 For INCLUDE: items = [KW_INCLUDE, include_type, STRING, NEWLINE] = ["INCLUDE", type_str, string, newline]
467469 """
470+ meta = tree .meta
471+ items = tree .children
468472 if items [0 ] == "TEMPLATE" :
469473 return ("TEMPLATE" , _strip_quotes (items [1 ]), _source_location (self .file_path , meta ))
470474 # items = ["INCLUDE", include_type_result, STRING]
@@ -525,8 +529,10 @@ def description(self, items: List[Any]) -> str:
525529 def description_lines (self , items : List [Any ]) -> List [Any ]:
526530 return items
527531
528- @v_args (meta = True )
529- def source_block (self , meta : Any , items : List [Any ]) -> SourceNode :
532+ @v_args (tree = True )
533+ def source_block (self , tree : Any ) -> SourceNode :
534+ meta = tree .meta
535+ items = tree .children
530536 bibref = items [1 ]
531537 field_entries = items [2 :- 2 ]
532538 fields : Dict [str , Any ] = {}
@@ -546,8 +552,10 @@ def source_block(self, meta: Any, items: List[Any]) -> SourceNode:
546552 location = _source_location (self .file_path , meta ),
547553 )
548554
549- @v_args (meta = True )
550- def item_block (self , meta : Any , items : List [Any ]) -> ItemNode :
555+ @v_args (tree = True )
556+ def item_block (self , tree : Any ) -> ItemNode :
557+ meta = tree .meta
558+ items = tree .children
551559 bibref = items [1 ]
552560 field_entries = items [2 :- 2 ]
553561 quote = ""
@@ -613,8 +621,10 @@ def item_block(self, meta: Any, items: List[Any]) -> ItemNode:
613621 location = _source_location (self .file_path , meta ),
614622 )
615623
616- @v_args (meta = True )
617- def ontology_block (self , meta : Any , items : List [Any ]) -> OntologyNode :
624+ @v_args (tree = True )
625+ def ontology_block (self , tree : Any ) -> OntologyNode :
626+ meta = tree .meta
627+ items = tree .children
618628 concept = items [1 ].strip ()
619629 field_entries = items [2 :- 2 ]
620630 description = ""
@@ -653,8 +663,10 @@ def ontology_block(self, meta: Any, items: List[Any]) -> OntologyNode:
653663 def concept_name (self , items : List [Any ]) -> str :
654664 return str (items [0 ]).strip ()
655665
656- @v_args (meta = True )
657- def template_header (self , meta : Any , items : List [Any ]) -> Dict [str , Any ]:
666+ @v_args (tree = True )
667+ def template_header (self , tree : Any ) -> Dict [str , Any ]:
668+ meta = tree .meta
669+ items = tree .children
658670 name = items [1 ]
659671 metadata : Dict [str , Any ] = {}
660672 for item in items [2 :]:
@@ -720,8 +732,10 @@ def field_names(self, items: List[Any]) -> List[str]:
720732 def field_key (self , items : List [Any ]) -> str :
721733 return items [0 ]
722734
723- @v_args (meta = True )
724- def field_def_block (self , meta : Any , items : List [Any ]) -> FieldSpec :
735+ @v_args (tree = True )
736+ def field_def_block (self , tree : Any ) -> FieldSpec :
737+ meta = tree .meta
738+ items = tree .children
725739 name = _normalize_field_name (items [1 ])
726740 type_spec = next (item for item in items if isinstance (item , FieldType ))
727741 props = [item for item in items if isinstance (item , tuple )]
@@ -794,8 +808,10 @@ def value_list(self, items: List[Any]) -> List[OrderedValue]:
794808 if not (isinstance (item , Token ) and item .type in {"NEWLINE" , "_INDENT" , "_DEDENT" })
795809 ]
796810
797- @v_args (meta = True )
798- def value_entry (self , meta : Any , items : List [Any ]) -> OrderedValue :
811+ @v_args (tree = True )
812+ def value_entry (self , tree : Any ) -> OrderedValue :
813+ meta = tree .meta
814+ items = tree .children
799815 index = - 1
800816 if len (items ) == 3 :
801817 index = int (items [0 ])
@@ -826,8 +842,10 @@ def relation_list(self, items: List[Any]) -> Dict[str, str]:
826842 def relation_entry (self , items : List [Any ]) -> Tuple [str , str ]:
827843 return items [0 ], items [1 ]
828844
829- @v_args (meta = True )
830- def field_entry (self , meta : Any , items : List [Any ]) -> Tuple [str , Any , SourceLocation ]:
845+ @v_args (tree = True )
846+ def field_entry (self , tree : Any ) -> Tuple [str , Any , SourceLocation ]:
847+ meta = tree .meta
848+ items = tree .children
831849 name = _normalize_field_name (items [0 ])
832850 location = _source_location (self .file_path , meta )
833851 cleaned = [
@@ -937,8 +955,8 @@ def text_block(self, items: List[Any]) -> List[Any]:
937955 if not (isinstance (item , Token ) and item .type == "NEWLINE" )
938956 ]
939957
940- @v_args (meta = True )
941- def chain_expr (self , meta : Any , items : List [ Any ] ) -> ChainNode :
958+ @v_args (tree = True )
959+ def chain_expr (self , tree : Any ) -> ChainNode :
942960 """
943961 Parseia chain_expr da gramatica.
944962
@@ -952,6 +970,8 @@ def chain_expr(self, meta: Any, items: List[Any]) -> ChainNode:
952970 Por ora, armazenamos todos os elementos em nodes e deixamos relations vazio.
953971 O validator.validate_chain() faz a separacao correta.
954972 """
973+ meta = tree .meta
974+ items = tree .children
955975 elements : List [str ] = []
956976 locations : List [SourceLocation ] = []
957977 for item in items :
0 commit comments