Skip to main content

Tab indentation style checker for flake8

Project description

Tab Style Checker for flake8

Like tabs? So do I.

This module provides a smart indentation checking module for the awesome flake8 style checker suite, featuring pycodestyle, pyflakes and mccabe by default as well as a minimalist plugin architecture.

When loaded flake8-tabs will disable pycodestyle's “tabs_or_spaces”, “continued_indentation”, “tabs_obsolete” and “trailing_whitespace” checkers. Replacing them by its own more flexible checkers, that allow for the “tabs for indentation, spaces for alignment” paradgime to be applied to your source code.

(Note that flake8-tabs will currently not check spaces-indented source code, but adding this should be trivial. Please open an issue if you have a use-case for this.)

Useful Links:

Reported Error Codes

All error codes were borrowed from pycodestyle. You can detect that they were generated by flake8-tabs by them being followed by the word (flake8-tabs).

Error Code Meaning
E101 Mixed block of tabs and spaces detected where there as a least one tab following a space
E121, E122, E123, E126, E127, E128 Identation did not match what was expected (configurable)
W291 Extranous whitespace detected on end of line
W293 Whitespace that was not aligned with the next block or source code detected (configurable)

Also note that, due to the way we disable the relevant checkers from pycodestyle the following error code do not have an equivalent in this plugin: E124, E125, E129, E131, E133.

Options

Note that in the following indenting refers to the practice of adding new levels of indentation (usually using tab key whether you're using tabs or not) on a separate line, while aligning refers to the practice of adding spacing in front of the elements on the following line to make them visually match the elements on the previous line. Indentation may refer to any of the above.

Defaults tend to reflect recommendations from PEP-8.

tab-width

  • Default: 4
  • Allowed values: Any integer >= 1

The expected size of each tab in spaces. This is not really specific to this plugin, but used to properly calculate the required additional spaced indentation when indenting within an aligned section.

blank-lines-indent

  • Default: "maybe"
  • Allowed values: "maybe", "always", "never"

Whether to allow, properly aligned, indentation in blank lines. The default value will allow both aligned indentation and no indentation. "always" will require blank lines to contain indentation, "never" will prohibit it.

By properly aligned indentation we mean indentation that has the same value as the indentation of the next block of source code:

# This is OK:
def main():
	# … snip …
	do_something()
	
	do_something_else()
	# … snip …

# This is not OK:
def main():
	while True:
		# … snip …
		do_something()
	
		do_something_else()
		# … snip …

# This is by default OK as well (unindented):
def main():
	while True:
		# … snip …
		do_something()

		do_something_else()
		# … snip …

Enforcing indentation styles

The following options may be useful if you wish to enforce a more consistent for some language elements than what is enforced by default:

indent-style-call

  • Default: "auto"
  • Allowed values: "auto", "indent", "align"

Style of indentation for function and method calls:

# Using indents
x = long_function_name(
	param1,
	param2, param3)

# Using alignment
x = long_function_name(param1,
·······················param2, param3)

The default auto option will choose the style to apply in each case depending on whether there is at least one parameter provided on the first line of the function call (PEP-8).

indent-style-def

  • Default: "auto"
  • Allowed values: "auto", "indent", "align"

Style of indentation for function and class definitions:

# Using indents
def main(
		param1,
		param2, param3):
	# Contents

# Using alignment
def main(param1,
·········param2, param3):
	# Contents

The default auto option will choose the style to apply in each case depending on whether there is at least one parameter defined on the first line of the definition (PEP-8).

Minimal Tab Sizes when Indenting

indent-tabs-call

  • Default: 1
  • Allowed values: Any integer >= 1

The number of tabs to add when adding the first level of indentation using indenting within a function or method call:

# Example with: indent-tabs-call=3
x = long_function_name(
			{  # First level gets 3 levels of indenting
				"name": "value"  # Next level is indented as usual
			},
			param2, param3
)

Usually you should leave this at 1 (PEP-8) but some teams may prefer a value of 2 to function calls more easily distinguishable from blocks.

indent-tabs-def

  • Default: 2
  • Allowed values: Any integer >= 1

The number of tabs to add when adding the first level of indentation using indenting within a class of method definition:

# Example with the default of: indent-tabs-def=2
def main(
		param1, param2, param3,
		param4):
	initialize_something()
)

Notice in the example above how an indent level of 1 would make the elements of the parameter list hard to distingish from the first statement. Hence PEP8 recommends either indenting twice or using alignment instead.

indent-tabs-expr

  • Default: 1
  • Allowed values: Any integer >= 1

The number of tabs to add when adding the first level of indentation using indenting within any other kind of construct (such as a tuple, set, dict, …).

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-tabs-1.0.1.tar.gz (12.1 kB view hashes)

Uploaded Source

Built Distribution

flake8_tabs-1.0.1-py3-none-any.whl (30.1 kB view hashes)

Uploaded 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