From 8a24c19d2621e0de6a4429a039dc75d3a761acd4 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Tue, 6 Dec 2022 07:56:03 +0000 Subject: [PATCH] Fix syntax error for misplaced Doxygen comment after struct/class member. Fix syntax error using Doxygen member groups syntax, "///*}", when used after final struct/class member. Issue #1636 --- CHANGES.current | 5 +++++ Examples/test-suite/doxygen_misc_constructs.i | 7 +++++++ Examples/test-suite/doxygen_parsing.i | 10 ++++++++++ .../test-suite/java/doxygen_misc_constructs_runme.java | 10 ++++++++++ Examples/test-suite/java/doxygen_parsing_runme.java | 8 ++++++++ Source/CParse/parser.y | 6 +++++- 6 files changed, 45 insertions(+), 1 deletion(-) diff --git a/CHANGES.current b/CHANGES.current index c03b376c8..6581c4073 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -7,6 +7,11 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/ Version 4.2.0 (in progress) =========================== +2022-12-06: wsfulton + #1636 Fix syntax error for misplaced Doxygen comment after struct/class member. + Fix syntax error using Doxygen member groups syntax, "///*}", when used after + final struct/class member. + 2022-12-05: wsfulton #2023 Fix garbled Doxygen post comments in parameter lists. Fix syntax error parsing a trailing Doxygen comment in parameter lists. diff --git a/Examples/test-suite/doxygen_misc_constructs.i b/Examples/test-suite/doxygen_misc_constructs.i index 4702a9ae0..395d73513 100644 --- a/Examples/test-suite/doxygen_misc_constructs.i +++ b/Examples/test-suite/doxygen_misc_constructs.i @@ -176,6 +176,13 @@ */ void showList() { } + /** Incorrectly documented members, these should be post document comments, Github issue #1636 */ + struct IncorrectlyDocumentedMembers + { + int aaaa; //! really for bbbb value + int bbbb; //! not for bbbb value, is quietly ignored by Doxygen and SWIG + }; + #include "doxygen_misc_constructs.h" %} diff --git a/Examples/test-suite/doxygen_parsing.i b/Examples/test-suite/doxygen_parsing.i index 9df0097ec..ddb9961ad 100644 --- a/Examples/test-suite/doxygen_parsing.i +++ b/Examples/test-suite/doxygen_parsing.i @@ -133,6 +133,16 @@ struct SomeAnotherStruct } }; +struct Foo1636 +{ + ///@{ + /// groupmember1 description + int groupmember1; + /// groupmember2 description + int groupmember2; + ///@} +}; + struct Foo1750 { /// @name Group name diff --git a/Examples/test-suite/java/doxygen_misc_constructs_runme.java b/Examples/test-suite/java/doxygen_misc_constructs_runme.java index 765baeb01..3735042ce 100644 --- a/Examples/test-suite/java/doxygen_misc_constructs_runme.java +++ b/Examples/test-suite/java/doxygen_misc_constructs_runme.java @@ -199,6 +199,16 @@ public class doxygen_misc_constructs_runme { "
\n" + " And this is not a list item any more.\n" + ""); + + wantedComments.put("doxygen_misc_constructs.IncorrectlyDocumentedMembers", + " Incorrectly documented members, these should be post document comments, Github issue #1636"); + + wantedComments.put("doxygen_misc_constructs.IncorrectlyDocumentedMembers.setBbbb(int)", + " really for bbbb value"); + + wantedComments.put("doxygen_misc_constructs.IncorrectlyDocumentedMembers.getBbbb()", + " really for bbbb value"); + wantedComments.put("doxygen_misc_constructs.doxygen_misc_constructs.isNoSpaceValidA()", " This comment without space after '*' is valid in Doxygen.\n" + "\n" + diff --git a/Examples/test-suite/java/doxygen_parsing_runme.java b/Examples/test-suite/java/doxygen_parsing_runme.java index 2c76001db..05828f226 100644 --- a/Examples/test-suite/java/doxygen_parsing_runme.java +++ b/Examples/test-suite/java/doxygen_parsing_runme.java @@ -132,6 +132,14 @@ public class doxygen_parsing_runme { wantedComments.put("doxygen_parsing.doxygen_parsingConstants.CONSTANT_VALUE", "The constant comment \n" + ""); + wantedComments.put("doxygen_parsing.Foo1636.getGroupmember1()", + "groupmember1 description"); + wantedComments.put("doxygen_parsing.Foo1636.setGroupmember1(int)", + "groupmember1 description"); + wantedComments.put("doxygen_parsing.Foo1636.getGroupmember2()", + "groupmember2 description"); + wantedComments.put("doxygen_parsing.Foo1636.setGroupmember2(int)", + "groupmember2 description"); wantedComments.put("doxygen_parsing.Foo1750.getA()", ""); wantedComments.put("doxygen_parsing.Foo1750.getB()", diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y index f5311373c..d723616e7 100644 --- a/Source/CParse/parser.y +++ b/Source/CParse/parser.y @@ -4668,7 +4668,11 @@ cpp_members : cpp_member cpp_members { } else { $$ = $2; } - } + } + | cpp_member DOXYGENSTRING { + /* Misplaced doxygen string after a member, quietly ignore, like Doxygen does */ + $$ = $1; + } | EXTEND LBRACE { extendmode = 1; if (cplus_mode != CPLUS_PUBLIC) {