Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable Ruff PLR (Pylint Refactor) #13307

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ select = [
"I", # isort
"N", # pep8-naming
"PGH", # pygrep-hooks
"PLR", # Pylint Refactor
"RUF", # Ruff-specific and unused-noqa
"TRY", # tryceratops
"UP", # pyupgrade
Expand Down Expand Up @@ -117,6 +118,10 @@ ignore = [
# Used for direct, non-subclass type comparison, for example: `type(val) is str`
# see https://github.com/astral-sh/ruff/issues/6465
"E721", # Do not compare types, use `isinstance()`
# Leave the size and complexity of tests to human interpretation
"PLR09", # Too many ...
# Too many magic number "2" that are preferable inline. https://github.com/astral-sh/ruff/issues/10009
"PLR2004", # Magic value used in comparison, consider replacing `{value}` with a constant variable
# Mostly from scripts and tests, it's ok to have messages passed directly to exceptions
"TRY003", # Avoid specifying long messages outside the exception class
# Slower and more verbose https://github.com/astral-sh/ruff/issues/7871
Expand Down
5 changes: 3 additions & 2 deletions scripts/create_baseline_stubs.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import subprocess
import sys
import urllib.parse
from http import HTTPStatus
from importlib.metadata import distribution

import aiohttp
Expand Down Expand Up @@ -72,7 +73,7 @@ def run_ruff(stub_dir: str) -> None:
async def get_project_urls_from_pypi(project: str, session: aiohttp.ClientSession) -> dict[str, str]:
pypi_root = f"https://pypi.org/pypi/{urllib.parse.quote(project)}"
async with session.get(f"{pypi_root}/json") as response:
if response.status != 200:
if response.status != HTTPStatus.OK:
return {}
j: dict[str, dict[str, dict[str, str]]]
j = await response.json()
Expand Down Expand Up @@ -107,7 +108,7 @@ async def get_upstream_repo_url(project: str) -> str | None:
# truncate to https://site.com/user/repo
upstream_repo_url = "/".join(url.split("/")[:5])
async with session.get(upstream_repo_url) as response:
if response.status == 200:
if response.status == HTTPStatus.OK:
return upstream_repo_url
return None

Expand Down
2 changes: 1 addition & 1 deletion scripts/stubsabot.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ async def get_github_repo_info(session: aiohttp.ClientSession, stub_info: StubMe
assert len(Path(url_path).parts) == 2
github_tags_info_url = f"https://api.github.com/repos/{url_path}/tags"
async with session.get(github_tags_info_url, headers=get_github_api_headers()) as response:
if response.status == 200:
if response.status == HTTPStatus.OK:
tags: list[dict[str, Any]] = await response.json()
assert isinstance(tags, list)
return GitHubInfo(repo_path=url_path, tags=tags)
Expand Down
2 changes: 2 additions & 0 deletions stdlib/asyncio/__init__.pyi
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# ruff: noqa: PLR5501 # This condition is so big, it's clearer to keep to platform condition in two blocks
# Can't NOQA on a specific line: https://github.com/plinss/flake8-noqa/issues/22
import sys
from collections.abc import Awaitable, Coroutine, Generator
from typing import Any, TypeVar
Expand Down
4 changes: 2 additions & 2 deletions stdlib/importlib/readers.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ from typing import Literal, NoReturn, TypeVar
from typing_extensions import Never

if sys.version_info >= (3, 11):
import importlib.resources.abc as abc
from importlib.resources import abc
else:
import importlib.abc as abc
from importlib import abc

if sys.version_info >= (3, 10):
if sys.version_info >= (3, 11):
Expand Down
31 changes: 15 additions & 16 deletions stdlib/mmap.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -33,23 +33,22 @@ PAGESIZE: int
class mmap:
if sys.platform == "win32":
def __init__(self, fileno: int, length: int, tagname: str | None = ..., access: int = ..., offset: int = ...) -> None: ...
elif sys.version_info >= (3, 13):
def __new__(
cls,
fileno: int,
length: int,
flags: int = ...,
prot: int = ...,
access: int = ...,
offset: int = ...,
*,
trackfd: bool = True,
) -> Self: ...
else:
if sys.version_info >= (3, 13):
def __new__(
cls,
fileno: int,
length: int,
flags: int = ...,
prot: int = ...,
access: int = ...,
offset: int = ...,
*,
trackfd: bool = True,
) -> Self: ...
else:
def __new__(
cls, fileno: int, length: int, flags: int = ..., prot: int = ..., access: int = ..., offset: int = ...
) -> Self: ...
def __new__(
cls, fileno: int, length: int, flags: int = ..., prot: int = ..., access: int = ..., offset: int = ...
) -> Self: ...

def close(self) -> None: ...
def flush(self, offset: int = ..., size: int = ...) -> None: ...
Expand Down
2 changes: 1 addition & 1 deletion stubs/gevent/gevent/libev/corecext.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ from types import TracebackType
from typing import Any
from typing_extensions import ParamSpec

import gevent.libev.watcher as watcher
from gevent._ffi.loop import _ErrorHandler
from gevent._types import _Callback
from gevent.libev import watcher

# this c extension is only available on posix
if sys.platform != "win32":
Expand Down
2 changes: 1 addition & 1 deletion stubs/gevent/gevent/libev/corecffi.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import sys
from _typeshed import FileDescriptor
from collections.abc import Sequence

import gevent.libev.watcher as watcher
from gevent._ffi.loop import AbstractLoop
from gevent.libev import watcher

def get_version() -> str: ...
def get_header_version() -> str: ...
Expand Down
2 changes: 1 addition & 1 deletion stubs/gevent/gevent/libuv/loop.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import sys
from _typeshed import FileDescriptor
from typing import NamedTuple

import gevent.libuv.watcher as watcher
from gevent._ffi.loop import AbstractLoop
from gevent._types import _IoWatcher
from gevent.libuv import watcher

def get_version() -> str: ...
def get_header_version() -> str: ...
Expand Down
21 changes: 10 additions & 11 deletions tests/runtests.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,19 +104,18 @@ def main() -> None:
if folder == "stdlib":
print("\nRunning stubtest...")
stubtest_result = subprocess.run([sys.executable, "tests/stubtest_stdlib.py", stub])
elif run_stubtest:
print("\nRunning stubtest...")
stubtest_result = subprocess.run([sys.executable, "tests/stubtest_third_party.py", stub])
else:
if run_stubtest:
print("\nRunning stubtest...")
stubtest_result = subprocess.run([sys.executable, "tests/stubtest_third_party.py", stub])
else:
print(
colored(
f"\nSkipping stubtest for {stub!r}..."
+ "\nNOTE: Running third-party stubtest involves downloading and executing arbitrary code from PyPI."
+ f"\nOnly run stubtest if you trust the {stub!r} package.",
"yellow",
)
print(
colored(
f"\nSkipping stubtest for {stub!r}..."
+ "\nNOTE: Running third-party stubtest involves downloading and executing arbitrary code from PyPI."
+ f"\nOnly run stubtest if you trust the {stub!r} package.",
"yellow",
)
)
else:
print(colored("\nSkipping stubtest since mypy failed.", "yellow"))

Expand Down
Loading