mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-14 00:14:46 +00:00
Re-allow for relative paths for exclude
Previously, all testing was done from the directory in which the configuration file lived, so this bug went unnoticed. However, if you run Flake8 against its own source from a directory above, you would notice that the patterns in the exclude config value in tox.ini were ignored. This is because we (like any reasonable person) are using relative paths. The path is relative, however, to the directory in which the configuration file was located. So we keep track of which directory that is and use that to normalize the paths in the config file. Yes, there is an unrelated change to our tox.ini in this commit as well. ;-) Closes #194
This commit is contained in:
parent
e619fd3b20
commit
63f5f15068
4 changed files with 34 additions and 15 deletions
|
|
@ -4,21 +4,25 @@
|
||||||
- Disable ``--jobs`` for any version of Python on Windows.
|
- Disable ``--jobs`` for any version of Python on Windows.
|
||||||
(See also `this Python bug report`_)
|
(See also `this Python bug report`_)
|
||||||
|
|
||||||
- Fix ``# noqa`` comments followed by a ``:`` and explanation broken by
|
|
||||||
3.0.0 (See also `GitLab#178`_)
|
|
||||||
|
|
||||||
- Fix issue where users were unable to ignore plugin errors that were on
|
|
||||||
by default. (See also `GitLab#195`_)
|
|
||||||
|
|
||||||
- Raise exception when entry_point in plugin not callable.
|
- Raise exception when entry_point in plugin not callable.
|
||||||
This raises an informative error when a plugin fails to load because its
|
This raises an informative error when a plugin fails to load because its
|
||||||
entry_point is not callable, which can happen with a plugin which is buggy or
|
entry_point is not callable, which can happen with a plugin which is buggy or
|
||||||
not updated for the current version of flake8. This is nicer than raising a
|
not updated for the current version of flake8. This is nicer than raising a
|
||||||
`PicklingError` about failing to pickle a module (See also `GitLab#164`_)
|
`PicklingError` about failing to pickle a module (See also `GitLab#164`_)
|
||||||
|
|
||||||
|
- Fix ``# noqa`` comments followed by a ``:`` and explanation broken by
|
||||||
|
3.0.0 (See also `GitLab#178`_)
|
||||||
|
|
||||||
- Always open our output file in append mode so we do not overwrite log
|
- Always open our output file in append mode so we do not overwrite log
|
||||||
messages. (See also `GitLab#193`_)
|
messages. (See also `GitLab#193`_)
|
||||||
|
|
||||||
|
- When normalizing path values read from configuration, keep in context the
|
||||||
|
directory where the configuration was found so that relative paths work.
|
||||||
|
(See also `GitLab#194`_)
|
||||||
|
|
||||||
|
- Fix issue where users were unable to ignore plugin errors that were on
|
||||||
|
by default. (See also `GitLab#195`_)
|
||||||
|
|
||||||
|
|
||||||
.. links
|
.. links
|
||||||
.. _GitLab#164:
|
.. _GitLab#164:
|
||||||
|
|
@ -27,6 +31,8 @@
|
||||||
https://gitlab.com/pycqa/flake8/issues/178
|
https://gitlab.com/pycqa/flake8/issues/178
|
||||||
.. _GitLab#193:
|
.. _GitLab#193:
|
||||||
https://gitlab.com/pycqa/flake8/issues/193
|
https://gitlab.com/pycqa/flake8/issues/193
|
||||||
|
.. _GitLab#194:
|
||||||
|
https://gitlab.com/pycqa/flake8/issues/193
|
||||||
.. _GitLab#195:
|
.. _GitLab#195:
|
||||||
https://gitlab.com/pycqa/flake8/issues/195
|
https://gitlab.com/pycqa/flake8/issues/195
|
||||||
.. _this Python bug report:
|
.. _this Python bug report:
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,8 @@ class ConfigFileFinder(object):
|
||||||
# List of filenames to find in the local/project directory
|
# List of filenames to find in the local/project directory
|
||||||
self.project_filenames = ('setup.cfg', 'tox.ini', self.program_config)
|
self.project_filenames = ('setup.cfg', 'tox.ini', self.program_config)
|
||||||
|
|
||||||
|
self.local_directory = os.path.abspath(os.curdir)
|
||||||
|
|
||||||
if not args:
|
if not args:
|
||||||
args = ['.']
|
args = ['.']
|
||||||
self.parent = self.tail = os.path.abspath(os.path.commonprefix(args))
|
self.parent = self.tail = os.path.abspath(os.path.commonprefix(args))
|
||||||
|
|
@ -78,6 +80,7 @@ class ConfigFileFinder(object):
|
||||||
if os.path.exists(filename):
|
if os.path.exists(filename):
|
||||||
yield filename
|
yield filename
|
||||||
found_config_files = True
|
found_config_files = True
|
||||||
|
self.local_directory = parent
|
||||||
(parent, tail) = os.path.split(parent)
|
(parent, tail) = os.path.split(parent)
|
||||||
|
|
||||||
def local_config_files(self):
|
def local_config_files(self):
|
||||||
|
|
@ -160,9 +163,11 @@ class MergedConfigParser(object):
|
||||||
self.config_finder = ConfigFileFinder(self.program_name, self.args,
|
self.config_finder = ConfigFileFinder(self.program_name, self.args,
|
||||||
self.extra_config_files)
|
self.extra_config_files)
|
||||||
|
|
||||||
@staticmethod
|
def _normalize_value(self, option, value):
|
||||||
def _normalize_value(option, value):
|
final_value = option.normalize(
|
||||||
final_value = option.normalize(value)
|
value,
|
||||||
|
self.config_finder.local_directory,
|
||||||
|
)
|
||||||
LOG.debug('%r has been normalized to %r for option "%s"',
|
LOG.debug('%r has been normalized to %r for option "%s"',
|
||||||
value, final_value, option.config_name)
|
value, final_value, option.config_name)
|
||||||
return final_value
|
return final_value
|
||||||
|
|
|
||||||
|
|
@ -121,14 +121,14 @@ class Option(object):
|
||||||
return self.long_option_name[2:].replace('-', '_')
|
return self.long_option_name[2:].replace('-', '_')
|
||||||
return self.short_option_name[1]
|
return self.short_option_name[1]
|
||||||
|
|
||||||
def normalize(self, value):
|
def normalize(self, value, *normalize_args):
|
||||||
"""Normalize the value based on the option configuration."""
|
"""Normalize the value based on the option configuration."""
|
||||||
if self.normalize_paths:
|
if self.normalize_paths:
|
||||||
# Decide whether to parse a list of paths or a single path
|
# Decide whether to parse a list of paths or a single path
|
||||||
normalize = utils.normalize_path
|
normalize = utils.normalize_path
|
||||||
if self.comma_separated_list:
|
if self.comma_separated_list:
|
||||||
normalize = utils.normalize_paths
|
normalize = utils.normalize_paths
|
||||||
return normalize(value)
|
return normalize(value, *normalize_args)
|
||||||
elif self.comma_separated_list:
|
elif self.comma_separated_list:
|
||||||
return utils.parse_comma_separated_list(value)
|
return utils.parse_comma_separated_list(value)
|
||||||
return value
|
return value
|
||||||
|
|
|
||||||
16
tox.ini
16
tox.ini
|
|
@ -138,10 +138,18 @@ commands =
|
||||||
# Once Flake8 3.0 is released and in a good state, we can use both and it will
|
# Once Flake8 3.0 is released and in a good state, we can use both and it will
|
||||||
# work well \o/
|
# work well \o/
|
||||||
ignore = D203
|
ignore = D203
|
||||||
# NOTE(sigmavirus24): Once we release 3.0.0 this exclude option can be specified
|
exclude =
|
||||||
# across multiple lines. Presently it cannot be specified across multiple lines.
|
.tox,
|
||||||
# :-(
|
.git,
|
||||||
exclude = .tox,.git,__pycache__,docs/source/conf.py,build,dist,tests/fixtures/*,*.pyc,*.egg-info,./.cache,./.eggs
|
__pycache__,
|
||||||
|
docs/source/conf.py,
|
||||||
|
build,
|
||||||
|
dist,
|
||||||
|
tests/fixtures/*,
|
||||||
|
*.pyc,
|
||||||
|
*.egg-info,
|
||||||
|
.cache,
|
||||||
|
.eggs
|
||||||
max-complexity = 10
|
max-complexity = 10
|
||||||
import-order-style = google
|
import-order-style = google
|
||||||
application-import-names = flake8
|
application-import-names = flake8
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue