[hawkmoth] [PATCH] parser: fix placement of array brackets

  • From: Bruno Santos <brunomanuelsantos@xxxxxxxxxxxxxxxxxx>
  • To: Jani Nikula <jani@xxxxxxxxxx>, hawkmoth mailing list <hawkmoth@xxxxxxxxxxxxx>
  • Date: Mon, 14 Sep 2020 00:25:36 +0100

Clang understandably splits `char test[10]` in a type `char [10]` and a
variable name `test`. However Sphinx expects the C notation in the
`c:var::` directive so we need to fix that. This was not an issue in
Sphinx 2.

Fixes #17.
---

Hi Jani,

Please note that I have _not_ tested this on Sphinx 2. It's possible
that Sphinx 2 complains about this just like 3 complained about the
previous notation.

Cheers,
Bruno


 hawkmoth/parser.py | 6 ++++++
 test/variable.c    | 5 +++++
 test/variable.rst  | 5 +++++
 3 files changed, 16 insertions(+)

diff --git a/hawkmoth/parser.py b/hawkmoth/parser.py
index d063217..83b67c0 100644
--- a/hawkmoth/parser.py
+++ b/hawkmoth/parser.py
@@ -169,6 +169,12 @@ def _recursive_parse(comments, cursor, nest, compat):
     elif cursor.kind == CursorKind.VAR_DECL:
         fmt = docstr.Type.VAR
 
+        # The dimensions should be applied to the name, not the type.
+        dims = ttype.rsplit(' ', 1)[-1]
+        if dims.startswith('[') and dims.endswith(']'):
+            ttype = ttype.rsplit(' ', 1)[0]
+            name = name + dims
+
         return _result(comment, cursor=cursor, fmt=fmt,
                        nest=nest, name=name, ttype=ttype, compat=compat)
 
diff --git a/test/variable.c b/test/variable.c
index 8860339..3eba8b9 100644
--- a/test/variable.c
+++ b/test/variable.c
@@ -2,3 +2,8 @@
  * This is a variable document.
  */
 static int sheesh;
+
+/**
+ * This is a sized array.
+ */
+const char array[10];
diff --git a/test/variable.rst b/test/variable.rst
index 4efaece..bcf7bad 100644
--- a/test/variable.rst
+++ b/test/variable.rst
@@ -3,3 +3,8 @@
 
    This is a variable document.
 
+
+.. c:var:: const char array[10]
+
+   This is a sized array.
+
-- 
2.28.0


Other related posts: