Skip to content

Commit dec2b9e

Browse files
authored
Ignore some errors at module level (#593)
1 parent d03b31c commit dec2b9e

File tree

6 files changed

+32
-28
lines changed

6 files changed

+32
-28
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ doc/_build
1616
numpydoc/tests/tinybuild/_build
1717
numpydoc/tests/tinybuild/generated
1818
MANIFEST
19+
node_modules

numpydoc/__main__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""
2-
Implementing `python -m numpydoc` functionality.
3-
"""
2+
Implementing `python -m numpydoc` functionality
3+
""" # '.' omitted at end of docstring for testing purposes!
44

55
from .cli import main
66

numpydoc/hooks/validate_docstrings.py

+4
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ def name(self) -> str:
6060
def is_function_or_method(self) -> bool:
6161
return isinstance(self.node, (ast.FunctionDef, ast.AsyncFunctionDef))
6262

63+
@property
64+
def is_mod(self) -> bool:
65+
return self.is_module
66+
6367
@property
6468
def is_generator_function(self) -> bool:
6569
if not self.is_function_or_method:

numpydoc/tests/hooks/test_validate_hook.py

-2
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ def test_validate_hook(example_module, config, capsys):
2929
+-------------------------------------------+-------------------------------------+---------+----------------------------------------------------+
3030
| file | item | check | description |
3131
+===========================================+=====================================+=========+====================================================+
32-
| numpydoc/tests/hooks/example_module.py:1 | example_module | EX01 | No examples section found |
33-
+-------------------------------------------+-------------------------------------+---------+----------------------------------------------------+
3432
| numpydoc/tests/hooks/example_module.py:4 | example_module.some_function | ES01 | No extended summary found |
3533
+-------------------------------------------+-------------------------------------+---------+----------------------------------------------------+
3634
| numpydoc/tests/hooks/example_module.py:4 | example_module.some_function | PR01 | Parameters {'name'} not documented |

numpydoc/tests/test_main.py

+6-10
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def test_validate_perfect_docstring():
117117
assert exit_status == 0
118118

119119

120-
@pytest.mark.parametrize("args", [[], ["--ignore", "ES01", "SA01", "EX01"]])
120+
@pytest.mark.parametrize("args", [[], ["--ignore", "SS03"]])
121121
def test_lint(capsys, args):
122122
argv = ["lint", "numpydoc/__main__.py"] + args
123123
if args:
@@ -126,15 +126,11 @@ def test_lint(capsys, args):
126126
else:
127127
expected = inspect.cleandoc(
128128
"""
129-
+------------------------+----------+---------+----------------------------+
130-
| file | item | check | description |
131-
+========================+==========+=========+============================+
132-
| numpydoc/__main__.py:1 | __main__ | ES01 | No extended summary found |
133-
+------------------------+----------+---------+----------------------------+
134-
| numpydoc/__main__.py:1 | __main__ | SA01 | See Also section not found |
135-
+------------------------+----------+---------+----------------------------+
136-
| numpydoc/__main__.py:1 | __main__ | EX01 | No examples section found |
137-
+------------------------+----------+---------+----------------------------+
129+
+------------------------+----------+---------+------------------------------------+
130+
| file | item | check | description |
131+
+========================+==========+=========+====================================+
132+
| numpydoc/__main__.py:1 | __main__ | SS03 | Summary does not end with a period |
133+
+------------------------+----------+---------+------------------------------------+
138134
"""
139135
)
140136
expected_status = 1

numpydoc/validate.py

+19-14
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,10 @@ def type(self):
277277
def is_function_or_method(self):
278278
return inspect.isfunction(self.obj)
279279

280+
@property
281+
def is_mod(self):
282+
return inspect.ismodule(self.obj)
283+
280284
@property
281285
def is_generator_function(self):
282286
return inspect.isgeneratorfunction(_unwrap(self.obj))
@@ -690,7 +694,7 @@ def validate(obj_name, validator_cls=None, **validator_kwargs):
690694
if doc.num_summary_lines > 1:
691695
errs.append(error("SS06"))
692696

693-
if not doc.extended_summary:
697+
if not doc.is_mod and not doc.extended_summary:
694698
errs.append(("ES01", "No extended summary found"))
695699

696700
# PR01: Parameters not documented
@@ -742,20 +746,21 @@ def validate(obj_name, validator_cls=None, **validator_kwargs):
742746
if not doc.yields and doc.is_generator_function:
743747
errs.append(error("YD01"))
744748

745-
if not doc.see_also:
746-
errs.append(error("SA01"))
747-
else:
748-
for rel_name, rel_desc in doc.see_also.items():
749-
if rel_desc:
750-
if not rel_desc.endswith("."):
751-
errs.append(error("SA02", reference_name=rel_name))
752-
if rel_desc[0].isalpha() and not rel_desc[0].isupper():
753-
errs.append(error("SA03", reference_name=rel_name))
754-
else:
755-
errs.append(error("SA04", reference_name=rel_name))
749+
if not doc.is_mod:
750+
if not doc.see_also:
751+
errs.append(error("SA01"))
752+
else:
753+
for rel_name, rel_desc in doc.see_also.items():
754+
if rel_desc:
755+
if not rel_desc.endswith("."):
756+
errs.append(error("SA02", reference_name=rel_name))
757+
if rel_desc[0].isalpha() and not rel_desc[0].isupper():
758+
errs.append(error("SA03", reference_name=rel_name))
759+
else:
760+
errs.append(error("SA04", reference_name=rel_name))
756761

757-
if not doc.examples:
758-
errs.append(error("EX01"))
762+
if not doc.examples:
763+
errs.append(error("EX01"))
759764

760765
errs = [err for err in errs if err[0] not in ignore_validation_comments]
761766

0 commit comments

Comments
 (0)