[gi-docgen: 1/2] utils: fix failure to generate link to error domain




commit c3a1a5a1d9b46258ea5c95fb30f9128c928b9f57
Author: Takashi Sakamoto <o-takashi sakamocchi jp>
Date:   Sat Apr 16 15:29:48 2022 +0900

    utils: fix failure to generate link to error domain
    
    The gir.ast.Enumeration class is inherited by gir.ast.ErrorDomain class,
    therefore isinstance(t, Enumeration) matches to both enumeration and
    error domain type. This causes failure to link for error domain.
    
    ```
    WARNING: Invalid fragment for 'GLib.FileError': it should be enum
    [error@GLib.FileError].
    ^~~~~~~~~~~~~~~~~~~~~
    ```
    
    The Enumeration class is inherited by gir.ast.BitField class as well,
    however it doesn't matter since the evaluation priority to bitfield is
    higher than enumeration. Nevertheless, it might have potential weak to
    future change (e.g. reorder the branches carelessly).
    
    This commit fixes the bug to match Enumeration at first, then judge
    bitfield/error-domain/enumeration by detecting these classes.

 gidocgen/utils.py | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
---
diff --git a/gidocgen/utils.py b/gidocgen/utils.py
index dd2544f..bda6072 100644
--- a/gidocgen/utils.py
+++ b/gidocgen/utils.py
@@ -305,8 +305,6 @@ class LinkGenerator:
             # invalid links
             if isinstance(t, gir.Alias):
                 type_fragment = 'alias'
-            elif isinstance(t, gir.BitField):
-                type_fragment = 'flags'
             elif isinstance(t, gir.Callback):
                 type_fragment = 'callback'
             elif isinstance(t, gir.Class):
@@ -314,9 +312,12 @@ class LinkGenerator:
             elif isinstance(t, gir.Constant):
                 type_fragment = 'const'
             elif isinstance(t, gir.Enumeration):
-                type_fragment = 'enum'
-            elif isinstance(t, gir.ErrorDomain):
-                type_fragment = 'error'
+                if isinstance(t, gir.BitField):
+                    type_fragment = 'flags'
+                elif isinstance(t, gir.ErrorDomain):
+                    type_fragment = 'error'
+                else:
+                    type_fragment = 'enum'
             elif isinstance(t, gir.Interface):
                 type_fragment = 'iface'
             elif isinstance(t, gir.Record) or isinstance(t, gir.Union):


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]