@@ -23,6 +23,8 @@ def _get_template_env():
2323def _compute_block_metadata (blocks ):
2424 """Pre-compute block metadata for template rendering."""
2525 blocks_list = []
26+ all_fields = {} # Collect all unique fields
27+
2628 for block_name , block_fields in blocks .items ():
2729 period_groups = filters .group_period_fields (block_fields )
2830 has_index = block_name == "period"
@@ -40,6 +42,9 @@ def _compute_block_metadata(blocks):
4042 all_field_names = list (block_fields .keys ())
4143 standalone_fields = [f for f in all_field_names if f not in grouped_field_names ]
4244
45+ # Collect field objects
46+ all_fields .update (block_fields )
47+
4348 blocks_list .append (
4449 {
4550 "name" : block_name ,
@@ -49,7 +54,7 @@ def _compute_block_metadata(blocks):
4954 }
5055 )
5156
52- return blocks_list
57+ return blocks_list , all_fields
5358
5459
5560def make_grammar (dfn : Dfn , outdir : PathLike ):
@@ -59,12 +64,12 @@ def make_grammar(dfn: Dfn, outdir: PathLike):
5964 template = env .get_template ("component.lark.jinja" )
6065 target_path = outdir / f"{ dfn .name } .lark"
6166
62- # Pre-compute block metadata
63- blocks_list = _compute_block_metadata (dfn .blocks )
67+ # Pre-compute block metadata and collect all fields
68+ blocks_list , fields = _compute_block_metadata (dfn .blocks )
6469
6570 with open (target_path , "w" ) as f :
6671 name = dfn .name
67- f .write (template .render (name = name , blocks = blocks_list , fields = dfn . fields ))
72+ f .write (template .render (name = name , blocks = blocks_list , fields = fields ))
6873
6974
7075def make_all_grammars (dfns : dict [str , Dfn ], outdir : PathLike ):
0 commit comments