@@ -40,10 +40,6 @@ class ClsReportData:
4040 functions : FnMissingData = dataclasses .field (default_factory = dict )
4141
4242
43- _default_enum_data = EnumData ()
44- _default_fn_data = FunctionData ()
45-
46-
4743class GeneratorData :
4844 """
4945 Used by the hooks to retrieve user-specified generation data, and
@@ -55,6 +51,13 @@ class GeneratorData:
5551 def __init__ (self , data : AutowrapConfigYaml ):
5652 self .data = data
5753
54+ default_ignore = self .data .defaults .ignore
55+ self ._default_enum_data = EnumData (ignore = default_ignore )
56+ self ._default_fn_data = FunctionData (ignore = default_ignore )
57+ self ._default_method_data = FunctionData ()
58+ self ._default_class_data = ClassData (ignore = default_ignore )
59+ self ._default_class_enum_data = EnumData ()
60+
5861 # report data
5962 self .functions : FnMissingData = {}
6063 self .classes : Dict [str , ClsReportData ] = {}
@@ -68,7 +71,7 @@ def get_class_data(self, name: str) -> ClassData:
6871 data = self .data .classes .get (name )
6972 missing = data is None
7073 if missing :
71- data = ClassData ()
74+ data = self . _default_class_data
7275
7376 self .classes [name ] = ClsReportData (missing = missing )
7477 return data
@@ -78,19 +81,19 @@ def get_cls_enum_data(
7881 ) -> EnumData :
7982 if name is None :
8083 # TODO
81- return _default_enum_data
84+ return self . _default_class_enum_data
8285 data = cls_data .enums .get (name )
8386 if data is None :
8487 self .classes [cls_key ].enums [name ] = False
85- data = _default_enum_data
88+ data = self . _default_class_enum_data
8689
8790 return data
8891
8992 def get_enum_data (self , name : str ) -> EnumData :
9093 data = self .data .enums .get (name )
9194 if data is None :
9295 self .enums [name ] = False
93- data = _default_enum_data
96+ data = self . _default_enum_data
9497 return data
9598
9699 def get_function_data (
@@ -124,7 +127,10 @@ def get_function_data(
124127 # signature each time we defer it until we actually need to use it
125128
126129 if missing :
127- data = _default_fn_data
130+ if cls_key :
131+ data = self ._default_method_data
132+ else :
133+ data = self ._default_fn_data
128134 report_data .deferred_signatures .append ((fn , is_private ))
129135 elif not data .overloads :
130136 report_data .deferred_signatures .append ((fn , True ))
@@ -187,22 +193,39 @@ def report_missing(self, name: str, reporter: "MissingReporter"):
187193 data yaml and print it out if there's missing data
188194 """
189195
196+ ignore_default = self .data .defaults .ignore
197+ report_missing = True
198+ if ignore_default and not self .data .defaults .report_ignored_missing :
199+ report_missing = False
200+
190201 # note: sometimes we have strings from CppHeaderParser that aren't
191202 # strings, so we need to cast them to str so yaml doesn't complain
192203
193204 data = self ._process_missing (
194- self .attributes , self .functions , self .enums , "functions"
205+ self .attributes ,
206+ self .functions ,
207+ self .enums ,
208+ "functions" ,
209+ ignore_default ,
210+ report_missing ,
195211 )
196212
197213 all_cls_data = {}
198214 for cls_key , cls_data in self .classes .items ():
215+ if cls_data .missing and not report_missing :
216+ continue
217+
199218 result = self ._process_missing (
200219 cls_data .attributes ,
201220 cls_data .functions ,
202221 cls_data .enums ,
203222 "methods" ,
223+ False ,
224+ True ,
204225 )
205226 if result or cls_data .missing :
227+ if ignore_default and cls_data .missing :
228+ result ["ignore" ] = True
206229 all_cls_data [str (cls_key )] = result
207230 if all_cls_data :
208231 data ["classes" ] = all_cls_data
@@ -218,6 +241,8 @@ def _process_missing(
218241 fns : FnMissingData ,
219242 enums : EnumMissingData ,
220243 fn_key : str ,
244+ ignore_default : bool ,
245+ report_missing : bool ,
221246 ):
222247 data : Dict [str , Dict [str , Dict ]] = {}
223248
@@ -230,11 +255,22 @@ def _process_missing(
230255
231256 # enums
232257 if enums :
233- data ["enums" ] = {str (n ): {} for n in enums .keys ()}
258+ enums_report = {}
259+ for en , enum_present in enums .items ():
260+ if not enum_present and not report_missing :
261+ continue
262+ enums_report [en ] = {}
263+ if ignore_default :
264+ enums_report [en ]["ignore" ] = True
265+ if enums_report :
266+ data ["enums" ] = enums_report
234267
235268 # functions
236269 fn_report = {}
237270 for fn , fndata in fns .items ():
271+ if fndata .missing and not report_missing :
272+ continue
273+
238274 fn = str (fn )
239275 overloads = fndata .overloads
240276 deferred_signatures = fndata .deferred_signatures
@@ -264,8 +300,12 @@ def _process_missing(
264300 for k , v in fn_report [fn ]["overloads" ].items ():
265301 if "initializer_list" in k :
266302 v ["ignore" ] = True
303+ if ignore_default :
304+ v ["ignore" ] = True
267305 else :
268306 fn_report [fn ] = d
307+ if ignore_default :
308+ d ["ignore" ] = True
269309 if fn_report :
270310 data [fn_key ] = fn_report
271311
0 commit comments