summaryrefslogtreecommitdiff
path: root/sphinx/ext/coverage.py
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2021-01-24 16:34:47 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2021-01-24 16:34:47 +0900
commit51d500833e391c182f536e83a5d62d5e90ce8ca9 (patch)
treefb854309b759773feb83e7e4bbc91e3ed3cb2b00 /sphinx/ext/coverage.py
parent375fb52fe402d46d633e321ce8f20c1aa61c49b9 (diff)
parent41ee2d6e6595d0eefb4a2b752fd79a3451382d5a (diff)
downloadsphinx-git-51d500833e391c182f536e83a5d62d5e90ce8ca9.tar.gz
Merge branch '3.x' into 7774_remove_develop.rst
Diffstat (limited to 'sphinx/ext/coverage.py')
-rw-r--r--sphinx/ext/coverage.py52
1 files changed, 47 insertions, 5 deletions
diff --git a/sphinx/ext/coverage.py b/sphinx/ext/coverage.py
index e8157848f..f052b8810 100644
--- a/sphinx/ext/coverage.py
+++ b/sphinx/ext/coverage.py
@@ -5,7 +5,7 @@
Check Python modules and C API for coverage. Mostly written by Josip
Dzolonga for the Google Highly Open Participation contest.
- :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
+ :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
@@ -15,13 +15,14 @@ import pickle
import re
from importlib import import_module
from os import path
-from typing import Any, Dict, IO, List, Pattern, Set, Tuple
+from typing import IO, Any, Dict, List, Pattern, Set, Tuple
import sphinx
from sphinx.application import Sphinx
from sphinx.builders import Builder
from sphinx.locale import __
from sphinx.util import logging
+from sphinx.util.console import red # type: ignore
from sphinx.util.inspect import safe_getattr
logger = logging.getLogger(__name__)
@@ -121,6 +122,14 @@ class CoverageBuilder(Builder):
write_header(op, filename)
for typ, name in sorted(undoc):
op.write(' * %-50s [%9s]\n' % (name, typ))
+ if self.config.coverage_show_missing_items:
+ if self.app.quiet or self.app.warningiserror:
+ logger.warning(__('undocumented c api: %s [%s] in file %s'),
+ name, typ, filename)
+ else:
+ logger.info(red('undocumented ') + 'c ' + 'api ' +
+ '%-30s' % (name + " [%9s]" % typ) +
+ red(' - in file ') + filename)
op.write('\n')
def ignore_pyobj(self, full_name: str) -> bool:
@@ -239,16 +248,48 @@ class CoverageBuilder(Builder):
if undoc['funcs']:
op.write('Functions:\n')
op.writelines(' * %s\n' % x for x in undoc['funcs'])
+ if self.config.coverage_show_missing_items:
+ if self.app.quiet or self.app.warningiserror:
+ for func in undoc['funcs']:
+ logger.warning(
+ __('undocumented python function: %s :: %s'),
+ name, func)
+ else:
+ for func in undoc['funcs']:
+ logger.info(red('undocumented ') + 'py ' + 'function ' +
+ '%-30s' % func + red(' - in module ') + name)
op.write('\n')
if undoc['classes']:
op.write('Classes:\n')
- for name, methods in sorted(
+ for class_name, methods in sorted(
undoc['classes'].items()):
if not methods:
- op.write(' * %s\n' % name)
+ op.write(' * %s\n' % class_name)
+ if self.config.coverage_show_missing_items:
+ if self.app.quiet or self.app.warningiserror:
+ logger.warning(
+ __('undocumented python class: %s :: %s'),
+ name, class_name)
+ else:
+ logger.info(red('undocumented ') + 'py ' +
+ 'class ' + '%-30s' % class_name +
+ red(' - in module ') + name)
else:
- op.write(' * %s -- missing methods:\n\n' % name)
+ op.write(' * %s -- missing methods:\n\n' % class_name)
op.writelines(' - %s\n' % x for x in methods)
+ if self.config.coverage_show_missing_items:
+ if self.app.quiet or self.app.warningiserror:
+ for meth in methods:
+ logger.warning(
+ __('undocumented python method:' +
+ ' %s :: %s :: %s'),
+ name, class_name, meth)
+ else:
+ for meth in methods:
+ logger.info(red('undocumented ') + 'py ' +
+ 'method ' + '%-30s' %
+ (class_name + '.' + meth) +
+ red(' - in module ') + name)
op.write('\n')
if failed:
@@ -273,4 +314,5 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.add_config_value('coverage_ignore_c_items', {}, False)
app.add_config_value('coverage_write_headline', True, False)
app.add_config_value('coverage_skip_undoc_in_source', False, False)
+ app.add_config_value('coverage_show_missing_items', False, False)
return {'version': sphinx.__display_version__, 'parallel_read_safe': True}