Skip to content

Inspect text

inspect_text

render_batch_text(symbols)

Join individual renders with blank-line separator, handle errors.

Source code in packages/axm-ast/src/axm_ast/tools/inspect_text.py
Python
def render_batch_text(symbols: Sequence[Mapping[str, object]]) -> str:
    """Join individual renders with blank-line separator, handle errors."""
    if not symbols:
        return ""

    parts: list[str] = []
    for entry in symbols:
        if "error" in entry:
            name = _as_str(entry.get("name"), "?")
            error = _as_str(entry.get("error"))
            parts.append(f"{name}{error}")
        else:
            parts.append(render_symbol_text(entry))

    return "\n\n".join(parts)

render_class_text(detail)

Render a class detail dict as compact text.

Source code in packages/axm-ast/src/axm_ast/tools/inspect_text.py
Python
def render_class_text(detail: Mapping[str, object]) -> str:
    """Render a class detail dict as compact text."""
    name = _as_str(detail["name"])
    file = _as_str(detail["file"])
    start = _as_int(detail.get("start_line"))
    end = _as_int(detail.get("end_line"), start)
    bases = _as_str_list(detail.get("bases"))

    suffix = f"({', '.join(bases)})" if bases else ""
    lines = [_header(name, file, start, end, suffix)]

    doc = detail.get("docstring")
    if isinstance(doc, str) and doc:
        lines.append(_truncate_docstring(doc))

    methods = _as_str_list(detail.get("methods"))
    if methods:
        lines.append(f"Methods: {', '.join(methods)}")

    _append_source(lines, detail)
    return "\n".join(lines)

render_function_text(detail)

Render a function detail dict as compact text.

Source code in packages/axm-ast/src/axm_ast/tools/inspect_text.py
Python
def render_function_text(detail: Mapping[str, object]) -> str:
    """Render a function detail dict as compact text."""
    name = _as_str(detail["name"])
    file = _as_str(detail["file"])
    start = _as_int(detail.get("start_line"))
    end = _as_int(detail.get("end_line"), start)

    lines = [_header(name, file, start, end)]
    _append_function_body(lines, detail)
    _append_source(lines, detail)
    return "\n".join(lines)

render_module_text(detail)

Render a module detail dict as compact text.

Source code in packages/axm-ast/src/axm_ast/tools/inspect_text.py
Python
def render_module_text(detail: Mapping[str, object]) -> str:
    """Render a module detail dict as compact text."""
    name = _as_str(detail["name"])
    file = _as_str(detail.get("file"))
    count = _as_int(detail.get("symbol_count"))

    lines = [f"{name}  {file}  module · {count} symbols"]

    doc = detail.get("docstring")
    if isinstance(doc, str) and doc:
        lines.append(_truncate_docstring(doc))

    funcs = _as_str_list(detail.get("functions"))
    if funcs:
        lines.append(f"Functions: {', '.join(funcs)}")

    classes = _as_str_list(detail.get("classes"))
    if classes:
        lines.append(f"Classes: {', '.join(classes)}")

    return "\n".join(lines)

render_symbol_text(detail)

Dispatch to the correct renderer based on detail kind.

Source code in packages/axm-ast/src/axm_ast/tools/inspect_text.py
Python
def render_symbol_text(detail: Mapping[str, object]) -> str:
    """Dispatch to the correct renderer based on detail kind."""
    kind = _as_str(detail.get("kind"))
    match kind:
        case "function" | "method":
            return render_function_text(detail)
        case "class":
            return render_class_text(detail)
        case "variable":
            return render_variable_text(detail)
        case "module":
            return render_module_text(detail)
        case _:
            return render_function_text(detail)

render_variable_text(detail)

Render a variable detail dict as compact text.

Source code in packages/axm-ast/src/axm_ast/tools/inspect_text.py
Python
def render_variable_text(detail: Mapping[str, object]) -> str:
    """Render a variable detail dict as compact text."""
    name = _as_str(detail["name"])
    file = _as_str(detail["file"])
    start = _as_int(detail.get("start_line"))
    end = _as_int(detail.get("end_line"), start)

    lines = [_header(name, file, start, end, "variable")]

    ann = detail.get("annotation")
    if isinstance(ann, str) and ann:
        lines.append(f": {ann}")

    val = detail.get("value_repr")
    if isinstance(val, str) and val:
        lines.append(f"= {val}")

    return "\n".join(lines)