mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-10 14:54:17 +00:00
Merge branch 'remove_setuptools_command' into 'master'
remove flake8 setuptools command See merge request pycqa/flake8!470
This commit is contained in:
commit
089950e2aa
5 changed files with 0 additions and 167 deletions
|
|
@ -47,21 +47,6 @@ both cases, however, you end up in :func:`flake8.main.cli.main`. This is the
|
||||||
primary way that users will end up starting Flake8. This function creates an
|
primary way that users will end up starting Flake8. This function creates an
|
||||||
instance of |Application|.
|
instance of |Application|.
|
||||||
|
|
||||||
via Setuptools
|
|
||||||
--------------
|
|
||||||
|
|
||||||
If you're invoking |Flake8| from your ``setup.py`` then you actually end up in
|
|
||||||
:meth:`flake8.main.setuptools_command.Flake8.run`. This then collects the
|
|
||||||
files that are included in the package information and creates an instance of
|
|
||||||
|Application|.
|
|
||||||
|
|
||||||
via Git or Mercurial
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
In both cases, they call their respective ``hook`` functions which create
|
|
||||||
instances of |Application|.
|
|
||||||
|
|
||||||
|
|
||||||
Application Logic
|
Application Logic
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,6 @@
|
||||||
|
|
||||||
- invoked via Python
|
- invoked via Python
|
||||||
|
|
||||||
- called by Git or Mercurial on or around committing
|
|
||||||
|
|
||||||
This guide will cover all of these and the nuances for using |Flake8|.
|
This guide will cover all of these and the nuances for using |Flake8|.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,6 @@ python_requires = >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
|
||||||
where = src
|
where = src
|
||||||
|
|
||||||
[options.entry_points]
|
[options.entry_points]
|
||||||
distutils.commands=
|
|
||||||
flake8 = flake8.main.setuptools_command:Flake8
|
|
||||||
console_scripts =
|
console_scripts =
|
||||||
flake8 = flake8.main.cli:main
|
flake8 = flake8.main.cli:main
|
||||||
flake8.extension =
|
flake8.extension =
|
||||||
|
|
|
||||||
|
|
@ -1,115 +0,0 @@
|
||||||
"""The logic for Flake8's integration with setuptools."""
|
|
||||||
from distutils import log
|
|
||||||
import os
|
|
||||||
from typing import List, Tuple
|
|
||||||
|
|
||||||
import setuptools
|
|
||||||
|
|
||||||
from flake8.main import application as app
|
|
||||||
|
|
||||||
UNSET = object()
|
|
||||||
|
|
||||||
|
|
||||||
class Flake8(setuptools.Command):
|
|
||||||
"""Run Flake8 via setuptools/distutils for registered modules."""
|
|
||||||
|
|
||||||
description = "Run Flake8 on modules registered in setup.py"
|
|
||||||
# NOTE(sigmavirus24): If we populated this with a list of tuples, users
|
|
||||||
# could do something like ``python setup.py flake8 --ignore=E123,E234``
|
|
||||||
# but we would have to redefine it and we can't define it dynamically.
|
|
||||||
# Since I refuse to copy-and-paste the options here or maintain two lists
|
|
||||||
# of options, and since this will break when users use plugins that
|
|
||||||
# provide command-line options, we are leaving this empty. If users want
|
|
||||||
# to configure this command, they can do so through config files.
|
|
||||||
user_options = [] # type: List[str]
|
|
||||||
|
|
||||||
def initialize_options(self):
|
|
||||||
"""Override this method to initialize our application."""
|
|
||||||
self.flake8 = app.Application()
|
|
||||||
self.flake8.initialize([])
|
|
||||||
options = self.flake8.option_manager.options
|
|
||||||
for option in options:
|
|
||||||
if option.parse_from_config:
|
|
||||||
setattr(self, option.config_name, UNSET)
|
|
||||||
|
|
||||||
def finalize_options(self):
|
|
||||||
"""Override this to parse the parameters."""
|
|
||||||
options = self.flake8.option_manager.options
|
|
||||||
for option in options:
|
|
||||||
if option.parse_from_config:
|
|
||||||
name = option.config_name
|
|
||||||
value = getattr(self, name, UNSET)
|
|
||||||
if value is UNSET:
|
|
||||||
continue
|
|
||||||
setattr(
|
|
||||||
self.flake8.options,
|
|
||||||
name,
|
|
||||||
option.normalize_from_setuptools(value),
|
|
||||||
)
|
|
||||||
|
|
||||||
def package_files(self):
|
|
||||||
"""Collect the files/dirs included in the registered modules."""
|
|
||||||
seen_package_directories = () # type: Tuple[str, ...]
|
|
||||||
directories = self.distribution.package_dir or {}
|
|
||||||
empty_directory_exists = "" in directories
|
|
||||||
packages = self.distribution.packages or []
|
|
||||||
for package in packages:
|
|
||||||
package_directory = package
|
|
||||||
if package in directories:
|
|
||||||
package_directory = directories[package]
|
|
||||||
elif empty_directory_exists:
|
|
||||||
package_directory = os.path.join(
|
|
||||||
directories[""], package_directory
|
|
||||||
)
|
|
||||||
|
|
||||||
# NOTE(sigmavirus24): Do not collect submodules, e.g.,
|
|
||||||
# if we have:
|
|
||||||
# - flake8/
|
|
||||||
# - flake8/plugins/
|
|
||||||
# Flake8 only needs ``flake8/`` to be provided. It will
|
|
||||||
# recurse on its own.
|
|
||||||
if package_directory.startswith(seen_package_directories):
|
|
||||||
continue
|
|
||||||
|
|
||||||
seen_package_directories += (package_directory + ".",)
|
|
||||||
yield package_directory
|
|
||||||
|
|
||||||
def module_files(self):
|
|
||||||
"""Collect the files listed as py_modules."""
|
|
||||||
modules = self.distribution.py_modules or []
|
|
||||||
filename_from = "{0}.py".format
|
|
||||||
for module in modules:
|
|
||||||
yield filename_from(module)
|
|
||||||
|
|
||||||
def distribution_files(self):
|
|
||||||
"""Collect package and module files."""
|
|
||||||
for package in self.package_files():
|
|
||||||
yield package
|
|
||||||
|
|
||||||
for module in self.module_files():
|
|
||||||
yield module
|
|
||||||
|
|
||||||
yield "setup.py"
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
"""Run the Flake8 application."""
|
|
||||||
self.flake8.run_checks(list(self.distribution_files()))
|
|
||||||
self.flake8.formatter.start()
|
|
||||||
self.flake8.report_errors()
|
|
||||||
self.flake8.report_statistics()
|
|
||||||
self.flake8.report_benchmarks()
|
|
||||||
self.flake8.formatter.stop()
|
|
||||||
try:
|
|
||||||
self.flake8.exit()
|
|
||||||
except SystemExit as e:
|
|
||||||
# Cause system exit only if exit code is not zero (terminates
|
|
||||||
# other possibly remaining/pending setuptools commands).
|
|
||||||
if e.code:
|
|
||||||
raise
|
|
||||||
finally:
|
|
||||||
self.announce(
|
|
||||||
"WARNING: flake8 setuptools integration is deprecated and "
|
|
||||||
"scheduled for removal in 4.x. For more information, see "
|
|
||||||
"https://gitlab.com/pycqa/flake8/issues/544",
|
|
||||||
log.WARN,
|
|
||||||
)
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
"""Module containing tests for the setuptools command integration."""
|
|
||||||
import pytest
|
|
||||||
from setuptools import dist
|
|
||||||
|
|
||||||
from flake8.main import setuptools_command
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def distribution():
|
|
||||||
"""Create a setuptools Distribution object."""
|
|
||||||
return dist.Distribution({
|
|
||||||
'name': 'foo',
|
|
||||||
'packages': [
|
|
||||||
'foo',
|
|
||||||
'foo.bar',
|
|
||||||
'foo_biz',
|
|
||||||
],
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def command(distribution):
|
|
||||||
"""Create an instance of Flake8's setuptools command."""
|
|
||||||
return setuptools_command.Flake8(distribution)
|
|
||||||
|
|
||||||
|
|
||||||
def test_package_files_removes_submodules(command):
|
|
||||||
"""Verify that we collect all package files."""
|
|
||||||
package_files = list(command.package_files())
|
|
||||||
assert sorted(package_files) == [
|
|
||||||
'foo',
|
|
||||||
'foo_biz',
|
|
||||||
]
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue