11from __future__ import annotations
22
3+ import sys
34from dataclasses import dataclass , field
45from enum import Enum
56from functools import cached_property
910
1011# TODO: Use info from https://typedoc.org/api/modules/JSONOutput.html to rebuild models!
1112
13+ _dataclass_opts : dict [str , bool ] = {}
14+ if sys .version_info >= (3 , 10 ):
15+ _dataclass_opts ["kw_only" ] = True
16+
1217
1318# https://github.com/TypeStrong/typedoc/blob/master/src/lib/models/reflections/kind.ts
1419class ReflectionKind (Enum ):
@@ -138,8 +143,7 @@ class BlockTagContentKind(Enum):
138143 INLINE_TAG = "inline-tag"
139144
140145
141-
142- @dataclass (kw_only = True )
146+ @dataclass (** _dataclass_opts )
143147class FileRegistry :
144148 entries : dict [int , str ]
145149 reflections : dict [int , int ]
@@ -152,7 +156,7 @@ def filepath(self, reflection_id: int) -> str:
152156 return self .entries [self .reverse_reflections [reflection_id ]]
153157
154158
155- @dataclass (kw_only = True )
159+ @dataclass (** _dataclass_opts )
156160class BlockTagContent :
157161 kind : BlockTagContentKind
158162 text : str
@@ -170,7 +174,7 @@ def markdown(self, symbol_map: dict[int, Reflection] | None = None) -> str:
170174 return self .text
171175
172176
173- @dataclass (kw_only = True )
177+ @dataclass (** _dataclass_opts )
174178class BlockTag :
175179 kind : BlockTagKind
176180 content : list [BlockTagContent ]
@@ -182,7 +186,7 @@ def markdown(self, **kwargs) -> str:
182186 return "" .join (block .markdown (** kwargs ) for block in self .summary )
183187
184188
185- @dataclass (kw_only = True )
189+ @dataclass (** _dataclass_opts )
186190class Comment :
187191 summary : list [BlockTagContent ]
188192 tags : list [BlockTag ] | None = None
@@ -195,13 +199,13 @@ def markdown(self, **kwargs) -> str:
195199 return "" .join (block .markdown (** kwargs ) for block in self .summary )
196200
197201
198- @dataclass (kw_only = True )
202+ @dataclass (** _dataclass_opts )
199203class Group :
200204 title : str
201205 children : list [int | Reflection ]
202206
203207
204- @dataclass (kw_only = True )
208+ @dataclass (** _dataclass_opts )
205209class Source :
206210 file_name : str
207211 line : int
@@ -226,7 +230,7 @@ def contents(self) -> str:
226230 return file .readlines ()[self .line - 1 ]
227231
228232
229- @dataclass (kw_only = True )
233+ @dataclass (** _dataclass_opts )
230234class Target :
231235 source_file_name : str
232236 qualified_name : str
@@ -246,7 +250,7 @@ class TypeKind(Enum):
246250 MAPPED = "mapped"
247251
248252
249- @dataclass (kw_only = True )
253+ @dataclass (** _dataclass_opts )
250254class Type :
251255 type : TypeKind
252256 name : str | None = None
@@ -268,7 +272,7 @@ class Type:
268272 template_type : Type | None = None
269273
270274
271- @dataclass (kw_only = True )
275+ @dataclass (** _dataclass_opts )
272276class Reflection :
273277 id : int
274278 name : str
@@ -341,7 +345,7 @@ def source_contents(self) -> str:
341345 return "\n " .join (source .contents for source in self .sources ).rstrip ().removesuffix ("{" )
342346
343347
344- @dataclass (kw_only = True )
348+ @dataclass (** _dataclass_opts )
345349class Project (Reflection ):
346350 package_name : str
347351 readme : list [BlockTagContent ] | None = None
@@ -358,7 +362,7 @@ def symbol_map(self) -> dict[int, Reflection]:
358362 return self .symbol_id_map
359363
360364
361- @dataclass (kw_only = True )
365+ @dataclass (** _dataclass_opts )
362366class Module (Reflection ):
363367 package_version : str | None = None
364368 readme : str | None = None
@@ -375,28 +379,28 @@ def exports(self) -> list[Reflection]:
375379 return []
376380
377381
378- @dataclass (kw_only = True )
382+ @dataclass (** _dataclass_opts )
379383class Namespace (Reflection ):
380384 @property
381385 def kind (self ) -> ReflectionKind :
382386 return ReflectionKind .NAMESPACE
383387
384388
385- @dataclass (kw_only = True )
389+ @dataclass (** _dataclass_opts )
386390class Enum (Reflection ):
387391 @property
388392 def kind (self ) -> ReflectionKind :
389393 return ReflectionKind .ENUM
390394
391395
392- @dataclass (kw_only = True )
396+ @dataclass (** _dataclass_opts )
393397class EnumMember (Reflection ):
394398 @property
395399 def kind (self ) -> ReflectionKind :
396400 return ReflectionKind .ENUM_MEMBER
397401
398402
399- @dataclass (kw_only = True )
403+ @dataclass (** _dataclass_opts )
400404class Variable (Reflection ):
401405 type : Type
402406 default_value : str | None = None
@@ -406,7 +410,7 @@ def kind(self) -> ReflectionKind:
406410 return ReflectionKind .VARIABLE
407411
408412
409- @dataclass (kw_only = True )
413+ @dataclass (** _dataclass_opts )
410414class Function (Reflection ):
411415 signatures : list [CallSignature ]
412416
@@ -422,7 +426,7 @@ def exports(self) -> list[Reflection]:
422426 ]
423427
424428
425- @dataclass (kw_only = True )
429+ @dataclass (** _dataclass_opts )
426430class Class (Reflection ):
427431 extended_types : list [Type ] | None = None
428432 extended_by : list [Type ] | None = None
@@ -435,7 +439,7 @@ def kind(self) -> ReflectionKind:
435439 return ReflectionKind .CLASS
436440
437441
438- @dataclass (kw_only = True )
442+ @dataclass (** _dataclass_opts )
439443class Interface (Reflection ):
440444 extended_types : list [Type ] | None = None
441445 extended_by : list [Type ] | None = None
@@ -450,7 +454,7 @@ def kind(self) -> ReflectionKind:
450454 return ReflectionKind .INTERFACE
451455
452456
453- @dataclass (kw_only = True )
457+ @dataclass (** _dataclass_opts )
454458class Constructor (Reflection ):
455459 signatures : list [ConstructorSignature ] | None = None
456460 overwrites : Type | None = None
@@ -461,7 +465,7 @@ def kind(self) -> ReflectionKind:
461465 return ReflectionKind .CONSTRUCTOR
462466
463467
464- @dataclass (kw_only = True )
468+ @dataclass (** _dataclass_opts )
465469class Property (Reflection ):
466470 type : Type
467471 inherited_from : Type | None = None
@@ -474,7 +478,7 @@ def kind(self) -> ReflectionKind:
474478 return ReflectionKind .PROPERTY
475479
476480
477- @dataclass (kw_only = True )
481+ @dataclass (** _dataclass_opts )
478482class Method (Reflection ):
479483 signatures : list [CallSignature ]
480484 overwrites : Type | None = None
@@ -486,7 +490,7 @@ def kind(self) -> ReflectionKind:
486490 return ReflectionKind .METHOD
487491
488492
489- @dataclass (kw_only = True )
493+ @dataclass (** _dataclass_opts )
490494class CallSignature (Reflection ):
491495 type : Type
492496 parameters : list [Parameter ] | None = None
@@ -500,7 +504,7 @@ def kind(self) -> ReflectionKind:
500504 return ReflectionKind .CALL_SIGNATURE
501505
502506
503- @dataclass (kw_only = True )
507+ @dataclass (** _dataclass_opts )
504508class IndexSignature (Reflection ):
505509 type : Type
506510 parameters : list [Parameter ] | None = None
@@ -510,7 +514,7 @@ def kind(self) -> ReflectionKind:
510514 return ReflectionKind .INDEX_SIGNATURE
511515
512516
513- @dataclass (kw_only = True )
517+ @dataclass (** _dataclass_opts )
514518class ConstructorSignature (Reflection ):
515519 parameters : list [Parameter ] | None = None
516520 overwrites : Type | None = None
@@ -522,7 +526,7 @@ def kind(self) -> ReflectionKind:
522526 return ReflectionKind .CONSTRUCTOR_SIGNATURE
523527
524528
525- @dataclass (kw_only = True )
529+ @dataclass (** _dataclass_opts )
526530class Parameter (Reflection ):
527531 type : Type | None = None
528532 default_value : str | None = None
@@ -532,7 +536,7 @@ def kind(self) -> ReflectionKind:
532536 return ReflectionKind .PARAMETER
533537
534538
535- @dataclass (kw_only = True )
539+ @dataclass (** _dataclass_opts )
536540class TypeLiteral (Reflection ):
537541 signatures : list [CallSignature ] | None = None
538542 index_signatures : list [IndexSignature ] | None = None
@@ -542,7 +546,7 @@ def kind(self) -> ReflectionKind:
542546 return ReflectionKind .TYPE_LITERAL
543547
544548
545- @dataclass (kw_only = True )
549+ @dataclass (** _dataclass_opts )
546550class TypeParameter (Reflection ):
547551 type : Type | None = None
548552 default : Type | None = None
@@ -552,7 +556,7 @@ def kind(self) -> ReflectionKind:
552556 return ReflectionKind .TYPE_PARAMETER
553557
554558
555- @dataclass (kw_only = True )
559+ @dataclass (** _dataclass_opts )
556560class Accessor (Reflection ):
557561 get_signature : GetSignature | None = None
558562 set_signature : SetSignature | None = None
@@ -565,7 +569,7 @@ def kind(self) -> ReflectionKind:
565569 return ReflectionKind .ACCESSOR
566570
567571
568- @dataclass (kw_only = True )
572+ @dataclass (** _dataclass_opts )
569573class GetSignature (Reflection ):
570574 overwrites : Type | None = None
571575 implementation_of : Type | None = None
@@ -576,7 +580,7 @@ def kind(self) -> ReflectionKind:
576580 return ReflectionKind .GET_SIGNATURE
577581
578582
579- @dataclass (kw_only = True )
583+ @dataclass (** _dataclass_opts )
580584class SetSignature (Reflection ):
581585 parameters : list [Parameter ] | None = None
582586 overwrites : Type | None = None
@@ -588,7 +592,7 @@ def kind(self) -> ReflectionKind:
588592 return ReflectionKind .SET_SIGNATURE
589593
590594
591- @dataclass (kw_only = True )
595+ @dataclass (** _dataclass_opts )
592596class TypeAlias (Reflection ):
593597 type : Type
594598 type_parameters : list [TypeParameter ] | None = None
@@ -599,11 +603,10 @@ def kind(self) -> ReflectionKind:
599603 return ReflectionKind .TYPE_ALIAS
600604
601605
602- @dataclass (kw_only = True )
606+ @dataclass (** _dataclass_opts )
603607class Reference (Reflection ):
604608 target : int
605609
606610 @property
607611 def kind (self ) -> ReflectionKind :
608612 return ReflectionKind .REFERENCE
609-
0 commit comments