@@ -98,6 +98,7 @@ class EarlyShapePtr(NamedTuple):
9898 ptrcls : s_pointers .Pointer
9999 target_set : Optional [irast .Set ]
100100 shape_origin : qlast .ShapeOrigin
101+ span : Optional [parsing .Span ]
101102
102103
103104class ShapePtr (NamedTuple ):
@@ -106,6 +107,7 @@ class ShapePtr(NamedTuple):
106107 ptrcls : s_pointers .Pointer
107108 shape_op : qlast .ShapeOp
108109 target_set : Optional [irast .Set ]
110+ span : Optional [parsing .Span ]
109111
110112
111113@dataclasses .dataclass (kw_only = True , frozen = True )
@@ -497,7 +499,8 @@ def make_error(
497499 )
498500
499501 pointers [pointer ] = EarlyShapePtr (
500- pointer , ptr_set , shape_el_desc .ql .origin )
502+ pointer , ptr_set , shape_el_desc .ql .origin , shape_el_desc .ql .span
503+ )
501504
502505 # If we are not defining a shape (so we might care about
503506 # materialization), look through our parent view (if one exists)
@@ -534,7 +537,8 @@ def make_error(
534537 )
535538
536539 pointers [pointer ] = EarlyShapePtr (
537- pointer , ptr_set , qlast .ShapeOrigin .MATERIALIZATION )
540+ pointer , ptr_set , qlast .ShapeOrigin .MATERIALIZATION , None
541+ )
538542
539543 specified_ptrs = {
540544 ptrcls .get_local_name (ctx .env .schema ) for ptrcls in pointers
@@ -571,7 +575,7 @@ def make_error(
571575 set_shape = []
572576 shape_ptrs : list [ShapePtr ] = []
573577
574- for ptrcls , ptr_set , _ in pointers .values ():
578+ for ptrcls , ptr_set , _ , span in pointers .values ():
575579 source : s_types .Type | s_pointers .PointerLike
576580
577581 if ptrcls .is_link_property (ctx .env .schema ):
@@ -592,16 +596,15 @@ def make_error(
592596 continue
593597
594598 ctx .env .view_shapes [source ].append ((ptrcls , shape_op ))
595- shape_ptrs .append (ShapePtr (ir_set , ptrcls , shape_op , ptr_set ))
599+ shape_ptrs .append (ShapePtr (ir_set , ptrcls , shape_op , ptr_set , span ))
596600
597601 rptrcls = view_rptr .ptrcls if view_rptr else None
598602 shape_ptrs = _get_early_shape_configuration (
599603 ir_set , shape_ptrs , rptrcls = rptrcls , ctx = ctx )
600604
601605 # Produce the shape. The main thing here is that we need to fixup
602606 # all of the rptrs to properly point back at ir_set.
603- for _ , ptrcls , shape_op , ptr_set in shape_ptrs :
604- ptr_span = None
607+ for _ , ptrcls , shape_op , ptr_set , ptr_span in shape_ptrs :
605608 if ptrcls in ctx .env .pointer_specified_info :
606609 _ , _ , ptr_span = ctx .env .pointer_specified_info [ptrcls ]
607610
@@ -636,7 +639,7 @@ def make_error(
636639 ir_set ,
637640 ptrcls ,
638641 same_computable_scope = True ,
639- span = ptr_span or span ,
642+ span = ptr_span ,
640643 ctx = ctx ,
641644 )
642645
@@ -716,6 +719,7 @@ def _shape_el_ql_to_shape_el_desc(
716719 lexpr ,
717720 ],
718721 partial = True ,
722+ span = shape_el .span ,
719723 )
720724 else :
721725 path_ql = qlast .Path (
@@ -725,6 +729,7 @@ def _shape_el_ql_to_shape_el_desc(
725729 qlast .TypeIntersection (type = target_typexpr ),
726730 ],
727731 partial = True ,
732+ span = shape_el .span ,
728733 )
729734
730735 return ShapeElementDesc (
@@ -890,7 +895,8 @@ def _gen_pointers_from_defaults(
890895 )
891896
892897 result .append (EarlyShapePtr (
893- pointer , ptr_set , qlast .ShapeOrigin .DEFAULT ))
898+ pointer , ptr_set , qlast .ShapeOrigin .DEFAULT , None
899+ ))
894900
895901 schema = ctx .env .schema
896902
@@ -900,11 +906,11 @@ def _gen_pointers_from_defaults(
900906 # We cannot check or preprocess this at migration time, because some
901907 # defaults may not be used for some inserts.
902908 pointer_indexes = {}
903- for (index , (pointer , _ , _ )) in enumerate (result ):
909+ for (index , (pointer , _ , _ , _ )) in enumerate (result ):
904910 p = pointer .get_nearest_non_derived_parent (schema )
905911 pointer_indexes [p .get_name (schema ).name ] = index
906912 graph = {}
907- for (index , (_ , irset , _ )) in enumerate (result ):
913+ for (index , (_ , irset , _ , _ )) in enumerate (result ):
908914 assert irset
909915 dep_pointers = ast .find_children (irset , irast .Pointer )
910916 dep_rptrs = (
@@ -1249,7 +1255,7 @@ def _compile_rewrites_for_stype(
12491255 ctx = scopectx ,
12501256 )
12511257 res [pn ] = EarlyShapePtr (
1252- pointer , ptr_set , qlast .ShapeOrigin .DEFAULT
1258+ pointer , ptr_set , qlast .ShapeOrigin .DEFAULT , None
12531259 )
12541260 return res
12551261
@@ -2254,7 +2260,8 @@ def _inline_type_computable(
22542260 ctx .env .pointer_specified_info [ptr ] = (None , None , None )
22552261 view_shape .insert (0 , (ptr , qlast .ShapeOp .ASSIGN ))
22562262 shape_ptrs .insert (
2257- 0 , ShapePtr (ir_set , ptr , qlast .ShapeOp .ASSIGN , ptr_set ))
2263+ 0 , ShapePtr (ir_set , ptr , qlast .ShapeOp .ASSIGN , ptr_set , None )
2264+ )
22582265
22592266
22602267def _get_shape_configuration_inner (
@@ -2267,7 +2274,8 @@ def _get_shape_configuration_inner(
22672274) -> None :
22682275 is_objtype = ir_set .path_id .is_objtype_path ()
22692276 all_materialize = all (
2270- op == qlast .ShapeOp .MATERIALIZE for _ , _ , op , _ in shape_ptrs )
2277+ op == qlast .ShapeOp .MATERIALIZE for _ , _ , op , _ , _ in shape_ptrs
2278+ )
22712279
22722280 if is_objtype :
22732281 assert isinstance (stype , s_objtypes .ObjectType )
@@ -2306,7 +2314,8 @@ def _get_shape_configuration_inner(
23062314 view_shape .insert (0 , (ptr , implicit_op ))
23072315 shape_metadata .has_implicit_id = True
23082316 shape_ptrs .insert (
2309- 0 , ShapePtr (ir_set , ptr , implicit_op , None ))
2317+ 0 , ShapePtr (ir_set , ptr , implicit_op , None , None )
2318+ )
23102319 break
23112320
23122321 is_mutation = parent_view_type in {
@@ -2409,7 +2418,8 @@ def _get_late_shape_configuration(
24092418
24102419 for source in sources :
24112420 for ptr , shape_op in ctx .env .view_shapes [source ]:
2412- shape_ptrs .append (ShapePtr (ir_set , ptr , shape_op , None ))
2421+ shape_ptrs .append (ShapePtr (ir_set , ptr , shape_op , None , None )
2422+ )
24132423
24142424 _get_shape_configuration_inner (
24152425 ir_set , shape_ptrs , stype , parent_view_type = parent_view_type , ctx = ctx )
@@ -2506,16 +2516,16 @@ def _late_compile_view_shapes_in_set(
25062516 return
25072517
25082518 shape = []
2509- for path_tip , ptr , shape_op , _ in shape_ptrs :
2510- span = None
2519+ for path_tip , ptr , shape_op , _ , ptr_span in shape_ptrs :
2520+ ptr_span = None
25112521 if ptr in ctx .env .pointer_specified_info :
2512- _ , _ , span = ctx .env .pointer_specified_info [ptr ]
2522+ _ , _ , ptr_span = ctx .env .pointer_specified_info [ptr ]
25132523
25142524 element = setgen .extend_path (
25152525 path_tip ,
25162526 ptr ,
25172527 same_computable_scope = True ,
2518- span = span ,
2528+ span = ptr_span ,
25192529 ctx = ctx ,
25202530 )
25212531
0 commit comments