diff options
Diffstat (limited to 'giscanner')
-rw-r--r-- | giscanner/docwriter.py | 18 | ||||
-rw-r--r-- | giscanner/girparser.py | 2 | ||||
-rw-r--r-- | giscanner/introspectablepass.py | 3 | ||||
-rw-r--r-- | giscanner/transformer.py | 3 |
4 files changed, 19 insertions, 7 deletions
diff --git a/giscanner/docwriter.py b/giscanner/docwriter.py index 786da80d..e4a8f7c5 100644 --- a/giscanner/docwriter.py +++ b/giscanner/docwriter.py @@ -793,7 +793,11 @@ class DocFormatterPython(DocFormatterIntrospectableBase): return fundamental_types.get(name, name) def format_type(self, type_, link=False): - if isinstance(type_, (ast.List, ast.Array)): + if isinstance(type_, ast.List): + if type_.name == 'Gio.ListModel': + return 'Gio.ListModel(item_type=' + self.format_type(type_.element_type) + ')' + return '[' + self.format_type(type_.element_type) + ']' + elif isinstance(type_, ast.Array): return '[' + self.format_type(type_.element_type) + ']' elif isinstance(type_, ast.Map): return '{%s: %s}' % (self.format_type(type_.key_type), @@ -930,10 +934,14 @@ class DocFormatterGjs(DocFormatterIntrospectableBase): return fundamental_types.get(name, name) def format_type(self, type_, link=False): - if isinstance(type_, ast.Array) and \ - type_.element_type.target_fundamental in ('gint8', 'guint8'): - return 'ByteArray' - elif isinstance(type_, (ast.List, ast.Array)): + if isinstance(type_, ast.Array): + if type_.element_type.target_fundamental in ('gint8', 'guint8'): + return 'ByteArray' + else: + return 'Array(' + self.format_type(type_.element_type, link) + ')' + elif isinstance(type_, ast.List): + if type_.name == 'Gio.ListModel': + return 'Gio.ListModel({item_type: ' + self.format_type(type_.element_type) + '})' return 'Array(' + self.format_type(type_.element_type, link) + ')' elif isinstance(type_, ast.Map): return '{%s: %s}' % (self.format_type(type_.key_type, link), diff --git a/giscanner/girparser.py b/giscanner/girparser.py index 35206a41..d31b26cf 100644 --- a/giscanner/girparser.py +++ b/giscanner/girparser.py @@ -492,7 +492,7 @@ class GIRParser(object): if ctype is None: return ast.TypeUnknown() return ast.Type(ctype=ctype) - elif name in ['GLib.List', 'GLib.SList']: + elif name in ['GLib.List', 'GLib.SList', 'Gio.ListModel']: subchild = self._find_first_child(typenode, list(map(_corens, ('callback', 'array', ' varargs', 'type')))) diff --git a/giscanner/introspectablepass.py b/giscanner/introspectablepass.py index e2056b42..8ac50064 100644 --- a/giscanner/introspectablepass.py +++ b/giscanner/introspectablepass.py @@ -89,7 +89,8 @@ class IntrospectablePass(object): return if (isinstance(node.type, (ast.List, ast.Array)) - and node.type.element_type == ast.TYPE_ANY): + and node.type.element_type == ast.TYPE_ANY + and not (isinstance(node.type, ast.List) and node.type.name == 'Gio.ListModel')): self._parameter_warning(parent, node, "Missing (element-type) annotation") parent.introspectable = False return diff --git a/giscanner/transformer.py b/giscanner/transformer.py index bcabdedc..7f230a20 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -698,6 +698,9 @@ raise ValueError.""" elif base in ('GHashTable', 'GLib.HashTable', 'GObject.HashTable'): return ast.Map(ast.TYPE_ANY, ast.TYPE_ANY, ctype=ctype, is_const=is_const, complete_ctype=complete_ctype) + elif base in ('GListModel', 'Gio.ListModel'): + return ast.List('Gio.ListModel', ast.TYPE_ANY, ctype=ctype, + is_const=is_const, complete_ctype=complete_ctype) return None def create_type_from_ctype_string(self, ctype, is_const=False, |