-
-
Notifications
You must be signed in to change notification settings - Fork 32.2k
gh-104050: Run mypy on clinic.py
in CI
#104421
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
Changes from 7 commits
ca8532b
d2ec2ef
801af38
00183ff
4bdd409
632843b
f7e7a25
510e08b
773c2ba
6c7ecb9
717ee47
62669d1
ddd0843
b7158db
9fcd87f
010f0dd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
name: Run mypy on Tools/clinic | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
paths: | ||
- "Tools/clinic/**/*" | ||
AlexWaygood marked this conversation as resolved.
Show resolved
Hide resolved
|
||
- ".github/workflows/mypy-clinic.yml" | ||
hugovk marked this conversation as resolved.
Show resolved
Hide resolved
|
||
workflow_dispatch: | ||
|
||
permissions: | ||
contents: read | ||
|
||
env: | ||
PIP_DISABLE_PIP_VERSION_CHECK: 1 | ||
FORCE_COLOR: 1 | ||
TERM: xterm-256color # needed for FORCE_COLOR to work on mypy on Ubuntu, see https://github.com/python/mypy/issues/13817 | ||
|
||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
mypy: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 10 | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: "3.11" | ||
cache: pip | ||
cache-dependency-path: .github/workflows/mypy-clinic.yml | ||
- run: pip install mypy==1.3.0 | ||
AlexWaygood marked this conversation as resolved.
Show resolved
Hide resolved
|
||
- run: mypy --config-file Tools/clinic/mypy.ini |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -26,7 +26,9 @@ | |
import traceback | ||
import types | ||
|
||
from collections.abc import Callable | ||
from types import * | ||
hugovk marked this conversation as resolved.
Show resolved
Hide resolved
|
||
from typing import Any, NamedTuple, Type | ||
|
||
# TODO: | ||
# | ||
|
@@ -67,19 +69,26 @@ def __repr__(self): | |
|
||
sig_end_marker = '--' | ||
|
||
Appender = Callable[[str], None] | ||
AlexWaygood marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Outputter = Callable[[None], str] | ||
|
||
_text_accumulator_nt = collections.namedtuple("_text_accumulator", "text append output") | ||
class _TextAccumulator(NamedTuple): | ||
text: list[str] | ||
append: Appender | ||
output: Outputter | ||
|
||
def _text_accumulator(): | ||
text = [] | ||
def output(): | ||
s = ''.join(text) | ||
text.clear() | ||
return s | ||
return _text_accumulator_nt(text, text.append, output) | ||
return _TextAccumulator(text, text.append, output) | ||
|
||
|
||
text_accumulator_nt = collections.namedtuple("text_accumulator", "text append") | ||
class TextAccumulator(NamedTuple): | ||
AlexWaygood marked this conversation as resolved.
Show resolved
Hide resolved
|
||
text: list[str] | ||
append: Appender | ||
|
||
def text_accumulator(): | ||
""" | ||
|
@@ -93,7 +102,7 @@ def text_accumulator(): | |
empties the accumulator. | ||
""" | ||
text, append, output = _text_accumulator() | ||
return text_accumulator_nt(append, output) | ||
return TextAccumulator(append, output) | ||
|
||
|
||
def warn_or_fail(fail=False, *args, filename=None, line_number=None): | ||
|
@@ -1915,8 +1924,10 @@ def dump(self): | |
# maps strings to Language objects. | ||
# "languages" maps the name of the language ("C", "Python"). | ||
# "extensions" maps the file extension ("c", "py"). | ||
LangDict = dict[str, Callable[[str], Language]] | ||
|
||
languages = { 'C': CLanguage, 'Python': PythonLanguage } | ||
extensions = { name: CLanguage for name in "c cc cpp cxx h hh hpp hxx".split() } | ||
extensions: LangDict = { name: CLanguage for name in "c cc cpp cxx h hh hpp hxx".split() } | ||
extensions['py'] = PythonLanguage | ||
|
||
|
||
|
@@ -2558,15 +2569,15 @@ class CConverter(metaclass=CConverterAutoRegister): | |
""" | ||
|
||
# The C name to use for this variable. | ||
name = None | ||
name: str | None = None | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So, these |
||
|
||
# The Python name to use for this variable. | ||
py_name = None | ||
py_name: str | None = None | ||
|
||
# The C type to use for this variable. | ||
# 'type' should be a Python string specifying the type, e.g. "int". | ||
# If this is a pointer type, the type string should end with ' *'. | ||
type = None | ||
type: str | None = None | ||
|
||
# The Python default value for this parameter, as a Python value. | ||
# Or the magic value "unspecified" if there is no default. | ||
|
@@ -2577,15 +2588,15 @@ class CConverter(metaclass=CConverterAutoRegister): | |
|
||
# If not None, default must be isinstance() of this type. | ||
# (You can also specify a tuple of types.) | ||
default_type = None | ||
default_type: Type[Any] | tuple[Type[Any], ...] | None = None | ||
AlexWaygood marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
# "default" converted into a C value, as a string. | ||
# Or None if there is no default. | ||
c_default = None | ||
c_default: str | None = None | ||
|
||
# "default" converted into a Python value, as a string. | ||
# Or None if there is no default. | ||
py_default = None | ||
py_default: str | None = None | ||
|
||
# The default value used to initialize the C variable when | ||
# there is no default, but not specifying a default may | ||
|
@@ -2597,11 +2608,11 @@ class CConverter(metaclass=CConverterAutoRegister): | |
# | ||
# This value is specified as a string. | ||
# Every non-abstract subclass should supply a valid value. | ||
c_ignored_default = 'NULL' | ||
c_ignored_default: str = 'NULL' | ||
|
||
# The C converter *function* to be used, if any. | ||
# (If this is not None, format_unit must be 'O&'.) | ||
converter = None | ||
converter: str | None = None | ||
|
||
# Should Argument Clinic add a '&' before the name of | ||
# the variable when passing it into the _impl function? | ||
|
@@ -3414,7 +3425,7 @@ class robuffer: pass | |
def str_converter_key(types, encoding, zeroes): | ||
return (frozenset(types), bool(encoding), bool(zeroes)) | ||
|
||
str_converter_argument_map = {} | ||
str_converter_argument_map: dict[str, str] = {} | ||
|
||
class str_converter(CConverter): | ||
type = 'const char *' | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I usually put my mypy config in a |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
[mypy] | ||
pretty = True | ||
enable_error_code = ignore-without-code | ||
disallow_any_generics = True | ||
strict_concatenate = True | ||
warn_redundant_casts = True | ||
warn_unused_ignores = True | ||
warn_unused_configs = True | ||
files = Tools/clinic/ |
Uh oh!
There was an error while loading. Please reload this page.