Skip to content

Commit 43e3e7e

Browse files
Fix: Filter private stdlib modules and fix --brief output consistency
- Skip private stdlib modules (single underscore) but keep dunder modules like __future__ - Make --brief output only item names, not redundant indented members - Now --all --brief | wc -l matches --count output - Add tests for private module filtering Co-authored-by: Amp <amp@ampcode.com>
1 parent 98edb0c commit 43e3e7e

2 files changed

Lines changed: 28 additions & 15 deletions

File tree

scripts/introspect.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ def build_item_list() -> list[tuple[str, object]]:
118118
for module_name in get_stdlib_modules():
119119
if module_name == "builtins" or module_name in skip_modules:
120120
continue
121+
# Skip private modules (single underscore) but keep dunder modules like __future__
122+
if module_name.startswith("_") and not module_name.startswith("__"):
123+
continue
121124
try:
122125
with suppress_stdout():
123126
module = importlib.import_module(module_name)
@@ -136,10 +139,10 @@ def build_item_list() -> list[tuple[str, object]]:
136139

137140
def format_module(module: ModuleType, brief: bool) -> list[str]:
138141
"""Format a module's contents."""
139-
contents = get_module_contents(module)
140142
if brief:
141-
return [f" {c}" for c in contents]
143+
return []
142144

145+
contents = get_module_contents(module)
143146
lines = ["Type: module"]
144147
if contents:
145148
lines.append("")
@@ -150,11 +153,10 @@ def format_module(module: ModuleType, brief: bool) -> list[str]:
150153

151154
def format_class(cls: type, brief: bool) -> list[str]:
152155
"""Format a class's methods and attributes."""
153-
methods, attributes = get_direct_members(cls)
154-
155156
if brief:
156-
return [f" {name}" for name in (methods + attributes)]
157+
return []
157158

159+
methods, attributes = get_direct_members(cls)
158160
lines = ["Type: class"]
159161

160162
if methods:

tests/test_introspect.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,21 @@ def test_no_duplicate_names(self) -> None:
248248
names = [name for name, _ in items]
249249
assert len(names) == len(set(names))
250250

251+
def test_excludes_private_stdlib_modules(self) -> None:
252+
"""Private stdlib modules (single underscore) should be excluded."""
253+
items = build_item_list()
254+
names = [name for name, _ in items]
255+
# These are private stdlib modules that should be filtered out
256+
private_modules = ["_thread", "_abc", "_collections", "_io"]
257+
for mod in private_modules:
258+
assert mod not in names, f"Private module {mod} should be excluded"
259+
260+
def test_includes_dunder_stdlib_modules(self) -> None:
261+
"""Dunder modules like __future__ should be included."""
262+
items = build_item_list()
263+
names = [name for name, _ in items]
264+
assert "__future__" in names
265+
251266

252267
class TestFormatModule:
253268
"""Tests for format_module function."""
@@ -272,14 +287,12 @@ def test_includes_module_contents(self) -> None:
272287
assert "Counter" in output
273288
assert "deque" in output
274289

275-
def test_brief_outputs_names_only(self) -> None:
290+
def test_brief_returns_empty_list(self) -> None:
291+
"""In brief mode, format_module returns empty list (members listed separately)."""
276292
import collections
277293

278294
lines = format_module(collections, True)
279-
output = "\n".join(lines)
280-
assert "Type: module" not in output
281-
assert "Contents:" not in output
282-
assert "Counter" in output
295+
assert lines == []
283296

284297

285298
class TestFormatClass:
@@ -306,12 +319,10 @@ class EmptyClass:
306319
lines = format_class(EmptyClass, False)
307320
assert "(no public direct members)" in lines
308321

309-
def test_brief_outputs_names_only(self) -> None:
322+
def test_brief_returns_empty_list(self) -> None:
323+
"""In brief mode, format_class returns empty list (members listed separately)."""
310324
lines = format_class(list, True)
311-
output = "\n".join(lines)
312-
assert "Type: class" not in output
313-
assert "Methods:" not in output
314-
assert "append" in output
325+
assert lines == []
315326

316327

317328
class TestFormatItem:

0 commit comments

Comments
 (0)