pygobject / pygobject-stubs

PEP 561 Typing Stubs for PyGObject
GNU Lesser General Public License v2.1
74 stars 26 forks source link

Type of user_data is None throughout the stubs #149

Open cebtenzzre opened 1 year ago

cebtenzzre commented 1 year ago

user_data is obviously meant for the programmer to put arbitrary data in for later use. At runtime it may be any type. However, user_data is typed as None throughout these stubs.

Here is an example:

import gi

gi.require_version('Gtk', '3.0')

from gi.repository import Gtk

it = Gtk.TreeIter()
it.user_data = 0

This is what mypy says:

$ mypy repr.py
repr.py:8: error: Incompatible types in assignment (expression has type "int", variable has type "None")  [assignment]
Found 1 error in 1 file (checked 1 source file)

Here is the definition of TreeIter in _Gtk3.pyi:

class TreeIter(GObject.GBoxed):
    stamp: int = ...
    user_data: None = ...
    user_data2: None = ...
    user_data3: None = ...
    def copy(self) -> TreeIter: ...
    def free(self) -> None: ...
matperc commented 1 year ago

It seems that there is no distinction between void and void* at introspection level, but I think we can avoid to use None where it makes no sense and use Any instead. I will work on this