From 90de4346c33576ad9b21c6a2f2ee5e713c6432aa Mon Sep 17 00:00:00 2001 From: Avasam Date: Tue, 27 Aug 2024 10:56:17 -0400 Subject: [PATCH] Disallow blanket and unused suppressions --- pkg_resources/__init__.py | 2 +- pyproject.toml | 4 ---- ruff.toml | 6 ++++-- setuptools/_distutils/compat/py38.py | 2 +- setuptools/config/expand.py | 16 ++++++++++------ setuptools/config/pyprojecttoml.py | 9 +++++---- .../tests/config/test_apply_pyprojecttoml.py | 2 +- setuptools/tests/test_editable_install.py | 8 ++++---- 8 files changed, 26 insertions(+), 23 deletions(-) diff --git a/pkg_resources/__init__.py b/pkg_resources/__init__.py index 4e9b83d83d..f1f0ef2535 100644 --- a/pkg_resources/__init__.py +++ b/pkg_resources/__init__.py @@ -2777,7 +2777,7 @@ def load( if require: # We could pass `env` and `installer` directly, # but keeping `*args` and `**kwargs` for backwards compatibility - self.require(*args, **kwargs) # type: ignore + self.require(*args, **kwargs) # type: ignore[arg-type] return self.resolve() def resolve(self) -> _ResolvedEntryPoint: diff --git a/pyproject.toml b/pyproject.toml index fbcd4b48ef..cec8c8b54b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -211,7 +211,3 @@ formats = "zip" [tool.setuptools_scm] - - -[tool.pytest-enabler.mypy] -# Disabled due to jaraco/skeleton#143 diff --git a/ruff.toml b/ruff.toml index b55b4e8067..19210a86c2 100644 --- a/ruff.toml +++ b/ruff.toml @@ -12,12 +12,14 @@ extend-select = [ # local "ANN2", # missing-return-type-* - "FA", # flake8-future-annotations "F404", # late-future-import + "FA", # flake8-future-annotations "I", # isort + "PGH", # pygrep-hooks (blanket-* rules) "PYI", # flake8-pyi + "RUF100", # unused-noqa + "TRY", # tryceratops "UP", # pyupgrade - "TRY", "YTT", # flake8-2020 ] ignore = [ diff --git a/setuptools/_distutils/compat/py38.py b/setuptools/_distutils/compat/py38.py index 03ec73ef0e..afe5345553 100644 --- a/setuptools/_distutils/compat/py38.py +++ b/setuptools/_distutils/compat/py38.py @@ -26,7 +26,7 @@ def removeprefix(self, prefix): def aix_platform(osname, version, release): try: - import _aix_support # type: ignore + import _aix_support return _aix_support.aix_platform() except ImportError: diff --git a/setuptools/config/expand.py b/setuptools/config/expand.py index e11bcf9b42..813cb6a25e 100644 --- a/setuptools/config/expand.py +++ b/setuptools/config/expand.py @@ -203,7 +203,8 @@ def _load_spec(spec: ModuleSpec, module_name: str) -> ModuleType: return sys.modules[name] module = importlib.util.module_from_spec(spec) sys.modules[name] = module # cache (it also ensures `==` works on loaded items) - spec.loader.exec_module(module) # type: ignore + assert spec.loader is not None + spec.loader.exec_module(module) return module @@ -285,10 +286,10 @@ def find_packages( from setuptools.discovery import construct_package_dir - if namespaces: - from setuptools.discovery import PEP420PackageFinder as PackageFinder + if not namespaces: + from setuptools.discovery import PackageFinder else: - from setuptools.discovery import PackageFinder # type: ignore + from setuptools.discovery import PEP420PackageFinder as PackageFinder root_dir = root_dir or os.curdir where = kwargs.pop('where', ['.']) @@ -352,14 +353,17 @@ def canonic_data_files( ] -def entry_points(text: str, text_source="entry-points") -> dict[str, dict]: +def entry_points( + text: str, text_source: str = "entry-points" +) -> dict[str, dict[str, str]]: """Given the contents of entry-points file, process it into a 2-level dictionary (``dict[str, dict[str, str]]``). The first level keys are entry-point groups, the second level keys are entry-point names, and the second level values are references to objects (that correspond to the entry-point value). """ - parser = ConfigParser(default_section=None, delimiters=("=",)) # type: ignore + # TODO: Explain why passing None is fine here when ConfigParser.default_section expects to be str + parser = ConfigParser(default_section=None, delimiters=("=",)) # type: ignore[call-overload] parser.optionxform = str # case sensitive parser.read_string(text, text_source) groups = {k: dict(v.items()) for k, v in parser.items()} diff --git a/setuptools/config/pyprojecttoml.py b/setuptools/config/pyprojecttoml.py index 3449a4bfb7..0975bb32ab 100644 --- a/setuptools/config/pyprojecttoml.py +++ b/setuptools/config/pyprojecttoml.py @@ -44,8 +44,8 @@ def validate(config: dict, filepath: StrPath) -> bool: trove_classifier = validator.FORMAT_FUNCTIONS.get("trove-classifier") if hasattr(trove_classifier, "_disable_download"): - # Improve reproducibility by default. See issue 31 for validate-pyproject. - trove_classifier._disable_download() # type: ignore + # Improve reproducibility by default. See https://github.com/abravalheri/validate-pyproject/issues/31 + trove_classifier._disable_download() # type: ignore[union-attr] try: return validator.validate(config) @@ -327,7 +327,7 @@ def _obtain_readme(self, dist: Distribution) -> dict[str, str] | None: def _obtain_entry_points( self, dist: Distribution, package_dir: Mapping[str, str] - ) -> dict[str, dict] | None: + ) -> dict[str, dict[str, Any]] | None: fields = ("entry-points", "scripts", "gui-scripts") if not any(field in self.dynamic for field in fields): return None @@ -337,7 +337,8 @@ def _obtain_entry_points( return None groups = _expand.entry_points(text) - expanded = {"entry-points": groups} + # Any is str | dict[str, str], but causes variance issues + expanded: dict[str, dict[str, Any]] = {"entry-points": groups} def _set_scripts(field: str, group: str): if group in groups: diff --git a/setuptools/tests/config/test_apply_pyprojecttoml.py b/setuptools/tests/config/test_apply_pyprojecttoml.py index 78959b6454..bc557931b0 100644 --- a/setuptools/tests/config/test_apply_pyprojecttoml.py +++ b/setuptools/tests/config/test_apply_pyprojecttoml.py @@ -17,7 +17,7 @@ from ini2toml.api import LiteTranslator from packaging.metadata import Metadata -import setuptools # noqa ensure monkey patch to metadata +import setuptools # noqa: F401 # ensure monkey patch to metadata from setuptools.command.egg_info import write_requirements from setuptools.config import expand, pyprojecttoml, setupcfg from setuptools.config._apply_pyprojecttoml import _MissingDynamic, _some_attrgetter diff --git a/setuptools/tests/test_editable_install.py b/setuptools/tests/test_editable_install.py index 287367ac18..848288646b 100644 --- a/setuptools/tests/test_editable_install.py +++ b/setuptools/tests/test_editable_install.py @@ -878,9 +878,9 @@ class TestOverallBehaviour: "otherfile.py": "", "mypkg": { "__init__.py": "", - "mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"], # type: ignore + "mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"], # type: ignore[index] }, - "other": FLAT_LAYOUT["mypkg"]["subpackage"], # type: ignore + "other": FLAT_LAYOUT["mypkg"]["subpackage"], # type: ignore[index] }, "namespace": { "pyproject.toml": dedent(PYPROJECT), @@ -888,8 +888,8 @@ class TestOverallBehaviour: "otherfile.py": "", "src": { "mypkg": { - "mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"], # type: ignore - "subpackage": FLAT_LAYOUT["mypkg"]["subpackage"], # type: ignore + "mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"], # type: ignore[index] + "subpackage": FLAT_LAYOUT["mypkg"]["subpackage"], # type: ignore[index] }, }, },