- 
          
 - 
                Notifications
    
You must be signed in to change notification settings  - Fork 33.3k
 
          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.
               
              
                Outdated
          
            Show resolved
            Hide resolved
         | 
||
| - ".github/workflows/mypy-clinic.yml" | ||
                
      
                  hugovk marked this conversation as resolved.
               
              
                Outdated
          
            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.
               
              
                Outdated
          
            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.
               
              
                Outdated
          
            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.