mirror of
https://github.com/pre-commit/pre-commit-hooks.git
synced 2026-04-05 11:36:54 +00:00
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
This commit is contained in:
parent
72ad6dc953
commit
f4cd1ba0d6
813 changed files with 66015 additions and 58839 deletions
|
|
@ -1,24 +1,31 @@
|
|||
# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
|
||||
# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
|
||||
|
||||
"""Python source expertise for coverage.py"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os.path
|
||||
import types
|
||||
import zipimport
|
||||
|
||||
from typing import Iterable, TYPE_CHECKING
|
||||
from typing import Iterable
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from coverage import env
|
||||
from coverage.exceptions import CoverageException, NoSource
|
||||
from coverage.files import canonical_filename, relative_filename, zip_location
|
||||
from coverage.misc import expensive, isolate_module, join_regex
|
||||
from coverage.exceptions import CoverageException
|
||||
from coverage.exceptions import NoSource
|
||||
from coverage.files import canonical_filename
|
||||
from coverage.files import relative_filename
|
||||
from coverage.files import zip_location
|
||||
from coverage.misc import expensive
|
||||
from coverage.misc import isolate_module
|
||||
from coverage.misc import join_regex
|
||||
from coverage.parser import PythonParser
|
||||
from coverage.phystokens import source_token_lines, source_encoding
|
||||
from coverage.phystokens import source_encoding
|
||||
from coverage.phystokens import source_token_lines
|
||||
from coverage.plugin import FileReporter
|
||||
from coverage.types import TArc, TLineNo, TMorf, TSourceTokenLines
|
||||
from coverage.types import TArc
|
||||
from coverage.types import TLineNo
|
||||
from coverage.types import TMorf
|
||||
from coverage.types import TSourceTokenLines
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from coverage import Coverage
|
||||
|
|
@ -32,17 +39,17 @@ def read_python_source(filename: str) -> bytes:
|
|||
Returns bytes.
|
||||
|
||||
"""
|
||||
with open(filename, "rb") as f:
|
||||
with open(filename, 'rb') as f:
|
||||
source = f.read()
|
||||
|
||||
return source.replace(b"\r\n", b"\n").replace(b"\r", b"\n")
|
||||
return source.replace(b'\r\n', b'\n').replace(b'\r', b'\n')
|
||||
|
||||
|
||||
def get_python_source(filename: str) -> str:
|
||||
"""Return the source code, as unicode."""
|
||||
base, ext = os.path.splitext(filename)
|
||||
if ext == ".py" and env.WINDOWS:
|
||||
exts = [".py", ".pyw"]
|
||||
if ext == '.py' and env.WINDOWS:
|
||||
exts = ['.py', '.pyw']
|
||||
else:
|
||||
exts = [ext]
|
||||
|
||||
|
|
@ -63,12 +70,12 @@ def get_python_source(filename: str) -> str:
|
|||
raise NoSource(f"No source for code: '{filename}'.")
|
||||
|
||||
# Replace \f because of http://bugs.python.org/issue19035
|
||||
source_bytes = source_bytes.replace(b"\f", b" ")
|
||||
source = source_bytes.decode(source_encoding(source_bytes), "replace")
|
||||
source_bytes = source_bytes.replace(b'\f', b' ')
|
||||
source = source_bytes.decode(source_encoding(source_bytes), 'replace')
|
||||
|
||||
# Python code should always end with a line with a newline.
|
||||
if source and source[-1] != "\n":
|
||||
source += "\n"
|
||||
if source and source[-1] != '\n':
|
||||
source += '\n'
|
||||
|
||||
return source
|
||||
|
||||
|
|
@ -103,11 +110,11 @@ def source_for_file(filename: str) -> str:
|
|||
file to attribute it to.
|
||||
|
||||
"""
|
||||
if filename.endswith(".py"):
|
||||
if filename.endswith('.py'):
|
||||
# .py files are themselves source files.
|
||||
return filename
|
||||
|
||||
elif filename.endswith((".pyc", ".pyo")):
|
||||
elif filename.endswith(('.pyc', '.pyo')):
|
||||
# Bytecode files probably have source files near them.
|
||||
py_filename = filename[:-1]
|
||||
if os.path.exists(py_filename):
|
||||
|
|
@ -115,7 +122,7 @@ def source_for_file(filename: str) -> str:
|
|||
return py_filename
|
||||
if env.WINDOWS:
|
||||
# On Windows, it could be a .pyw file.
|
||||
pyw_filename = py_filename + "w"
|
||||
pyw_filename = py_filename + 'w'
|
||||
if os.path.exists(pyw_filename):
|
||||
return pyw_filename
|
||||
# Didn't find source, but it's probably the .py file we want.
|
||||
|
|
@ -127,12 +134,12 @@ def source_for_file(filename: str) -> str:
|
|||
|
||||
def source_for_morf(morf: TMorf) -> str:
|
||||
"""Get the source filename for the module-or-file `morf`."""
|
||||
if hasattr(morf, "__file__") and morf.__file__:
|
||||
if hasattr(morf, '__file__') and morf.__file__:
|
||||
filename = morf.__file__
|
||||
elif isinstance(morf, types.ModuleType):
|
||||
# A module should have had .__file__, otherwise we can't use it.
|
||||
# This could be a PEP-420 namespace package.
|
||||
raise CoverageException(f"Module {morf} has no file")
|
||||
raise CoverageException(f'Module {morf} has no file')
|
||||
else:
|
||||
filename = morf
|
||||
|
||||
|
|
@ -157,11 +164,11 @@ class PythonFileReporter(FileReporter):
|
|||
fname = canonical_filename(filename)
|
||||
super().__init__(fname)
|
||||
|
||||
if hasattr(morf, "__name__"):
|
||||
name = morf.__name__.replace(".", os.sep)
|
||||
if os.path.basename(filename).startswith("__init__."):
|
||||
name += os.sep + "__init__"
|
||||
name += ".py"
|
||||
if hasattr(morf, '__name__'):
|
||||
name = morf.__name__.replace('.', os.sep)
|
||||
if os.path.basename(filename).startswith('__init__.'):
|
||||
name += os.sep + '__init__'
|
||||
name += '.py'
|
||||
else:
|
||||
name = relative_filename(filename)
|
||||
self.relname = name
|
||||
|
|
@ -171,7 +178,7 @@ class PythonFileReporter(FileReporter):
|
|||
self._excluded = None
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"<PythonFileReporter {self.filename!r}>"
|
||||
return f'<PythonFileReporter {self.filename!r}>'
|
||||
|
||||
def relative_filename(self) -> str:
|
||||
return self.relname
|
||||
|
|
@ -183,7 +190,7 @@ class PythonFileReporter(FileReporter):
|
|||
if self._parser is None:
|
||||
self._parser = PythonParser(
|
||||
filename=self.filename,
|
||||
exclude=self.coverage._exclude_regex("exclude"),
|
||||
exclude=self.coverage._exclude_regex('exclude'),
|
||||
)
|
||||
self._parser.parse_source()
|
||||
return self._parser
|
||||
|
|
@ -244,7 +251,7 @@ class PythonFileReporter(FileReporter):
|
|||
_, ext = os.path.splitext(self.filename)
|
||||
|
||||
# Anything named *.py* should be Python.
|
||||
if ext.startswith(".py"):
|
||||
if ext.startswith('.py'):
|
||||
return True
|
||||
# A file with no extension should be Python.
|
||||
if not ext:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue