From 723a7744cf3d6d6f39cc1696e782d92e50be9a92 Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov Date: Thu, 10 Feb 2022 19:08:10 +0300 Subject: [PATCH] fixed generation errors --- .idea/dictionaries/roman.xml | 1 + assets/src/ba_data/python/bastd/actor/bomb.py | 62 +++++++++---------- assets/src/ba_data/python/bastd/actor/flag.py | 10 +-- .../ba_data/python/bastd/actor/playerspaz.py | 2 +- .../ba_data/python/bastd/actor/powerupbox.py | 36 +++++------ assets/src/ba_data/python/bastd/actor/spaz.py | 2 +- .../src/ba_data/python/bastd/actor/spazbot.py | 10 +-- .../ba_data/python/bastd/actor/spazfactory.py | 32 +++++----- tools/batools/docs.py | 47 ++++++++++---- 9 files changed, 113 insertions(+), 89 deletions(-) diff --git a/.idea/dictionaries/roman.xml b/.idea/dictionaries/roman.xml index d594223f..58cf7470 100644 --- a/.idea/dictionaries/roman.xml +++ b/.idea/dictionaries/roman.xml @@ -4,6 +4,7 @@ gamename maxlen pagename + unhashable \ No newline at end of file diff --git a/assets/src/ba_data/python/bastd/actor/bomb.py b/assets/src/ba_data/python/bastd/actor/bomb.py index 1c86f1fa..6528367a 100644 --- a/assets/src/ba_data/python/bastd/actor/bomb.py +++ b/assets/src/ba_data/python/bastd/actor/bomb.py @@ -29,102 +29,102 @@ class BombFactory: Attributes: - bomb_model + bomb_model: ba.Model The ba.Model of a standard or ice bomb. - sticky_bomb_model + sticky_bomb_model: ba.Model The ba.Model of a sticky-bomb. - impact_bomb_model + impact_bomb_model: ba.Model The ba.Model of an impact-bomb. - land_mine_model + land_mine_model: ba.Model The ba.Model of a land-mine. - tnt_model + tnt_model: ba.Model The ba.Model of a tnt box. - regular_tex + regular_tex: ba.Texture The ba.Texture for regular bombs. - ice_tex + ice_tex: ba.Texture The ba.Texture for ice bombs. - sticky_tex + sticky_tex: ba.Texture The ba.Texture for sticky bombs. - impact_tex + impact_tex: ba.Texture The ba.Texture for impact bombs. - impact_lit_tex + impact_lit_tex: ba.Texture The ba.Texture for impact bombs with lights lit. - land_mine_tex + land_mine_tex: ba.Texture The ba.Texture for land-mines. - land_mine_lit_tex + land_mine_lit_tex: ba.Texture The ba.Texture for land-mines with the light lit. - tnt_tex + tnt_tex: ba.Texture The ba.Texture for tnt boxes. - hiss_sound + hiss_sound: ba.Sound The ba.Sound for the hiss sound an ice bomb makes. - debris_fall_sound + debris_fall_sound: ba.Sound The ba.Sound for random falling debris after an explosion. - wood_debris_fall_sound + wood_debris_fall_sound: ba.Sound A ba.Sound for random wood debris falling after an explosion. - explode_sounds + explode_sounds: Sequence[ba.Sound] A tuple of ba.Sounds for explosions. - freeze_sound + freeze_sound: ba.Sound A ba.Sound of an ice bomb freezing something. - fuse_sound + fuse_sound: ba.Sound A ba.Sound of a burning fuse. - activate_sound + activate_sound: ba.Sound A ba.Sound for an activating impact bomb. - warn_sound + warn_sound: ba.Sound A ba.Sound for an impact bomb about to explode due to time-out. - bomb_material + bomb_material: ba.Material A ba.Material applied to all bombs. - normal_sound_material + normal_sound_material: ba.Material A ba.Material that generates standard bomb noises on impacts, etc. - sticky_material + sticky_material: ba.Material A ba.Material that makes 'splat' sounds and makes collisions softer. - land_mine_no_explode_material + land_mine_no_explode_material: ba.Material A ba.Material that keeps land-mines from blowing up. Applied to land-mines when they are created to allow land-mines to touch without exploding. - land_mine_blast_material + land_mine_blast_material: ba.Material A ba.Material applied to activated land-mines that causes them to explode on impact. - impact_blast_material + impact_blast_material: ba.Material A ba.Material applied to activated impact-bombs that causes them to explode on impact. - blast_material + blast_material: ba.Material A ba.Material applied to bomb blast geometry which triggers impact events with what it touches. - dink_sounds + dink_sounds: Sequence[ba.Sound] A tuple of ba.Sounds for when bombs hit the ground. - sticky_impact_sound + sticky_impact_sound: ba.Sound The ba.Sound for a squish made by a sticky bomb hitting something. - roll_sound + roll_sound: ba.Sound ba.Sound for a rolling bomb. """ diff --git a/assets/src/ba_data/python/bastd/actor/flag.py b/assets/src/ba_data/python/bastd/actor/flag.py index 417a3d46..5bb693dc 100644 --- a/assets/src/ba_data/python/bastd/actor/flag.py +++ b/assets/src/ba_data/python/bastd/actor/flag.py @@ -24,20 +24,20 @@ class FlagFactory: Attributes: - flagmaterial + flagmaterial: ba.Material The ba.Material applied to all ba.Flags. - impact_sound + impact_sound: ba.Sound The ba.Sound used when a ba.Flag hits the ground. - skid_sound + skid_sound: ba.Sound The ba.Sound used when a ba.Flag skids along the ground. - no_hit_material + no_hit_material: ba.Material A ba.Material that prevents contact with most objects; applied to 'non-touchable' flags. - flag_texture + flag_texture: ba.Texture The ba.Texture for flags. """ diff --git a/assets/src/ba_data/python/bastd/actor/playerspaz.py b/assets/src/ba_data/python/bastd/actor/playerspaz.py index 7969dc75..6cc762e7 100644 --- a/assets/src/ba_data/python/bastd/actor/playerspaz.py +++ b/assets/src/ba_data/python/bastd/actor/playerspaz.py @@ -23,7 +23,7 @@ class PlayerSpazHurtMessage: Attributes: - spaz + spaz: ba.PlayerSpaz The ba.PlayerSpaz that was hurt """ diff --git a/assets/src/ba_data/python/bastd/actor/powerupbox.py b/assets/src/ba_data/python/bastd/actor/powerupbox.py index bed2de5d..3dda1d9a 100644 --- a/assets/src/ba_data/python/bastd/actor/powerupbox.py +++ b/assets/src/ba_data/python/bastd/actor/powerupbox.py @@ -30,52 +30,52 @@ class PowerupBoxFactory: Attributes: - model + model: ba.Model The ba.Model of the powerup box. - model_simple + model_simple: ba.Model A simpler ba.Model of the powerup box, for use in shadows, etc. - tex_bomb + tex_bomb: ba.Texture Triple-bomb powerup ba.Texture. - tex_punch + tex_punch: ba.Texture Punch powerup ba.Texture. - tex_ice_bombs + tex_ice_bombs: ba.Texture Ice bomb powerup ba.Texture. - tex_sticky_bombs + tex_sticky_bombs: ba.Texture Sticky bomb powerup ba.Texture. - tex_shield + tex_shield: ba.Texture Shield powerup ba.Texture. - tex_impact_bombs + tex_impact_bombs: ba.Texture Impact-bomb powerup ba.Texture. - tex_health + tex_health: ba.Texture Health powerup ba.Texture. - tex_land_mines + tex_land_mines: ba.Texture Land-mine powerup ba.Texture. - tex_curse + tex_curse: ba.Texture Curse powerup ba.Texture. - health_powerup_sound + health_powerup_sound: ba.Sound ba.Sound played when a health powerup is accepted. - powerup_sound + powerup_sound: ba.Sound ba.Sound played when a powerup is accepted. - powerdown_sound + powerdown_sound: ba.Sound ba.Sound that can be used when powerups wear off. - powerup_material + powerup_material: ba.Material ba.Material applied to powerup boxes. - powerup_accept_material + powerup_accept_material: ba.Material Powerups will send a ba.PowerupMessage to anything they touch that has this ba.Material applied. """ @@ -194,12 +194,12 @@ class PowerupBox(ba.Actor): Attributes: - poweruptype + poweruptype: str The string powerup type. This can be 'triple_bombs', 'punch', 'ice_bombs', 'impact_bombs', 'land_mines', 'sticky_bombs', 'shield', 'health', or 'curse'. - node + node: ba.Node The 'prop' ba.Node representing this box. """ diff --git a/assets/src/ba_data/python/bastd/actor/spaz.py b/assets/src/ba_data/python/bastd/actor/spaz.py index 45931bb1..8209e4da 100644 --- a/assets/src/ba_data/python/bastd/actor/spaz.py +++ b/assets/src/ba_data/python/bastd/actor/spaz.py @@ -52,7 +52,7 @@ class Spaz(ba.Actor): Attributes: - node + node: ba.Node The 'spaz' ba.Node. """ diff --git a/assets/src/ba_data/python/bastd/actor/spazbot.py b/assets/src/ba_data/python/bastd/actor/spazbot.py index 9d4d92ec..e225962f 100644 --- a/assets/src/ba_data/python/bastd/actor/spazbot.py +++ b/assets/src/ba_data/python/bastd/actor/spazbot.py @@ -31,10 +31,10 @@ class SpazBotPunchedMessage: Attributes: - spazbot + spazbot: ba.SpazBot The ba.SpazBot that got punched. - damage + damage: int How much damage was done to the ba.SpazBot. """ @@ -51,13 +51,13 @@ class SpazBotDiedMessage: Attributes: - spazbot + spazbot: ba.SpazBot The ba.SpazBot that was killed. - killerplayer + killerplayer: ba.Player The ba.Player that killed it (or None). - how + how: ba.DeathType The particular type of death. """ diff --git a/assets/src/ba_data/python/bastd/actor/spazfactory.py b/assets/src/ba_data/python/bastd/actor/spazfactory.py index ed06d72e..af7eb868 100644 --- a/assets/src/ba_data/python/bastd/actor/spazfactory.py +++ b/assets/src/ba_data/python/bastd/actor/spazfactory.py @@ -25,55 +25,55 @@ class SpazFactory: Attributes: - impact_sounds_medium + impact_sounds_medium: Sequence[ba.Sound] A tuple of ba.Sounds for when a ba.Spaz hits something kinda hard. - impact_sounds_hard + impact_sounds_hard: Sequence[ba.Sound] A tuple of ba.Sounds for when a ba.Spaz hits something really hard. - impact_sounds_harder + impact_sounds_harder: Sequence[ba.Sound] A tuple of ba.Sounds for when a ba.Spaz hits something really really hard. - single_player_death_sound + single_player_death_sound: ba.Sound The sound that plays for an 'important' spaz death such as in co-op games. - punch_sound + punch_sound: ba.Sound A standard punch ba.Sound. - punch_sound_strong + punch_sound_strong: Sequence[ba.Sound] A tuple of stronger sounding punch ba.Sounds. - punch_sound_stronger + punch_sound_stronger: ba.Sound A really really strong sounding punch ba.Sound. - swish_sound + swish_sound: ba.Sound A punch swish ba.Sound. - block_sound + block_sound: ba.Sound A ba.Sound for when an attack is blocked by invincibility. - shatter_sound + shatter_sound: ba.Sound A ba.Sound for when a frozen ba.Spaz shatters. - splatter_sound + splatter_sound: ba.Sound A ba.Sound for when a ba.Spaz blows up via curse. - spaz_material + spaz_material: ba.Material A ba.Material applied to all of parts of a ba.Spaz. - roller_material + roller_material: ba.Material A ba.Material applied to the invisible roller ball body that a ba.Spaz uses for locomotion. - punch_material + punch_material: ba.Material A ba.Material applied to the 'fist' of a ba.Spaz. - pickup_material + pickup_material: ba.Material A ba.Material applied to the 'grabber' body of a ba.Spaz. - curse_material + curse_material: ba.Material A ba.Material applied to a cursed ba.Spaz that triggers an explosion. """ diff --git a/tools/batools/docs.py b/tools/batools/docs.py index fa5fcecc..2653d528 100755 --- a/tools/batools/docs.py +++ b/tools/batools/docs.py @@ -397,7 +397,9 @@ class BaseGenerator: AttributeInfo]]] = {} self._out = '' self._classes: list[ClassInfo] = [] + self._class_names: set[str] = set() self._functions: list[FunctionInfo] = [] + self._function_names: set[str] = set() self._merged_categories: list[tuple[str, str, list[Union[ClassInfo, FunctionInfo]]]] = [] @@ -707,8 +709,7 @@ class BaseGenerator: for cls in self._classes: key = cls.name if key in self._index: - # print('duplicate index entry:', key) - continue + print(f'WARNING: duplicate index entry: {key}') self._index[key] = (_get_class_href(cls.name), cls) self._index_keys.append(key) @@ -716,8 +717,7 @@ class BaseGenerator: for mth in cls.methods: key = cls.name + '.' + mth.name if key in self._index: - # print('duplicate index entry:', key) - continue + print(f'WARNING: duplicate index entry: {key}') self._index[key] = (_get_method_href(cls.name, mth.name), mth) self._index_keys.append(key) @@ -725,8 +725,7 @@ class BaseGenerator: for attr in cls.attributes: key = cls.name + '.' + attr.name if key in self._index: - # print('duplicate index entry:', key) - continue + print(f'WARNING: duplicate index entry: {key}') self._index[key] = (_get_attribute_href(cls.name, attr.name), attr) self._index_keys.append(key) @@ -735,8 +734,7 @@ class BaseGenerator: for fnc in self._functions: key = fnc.name if key in self._index: - # print('duplicate index entry:', key) - continue + print(f'WARNING: duplicate index entry: {key}') self._index[key] = (_get_function_href(fnc.name), fnc) self._index_keys.append(key) @@ -1114,8 +1112,9 @@ class BaseGenerator: category=_get_category( docs, CategoryType.FUNCTION), docs=docs) - if '(internal)' not in docs: + if '(internal)' not in docs and f_info.name not in self._function_names: self._functions.append(f_info) + self._function_names.add(f_info.name) def _process_classes(self, module: ModuleType) -> None: classes_by_name = _get_module_classes(module) @@ -1135,7 +1134,9 @@ class BaseGenerator: category=_get_category(docs, CategoryType.CLASS), attributes=attrs) - self._classes.append(c_info) + if c_info.name not in self._class_names: + self._classes.append(c_info) + self._class_names.add(c_info.name) def _write_category_list(self) -> None: for cname, ctype, cmembers in self._merged_categories: @@ -1207,13 +1208,35 @@ class BaseGenerator: import ba + print(f"Generating docs file: '{Clr.BLU}{outfilename}{Clr.RST}'...") + + # Collect everything we want to generate docs for. self._collect_submodules(self.get_top_module()) submodules = list(sorted(self._submodules, key=lambda x: x.__name__)) - print([sm.__name__ for sm in submodules]) + print(f'{self.top_module_name} submodules:\n -->', + '\n --> '.join([sm.__name__ for sm in submodules])) for module in submodules: self._gather_funcs(module) self._process_classes(module) + # Remove duplicates. This probably should be handled at + # self._gather_funcs/self._process_classes level (i.e. just not to add + # already existing things), but the main problem is unhashable + # ClassInfo dataclass which leads to O(N^2) asymptotic (though I didn't + # check how exactly slow it would be). + # funcs = self._functions + # funcs.sort(key=lambda x: x.name) + # f_last: Optional[FunctionInfo] = None + # self._functions = [] + # for func in funcs: + # if func.name == f_last.name: + # continue + # f_last = func + # self._functions.append(func) + + self._functions.sort(key=lambda x: x.name) + self._classes.sort(key=lambda x: x.name) + # Start with our list of classes and functions. app = ba.app self._out += ('

last updated on ' + str(datetime.date.today()) + @@ -1304,7 +1327,7 @@ class BaseGenerator: with open(outfilename, 'w', encoding='utf-8') as outfile: outfile.write(self._out) - print(f"Generated docs file: '{Clr.BLU}{outfilename}.{Clr.RST}'") + print(f"Generated docs file: '{Clr.BLU}{outfilename}{Clr.RST}'.") class BaModuleGenerator(BaseGenerator):