diff options
Diffstat (limited to 'pylint/extensions/_check_docs_utils.py')
-rw-r--r-- | pylint/extensions/_check_docs_utils.py | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/pylint/extensions/_check_docs_utils.py b/pylint/extensions/_check_docs_utils.py index 52f9e470c..92f91847c 100644 --- a/pylint/extensions/_check_docs_utils.py +++ b/pylint/extensions/_check_docs_utils.py @@ -23,7 +23,7 @@ """Utility methods for docstring checking.""" import re -from typing import List +from typing import List, Set, Tuple import astroid from astroid import nodes @@ -731,9 +731,8 @@ class NumpyDocstring(GoogleDocstring): re_param_line = re.compile( fr""" - \s* (\*{{0,2}}\w+) # identifier with potential asterisks - \s* : - \s* (?:({GoogleDocstring.re_multiple_type})(?:,\s+optional)?)? # optional type declaration + \s* (\*{{0,2}}\w+)(\s?(:|\n)) # identifier with potential asterisks + \s* (?:({GoogleDocstring.re_multiple_type})(?:,\s+optional)?\n)? # optional type declaration \s* (.*) # optional description """, re.X | re.S, @@ -772,6 +771,38 @@ class NumpyDocstring(GoogleDocstring): supports_yields = True + def match_param_docs(self) -> Tuple[Set[str], Set[str]]: + """Matches parameter documentation section to parameter documentation rules""" + params_with_doc = set() + params_with_type = set() + + entries = self._parse_section(self.re_param_section) + print(entries) + entries.extend(self._parse_section(self.re_keyword_param_section)) + for entry in entries: + match = self.re_param_line.match(entry) + if not match: + continue + + # check if parameter has description only + re_only_desc = re.match(r"\s* (\*{0,2}\w+)\s*:?\n", entry) + if re_only_desc: + param_name = match.group(1) + param_desc = match.group(2) + param_type = None + else: + param_name = match.group(1) + param_type = match.group(3) + param_desc = match.group(4) + + if param_type: + params_with_type.add(param_name) + + if param_desc: + params_with_doc.add(param_name) + + return params_with_doc, params_with_type + @staticmethod def min_section_indent(section_match): return len(section_match.group(1)) |