A linter that checks docstrings are complete
Project description
flake8-docstrings-complete
Linter that checks docstrings of functions, methods and classes. It should be
used in conjunction with pydocstyle
(or flake8-docstrings
) as the linter
assumes that the docstrings already pass pydocstyle
checks. This
blog post
discusses how to write great docstrings and the motivation for this linter!
Following PEP-8,
Docstrings are not necessary for non-public methods, but you should have a
comment that describes what the method does. The definition taken for private
functions/methods is that they start with a single underscore (_
).
Getting Started
python -m venv venv
source ./venv/bin/activate
pip install flake8 flake8-docstrings flake8-docstrings-complete
flake8 source.py
On the following code where the foo
function has the bar
and baz
arguments where the baz
argument is missing from the Args
section in the
docstring:
# source.py
def foo(bar, baz):
"""Perform foo action on bar.
Args:
bar: The value to perform the foo action on.
"""
This will produce warnings such as:
flake8 test_source.py
source.py:2:14: DCO023 "baz" argument should be described in the docstring, more information: https://github.com/jdkandersson/flake8-docstrings-complete#fix-dco023
This can be resolved by adding the baz
argument to the Args
section:
# source.py
def foo(bar, baz):
"""Perform foo action on bar.
Args:
bar: The value to perform the foo action on.
baz: The modifier to the foo action.
"""
flake8-docstrings-complete
adds the following checks to complement
pydocstyle
:
- If a function/ method has arguments, that the arguments section is included.
- If a function/ method has arguments, that all function/ method arguments are in the argument section.
- If an arguments section is in the function/ method docstring, the argument section contains no arguments the function/ method doesn't have.
- Function/ method arguments are only documented once.
- If a function/ method has a return statement with a value, the return value section is included.
- If a function/ method has a yield statement with a value, the yield value section is included.
- If a function/ method raises an exception, the raises section is included with a description for each exception that is raised.
- Each raised exception is only described once.
- If a class has public attributes, that the attributes section is included.
- If a class has public attributes, that all public attributes are in the attributes section.
- If an attributes section is in the class docstring, the attributes section contains no attributes the class doesn't have.
- Class attributes are only documented once.
- Any of the sections being checked are not present multiple times.
Note:
self
andcls
are not counted as arguments.test_.*
methods are skipped intest_.*\.py
files (function and file names are configurable).- functions with a
@fixture
et al dectorator inconftest.py
andtest_.*\.py
files are skipped (function and fixture file names are configurable)
Configuration
The plugin adds the following configurations to flake8
:
--docstrings-complete-test-filename-pattern
: The filename pattern for test files. Defaults totest_.*\.py
.--docstrings-complete-test-function-pattern
: The function name pattern for test functions. Defaults totest_.*
.--docstrings-complete-fixture-filename-pattern
: The filename pattern for fixture files. Defaults toconftest\.py
.--docstrings-complete-fixture-decorator-pattern
: The decorator name pattern for fixture functions. Defaults to(^|\.)fixture$
.
Rules
A few rules have been defined to allow for selective suppression:
DCO010
: docstring missing on a function/ method/ class.DCO020
: function/ method has one or more arguments and the docstring does not have an arguments section.DCO021
: function/ method with no arguments and the docstring has an arguments section.DCO022
: function/ method with one or more arguments and the docstring has multiple arguments sections.DCO023
: function/ method has one or more arguments not described in the docstring.DCO024
: function/ method has one or more arguments described in the docstring which are not arguments of the function/ method.DCO025
: function/ method has one or more arguments described in the docstring multiple times.DCO030
: function/ method that returns a value does not have the returns section in the docstring.DCO031
: function/ method that does not return a value has the returns section in the docstring.DCO032
: function/ method that returns a value and the docstring has multiple returns sections.DCO040
: function/ method that yields a value does not have the yields section in the docstring.DCO041
: function/ method that does not yield a value has the yields section in the docstring.DCO042
: function/ method that yields a value and the docstring has multiple yields sections.DCO050
: function/ method raises one or more exceptions and the docstring does not have a raises section.DCO051
: function/ method that raises no exceptions and the docstring has a raises section.DCO052
: function/ method that raises one or more exceptions and the docstring has multiple raises sections.DCO053
: function/ method that raises one or more exceptions where one or more of the exceptions is not described in the docstring.DCO054
: function/ method has one or more exceptions described in the docstring which are not raised in the function/ method.DCO055
: function/ method that has a raise without an exception has an empty raises section in the docstring.DCO056
: function/ method has one or more exceptions described in the docstring multiple times.DCO060
: class has one or more public attributes and the docstring does not have an attributes section.DCO061
: class with no attributes and the docstring has an attributes section.DCO062
: class with one or more attributes and the docstring has multiple attributes sections.DCO063
: class has one or more public attributes not described in the docstring.DCO064
: class has one or more attributes described in the docstring which are not attributes of the class.DCO065
: class has one or more attributes described in the docstring multiple times.
Fix DCO010
This linting rule is triggered by a function/ method/ class without a docstring. For example:
def foo():
pass
class FooClass:
def foo(self):
"""Perform foo action."""
pass
class FooClass:
"""Perform foo action."""
def foo(self):
pass
This example can be fixed by adding a docstring:
def foo():
"""Perform foo action."""
class FooClass:
"""Perform foo action."""
def foo(self):
"""Perform foo action."""
Fix DCO020
This linting rule is triggered by a function/ method that has one or more arguments with a docstring that does not have an arguments section. For example:
def foo(bar):
"""Perform foo action."""
class FooClass:
def foo(self, bar):
"""Perform foo action."""
These examples can be fixed by adding the arguments section and describing all arguments in the arguments section:
def foo(bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
def foo(bar):
"""Perform foo action.
Arguments:
bar: the value to perform the foo action on.
"""
def foo(bar):
"""Perform foo action.
Parameters:
bar: the value to perform the foo action on.
"""
class FooClass:
def foo(self, bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
Fix DCO021
This linting rule is triggered by a function/ method that has no arguments with a docstring that has an arguments section. For example:
def foo():
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
def foo():
"""Perform foo action.
Arguments:
bar: the value to perform the foo action on.
"""
def foo():
"""Perform foo action.
Parameters:
bar: the value to perform the foo action on.
"""
class FooClass:
def foo(self):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
These examples can be fixed by removing the arguments section:
def foo():
"""Perform foo action."""
class FooClass:
def foo(self):
"""Perform foo action."""
Fix DCO022
This linting rule is triggered by a function/ method that has one or more arguments and a docstring that has multiple arguments sections. For example:
def foo(bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
Args:
bar: the value to perform the foo action on.
"""
def foo(bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
Arguments:
bar: the value to perform the foo action on.
Parameters:
bar: the value to perform the foo action on.
"""
class FooClass:
def foo(self, bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
Args:
bar: the value to perform the foo action on.
"""
These examples can be fixed by removing the additional arguments sections:
def foo(bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
def foo(bar):
"""Perform foo action.
Arguments:
bar: the value to perform the foo action on.
"""
def foo(bar):
"""Perform foo action.
Parameters:
bar: the value to perform the foo action on.
"""
class FooClass:
def foo(self, bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
Fix DCO023
This linting rule is triggered by a function/ method that has one or more arguments where one or more of those arguments is not described in the docstring. For example:
def foo(bar):
"""Perform foo action.
Args:
"""
def foo(bar, baz):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
class FooClass:
def foo(self, bar):
"""Perform foo action.
Args:
"""
These examples can be fixed by adding the missing arguments to the arguments section:
def foo(bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
def foo(bar, baz):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
baz: the modifier to the foo action.
"""
class FooClass:
def foo(self, bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
Fix DCO024
This linting rule is triggered by a function/ method that has one or more arguments and a docstring that describes one or more arguments where on or more of the described arguments are not arguments of the function/ method. For example:
def foo(bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
baz: the modifier to the foo action.
"""
class FooClass:
def foo(self, bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
baz: the modifier to the foo action.
"""
These examples can be fixed by removing the arguments the function/ method doesn't have from the docstring:
def foo(bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
class FooClass:
def foo(self, bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
Fix DCO025
This linting rule is triggered by a function/ method that has one or more arguments and a docstring that describes one or more arguments where on or more of the described arguments are described multiple times. For example:
def foo(bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
bar: the value to perform the foo action on.
"""
class FooClass:
def foo(self, bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
bar: the value to perform the foo action on.
"""
These examples can be fixed by removing the duplicate arguments from the docstring:
def foo(bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
class FooClass:
def foo(self, bar):
"""Perform foo action.
Args:
bar: the value to perform the foo action on.
"""
Fix DCO030
This linting rule is triggered by a function/ method that has at least one return statement with a value and does not have a returns section in the docstring. For example:
def foo():
"""Return bar."""
return "bar"
class FooClass:
def foo(self):
"""Return bar."""
return "bar"
These examples can be fixed by adding the returns section:
def foo():
"""Return bar.
Return:
bar.
"""
return "bar"
def foo():
"""Return bar.
Returns:
bar.
"""
return "bar"
class FooClass:
def foo(self):
"""Return bar.
Returns:
bar.
"""
return "bar"
Fix DCO031
This linting rule is triggered by a function/ method that has no return statement with a value and has a returns section in the docstring. For example:
def foo():
"""Return bar.
Returns:
bar.
"""
pass
class FooClass:
def foo(self):
"""Return bar.
Returns:
bar.
"""
pass
These examples can be fixed by removing the returns section:
def foo():
"""Take foo action."""
pass
class FooClass:
def foo(self):
"""Take foo action."""
pass
Fix DCO032
This linting rule is triggered by a function/ method that returns a value and has a docstring that has multiple returns sections. For example:
def foo():
"""Perform foo action.
Returns:
bar.
Returns:
bar.
"""
return "bar"
def foo():
"""Perform foo action.
Returns:
bar.
Return:
bar.
"""
return "bar"
class FooClass:
def foo(self):
"""Perform foo action.
Returns:
bar.
Returns:
bar.
"""
return "bar"
These examples can be fixed by removing the additional returns sections:
def foo():
"""Perform foo action.
Returns:
bar.
"""
return "bar"
def foo():
"""Perform foo action.
Returns:
bar.
"""
return "bar"
class FooClass:
def foo(self):
"""Perform foo action.
Returns:
bar.
"""
return "bar"
Fix DCO040
This linting rule is triggered by a function/ method that has at least one yield statement with a value or a yield from statement and does not have a yields section in the docstring. For example:
def foo():
"""Yield bar."""
yield "bar"
def foo():
"""Yield bar."""
yield from ("bar",)
class FooClass:
def foo(self):
"""Yield bar."""
yield "bar"
These examples can be fixed by adding the yields section:
def foo():
"""Yield bar.
Yield:
bar.
"""
yield "bar"
def foo():
"""Yield bar.
Yields:
bar.
"""
yield "bar"
def foo():
"""Yield bar.
Yields:
bar.
"""
yield from ("bar",)
class FooClass:
def foo(self):
"""Yield bar.
Yields:
bar.
"""
yield "bar"
Fix DCO041
This linting rule is triggered by a function/ method that has no yield statement with a value nor a yield from statement and has a yields section in the docstring. For example:
def foo():
"""Yield bar.
Yields:
bar.
"""
pass
class FooClass:
def foo(self):
"""Yield bar.
Yields:
bar.
"""
pass
These examples can be fixed by:
def foo():
"""Take foo action."""
pass
class FooClass:
def foo(self):
"""Take foo action."""
pass
Fix DCO042
This linting rule is triggered by a function/ method that yields a value and has a docstring that has multiple yields sections. For example:
def foo():
"""Perform foo action.
Yields:
bar.
Yields:
bar.
"""
yield "bar"
def foo():
"""Perform foo action.
Yields:
bar.
Yields:
bar.
"""
yield from ("bar",)
def foo():
"""Perform foo action.
Yields:
bar.
Yield:
bar.
"""
yield "bar"
class FooClass:
def foo(self):
"""Perform foo action.
Yields:
bar.
Yields:
bar.
"""
yield "bar"
These examples can be fixed by removing the additional yields sections:
def foo():
"""Perform foo action.
Yields:
bar.
"""
yield "bar"
def foo():
"""Perform foo action.
Yields:
bar.
"""
yield from ("bar",)
def foo():
"""Perform foo action.
Yields:
bar.
"""
yield "bar"
class FooClass:
def foo(self):
"""Perform foo action.
Yields:
bar.
"""
yield "bar"
Fix DCO050
This linting rule is triggered by a function/ method that raises one or more exceptions and a docstring that does not have a raises section. For example:
def foo():
"""Perform foo action."""
raise BarError
class FooClass:
def foo(self):
"""Perform foo action."""
raise BarError
These examples can be fixed by adding the raises section and describing all raised exceptions in it:
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
def foo():
"""Perform foo action.
Raise:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
class FooClass:
def foo(self):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
Fix DCO051
This linting rule is triggered by a function/ method that raises no exceptions with a docstring that has a raises section. For example:
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
def foo():
"""Perform foo action.
Raise:
BarError: the value to perform the foo action on was wrong.
"""
class FooClass:
def foo(self):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
These examples can be fixed by removing the raises section:
def foo():
"""Perform foo action."""
class FooClass:
def foo(self):
"""Perform foo action."""
Fix DCO052
This linting rule is triggered by a function/ method that raises one or more exceptions with a docstring that has multiple raises sections. For example:
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
Raise:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
class FooClass:
def foo(self):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
These examples can be fixed by removing the additional raises sections:
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
def foo():
"""Perform foo action.
Raise:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
class FooClass:
def foo(self):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
Fix DCO053
This linting rule is triggered by a function/ method that raises one or more exceptions where one or more of those exceptions is not described in the docstring. For example:
def foo():
"""Perform foo action."""
raise BarError
def foo(bar, baz):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
raise BazError
class FooClass:
def foo(self):
"""Perform foo action."""
raise BarError
These examples can be fixed by describing the additional exceptions in the docstring:
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
def foo(bar, baz):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
BazError: the alternate value to perform the foo action on was wrong.
"""
raise BarError
raise BazError
class FooClass:
def foo(self):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
Fix DCO054
This linting rule is triggered by a function/ method that raises one or more exceptions and a docstring that describes one or more exceptions where on or more of the described exceptions are not raised by the function/ method. For example:
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
BazError: the alternate value to perform the foo action on was wrong.
"""
raise BarError
class FooClass:
def foo(self):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
BazError: the alternate value to perform the foo action on was wrong.
"""
raise BarError
These examples can be fixed by removing the exception that is not raised from the docstring:
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
class FooClass:
def foo(self):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
Fix DCO055
This linting rule is triggered by a function/ method that has a raise
statement without an exception (typically re-raising exceptions) and the raises
section is not included or is empty. For example:
def foo():
"""Perform foo action."""
try:
bar()
except BarError:
raise
def foo():
"""Perform foo action.
Raises:
"""
try:
bar()
except BarError:
raise
class FooClass:
def foo(self):
"""Perform foo action."""
try:
bar()
except BarError:
raise
These examples can be fixed by describing at least one exception in the raises section:
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
try:
bar()
except BarError:
raise
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
try:
bar()
except BarError:
raise
class FooClass:
def foo(self):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
try:
bar()
except BarError:
raise
Fix DCO056
This linting rule is triggered by a function/ method that raises one or more exceptions and a docstring that describes one or more exceptions where on or more of the described exceptions are described multiple times. For example:
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
class FooClass:
def foo(self):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
These examples can be fixed by removing the duplicate descriptions from the docstring:
def foo():
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
class FooClass:
def foo(self):
"""Perform foo action.
Raises:
BarError: the value to perform the foo action on was wrong.
"""
raise BarError
Fix DCO060
This linting rule is triggered by a class that has one or more public attributes with a docstring that does not have an attributes section. For example:
class FooClass:
"""Perform foo action."""
bar = "bar"
class FooClass:
"""Perform foo action."""
def __init__(self):
self.bar = "bar"
class FooClass:
"""Perform foo action."""
def bar(self):
self.baz = "baz"
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
bar = "bar"
baz = "baz"
These examples can be fixed by adding the attributes section and describing all attributes in the attributes section:
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
bar = "bar"
class FooClass:
"""Perform foo action.
Attributes:
bar: The value to perform the foo action on.
"""
bar = "bar"
class FooClass:
"""Perform foo action.
Attributes:
bar: The value to perform the foo action on.
"""
def __init__(self):
self.bar = "bar"
class FooClass:
"""Perform foo action.
Attributes:
baz: The value to perform the foo action on.
"""
def bar(self):
self.baz = "baz"
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
baz: The alternate value to perform the foo action on.
"""
bar = "bar"
baz = "baz"
Fix DCO061
This linting rule is triggered by a class that has no attributes with a docstring that has an attributes section. For example:
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
class FooClass:
"""Perform foo action.
Attributes:
bar: The value to perform the foo action on.
"""
class FooClass:
"""Perform foo action.
Attributes:
"""
def __init__(self):
self._bar = "bar"
These examples can be fixed by removing the attributes section:
class FooClass:
"""Perform foo action."""
class FooClass:
"""Perform foo action."""
def __init__(self):
self._bar = "bar"
Fix DCO062
This linting rule is triggered by a class that has one or more attributes and a docstring that has multiple attributes sections. For example:
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
Attrs:
bar: The value to perform the foo action on.
"""
bar = "bar"
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
Attributes:
bar: The value to perform the foo action on.
"""
bar = "bar"
These examples can be fixed by removing the additional attributes sections:
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
bar = "bar"
class FooClass:
"""Perform foo action.
Attributes:
bar: The value to perform the foo action on.
"""
bar = "bar"
Fix DCO063
This linting rule is triggered by a class that has one or more public attributes where one or more of those public attributes is not described in the docstring. For example:
class FooClass:
"""Perform foo action."""
bar = "bar"
class FooClass:
"""Perform foo action.
Attrs:
"""
@property
def bar(self):
return "bar"
class FooClass:
"""Perform foo action.
Attrs:
"""
@functools.cached_property
def bar(self):
return "bar"
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
bar = "bar"
baz = "baz"
These examples can be fixed by adding the missing attributes to the attributes section:
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
bar = "bar"
class FooClass:
"""Perform foo action.
Attributes:
bar: The value to perform the foo action on.
"""
bar = "bar"
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
@property
def bar(self):
return "bar"
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
@functools.cached_property
def bar(self):
return "bar"
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
baz: The alternate value to perform the foo action on.
"""
bar = "bar"
baz = "baz"
Fix DCO064
This linting rule is triggered by a class that has one or more attributes and a docstring that describes one or more attributes where on or more of the described attributes are not attributes of the class. For example:
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
class FooClass:
"""Perform foo action.
Attrs:
_bar: The value to perform the foo action on.
"""
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
baz: The alternate value to perform the foo action on.
"""
bar = "bar"
These examples can be fixed by removing the attributes the class doesn't have from the docstring:
class FooClass:
"""Perform foo action."""
class FooClass:
"""Perform foo action."""
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
bar = "bar"
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
def __init__(self):
"""Construct."""
self.bar = "bar"
Fix DCO065
This linting rule is triggered by a class that has one or more attributes and a docstring that describes one or more attributes where on or more of the described attributes are described multiple times. For example:
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
bar: The value to perform the foo action on.
"""
bar = "bar"
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
bar: The value to perform the foo action on.
"""
def __init__(self):
"""Construct."""
self.bar = "bar"
These examples can be fixed by removing the duplicate descriptions from the docstring:
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
bar = "bar"
class FooClass:
"""Perform foo action.
Attrs:
bar: The value to perform the foo action on.
"""
def __init__(self):
"""Construct."""
self.bar = "bar"
Docstring Examples
Examples of function/ method and class docstrings are:
def foo(bar):
"""Perform the foo actions on bar.
Args:
bar: the value to perform the foo actions on.
Returns:
bar after applying to foo action to it.
Yields:
All the foo actions that have been performed.
Raises:
FooError: an error occurred whilst performing the foo action.
"""
class Foo:
"""Foo object.
Attrs:
bar: the value to perform the foo actions on.
"""
def __init__(self, bar):
"""Construct.
Args:
bar: the value to perform the foo actions on.
"""
self.bar = bar
Sections
There are several alternative names for each of the sections which are captured case-insensitive:
- arguments:
Args
,Arguments
,Parameters
- return value:
Return
,Returns
- yield value:
Yield
,Yields
- raise:
Raises
- attributes:
Attrs
,Attributes
Section information is extracted using the following algorithm:
- Look for a line that has zero or more whitespace characters, followed by a section name (non-case-sensistive) followed by a colon.
- Look for any sub-sections on a line which starts with zero or more whitespace characters followed by a word, optionally followed by whitespace and any characters within round brackets followed by a colon.
- The section ends if any line with zero or more whitespace characters is encountered or the end of the docstring is reached.
Future Ideas:
- Check that argument, exceptions and attributes have non-empty description.
- Check that arguments, exceptions and attributes have meaningful descriptions.
- Check other other PEP257 conventions
- The definition for private functions is a function starting with a single
_
. This could be extended to functions starting with__
and not ending in__
, that is functions with name mangling but not magic methods.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file flake8_docstrings_complete-1.4.0.tar.gz
.
File metadata
- Download URL: flake8_docstrings_complete-1.4.0.tar.gz
- Upload date:
- Size: 22.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.11.10 Linux/6.5.0-1025-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3be06cdfe5e7243e513907ada68b5fc9de0a1f70b8212e36fc07d3c5f183f145 |
|
MD5 | e69a87cdcde9abef35ccf48ebfe0ffc7 |
|
BLAKE2b-256 | 90275a6f4362cc6a960908277c15eb35bcdc7836fe4edd6d24db2580e72a9a41 |
File details
Details for the file flake8_docstrings_complete-1.4.0-py3-none-any.whl
.
File metadata
- Download URL: flake8_docstrings_complete-1.4.0-py3-none-any.whl
- Upload date:
- Size: 22.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.11.10 Linux/6.5.0-1025-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab2eb1e6c7b9a6030cf8b53ec5d5bf50e0248145861ea53cdcab5d95b90e4bb0 |
|
MD5 | 0d2ece4492d77356ff11163e0b208782 |
|
BLAKE2b-256 | 26a77c44c85f625641190c57832dca1acc04e4644813b7723d3043dd263b0dc9 |