summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2020-02-21 13:37:58 +0000
committerEmmanuele Bassi <ebassi@gmail.com>2020-04-24 14:25:21 +0000
commitffe3e435e0b7943a0872034223b5f6ea02258ffa (patch)
treef143b167dd03c8f409577d0fcad81e2b4557b8a2
parentb4c058bba4d95ae10e1e4238f9417fe954f97795 (diff)
downloadgobject-introspection-ffe3e435e0b7943a0872034223b5f6ea02258ffa.tar.gz
Generate appropriate docs for ListModel with element-type
We need to special case the ListModel container type in the documentation writer so that we don't fall back into array/list automatic conversion in the code snippets.
-rw-r--r--giscanner/docwriter.py18
-rw-r--r--tests/scanner/Regress-1.0-Gjs-expected/Regress.test_list_model_object.page4
-rw-r--r--tests/scanner/Regress-1.0-Python-expected/Regress.test_list_model_object.page4
3 files changed, 17 insertions, 9 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/tests/scanner/Regress-1.0-Gjs-expected/Regress.test_list_model_object.page b/tests/scanner/Regress-1.0-Gjs-expected/Regress.test_list_model_object.page
index a9dd90d7..618ca7e3 100644
--- a/tests/scanner/Regress-1.0-Gjs-expected/Regress.test_list_model_object.page
+++ b/tests/scanner/Regress-1.0-Gjs-expected/Regress.test_list_model_object.page
@@ -9,14 +9,14 @@
<link xref="index" group="function" type="guide"/>
<api:function>
<api:returns>
- <api:type>Array(Regress.TestObj)</api:type>
+ <api:type>Gio.ListModel({item_type: Regress.TestObj})</api:type>
</api:returns>
<api:name>regress_test_list_model_object</api:name>
</api:function>
</info>
<title>Regress.test_list_model_object</title>
<synopsis><code mime="text/x-gjs">
-function test_list_model_object(): Array(<link xref="Regress.TestObj">Regress.TestObj</link>) {
+function test_list_model_object(): Gio.ListModel({item_type: Regress.TestObj}) {
// Gjs wrapper for regress_test_list_model_object()
}
</code></synopsis>
diff --git a/tests/scanner/Regress-1.0-Python-expected/Regress.test_list_model_object.page b/tests/scanner/Regress-1.0-Python-expected/Regress.test_list_model_object.page
index a4382c9d..d9dca201 100644
--- a/tests/scanner/Regress-1.0-Python-expected/Regress.test_list_model_object.page
+++ b/tests/scanner/Regress-1.0-Python-expected/Regress.test_list_model_object.page
@@ -9,14 +9,14 @@
<link xref="index" group="function" type="guide"/>
<api:function>
<api:returns>
- <api:type>[Regress.TestObj]</api:type>
+ <api:type>Gio.ListModel(item_type=Regress.TestObj)</api:type>
</api:returns>
<api:name>regress_test_list_model_object</api:name>
</api:function>
</info>
<title>Regress.test_list_model_object</title>
<synopsis><code mime="text/x-python">
-@returns([Regress.TestObj])
+@returns(Gio.ListModel(item_type=Regress.TestObj))
def test_list_model_object():
# Python wrapper for regress_test_list_model_object()
</code></synopsis>