Skip to main content

A flake8 plugin that enforces 8-space indentation in function/class definitions

Project description

flake8-indent-in-def

This is a flake8 plugin enforces 8-space indentation in function/class definitions in Python code.

Installation

pip install flake8-indent-in-def

Violation codes

There is one violation code that this plugin reports:

Code Description
IND101 hanging indentation in function definition must be 8 spaces
IND102 if the 1st argument is on the same line as the function name, all other arguments must be on the same line
IND201 hanging indentation in class definition must be 8 spaces
IND202 if the 1st base class is on the same line as the class name, all other base classes must be on the same line

Style examples

Wrong

This plugin, as well as PEP8, considers the following indentation styles wrong:

def some_function(argument1,
                  argument2,
                  argument3, argument4, argumen5):
    print(argument1)
def some_function(arg1,
                  arg2,
                  arg3):
    print(arg1)
def some_function(
    arg1: int,
    arg2: list,
    arg3: bool = None,
):
    print(arg1)

Note: this style above is the style choice of the black formatter. This style is wrong because arguments and function names would be difficult to visually distinghish.

Correct

Correspondingly, here are the correct indentation styles:

def some_function(
        arg1: int,
        arg2: list,
        arg3: bool = None,
):
    print(arg1)
def some_function(
        arg1: int, arg2: list, arg3: bool = None
) -> None:
    print(arg1)
def some_function(arg1: int, arg2: list, arg3: bool = None) -> None:
    print(arg1)
def some_function(
        arg1: int, arg2: list,
        arg3: bool = None, arg4: float = 2.0,
) -> None:
    print(arg1)

Additionally, this plugin by default enforces the same indentation styles on class inheritence:

class MyClass(
        BaseClassA,
        BaseClassB,
        BaseClassC,
):
    def __init__(self):
        pass

You can opt out of class inheritence checks by ignoring rules IND201 and IND202.

Rationale

When we only indent by 4 spaces in function definitions, it is difficult to visually distinguish function arguments with the function name and the function body. This reduces readability.

It is similar for base classes in class definitions, but it's less of an issue than function definitions.

Interaction with other style checkers and formatters

def some_func(
        arg1, arg2, arg3,
        arg4, arg5,
):
    pass

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flake8_indent_in_def-0.1.0.tar.gz (4.1 kB view hashes)

Uploaded Source

Built Distribution

flake8_indent_in_def-0.1.0-py2.py3-none-any.whl (4.8 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page