Skip to content
Snippets Groups Projects
Commit 03792c1ed341 authored by Matt Harbison's avatar Matt Harbison
Browse files

contrib: add a script for adding vendored type stubs to typeshed

I really hate this, but pytype doesn't support PEP 561 and doesn't seem to have
the equivalent of `MYPYPATH` to point to custom stubs.  Ignoring the vendored
stubs isn't necessarily harmful, but pytype has been choking on the vendored
attr package after pytype 2022.03.29 with errors like this:

    File "/mnt/c/Users/Matt/hg/mercurial/linelog.py", line 52, in __iter__: Built-in function iter was called with the wrong arguments [wrong-arg-types]
             Expected: (collection: bytearray)
      Actually passed: (collection: mercurial.thirdparty.attr._make._CountingAttr)

    File "/mnt/c/Users/Matt/hg/mercurial/dirstateutils/v2.py", line 143, in pack: Built-in function len was called with the wrong arguments [wrong-arg-types]
             Expected: (obj: Sized)
      Actually passed: (obj: mercurial.thirdparty.attr._make._CountingAttr)
      Attributes of protocol Sized are not implemented on mercurial.thirdparty.attr._make._CountingAttr: __len__
    File "/mnt/c/Users/Matt/hg/mercurial/dirstateutils/v2.py", line 144, in pack: No attribute 'rfind' on mercurial.thirdparty.attr._make._CountingAttr [attribute-error]
    File "/mnt/c/Users/Matt/hg/mercurial/dirstateutils/v2.py", line 146, in pack: Built-in function len was called with the wrong arguments [wrong-arg-types]
             Expected: (obj: Sized)
      Actually passed: (obj: mercurial.thirdparty.attr._make._CountingAttr)
      Attributes of protocol Sized are not implemented on mercurial.thirdparty.attr._make._CountingAttr: __len__
    File "/mnt/c/Users/Matt/hg/mercurial/dirstateutils/v2.py", line 152, in pack: No attribute 'v2_data' on mercurial.thirdparty.attr._make._CountingAttr [attribute-error]

    File "/mnt/c/Users/Matt/hg/mercurial/util.py", line 2817, in go: unsupported operand type(s) for /: 'count: mercurial.thirdparty.attr._make._CountingAttr' and 'float: float' [unsupported-operands]
      No attribute '__truediv__' on 'count: mercurial.thirdparty.attr._make._CountingAttr' or '__rtruediv__' on 'float: float'
    Called from (traceback):
      line 2981, in __bytes__

This is essentially the same hack we've been using in TortoiseHg to add the
vendored PyQt5 stubs.  What I don't understand is pytype *still* generates *.pyi
files under .pytype/pyi/mercurial/thirdparty/attr, even when the package is
explicitly ignored in the pytype command line args.  But it avoids the errors,
which means we aren't stuck on pytype==2022.03.29.

https://github.com/google/pytype/issues/151
parent 3e1869751cfe
No related branches found
No related tags found
2 merge requests!485branching: merge default into stable,!326Update to pytype 2022.11.18
#!/bin/bash
set -e
set -u
# Find the python3 setup that would run pytype
PYTYPE=`which pytype`
PYTHON3=`head -n1 ${PYTYPE} | sed -s 's/#!//'`
# Existing stubs that pytype processes live here
TYPESHED=$(${PYTHON3} -c "import pytype; print(pytype.__path__[0])")/typeshed/stubs
HG_STUBS=${TYPESHED}/mercurial
echo "Patching typeshed at $HG_STUBS"
rm -rf ${HG_STUBS}
mkdir -p ${HG_STUBS}
cat > ${HG_STUBS}/METADATA.toml <<EOF
version = "0.1"
EOF
mkdir -p ${HG_STUBS}/mercurial/cext ${HG_STUBS}/mercurial/thirdparty/attr
touch ${HG_STUBS}/mercurial/__init__.pyi
touch ${HG_STUBS}/mercurial/cext/__init__.pyi
touch ${HG_STUBS}/mercurial/thirdparty/__init__.pyi
ln -sf $(hg root)/mercurial/cext/*.{pyi,typed} \
${HG_STUBS}/mercurial/cext
ln -sf $(hg root)/mercurial/thirdparty/attr/*.{pyi,typed} \
${HG_STUBS}/mercurial/thirdparty/attr
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment