mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-14 00:14:46 +00:00
automatic: pyupgrade --py36-plus
This commit is contained in:
parent
8cc3fc01e8
commit
358ae85120
51 changed files with 185 additions and 149 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
exclude: ^tests/fixtures/example-code/
|
||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v2.3.0
|
rev: v2.3.0
|
||||||
|
|
@ -7,6 +8,11 @@ repos:
|
||||||
- id: end-of-file-fixer
|
- id: end-of-file-fixer
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
exclude: ^tests/fixtures/diffs/
|
exclude: ^tests/fixtures/diffs/
|
||||||
|
- repo: https://github.com/asottile/reorder_python_imports
|
||||||
|
rev: v2.4.0
|
||||||
|
hooks:
|
||||||
|
- id: reorder-python-imports
|
||||||
|
args: [--application-directories, '.:src', --py36-plus]
|
||||||
- repo: https://github.com/psf/black
|
- repo: https://github.com/psf/black
|
||||||
rev: 20.8b1
|
rev: 20.8b1
|
||||||
hooks:
|
hooks:
|
||||||
|
|
@ -17,6 +23,7 @@ repos:
|
||||||
rev: v2.11.0
|
rev: v2.11.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: pyupgrade
|
- id: pyupgrade
|
||||||
|
args: [--py36-plus]
|
||||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||||
rev: v0.720
|
rev: v0.720
|
||||||
hooks:
|
hooks:
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
#
|
||||||
# flake8 documentation build configuration file, created by
|
# flake8 documentation build configuration file, created by
|
||||||
# sphinx-quickstart on Tue Jan 19 07:14:10 2016.
|
# sphinx-quickstart on Tue Jan 19 07:14:10 2016.
|
||||||
|
|
@ -11,9 +10,8 @@
|
||||||
#
|
#
|
||||||
# All configuration values have a default; values that are commented out
|
# All configuration values have a default; values that are commented out
|
||||||
# serve to show the default.
|
# serve to show the default.
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
|
|
@ -53,11 +51,12 @@ source_suffix = '.rst'
|
||||||
master_doc = 'index'
|
master_doc = 'index'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = u'flake8'
|
project = 'flake8'
|
||||||
copyright = u'2016, Ian Stapleton Cordasco'
|
copyright = '2016, Ian Stapleton Cordasco'
|
||||||
author = u'Ian Stapleton Cordasco'
|
author = 'Ian Stapleton Cordasco'
|
||||||
|
|
||||||
import flake8
|
import flake8
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
# built documents.
|
# built documents.
|
||||||
|
|
@ -234,8 +233,8 @@ latex_elements = {
|
||||||
# (source start file, target name, title,
|
# (source start file, target name, title,
|
||||||
# author, documentclass [howto, manual, or own class]).
|
# author, documentclass [howto, manual, or own class]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
(master_doc, 'flake8.tex', u'flake8 Documentation',
|
(master_doc, 'flake8.tex', 'flake8 Documentation',
|
||||||
u'Ian Stapleton Cordasco', 'manual'),
|
'Ian Stapleton Cordasco', 'manual'),
|
||||||
]
|
]
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
|
|
@ -264,7 +263,7 @@ latex_documents = [
|
||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [
|
||||||
('manpage', 'flake8', u'Flake8 Command Line Documentation',
|
('manpage', 'flake8', 'Flake8 Command Line Documentation',
|
||||||
[author], 1)
|
[author], 1)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -278,7 +277,7 @@ man_pages = [
|
||||||
# (source start file, target name, title, author,
|
# (source start file, target name, title, author,
|
||||||
# dir menu entry, description, category)
|
# dir menu entry, description, category)
|
||||||
texinfo_documents = [
|
texinfo_documents = [
|
||||||
('index', 'Flake8', u'Flake8 Documentation', u'Tarek Ziade',
|
('index', 'Flake8', 'Flake8 Documentation', 'Tarek Ziade',
|
||||||
'Flake8', 'Code checking using pycodestyle, pyflakes and mccabe',
|
'Flake8', 'Code checking using pycodestyle, pyflakes and mccabe',
|
||||||
'Miscellaneous'),
|
'Miscellaneous'),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import setuptools
|
import setuptools
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
"""Module for an example Flake8 plugin."""
|
"""Module for an example Flake8 plugin."""
|
||||||
|
|
||||||
from .on_by_default import ExampleOne
|
|
||||||
from .off_by_default import ExampleTwo
|
from .off_by_default import ExampleTwo
|
||||||
|
from .on_by_default import ExampleOne
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'ExampleOne',
|
'ExampleOne',
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
"""Our first example plugin."""
|
"""Our first example plugin."""
|
||||||
|
|
||||||
|
|
||||||
class ExampleTwo(object):
|
class ExampleTwo:
|
||||||
"""Second Example Plugin."""
|
"""Second Example Plugin."""
|
||||||
name = 'off-by-default-example-plugin'
|
name = 'off-by-default-example-plugin'
|
||||||
version = '1.0.0'
|
version = '1.0.0'
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
"""Our first example plugin."""
|
"""Our first example plugin."""
|
||||||
|
|
||||||
|
|
||||||
class ExampleOne(object):
|
class ExampleOne:
|
||||||
"""First Example Plugin."""
|
"""First Example Plugin."""
|
||||||
name = 'on-by-default-example-plugin'
|
name = 'on-by-default-example-plugin'
|
||||||
version = '1.0.0'
|
version = '1.0.0'
|
||||||
|
|
@ -11,5 +11,4 @@ class ExampleOne(object):
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
"""Do nothing."""
|
"""Do nothing."""
|
||||||
for message in []:
|
yield from []
|
||||||
yield message
|
|
||||||
|
|
|
||||||
1
setup.py
1
setup.py
|
|
@ -1,4 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""Packaging logic for Flake8."""
|
"""Packaging logic for Flake8."""
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,6 @@
|
||||||
"""Expose backports in a single place."""
|
"""Expose backports in a single place."""
|
||||||
import sys
|
import sys
|
||||||
|
from functools import lru_cache
|
||||||
if sys.version_info >= (3,): # pragma: no cover (PY3+)
|
|
||||||
from functools import lru_cache
|
|
||||||
else: # pragma: no cover (<PY3)
|
|
||||||
from functools32 import lru_cache
|
|
||||||
|
|
||||||
if sys.version_info >= (3, 8): # pragma: no cover (PY38+)
|
if sys.version_info >= (3, 8): # pragma: no cover (PY38+)
|
||||||
import importlib.metadata as importlib_metadata
|
import importlib.metadata as importlib_metadata
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ def get_style_guide(**kwargs):
|
||||||
return StyleGuide(application)
|
return StyleGuide(application)
|
||||||
|
|
||||||
|
|
||||||
class StyleGuide(object):
|
class StyleGuide:
|
||||||
"""Public facing object that mimic's Flake8 2.0's StyleGuide.
|
"""Public facing object that mimic's Flake8 2.0's StyleGuide.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
@ -170,7 +170,7 @@ class StyleGuide(object):
|
||||||
return self.check_files([filename])
|
return self.check_files([filename])
|
||||||
|
|
||||||
|
|
||||||
class Report(object):
|
class Report:
|
||||||
"""Public facing object that mimic's Flake8 2.0's API.
|
"""Public facing object that mimic's Flake8 2.0's API.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
@ -210,6 +210,6 @@ class Report(object):
|
||||||
list
|
list
|
||||||
"""
|
"""
|
||||||
return [
|
return [
|
||||||
"{} {} {}".format(s.count, s.error_code, s.message)
|
f"{s.count} {s.error_code} {s.message}"
|
||||||
for s in self._stats.statistics_for(violation)
|
for s in self._stats.statistics_for(violation)
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -6,18 +6,21 @@ import logging
|
||||||
import signal
|
import signal
|
||||||
import sys
|
import sys
|
||||||
import tokenize
|
import tokenize
|
||||||
from typing import Dict, List, Optional, Tuple
|
from typing import Dict
|
||||||
|
from typing import List
|
||||||
try:
|
from typing import Optional
|
||||||
import multiprocessing.pool
|
from typing import Tuple
|
||||||
except ImportError:
|
|
||||||
multiprocessing = None # type: ignore
|
|
||||||
|
|
||||||
from flake8 import defaults
|
from flake8 import defaults
|
||||||
from flake8 import exceptions
|
from flake8 import exceptions
|
||||||
from flake8 import processor
|
from flake8 import processor
|
||||||
from flake8 import utils
|
from flake8 import utils
|
||||||
|
|
||||||
|
try:
|
||||||
|
import multiprocessing.pool
|
||||||
|
except ImportError:
|
||||||
|
multiprocessing = None # type: ignore
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
SERIAL_RETRY_ERRNOS = {
|
SERIAL_RETRY_ERRNOS = {
|
||||||
|
|
@ -48,7 +51,7 @@ def _multiprocessing_is_fork(): # type () -> bool
|
||||||
return multiprocessing and not utils.is_windows()
|
return multiprocessing and not utils.is_windows()
|
||||||
|
|
||||||
|
|
||||||
class Manager(object):
|
class Manager:
|
||||||
"""Manage the parallelism and checker instances for each plugin and file.
|
"""Manage the parallelism and checker instances for each plugin and file.
|
||||||
|
|
||||||
This class will be responsible for the following:
|
This class will be responsible for the following:
|
||||||
|
|
@ -337,7 +340,7 @@ class Manager(object):
|
||||||
self._process_statistics()
|
self._process_statistics()
|
||||||
|
|
||||||
|
|
||||||
class FileChecker(object):
|
class FileChecker:
|
||||||
"""Manage running checks for a file and aggregate the results."""
|
"""Manage running checks for a file and aggregate the results."""
|
||||||
|
|
||||||
def __init__(self, filename, checks, options):
|
def __init__(self, filename, checks, options):
|
||||||
|
|
@ -375,13 +378,13 @@ class FileChecker(object):
|
||||||
|
|
||||||
def __repr__(self): # type: () -> str
|
def __repr__(self): # type: () -> str
|
||||||
"""Provide helpful debugging representation."""
|
"""Provide helpful debugging representation."""
|
||||||
return "FileChecker for {}".format(self.filename)
|
return f"FileChecker for {self.filename}"
|
||||||
|
|
||||||
def _make_processor(self):
|
def _make_processor(self):
|
||||||
# type: () -> Optional[processor.FileProcessor]
|
# type: () -> Optional[processor.FileProcessor]
|
||||||
try:
|
try:
|
||||||
return processor.FileProcessor(self.filename, self.options)
|
return processor.FileProcessor(self.filename, self.options)
|
||||||
except IOError as e:
|
except OSError as e:
|
||||||
# If we can not read the file due to an IOError (e.g., the file
|
# If we can not read the file due to an IOError (e.g., the file
|
||||||
# does not exist or we do not have the permissions to open it)
|
# does not exist or we do not have the permissions to open it)
|
||||||
# then we need to format that exception for the user.
|
# then we need to format that exception for the user.
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ class FailedToLoadPlugin(Flake8Exception):
|
||||||
"""Initialize our FailedToLoadPlugin exception."""
|
"""Initialize our FailedToLoadPlugin exception."""
|
||||||
self.plugin_name = plugin_name
|
self.plugin_name = plugin_name
|
||||||
self.original_exception = exception
|
self.original_exception = exception
|
||||||
super(FailedToLoadPlugin, self).__init__(plugin_name, exception)
|
super().__init__(plugin_name, exception)
|
||||||
|
|
||||||
def __str__(self): # type: () -> str
|
def __str__(self): # type: () -> str
|
||||||
"""Format our exception message."""
|
"""Format our exception message."""
|
||||||
|
|
@ -46,7 +46,7 @@ class InvalidSyntax(Flake8Exception):
|
||||||
self.error_code = "E902"
|
self.error_code = "E902"
|
||||||
self.line_number = 1
|
self.line_number = 1
|
||||||
self.column_number = 0
|
self.column_number = 0
|
||||||
super(InvalidSyntax, self).__init__(exception)
|
super().__init__(exception)
|
||||||
|
|
||||||
def __str__(self): # type: () -> str
|
def __str__(self): # type: () -> str
|
||||||
"""Format our exception message."""
|
"""Format our exception message."""
|
||||||
|
|
@ -63,9 +63,7 @@ class PluginRequestedUnknownParameters(Flake8Exception):
|
||||||
"""Pop certain keyword arguments for initialization."""
|
"""Pop certain keyword arguments for initialization."""
|
||||||
self.plugin = plugin
|
self.plugin = plugin
|
||||||
self.original_exception = exception
|
self.original_exception = exception
|
||||||
super(PluginRequestedUnknownParameters, self).__init__(
|
super().__init__(plugin, exception)
|
||||||
plugin, exception
|
|
||||||
)
|
|
||||||
|
|
||||||
def __str__(self): # type: () -> str
|
def __str__(self): # type: () -> str
|
||||||
"""Format our exception message."""
|
"""Format our exception message."""
|
||||||
|
|
@ -85,7 +83,7 @@ class PluginExecutionFailed(Flake8Exception):
|
||||||
"""Utilize keyword arguments for message generation."""
|
"""Utilize keyword arguments for message generation."""
|
||||||
self.plugin = plugin
|
self.plugin = plugin
|
||||||
self.original_exception = exception
|
self.original_exception = exception
|
||||||
super(PluginExecutionFailed, self).__init__(plugin, exception)
|
super().__init__(plugin, exception)
|
||||||
|
|
||||||
def __str__(self): # type: () -> str
|
def __str__(self): # type: () -> str
|
||||||
"""Format our exception message."""
|
"""Format our exception message."""
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,16 @@
|
||||||
"""The base class and interface for all formatting plugins."""
|
"""The base class and interface for all formatting plugins."""
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
from typing import IO, List, Optional, Tuple
|
from typing import IO
|
||||||
|
from typing import List
|
||||||
|
from typing import Optional
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
if False: # `typing.TYPE_CHECKING` was introduced in 3.5.2
|
if False: # `typing.TYPE_CHECKING` was introduced in 3.5.2
|
||||||
from flake8.statistics import Statistics
|
from flake8.statistics import Statistics
|
||||||
from flake8.style_guide import Violation
|
from flake8.style_guide import Violation
|
||||||
|
|
||||||
|
|
||||||
class BaseFormatter(object):
|
class BaseFormatter:
|
||||||
"""Class defining the formatter interface.
|
"""Class defining the formatter interface.
|
||||||
|
|
||||||
.. attribute:: options
|
.. attribute:: options
|
||||||
|
|
@ -179,7 +180,7 @@ class BaseFormatter(object):
|
||||||
)
|
)
|
||||||
# Physical lines have a newline at the end, no need to add an extra
|
# Physical lines have a newline at the end, no need to add an extra
|
||||||
# one
|
# one
|
||||||
return "{}{}^".format(error.physical_line, indent)
|
return f"{error.physical_line}{indent}^"
|
||||||
|
|
||||||
def _write(self, output): # type: (str) -> None
|
def _write(self, output): # type: (str) -> None
|
||||||
"""Handle logic of whether to use an output file or print()."""
|
"""Handle logic of whether to use an output file or print()."""
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
"""Default formatting class for Flake8."""
|
"""Default formatting class for Flake8."""
|
||||||
from typing import Optional, Set
|
from typing import Optional
|
||||||
|
from typing import Set
|
||||||
|
|
||||||
from flake8.formatting import base
|
from flake8.formatting import base
|
||||||
|
|
||||||
|
|
@ -77,7 +78,7 @@ class FilenameOnly(SimpleFormatter):
|
||||||
"""Ensure we only print each error once."""
|
"""Ensure we only print each error once."""
|
||||||
if error.filename not in self.filenames_already_printed:
|
if error.filename not in self.filenames_already_printed:
|
||||||
self.filenames_already_printed.add(error.filename)
|
self.filenames_already_printed.add(error.filename)
|
||||||
return super(FilenameOnly, self).format(error)
|
return super().format(error)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
"""Module containing the application logic for Flake8."""
|
"""Module containing the application logic for Flake8."""
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
from typing import Dict, List, Optional, Set, Tuple
|
from typing import Dict
|
||||||
|
from typing import List
|
||||||
|
from typing import Optional
|
||||||
|
from typing import Set
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
import flake8
|
import flake8
|
||||||
from flake8 import checker
|
from flake8 import checker
|
||||||
|
|
@ -14,19 +16,21 @@ from flake8 import exceptions
|
||||||
from flake8 import style_guide
|
from flake8 import style_guide
|
||||||
from flake8 import utils
|
from flake8 import utils
|
||||||
from flake8.main import options
|
from flake8.main import options
|
||||||
from flake8.options import aggregator, config
|
from flake8.options import aggregator
|
||||||
|
from flake8.options import config
|
||||||
from flake8.options import manager
|
from flake8.options import manager
|
||||||
from flake8.plugins import manager as plugin_manager
|
from flake8.plugins import manager as plugin_manager
|
||||||
|
|
||||||
if False: # `typing.TYPE_CHECKING` was introduced in 3.5.2
|
if False: # `typing.TYPE_CHECKING` was introduced in 3.5.2
|
||||||
from typing import Type # `typing.Type` was introduced in 3.5.2
|
from typing import Type # `typing.Type` was introduced in 3.5.2
|
||||||
|
|
||||||
from flake8.formatting.base import BaseFormatter
|
from flake8.formatting.base import BaseFormatter
|
||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Application(object):
|
class Application:
|
||||||
"""Abstract our application into a class."""
|
"""Abstract our application into a class."""
|
||||||
|
|
||||||
def __init__(self, program="flake8", version=flake8.__version__):
|
def __init__(self, program="flake8", version=flake8.__version__):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
"""Command-line implementation of flake8."""
|
"""Command-line implementation of flake8."""
|
||||||
import sys
|
import sys
|
||||||
from typing import List, Optional
|
from typing import List
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from flake8.main import application
|
from flake8.main import application
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
"""Module containing the logic for our debugging logic."""
|
"""Module containing the logic for our debugging logic."""
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
import platform
|
import platform
|
||||||
from typing import Dict, List
|
from typing import Dict
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
|
||||||
class DebugAction(argparse.Action):
|
class DebugAction(argparse.Action):
|
||||||
|
|
@ -17,7 +16,7 @@ class DebugAction(argparse.Action):
|
||||||
used to delay response.
|
used to delay response.
|
||||||
"""
|
"""
|
||||||
self._option_manager = kwargs.pop("option_manager")
|
self._option_manager = kwargs.pop("option_manager")
|
||||||
super(DebugAction, self).__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
def __call__(self, parser, namespace, values, option_string=None):
|
def __call__(self, parser, namespace, values, option_string=None):
|
||||||
"""Perform the argparse action for printing debug information."""
|
"""Perform the argparse action for printing debug information."""
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ class JobsArgument:
|
||||||
self.n_jobs = int(arg)
|
self.n_jobs = int(arg)
|
||||||
else:
|
else:
|
||||||
raise argparse.ArgumentTypeError(
|
raise argparse.ArgumentTypeError(
|
||||||
"{!r} must be 'auto' or an integer.".format(arg),
|
f"{arg!r} must be 'auto' or an integer.",
|
||||||
)
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ applies the user-specified command-line configuration on top of it.
|
||||||
"""
|
"""
|
||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
from typing import List, Tuple
|
from typing import List
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
from flake8.options import config
|
from flake8.options import config
|
||||||
from flake8.options.manager import OptionManager
|
from flake8.options.manager import OptionManager
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,9 @@ import collections
|
||||||
import configparser
|
import configparser
|
||||||
import logging
|
import logging
|
||||||
import os.path
|
import os.path
|
||||||
from typing import List, Optional, Tuple
|
from typing import List
|
||||||
|
from typing import Optional
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
from flake8 import utils
|
from flake8 import utils
|
||||||
|
|
||||||
|
|
@ -12,7 +14,7 @@ LOG = logging.getLogger(__name__)
|
||||||
__all__ = ("ConfigFileFinder", "MergedConfigParser")
|
__all__ = ("ConfigFileFinder", "MergedConfigParser")
|
||||||
|
|
||||||
|
|
||||||
class ConfigFileFinder(object):
|
class ConfigFileFinder:
|
||||||
"""Encapsulate the logic for finding and reading config files."""
|
"""Encapsulate the logic for finding and reading config files."""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
|
@ -154,7 +156,7 @@ class ConfigFileFinder(object):
|
||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
||||||
class MergedConfigParser(object):
|
class MergedConfigParser:
|
||||||
"""Encapsulate merging different types of configuration files.
|
"""Encapsulate merging different types of configuration files.
|
||||||
|
|
||||||
This parses out the options registered that were specified in the
|
This parses out the options registered that were specified in the
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,23 @@ import contextlib
|
||||||
import enum
|
import enum
|
||||||
import functools
|
import functools
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, Callable, cast, Dict, Generator, List, Mapping
|
from typing import Any
|
||||||
from typing import Optional, Sequence, Set, Tuple, Union
|
from typing import Callable
|
||||||
|
from typing import cast
|
||||||
|
from typing import Dict
|
||||||
|
from typing import Generator
|
||||||
|
from typing import List
|
||||||
|
from typing import Mapping
|
||||||
|
from typing import Optional
|
||||||
|
from typing import Sequence
|
||||||
|
from typing import Set
|
||||||
|
from typing import Tuple
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
from flake8 import utils
|
from flake8 import utils
|
||||||
|
|
||||||
if False: # TYPE_CHECKING
|
if False: # TYPE_CHECKING
|
||||||
from typing import NoReturn
|
from typing import NoReturn, Type
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
@ -41,7 +50,7 @@ class _CallbackAction(argparse.Action):
|
||||||
self._callback = kwargs.pop("callback")
|
self._callback = kwargs.pop("callback")
|
||||||
self._callback_args = kwargs.pop("callback_args", ())
|
self._callback_args = kwargs.pop("callback_args", ())
|
||||||
self._callback_kwargs = kwargs.pop("callback_kwargs", {})
|
self._callback_kwargs = kwargs.pop("callback_kwargs", {})
|
||||||
super(_CallbackAction, self).__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
def __call__(
|
def __call__(
|
||||||
self,
|
self,
|
||||||
|
|
@ -61,7 +70,7 @@ class _CallbackAction(argparse.Action):
|
||||||
values,
|
values,
|
||||||
parser,
|
parser,
|
||||||
*self._callback_args,
|
*self._callback_args,
|
||||||
**self._callback_kwargs
|
**self._callback_kwargs,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -70,7 +79,7 @@ def _flake8_normalize(value, *args, **kwargs):
|
||||||
comma_separated_list = kwargs.pop("comma_separated_list", False)
|
comma_separated_list = kwargs.pop("comma_separated_list", False)
|
||||||
normalize_paths = kwargs.pop("normalize_paths", False)
|
normalize_paths = kwargs.pop("normalize_paths", False)
|
||||||
if kwargs:
|
if kwargs:
|
||||||
raise TypeError("Unexpected keyword args: {}".format(kwargs))
|
raise TypeError(f"Unexpected keyword args: {kwargs}")
|
||||||
|
|
||||||
ret = value # type: Union[str, List[str]]
|
ret = value # type: Union[str, List[str]]
|
||||||
if comma_separated_list and isinstance(ret, utils.string_types):
|
if comma_separated_list and isinstance(ret, utils.string_types):
|
||||||
|
|
@ -85,7 +94,7 @@ def _flake8_normalize(value, *args, **kwargs):
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
class Option(object):
|
class Option:
|
||||||
"""Our wrapper around an argparse argument parsers to add features."""
|
"""Our wrapper around an argparse argument parsers to add features."""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
|
@ -284,7 +293,7 @@ class Option(object):
|
||||||
for arg in self.option_args:
|
for arg in self.option_args:
|
||||||
parts.append(arg)
|
parts.append(arg)
|
||||||
for k, v in self.filtered_option_kwargs.items():
|
for k, v in self.filtered_option_kwargs.items():
|
||||||
parts.append("{}={!r}".format(k, v))
|
parts.append(f"{k}={v!r}")
|
||||||
return "Option({})".format(", ".join(parts))
|
return "Option({})".format(", ".join(parts))
|
||||||
|
|
||||||
def normalize(self, value, *normalize_args):
|
def normalize(self, value, *normalize_args):
|
||||||
|
|
@ -337,7 +346,7 @@ PluginVersion = collections.namedtuple(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class OptionManager(object):
|
class OptionManager:
|
||||||
"""Manage Options and OptionParser while adding post-processing."""
|
"""Manage Options and OptionParser while adding post-processing."""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
"""Plugin loading and management logic and classes."""
|
"""Plugin loading and management logic and classes."""
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, Dict, List, Optional, Set
|
from typing import Any
|
||||||
|
from typing import Dict
|
||||||
|
from typing import List
|
||||||
|
from typing import Optional
|
||||||
|
from typing import Set
|
||||||
|
|
||||||
from flake8 import exceptions
|
from flake8 import exceptions
|
||||||
from flake8 import utils
|
from flake8 import utils
|
||||||
|
|
@ -13,7 +17,7 @@ __all__ = ("Checkers", "Plugin", "PluginManager", "ReportFormatters")
|
||||||
NO_GROUP_FOUND = object()
|
NO_GROUP_FOUND = object()
|
||||||
|
|
||||||
|
|
||||||
class Plugin(object):
|
class Plugin:
|
||||||
"""Wrap an EntryPoint from setuptools and other logic."""
|
"""Wrap an EntryPoint from setuptools and other logic."""
|
||||||
|
|
||||||
def __init__(self, name, entry_point, local=False):
|
def __init__(self, name, entry_point, local=False):
|
||||||
|
|
@ -219,7 +223,7 @@ class Plugin(object):
|
||||||
self.disable(optmanager)
|
self.disable(optmanager)
|
||||||
|
|
||||||
|
|
||||||
class PluginManager(object): # pylint: disable=too-few-public-methods
|
class PluginManager: # pylint: disable=too-few-public-methods
|
||||||
"""Find and manage plugins consistently."""
|
"""Find and manage plugins consistently."""
|
||||||
|
|
||||||
def __init__(self, namespace, local_plugins=None):
|
def __init__(self, namespace, local_plugins=None):
|
||||||
|
|
@ -342,7 +346,7 @@ def version_for(plugin):
|
||||||
return getattr(module, "__version__", None)
|
return getattr(module, "__version__", None)
|
||||||
|
|
||||||
|
|
||||||
class PluginTypeManager(object):
|
class PluginTypeManager:
|
||||||
"""Parent class for most of the specific plugin types."""
|
"""Parent class for most of the specific plugin types."""
|
||||||
|
|
||||||
namespace = None # type: str
|
namespace = None # type: str
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,4 @@
|
||||||
"""Plugin built-in to Flake8 to treat pyflakes as a plugin."""
|
"""Plugin built-in to Flake8 to treat pyflakes as a plugin."""
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
@ -10,7 +8,6 @@ import pyflakes.checker
|
||||||
|
|
||||||
from flake8 import utils
|
from flake8 import utils
|
||||||
|
|
||||||
|
|
||||||
FLAKE8_PYFLAKES_CODES = {
|
FLAKE8_PYFLAKES_CODES = {
|
||||||
"UnusedImport": "F401",
|
"UnusedImport": "F401",
|
||||||
"ImportShadowedByLoopVar": "F402",
|
"ImportShadowedByLoopVar": "F402",
|
||||||
|
|
@ -96,7 +93,7 @@ class FlakesChecker(pyflakes.checker.Checker):
|
||||||
if overlaped_by:
|
if overlaped_by:
|
||||||
with_doctest = True
|
with_doctest = True
|
||||||
|
|
||||||
super(FlakesChecker, self).__init__(
|
super().__init__(
|
||||||
tree,
|
tree,
|
||||||
filename=filename,
|
filename=filename,
|
||||||
withDoctest=with_doctest,
|
withDoctest=with_doctest,
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,12 @@ import contextlib
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
import tokenize
|
import tokenize
|
||||||
from typing import Any, Dict, Generator, List, Optional, Tuple
|
from typing import Any
|
||||||
|
from typing import Dict
|
||||||
|
from typing import Generator
|
||||||
|
from typing import List
|
||||||
|
from typing import Optional
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
import flake8
|
import flake8
|
||||||
from flake8 import defaults
|
from flake8 import defaults
|
||||||
|
|
@ -25,7 +30,7 @@ _LogicalMapping = List[Tuple[int, Tuple[int, int]]]
|
||||||
_Logical = Tuple[List[str], List[str], _LogicalMapping]
|
_Logical = Tuple[List[str], List[str], _LogicalMapping]
|
||||||
|
|
||||||
|
|
||||||
class FileProcessor(object):
|
class FileProcessor:
|
||||||
"""Processes a file and holdes state.
|
"""Processes a file and holdes state.
|
||||||
|
|
||||||
This processes a file by generating tokens, logical and physical lines,
|
This processes a file by generating tokens, logical and physical lines,
|
||||||
|
|
@ -349,7 +354,7 @@ class FileProcessor(object):
|
||||||
|
|
||||||
def _readlines_py2(self):
|
def _readlines_py2(self):
|
||||||
# type: () -> List[str]
|
# type: () -> List[str]
|
||||||
with open(self.filename, "rU") as fd:
|
with open(self.filename) as fd:
|
||||||
return fd.readlines()
|
return fd.readlines()
|
||||||
|
|
||||||
def _readlines_py3(self):
|
def _readlines_py3(self):
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,15 @@
|
||||||
"""Statistic collection logic for Flake8."""
|
"""Statistic collection logic for Flake8."""
|
||||||
import collections
|
import collections
|
||||||
from typing import Dict, Generator, List, Optional
|
from typing import Dict
|
||||||
|
from typing import Generator
|
||||||
|
from typing import List
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
if False: # `typing.TYPE_CHECKING` was introduced in 3.5.2
|
if False: # `typing.TYPE_CHECKING` was introduced in 3.5.2
|
||||||
from flake8.style_guide import Violation
|
from flake8.style_guide import Violation
|
||||||
|
|
||||||
|
|
||||||
class Statistics(object):
|
class Statistics:
|
||||||
"""Manager of aggregated statistics for a run of Flake8."""
|
"""Manager of aggregated statistics for a run of Flake8."""
|
||||||
|
|
||||||
def __init__(self): # type: () -> None
|
def __init__(self): # type: () -> None
|
||||||
|
|
@ -102,7 +105,7 @@ class Key(collections.namedtuple("Key", ["filename", "code"])):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class Statistic(object):
|
class Statistic:
|
||||||
"""Simple wrapper around the logic of each statistic.
|
"""Simple wrapper around the logic of each statistic.
|
||||||
|
|
||||||
Instead of maintaining a simple but potentially hard to reason about
|
Instead of maintaining a simple but potentially hard to reason about
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,15 @@ import enum
|
||||||
import itertools
|
import itertools
|
||||||
import linecache
|
import linecache
|
||||||
import logging
|
import logging
|
||||||
from typing import Dict, Generator, List, Match, Optional, Sequence, Set
|
from typing import Dict
|
||||||
from typing import Tuple, Union
|
from typing import Generator
|
||||||
|
from typing import List
|
||||||
|
from typing import Match
|
||||||
|
from typing import Optional
|
||||||
|
from typing import Sequence
|
||||||
|
from typing import Set
|
||||||
|
from typing import Tuple
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
from flake8 import defaults
|
from flake8 import defaults
|
||||||
from flake8 import statistics
|
from flake8 import statistics
|
||||||
|
|
@ -142,7 +149,7 @@ class Violation(_Violation):
|
||||||
return self.line_number in line_numbers
|
return self.line_number in line_numbers
|
||||||
|
|
||||||
|
|
||||||
class DecisionEngine(object):
|
class DecisionEngine:
|
||||||
"""A class for managing the decision process around violations.
|
"""A class for managing the decision process around violations.
|
||||||
|
|
||||||
This contains the logic for whether a violation should be reported or
|
This contains the logic for whether a violation should be reported or
|
||||||
|
|
@ -318,7 +325,7 @@ class DecisionEngine(object):
|
||||||
return decision
|
return decision
|
||||||
|
|
||||||
|
|
||||||
class StyleGuideManager(object):
|
class StyleGuideManager:
|
||||||
"""Manage multiple style guides for a single run."""
|
"""Manage multiple style guides for a single run."""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
|
@ -437,7 +444,7 @@ class StyleGuideManager(object):
|
||||||
guide.add_diff_ranges(diffinfo)
|
guide.add_diff_ranges(diffinfo)
|
||||||
|
|
||||||
|
|
||||||
class StyleGuide(object):
|
class StyleGuide:
|
||||||
"""Manage a Flake8 user's style guide."""
|
"""Manage a Flake8 user's style guide."""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
|
@ -463,7 +470,7 @@ class StyleGuide(object):
|
||||||
|
|
||||||
def __repr__(self): # type: () -> str
|
def __repr__(self): # type: () -> str
|
||||||
"""Make it easier to debug which StyleGuide we're using."""
|
"""Make it easier to debug which StyleGuide we're using."""
|
||||||
return "<StyleGuide [{}]>".format(self.filename)
|
return f"<StyleGuide [{self.filename}]>"
|
||||||
|
|
||||||
def copy(self, filename=None, extend_ignore_with=None):
|
def copy(self, filename=None, extend_ignore_with=None):
|
||||||
# type: (Optional[str], Optional[Sequence[str]]) -> StyleGuide
|
# type: (Optional[str], Optional[Sequence[str]]) -> StyleGuide
|
||||||
|
|
@ -499,7 +506,7 @@ class StyleGuide(object):
|
||||||
return utils.matches_filename(
|
return utils.matches_filename(
|
||||||
filename,
|
filename,
|
||||||
patterns=[self.filename],
|
patterns=[self.filename],
|
||||||
log_message='{!r} does %(whether)smatch "%(path)s"'.format(self),
|
log_message=f'{self!r} does %(whether)smatch "%(path)s"',
|
||||||
logger=LOG,
|
logger=LOG,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,16 @@ import platform
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import tokenize
|
import tokenize
|
||||||
from typing import Callable, Dict, Generator, List, Optional, Pattern
|
from typing import Callable
|
||||||
from typing import Sequence, Set, Tuple, Union
|
from typing import Dict
|
||||||
|
from typing import Generator
|
||||||
|
from typing import List
|
||||||
|
from typing import Optional
|
||||||
|
from typing import Pattern
|
||||||
|
from typing import Sequence
|
||||||
|
from typing import Set
|
||||||
|
from typing import Tuple
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
from flake8 import exceptions
|
from flake8 import exceptions
|
||||||
from flake8._compat import lru_cache
|
from flake8._compat import lru_cache
|
||||||
|
|
@ -21,7 +29,7 @@ if False: # `typing.TYPE_CHECKING` was introduced in 3.5.2
|
||||||
DIFF_HUNK_REGEXP = re.compile(r"^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$")
|
DIFF_HUNK_REGEXP = re.compile(r"^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$")
|
||||||
COMMA_SEPARATED_LIST_RE = re.compile(r"[,\s]")
|
COMMA_SEPARATED_LIST_RE = re.compile(r"[,\s]")
|
||||||
LOCAL_PLUGIN_LIST_RE = re.compile(r"[,\t\n\r\f\v]")
|
LOCAL_PLUGIN_LIST_RE = re.compile(r"[,\t\n\r\f\v]")
|
||||||
string_types = (str, type(u""))
|
string_types = (str, type(""))
|
||||||
|
|
||||||
|
|
||||||
def parse_comma_separated_list(value, regexp=COMMA_SEPARATED_LIST_RE):
|
def parse_comma_separated_list(value, regexp=COMMA_SEPARATED_LIST_RE):
|
||||||
|
|
@ -204,18 +212,12 @@ def _stdin_get_value_py3(): # type: () -> str
|
||||||
@lru_cache(maxsize=1)
|
@lru_cache(maxsize=1)
|
||||||
def stdin_get_value(): # type: () -> str
|
def stdin_get_value(): # type: () -> str
|
||||||
"""Get and cache it so plugins can use it."""
|
"""Get and cache it so plugins can use it."""
|
||||||
if sys.version_info < (3,):
|
return _stdin_get_value_py3()
|
||||||
return sys.stdin.read()
|
|
||||||
else:
|
|
||||||
return _stdin_get_value_py3()
|
|
||||||
|
|
||||||
|
|
||||||
def stdin_get_lines(): # type: () -> List[str]
|
def stdin_get_lines(): # type: () -> List[str]
|
||||||
"""Return lines of stdin split according to file splitting."""
|
"""Return lines of stdin split according to file splitting."""
|
||||||
if sys.version_info < (3,):
|
return list(io.StringIO(stdin_get_value()))
|
||||||
return list(io.BytesIO(stdin_get_value()))
|
|
||||||
else:
|
|
||||||
return list(io.StringIO(stdin_get_value()))
|
|
||||||
|
|
||||||
|
|
||||||
def parse_unified_diff(diff=None):
|
def parse_unified_diff(diff=None):
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
from some.module.that.has.nested.sub.modules import ClassWithVeryVeryVeryVeryLongName # noqa: E501,F401
|
from some.module.that.has.nested.sub.modules import \
|
||||||
|
ClassWithVeryVeryVeryVeryLongName # noqa: E501,F401
|
||||||
|
|
||||||
# ClassWithVeryVeryVeryVeryLongName()
|
# ClassWithVeryVeryVeryVeryLongName()
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
"""Module that is off sys.path by default, for testing local-plugin-paths."""
|
"""Module that is off sys.path by default, for testing local-plugin-paths."""
|
||||||
|
|
||||||
|
|
||||||
class ExtensionTestPlugin2(object):
|
class ExtensionTestPlugin2:
|
||||||
"""Extension test plugin in its own directory."""
|
"""Extension test plugin in its own directory."""
|
||||||
|
|
||||||
name = 'ExtensionTestPlugin2'
|
name = 'ExtensionTestPlugin2'
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
"""Integration tests for the checker submodule."""
|
"""Integration tests for the checker submodule."""
|
||||||
import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import checker
|
from flake8 import checker
|
||||||
|
|
@ -20,7 +21,7 @@ EXPECTED_RESULT_PHYSICAL_LINE = (
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class PluginClass(object):
|
class PluginClass:
|
||||||
"""Simple file plugin class yielding the expected report."""
|
"""Simple file plugin class yielding the expected report."""
|
||||||
|
|
||||||
name = 'test'
|
name = 'test'
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
"""Integration tests for the main entrypoint of flake8."""
|
"""Integration tests for the main entrypoint of flake8."""
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import utils
|
from flake8 import utils
|
||||||
|
|
@ -280,13 +280,13 @@ def test_obtaining_args_from_sys_argv_when_not_explicity_provided(capsys):
|
||||||
def test_cli_config_option_respected(tmp_path):
|
def test_cli_config_option_respected(tmp_path):
|
||||||
"""Test --config is used."""
|
"""Test --config is used."""
|
||||||
config = tmp_path / "flake8.ini"
|
config = tmp_path / "flake8.ini"
|
||||||
config.write_text(u"""\
|
config.write_text("""\
|
||||||
[flake8]
|
[flake8]
|
||||||
ignore = F401
|
ignore = F401
|
||||||
""")
|
""")
|
||||||
|
|
||||||
py_file = tmp_path / "t.py"
|
py_file = tmp_path / "t.py"
|
||||||
py_file.write_text(u"import os\n")
|
py_file.write_text("import os\n")
|
||||||
|
|
||||||
_call_main(["--config", str(config), str(py_file)])
|
_call_main(["--config", str(config), str(py_file)])
|
||||||
|
|
||||||
|
|
@ -294,13 +294,13 @@ ignore = F401
|
||||||
def test_cli_isolated_overrides_config_option(tmp_path):
|
def test_cli_isolated_overrides_config_option(tmp_path):
|
||||||
"""Test --isolated overrides --config."""
|
"""Test --isolated overrides --config."""
|
||||||
config = tmp_path / "flake8.ini"
|
config = tmp_path / "flake8.ini"
|
||||||
config.write_text(u"""\
|
config.write_text("""\
|
||||||
[flake8]
|
[flake8]
|
||||||
ignore = F401
|
ignore = F401
|
||||||
""")
|
""")
|
||||||
|
|
||||||
py_file = tmp_path / "t.py"
|
py_file = tmp_path / "t.py"
|
||||||
py_file.write_text(u"import os\n")
|
py_file.write_text("import os\n")
|
||||||
|
|
||||||
_call_main(["--isolated", "--config", str(config), str(py_file)], retv=1)
|
_call_main(["--isolated", "--config", str(config), str(py_file)], retv=1)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
"""Integration tests for plugin loading."""
|
"""Integration tests for plugin loading."""
|
||||||
from flake8.main import application
|
from flake8.main import application
|
||||||
|
|
||||||
|
|
||||||
LOCAL_PLUGIN_CONFIG = 'tests/fixtures/config_files/local-plugin.ini'
|
LOCAL_PLUGIN_CONFIG = 'tests/fixtures/config_files/local-plugin.ini'
|
||||||
LOCAL_PLUGIN_PATH_CONFIG = 'tests/fixtures/config_files/local-plugin-path.ini'
|
LOCAL_PLUGIN_PATH_CONFIG = 'tests/fixtures/config_files/local-plugin-path.ini'
|
||||||
|
|
||||||
|
|
||||||
class ExtensionTestPlugin(object):
|
class ExtensionTestPlugin:
|
||||||
"""Extension test plugin."""
|
"""Extension test plugin."""
|
||||||
|
|
||||||
name = 'ExtensionTestPlugin'
|
name = 'ExtensionTestPlugin'
|
||||||
|
|
@ -24,7 +23,7 @@ class ExtensionTestPlugin(object):
|
||||||
parser.add_option('--anopt')
|
parser.add_option('--anopt')
|
||||||
|
|
||||||
|
|
||||||
class ReportTestPlugin(object):
|
class ReportTestPlugin:
|
||||||
"""Report test plugin."""
|
"""Report test plugin."""
|
||||||
|
|
||||||
name = 'ReportTestPlugin'
|
name = 'ReportTestPlugin'
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
"""Tests for the Application class."""
|
"""Tests for the Application class."""
|
||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8.main import application as app
|
from flake8.main import application as app
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
"""Tests for the BaseFormatter object."""
|
"""Tests for the BaseFormatter object."""
|
||||||
import argparse
|
import argparse
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import style_guide
|
from flake8 import style_guide
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
"""Tests for the Manager object for FileCheckers."""
|
"""Tests for the Manager object for FileCheckers."""
|
||||||
import errno
|
import errno
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import checker
|
from flake8 import checker
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,8 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""Tests for the ConfigFileFinder."""
|
"""Tests for the ConfigFileFinder."""
|
||||||
import configparser
|
import configparser
|
||||||
import os
|
import os
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8.options import config
|
from flake8.options import config
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
"""Tests for our debugging module."""
|
"""Tests for our debugging module."""
|
||||||
import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8.main import debug
|
from flake8.main import debug
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
"""Unit tests for the FileChecker class."""
|
"""Unit tests for the FileChecker class."""
|
||||||
import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
import flake8
|
import flake8
|
||||||
|
|
@ -50,7 +51,7 @@ def test_nonexistent_file():
|
||||||
def test_raises_exception_on_failed_plugin(tmp_path, default_options):
|
def test_raises_exception_on_failed_plugin(tmp_path, default_options):
|
||||||
"""Checks that a failing plugin results in PluginExecutionFailed."""
|
"""Checks that a failing plugin results in PluginExecutionFailed."""
|
||||||
foobar = tmp_path / 'foobar.py'
|
foobar = tmp_path / 'foobar.py'
|
||||||
foobar.write_text(u"I exist!") # Create temp file
|
foobar.write_text("I exist!") # Create temp file
|
||||||
plugin = {
|
plugin = {
|
||||||
"name": "failure",
|
"name": "failure",
|
||||||
"plugin_name": "failure", # Both are necessary
|
"plugin_name": "failure", # Both are necessary
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
"""Tests for the FileProcessor class."""
|
"""Tests for the FileProcessor class."""
|
||||||
import ast
|
import ast
|
||||||
import tokenize
|
import tokenize
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import processor
|
from flake8 import processor
|
||||||
|
|
@ -46,7 +46,7 @@ def test_read_lines_unknown_encoding(tmpdir, default_options):
|
||||||
|
|
||||||
@pytest.mark.parametrize('first_line', [
|
@pytest.mark.parametrize('first_line', [
|
||||||
'\xEF\xBB\xBF"""Module docstring."""\n',
|
'\xEF\xBB\xBF"""Module docstring."""\n',
|
||||||
u'\uFEFF"""Module docstring."""\n',
|
'\uFEFF"""Module docstring."""\n',
|
||||||
])
|
])
|
||||||
def test_strip_utf_bom(first_line, default_options):
|
def test_strip_utf_bom(first_line, default_options):
|
||||||
r"""Verify that we strip '\xEF\xBB\xBF' from the first line."""
|
r"""Verify that we strip '\xEF\xBB\xBF' from the first line."""
|
||||||
|
|
@ -58,7 +58,7 @@ def test_strip_utf_bom(first_line, default_options):
|
||||||
|
|
||||||
@pytest.mark.parametrize('lines, expected', [
|
@pytest.mark.parametrize('lines, expected', [
|
||||||
(['\xEF\xBB\xBF"""Module docstring."""\n'], False),
|
(['\xEF\xBB\xBF"""Module docstring."""\n'], False),
|
||||||
([u'\uFEFF"""Module docstring."""\n'], False),
|
(['\uFEFF"""Module docstring."""\n'], False),
|
||||||
(['#!/usr/bin/python', '# flake8 is great', 'a = 1'], False),
|
(['#!/usr/bin/python', '# flake8 is great', 'a = 1'], False),
|
||||||
(['#!/usr/bin/python', '# flake8: noqa', 'a = 1'], True),
|
(['#!/usr/bin/python', '# flake8: noqa', 'a = 1'], True),
|
||||||
(['#!/usr/bin/python', '# flake8:noqa', 'a = 1'], True),
|
(['#!/usr/bin/python', '# flake8:noqa', 'a = 1'], True),
|
||||||
|
|
@ -130,7 +130,7 @@ def test_noqa_line_for(default_options):
|
||||||
])
|
])
|
||||||
|
|
||||||
for i in range(1, 4):
|
for i in range(1, 4):
|
||||||
assert file_processor.noqa_line_for(i) == 'Line {}\n'.format(i)
|
assert file_processor.noqa_line_for(i) == f'Line {i}\n'
|
||||||
|
|
||||||
|
|
||||||
def test_noqa_line_for_continuation(default_options):
|
def test_noqa_line_for_continuation(default_options):
|
||||||
|
|
@ -182,7 +182,7 @@ def test_next_line(default_options):
|
||||||
])
|
])
|
||||||
|
|
||||||
for i in range(1, 4):
|
for i in range(1, 4):
|
||||||
assert file_processor.next_line() == 'Line {}'.format(i)
|
assert file_processor.next_line() == f'Line {i}'
|
||||||
assert file_processor.line_number == i
|
assert file_processor.line_number == i
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
"""Tests for get_local_plugins."""
|
"""Tests for get_local_plugins."""
|
||||||
import mock
|
from unittest import mock
|
||||||
|
|
||||||
from flake8.options import config
|
from flake8.options import config
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
"""Tests for Flake8's legacy API."""
|
"""Tests for Flake8's legacy API."""
|
||||||
import argparse
|
import argparse
|
||||||
import os.path
|
import os.path
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8.api import legacy as api
|
from flake8.api import legacy as api
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
"""Unit tests for flake8.options.config.MergedConfigParser."""
|
"""Unit tests for flake8.options.config.MergedConfigParser."""
|
||||||
import os
|
import os
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8.options import config
|
from flake8.options import config
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
"""Unit tests for flake8.options.manager.Option."""
|
"""Unit tests for flake8.options.manager.Option."""
|
||||||
import functools
|
import functools
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8.options import manager
|
from flake8.options import manager
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
"""Unit tests for flake.options.manager.OptionManager."""
|
"""Unit tests for flake.options.manager.OptionManager."""
|
||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import utils
|
from flake8 import utils
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
"""Tests for flake8.plugins.manager.Plugin."""
|
"""Tests for flake8.plugins.manager.Plugin."""
|
||||||
import argparse
|
import argparse
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import exceptions
|
from flake8 import exceptions
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
"""Tests for flake8.plugins.manager.PluginManager."""
|
"""Tests for flake8.plugins.manager.PluginManager."""
|
||||||
import mock
|
from unittest import mock
|
||||||
|
|
||||||
from flake8._compat import importlib_metadata
|
from flake8._compat import importlib_metadata
|
||||||
from flake8.plugins import manager
|
from flake8.plugins import manager
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
"""Tests for flake8.plugins.manager.PluginTypeManager."""
|
"""Tests for flake8.plugins.manager.PluginTypeManager."""
|
||||||
import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import exceptions
|
from flake8 import exceptions
|
||||||
|
|
|
||||||
|
|
@ -111,8 +111,8 @@ def test_statistic_for_retrieves_more_than_one_value():
|
||||||
"""Show this works for more than a couple statistic values."""
|
"""Show this works for more than a couple statistic values."""
|
||||||
aggregator = stats.Statistics()
|
aggregator = stats.Statistics()
|
||||||
for i in range(50):
|
for i in range(50):
|
||||||
aggregator.record(make_error(code='E1{:02d}'.format(i)))
|
aggregator.record(make_error(code=f'E1{i:02d}'))
|
||||||
aggregator.record(make_error(code='W2{:02d}'.format(i)))
|
aggregator.record(make_error(code=f'W2{i:02d}'))
|
||||||
|
|
||||||
statistics = list(aggregator.statistics_for('E'))
|
statistics = list(aggregator.statistics_for('E'))
|
||||||
assert len(statistics) == 50
|
assert len(statistics) == 50
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
"""Tests for the flake8.style_guide.StyleGuide class."""
|
"""Tests for the flake8.style_guide.StyleGuide class."""
|
||||||
import argparse
|
import argparse
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import statistics
|
from flake8 import statistics
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ import io
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import mock
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import exceptions
|
from flake8 import exceptions
|
||||||
|
|
@ -242,7 +242,7 @@ def test_filenames_from_exclude_doesnt_exclude_directory_names(tmpdir):
|
||||||
|
|
||||||
def test_parameters_for_class_plugin():
|
def test_parameters_for_class_plugin():
|
||||||
"""Verify that we can retrieve the parameters for a class plugin."""
|
"""Verify that we can retrieve the parameters for a class plugin."""
|
||||||
class FakeCheck(object):
|
class FakeCheck:
|
||||||
def __init__(self, tree):
|
def __init__(self, tree):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
@ -268,7 +268,7 @@ def test_parameters_for_function_plugin():
|
||||||
|
|
||||||
def read_diff_file(filename):
|
def read_diff_file(filename):
|
||||||
"""Read the diff file in its entirety."""
|
"""Read the diff file in its entirety."""
|
||||||
with open(filename, 'r') as fd:
|
with open(filename) as fd:
|
||||||
content = fd.read()
|
content = fd.read()
|
||||||
return content
|
return content
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
"""Tests for the flake8.style_guide.Violation class."""
|
"""Tests for the flake8.style_guide.Violation class."""
|
||||||
import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import style_guide
|
from flake8 import style_guide
|
||||||
|
|
|
||||||
3
tox.ini
3
tox.ini
|
|
@ -31,7 +31,6 @@ deps =
|
||||||
flake8
|
flake8
|
||||||
flake8-bugbear
|
flake8-bugbear
|
||||||
flake8-docstrings>=1.3.1
|
flake8-docstrings>=1.3.1
|
||||||
flake8-import-order>=0.9
|
|
||||||
flake8-typing-imports>=1.1
|
flake8-typing-imports>=1.1
|
||||||
pep8-naming
|
pep8-naming
|
||||||
commands =
|
commands =
|
||||||
|
|
@ -141,5 +140,3 @@ exclude =
|
||||||
.cache,
|
.cache,
|
||||||
.eggs
|
.eggs
|
||||||
max-complexity = 10
|
max-complexity = 10
|
||||||
import-order-style = google
|
|
||||||
application-import-names = flake8
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue