[pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci
This commit is contained in:
pre-commit-ci[bot] 2024-04-13 00:00:18 +00:00
parent 72ad6dc953
commit f4cd1ba0d6
813 changed files with 66015 additions and 58839 deletions

View file

@ -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: