{ "info": { "author": "Alexander Schlarb", "author_email": "alexander@ninetailed.ninja", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Flake8", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Quality Assurance" ], "description": "# Tab (and Spaces) Style Checker for flake8\n\nLike tabs? So do I.\n\nThis module provides a smart indentation checking module for the awesome\n[`flake8`](https://flake8.readthedocs.io/) style checker suite, featuring\n[`pycodestyle`](https://pycodestyle.readthedocs.io/),\n[`pyflakes`](https://github.com/PyCQA/pyflakes) and\n[`mccabe`](https://github.com/pycqa/mccabe)\nby default as well as a minimalist plugin architecture.\n\nWhen enabled *flake8-tabs* will disable *pycodestyle*'s \u201ctabs_or_spaces\u201d, \u201ccontinued_indentation\u201d,\n\u201ctabs_obsolete\u201d and \u201ctrailing_whitespace\u201d checkers by default. Replacing them by its own more\nflexible checkers, that allow for the \u201ctabs for indentation, spaces for alignment\u201d paradgime to be\napplied to your source code \u2013 or simply getting a better indentation checker for your spaces based\nsource code.\n\nUseful Links:\n\n * [PyPI Module Listing](https://pypi.org/project/flake8-tabs/)\n * [Project Issues](https://gitlab.com/ntninja/flake8-tabs/issues)\n * [License](https://gitlab.com/ntninja/flake8-tabs/blob/master/LICENSE.md) (LGPLv3+)\n\n## Reported Error Codes\n\nAll error codes were borrowed from *pycodestyle*. You can detect that they were generated by\n*flake8-tabs* by them being followed by the word `(flake8-tabs)` as well as the extra `T` added\nafter the initial severity letter.\n\n\n| Error Code | Meaning |\n| ---------- | ------------------------------------------------------------------------------------------------ |\n| ET101 | Mixed block of tabs and spaces detected where there as a least one tab *following* a space |\n| ET121, ET122, ET123, ET126, ET127, ET128 | Identation did not match what was expected (somewhat configurable) |\n| WT291 | Extranous whitespace detected on end of line |\n| WT293 | Whitespace that was not aligned with the next block of source code detected (configurable) |\n\nAlso note that, due to the way we disable the relevant checkers from *pycodestyle* the following\nerror code **do not have an equivalent** in this plugin: E124, E125, E129, E131, E133.\n\n## Options\n\nNote that in the following *indenting* refers to the practice of adding new levels of indentation\n(usually using tab key whether you're using tabs or not) on a separate line, while *aligning*\nrefers to the practice of adding spacing in front of the elements on the following line to make\nthem visually match the elements on the previous line. *Indentation* may refer to any of the above.\n\nDefaults tend to reflect recommendations from PEP-8.\n\n### `use-flake8-tabs`\n\n * Default: *false*\n * Allowed values: *true*, *false*\n\nEnable *flake8-tabs* for indentation checking and, by default, disable the comparable checkers from\n*pycodestyle* (see below). Without setting this to *true*, or passing it as `--use-flake8-tabs` on\nthe command-line, only *flake8-tabs*'s blank line indentation checking will be enabled. While this\nflag is disabled it is guaranteed no errors will be reported where *pycodestyle* will not report\none as well. While further checks may be enabled at some point that do not require use of this\nflag, they will not ever break this guarantee.\n\nThis way you can selectively disable errors from *pycodestyle* and incrementally depend on the\nsmarter checkers in *flake8-tabs*.\n\n### `use-pycodestyle-indent`\n\n * Default: *false* if `use-flake8-tabs` is *true* otherwise *true*\n * Allowed values: *true*, *false*\n\nIf *false* indentation style checks from *pycodestyle* will be disabled, see the last option for\ndetails.\n\n### `tab-width`\n\n * Default: *4*\n * Allowed values: Any integer >= 1\n\nThe expected size of each tab in spaces. This is not really specific to this plugin, but used to\nproperly calculate the required additional spaced indentation when indenting within an aligned\nsection.\n\n### `blank-lines-indent`\n\n * Default: *\"maybe\"*\n * Allowed values: *\"maybe\"*, *\"always\"*, *\"never\"*\n\nWhether to allow, properly aligned, indentation in blank lines. The default value will allow both\naligned indentation and no indentation. *\"always\"* will require blank lines to contain indentation,\n*\"never\"* will prohibit it.\n\nBy properly aligned indentation we mean indentation that has the same value as the indentation of\nthe next block of source code:\n\n```py\n# This is OK:\ndef main():\n\u21b9\t# \u2026 snip \u2026\n\u21b9\tdo_something()\n\u21b9\t\n\u21b9\tdo_something_else()\n\u21b9\t# \u2026 snip \u2026\n\n# This is not OK:\ndef main():\n\u21b9\twhile True:\n\u21b9\t\u21b9\t# \u2026 snip \u2026\n\u21b9\t\u21b9\tdo_something()\n\u21b9\t\n\u21b9\t\u21b9\tdo_something_else()\n\u21b9\t\u21b9\t# \u2026 snip \u2026\n\n# This is by default OK as well (unindented):\ndef main():\n\u21b9\twhile True:\n\u21b9\t\u21b9\t# \u2026 snip \u2026\n\u21b9\t\u21b9\tdo_something()\n\n\u21b9\t\u21b9\tdo_something_else()\n\u21b9\t\u21b9\t# \u2026 snip \u2026\n```\n\n### Minimal Tab Sizes when Indenting\n\n(Note that a tab here may also refer to an equivalent number of spaces based on the configured\ntab width.)\n\n#### `indent-tabs-call`\n\n * Default: *1*\n * Allowed values: Any integer >= 1\n\nThe number of tabs to add when adding the first level of indentation using indenting within a\nfunction or method call:\n\n```py\n# Example with: indent-tabs-call=3\nx = long_function_name(\n\u21b9\t\u21b9\t\u21b9\t{ # First level gets 3 levels of indenting\n\u21b9\t\u21b9\t\u21b9\t\u21b9\t\"name\": \"value\" # Next level is indented as usual\n\u21b9\t\u21b9\t\u21b9\t},\n\u21b9\t\u21b9\t\u21b9\tparam2, param3\n)\n```\n\nUsually you should leave this at *1* (PEP-8) but some teams may prefer a value of *2* to function\ncalls more easily distinguishable from blocks.\n\n#### `indent-tabs-def`\n\n * Default: *2*\n * Allowed values: Any integer >= 1\n\nThe number of tabs to add when adding the first level of indentation using indenting within a\nclass of method definition:\n\n```py\n# Example with the default of: indent-tabs-def=2\ndef main(\n\u21b9\t\u21b9\tparam1, param2, param3,\n\u21b9\t\u21b9\tparam4):\n\u21b9\tinitialize_something()\n)\n```\n\nNotice in the example above how an indent level of *1* would make the elements of the parameter\nlist hard to distingish from the first statement. Hence PEP8 recommends either indenting twice\nor using alignment instead.\n\n#### `indent-tabs-expr`\n\n * Default: *1*\n * Allowed values: Any integer >= 1\n\nThe number of tabs to add when adding the first level of indentation using indenting within any\nother kind of construct (such as a tuple, set, dict, \u2026).\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/ntninja/flake8-tabs", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "flake8-tabs", "package_url": "https://pypi.org/project/flake8-tabs/", "platform": "", "project_url": "https://pypi.org/project/flake8-tabs/", "project_urls": { "Homepage": "https://gitlab.com/ntninja/flake8-tabs", "Issue Tracker": "https://gitlab.com/ntninja/flake8-tabs/issues" }, "release_url": "https://pypi.org/project/flake8-tabs/2.2.1/", "requires_dist": [ "flake8 > 3.0.0", "sphinx; extra == \"doc\"", "pytest; extra == \"test\"", "pytest-cov; extra == \"test\"" ], "requires_python": "~=3.4", "summary": "Tab (or Spaces) indentation style checker for flake8", "version": "2.2.1" }, "last_serial": 5998134, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "deef2450e54f566e562598e1cc44cfa3", "sha256": "778da30f817f065dcb5dd27d0c69bd121df46b6cbfc1e85c7a615a9cb0f19358" }, "downloads": -1, "filename": "flake8_tabs-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "deef2450e54f566e562598e1cc44cfa3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.4", "size": 29847, "upload_time": "2018-12-17T22:19:41", "url": "https://files.pythonhosted.org/packages/04/91/69bfc07d72b613bd6ee31b5aef0e99ec7004021b89a79b34f803b775b4ca/flake8_tabs-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5f7430d80fc2d8c0727758a9b7de25f4", "sha256": "e4acebf97c43be9431e598674431670f84a2fa6df17c3985a20fefe3760db33f" }, "downloads": -1, "filename": "flake8-tabs-1.0.0.tar.gz", "has_sig": false, "md5_digest": "5f7430d80fc2d8c0727758a9b7de25f4", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.4", "size": 11703, "upload_time": "2018-12-17T22:19:44", "url": "https://files.pythonhosted.org/packages/02/83/2f64e5911fc9a532004975da47288a531af647b25ee52ac40df25aeaca2b/flake8-tabs-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "bce3c2dccba0c735e107730094254e8a", "sha256": "b19fd4b6595634ab3180f85533c401174c07a100266644f2deed31ee6a6e2c68" }, "downloads": -1, "filename": "flake8_tabs-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "bce3c2dccba0c735e107730094254e8a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.4", "size": 30149, "upload_time": "2018-12-20T17:31:30", "url": "https://files.pythonhosted.org/packages/2b/d8/93946f9cb38519d0c69ca667042b33efd8b244c9985057e94008abe1e355/flake8_tabs-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "71d8036d4f62109448cd222adf866bb9", "sha256": "71ca1b190881a84003edec74c5dd138c1b58dbed4e5eda9906ea347df52eb258" }, "downloads": -1, "filename": "flake8-tabs-1.0.1.tar.gz", "has_sig": false, "md5_digest": "71d8036d4f62109448cd222adf866bb9", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.4", "size": 12114, "upload_time": "2018-12-20T17:31:33", "url": "https://files.pythonhosted.org/packages/91/69/f5656d09331afbb66c0c795dac378c1d34b8550038fa4691b7a3c3e5b8fb/flake8-tabs-1.0.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "70cf281bccb0ef5c6a16addd9dac8c61", "sha256": "154e93dea037e2234d502b9000bb46bea3ceed50f6378243a50189baa07d5904" }, "downloads": -1, "filename": "flake8_tabs-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "70cf281bccb0ef5c6a16addd9dac8c61", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.4", "size": 32263, "upload_time": "2019-02-13T22:43:21", "url": "https://files.pythonhosted.org/packages/44/27/1c23d8320c827794341ba0abbf051f71bf6da1ba16af359a81437c4c130d/flake8_tabs-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "109ad7beb0447ba69e1ef6914003bd25", "sha256": "876e31fec1a35ca15a1b4a7ea65b73ef7f66c8db858686c6da9b9509807fbccd" }, "downloads": -1, "filename": "flake8-tabs-2.0.0.tar.gz", "has_sig": false, "md5_digest": "109ad7beb0447ba69e1ef6914003bd25", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.4", "size": 13157, "upload_time": "2019-02-13T22:43:23", "url": "https://files.pythonhosted.org/packages/5d/b5/fcc27c54d8946105503f6acb863990e484debeeed6ca567c6884d59ecb63/flake8-tabs-2.0.0.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "9e1dcce93f32fce922a53a442e847ddf", "sha256": "1ab2dfa43007ddd61fcde57a701657ba4aa36b7c2684401d8961a7870fcda5f0" }, "downloads": -1, "filename": "flake8_tabs-2.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9e1dcce93f32fce922a53a442e847ddf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.4", "size": 34907, "upload_time": "2019-08-19T19:09:11", "url": "https://files.pythonhosted.org/packages/5c/19/805c465b5b693a81fd6f6b02f399064f43e7e69f7f6fd109c7318e9921c9/flake8_tabs-2.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "441b14ea550c43f8fea4b19687357e6a", "sha256": "3fe7645010240037e6e4eae852f0ac719d60afcf8e1541fdcc1cd0d46bca05f4" }, "downloads": -1, "filename": "flake8-tabs-2.1.0.tar.gz", "has_sig": false, "md5_digest": "441b14ea550c43f8fea4b19687357e6a", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.4", "size": 13840, "upload_time": "2019-08-19T19:09:14", "url": "https://files.pythonhosted.org/packages/bc/85/f719fbcac60f43897ee337826a99ccfee9049536d1568548eb949f3b276b/flake8-tabs-2.1.0.tar.gz" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "3ccc64a0f07ceb25bdca7e2589abe273", "sha256": "2768809051562b1e5d0d29247fcccd507366932674ba8a99561cbe68f3415cea" }, "downloads": -1, "filename": "flake8_tabs-2.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3ccc64a0f07ceb25bdca7e2589abe273", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.4", "size": 35665, "upload_time": "2019-10-17T14:47:50", "url": "https://files.pythonhosted.org/packages/63/88/064f48ea93e9d0134b5b2d751c9a607665d01f980f38fc4443cd1691dfcb/flake8_tabs-2.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d9ef446256798f8a048c86402418f30b", "sha256": "bcb8995da250ba36e6ccd63e7651b87ce03aad38813a6dc949f816553f90b89e" }, "downloads": -1, "filename": "flake8-tabs-2.2.0.tar.gz", "has_sig": false, "md5_digest": "d9ef446256798f8a048c86402418f30b", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.4", "size": 14070, "upload_time": "2019-10-17T14:47:59", "url": "https://files.pythonhosted.org/packages/ec/57/138f0ad2ba779c05772c96f61dea9669064b039046886b15cae174911669/flake8-tabs-2.2.0.tar.gz" } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "64559be155a5e310569e369af6e7821b", "sha256": "ff010eddc9aebb72d6f25d670de08205843fc3d44865499238efa9ccd3e05e7b" }, "downloads": -1, "filename": "flake8_tabs-2.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "64559be155a5e310569e369af6e7821b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.4", "size": 35643, "upload_time": "2019-10-19T00:11:26", "url": "https://files.pythonhosted.org/packages/ef/40/57af62b258879dd94cf4b817cb7036ac8c5bf7df8b3cfd9c673244ed2a5d/flake8_tabs-2.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "519cb059de3adf303470a21bf7b61d99", "sha256": "4d83fe16793f7b31f4a10da097eca7b91a5bab43f64a06bef30da4751a18f027" }, "downloads": -1, "filename": "flake8-tabs-2.2.1.tar.gz", "has_sig": false, "md5_digest": "519cb059de3adf303470a21bf7b61d99", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.4", "size": 14068, "upload_time": "2019-10-19T00:11:28", "url": "https://files.pythonhosted.org/packages/51/82/034317846c7699eb724a866db4bba94121943ec18d492c105fab8dfadca2/flake8-tabs-2.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "64559be155a5e310569e369af6e7821b", "sha256": "ff010eddc9aebb72d6f25d670de08205843fc3d44865499238efa9ccd3e05e7b" }, "downloads": -1, "filename": "flake8_tabs-2.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "64559be155a5e310569e369af6e7821b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.4", "size": 35643, "upload_time": "2019-10-19T00:11:26", "url": "https://files.pythonhosted.org/packages/ef/40/57af62b258879dd94cf4b817cb7036ac8c5bf7df8b3cfd9c673244ed2a5d/flake8_tabs-2.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "519cb059de3adf303470a21bf7b61d99", "sha256": "4d83fe16793f7b31f4a10da097eca7b91a5bab43f64a06bef30da4751a18f027" }, "downloads": -1, "filename": "flake8-tabs-2.2.1.tar.gz", "has_sig": false, "md5_digest": "519cb059de3adf303470a21bf7b61d99", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.4", "size": 14068, "upload_time": "2019-10-19T00:11:28", "url": "https://files.pythonhosted.org/packages/51/82/034317846c7699eb724a866db4bba94121943ec18d492c105fab8dfadca2/flake8-tabs-2.2.1.tar.gz" } ] }