diff --git a/src/wud/parse_mod.py b/src/wud/parse_mod.py index 33e0433..c8fd549 100644 --- a/src/wud/parse_mod.py +++ b/src/wud/parse_mod.py @@ -12,6 +12,9 @@ class Func: def __str__(self): return f"{self.name}{self.signature}\n\t{self.desc}" + def as_markdown(self): + return f"### {self.name}\n\n```python\n{self.name}{self.signature}\n```\n\n{self.desc}" + @property def icon(self): return "F" @@ -26,6 +29,9 @@ class Class: def __str__(self): return f"{self.name}{self.signature}\n\t{self.desc}" + def as_markdown(self): + return f"### {self.name}\n\n{self.desc}" + @property def icon(self): return "C" @@ -41,6 +47,9 @@ class Datum: def __str__(self): return f"{self.name} = {self.value} ({self.type_name})\n\t{self.desc}" + def as_markdown(self): + return f"### {self.name}\n{self.value} ({self.type_name})\n\n{self.desc}" + @property def icon(self): return "G" @@ -54,6 +63,9 @@ class Mod: classes: list[Class] = field(default_factory=list) data: list[Datum] = field(default_factory=list) + def as_markdown(self): + return f"# {self.name}\n{self.desc}\n\n## Functions\n\n" + @property def icon(self): return "M" @@ -79,11 +91,13 @@ def parse_module(mod): info = Mod(mod.__name__, mod.__doc__) for name, member in inspect.getmembers(mod): + if name.startswith("_"): + continue if inspect.isclass(member): info.classes.append(parse_class(member)) elif inspect.isroutine(member): info.functions.append(parse_function(member)) - elif not name.startswith("__"): + else: info.data.append(Datum(name, member.__doc__, member, type(member).__name__)) return info diff --git a/src/wud/tui.py b/src/wud/tui.py index f2f12d0..b0443d5 100644 --- a/src/wud/tui.py +++ b/src/wud/tui.py @@ -1,24 +1,14 @@ import importlib from textual.app import App, ComposeResult -from textual.reactive import reactive from textual.widgets import ( - Static, Header, ListView, ListItem, Label, - MarkdownViewer, Markdown, ) from .parse_mod import parse_module -TEXT = """\ -Docking a widget removes it from the layout and fixes its position, aligned to either the top, right, bottom, or left edges of a container. - -Docked widgets will not scroll out of view, making them ideal for sticky headers, footers, and sidebars. - -""" - class MemberListView(ListView): def __init__(self, mod_list): @@ -62,7 +52,9 @@ class WudTui(App): super().__init__() _mod = importlib.import_module(modname) self.mod = parse_module(_mod) - self.mod_list = [self.mod] + self.mod.functions + self.mod.data + self.mod_list = ( + [self.mod] + self.mod.functions + self.mod.classes + self.mod.data + ) def compose(self) -> ComposeResult: yield Header() @@ -76,7 +68,7 @@ class WudTui(App): def on_list_view_highlighted(self, _): lv = self.query_one("#sidebar", MemberListView) md = self.query_one("#docview", Markdown) - md.update(markdown=f"{self.mod_list[lv.index]}") + md.update(markdown=f"{self.mod_list[lv.index].as_markdown()}") if __name__ == "__main__":