Doxygen comments formatting fixes for multi-line comments

Also remove stray static method comments from being incorrectly
generated into the PINVOKE class.

Add some missing multi-line tests for static methods, variables and
constants.
This commit is contained in:
William S Fulton 2024-07-29 23:42:43 +01:00
parent 9eb9f5ee1f
commit 37013523af
9 changed files with 118 additions and 36 deletions

View File

@ -42,6 +42,12 @@ int someVar=42;
*/ */
#define CONSTANT_VALUE 4242 #define CONSTANT_VALUE 4242
/**
* A two line
* constant comment
*/
#define CONSTANT_VALUE_TWO_LINE 5353
/// SomeAnotherClass description /// SomeAnotherClass description
class SomeAnotherClass class SomeAnotherClass
{ {
@ -63,6 +69,12 @@ public:
int classAttr3; ///< The class attribute post-comment int classAttr3; ///< The class attribute post-comment
//!< with details //!< with details
/**
* The class attribute comment with
* two lines of comments
*/
int classAttr4;
/** /**
* The class method comment. * The class method comment.
* *
@ -105,6 +117,12 @@ struct SomeAnotherStruct
int structAttr3; ///< The struct attribute post-comment int structAttr3; ///< The struct attribute post-comment
//!< with details //!< with details
/**
* The struct attribute comment with
* two lines of comments
*/
int structAttr4;
/** /**
* The struct method comment * The struct method comment
*/ */
@ -131,6 +149,24 @@ struct SomeAnotherStruct
void structMethodExtended2(int a, int b) void structMethodExtended2(int a, int b)
{ {
} }
/**
* The struct static method one line comment
*/
static void structStaticMethod(int xxx, int yyy)
{
}
/**
* The struct static method with parameters
* Two lines of comments
*
* @param aaa Parameter aaa
* @param bbb Parameter bbb
*/
static void structStaticMethod2(int aaa, int bbb)
{
}
}; };
struct Foo1636 struct Foo1636

View File

@ -5,6 +5,7 @@
/** /**
* Testing comments before enum items * Testing comments before enum items
* Including two line comments
*/ */
enum SomeAnotherEnum enum SomeAnotherEnum
{ {
@ -19,7 +20,12 @@
/** /**
* The comment for the third item * The comment for the third item
*/ */
SOME_ITEM_3 SOME_ITEM_3,
/**
* The comment for the fourth item
* over two lines
*/
SOME_ITEM_4
}; };
/** /**

View File

@ -27,6 +27,7 @@ public class doxygen_parsing_enums_proper_runme {
""); "");
wantedComments.put("doxygen_parsing_enums_proper.SomeAnotherEnum", wantedComments.put("doxygen_parsing_enums_proper.SomeAnotherEnum",
" Testing comments before enum items \n" + " Testing comments before enum items \n" +
" Including two line comments \n" +
" \n" + " \n" +
""); "");
wantedComments.put("doxygen_parsing_enums_proper.SomeAnotherEnum2.SOME_ITEM_30", wantedComments.put("doxygen_parsing_enums_proper.SomeAnotherEnum2.SOME_ITEM_30",
@ -36,6 +37,11 @@ public class doxygen_parsing_enums_proper_runme {
" Testing comments after enum items \n" + " Testing comments after enum items \n" +
" \n" + " \n" +
""); "");
wantedComments.put("doxygen_parsing_enums_proper.SomeAnotherEnum.SOME_ITEM_4",
" The comment for the fourth item \n" +
" over two lines \n" +
" \n" +
"");
wantedComments.put("doxygen_parsing_enums_proper.SomeAnotherEnum.SOME_ITEM_3", wantedComments.put("doxygen_parsing_enums_proper.SomeAnotherEnum.SOME_ITEM_3",
" The comment for the third item \n" + " The comment for the third item \n" +
" \n" + " \n" +

View File

@ -25,6 +25,11 @@ public class doxygen_parsing_enums_simple_runme {
" The comment for the third item \n" + " The comment for the third item \n" +
" \n" + " \n" +
""); "");
wantedComments.put("doxygen_parsing_enums_simple.doxygen_parsing_enums_simpleConstants.SOME_ITEM_4",
" The comment for the fourth item \n" +
" over two lines \n" +
" \n" +
"");
wantedComments.put("doxygen_parsing_enums_simple.doxygen_parsing_enums_simpleConstants.SOME_ITEM_2", wantedComments.put("doxygen_parsing_enums_simple.doxygen_parsing_enums_simpleConstants.SOME_ITEM_2",
" The comment for the second item \n" + " The comment for the second item \n" +
" \n" + " \n" +

View File

@ -35,6 +35,7 @@ public class doxygen_parsing_enums_typesafe_runme {
""); "");
wantedComments.put("doxygen_parsing_enums_typesafe.SomeAnotherEnum", wantedComments.put("doxygen_parsing_enums_typesafe.SomeAnotherEnum",
" Testing comments before enum items \n" + " Testing comments before enum items \n" +
" Including two line comments \n" +
" \n" + " \n" +
""); "");
wantedComments.put("doxygen_parsing_enums_typesafe.SomeAnotherEnum2.SOME_ITEM_10", wantedComments.put("doxygen_parsing_enums_typesafe.SomeAnotherEnum2.SOME_ITEM_10",
@ -44,6 +45,11 @@ public class doxygen_parsing_enums_typesafe_runme {
" The comment for the third item \n" + " The comment for the third item \n" +
" \n" + " \n" +
""); "");
wantedComments.put("doxygen_parsing_enums_typesafe.SomeAnotherEnum.SOME_ITEM_4",
" The comment for the fourth item \n" +
" over two lines \n" +
" \n" +
"");
wantedComments.put("doxygen_parsing_enums_typesafe.SomeAnotherEnum2.SOME_ITEM_30", wantedComments.put("doxygen_parsing_enums_typesafe.SomeAnotherEnum2.SOME_ITEM_30",
"Post comment for the third item \n" + "Post comment for the third item \n" +
""); "");

View File

@ -26,6 +26,11 @@ public class doxygen_parsing_enums_typeunsafe_runme {
" The comment for the third item \n" + " The comment for the third item \n" +
" \n" + " \n" +
""); "");
wantedComments.put("doxygen_parsing_enums_typeunsafe.SomeAnotherEnum.SOME_ITEM_4",
" The comment for the fourth item \n" +
" over two lines \n" +
" \n" +
"");
wantedComments.put("doxygen_parsing_enums_typeunsafe.SomeAnotherEnum.SOME_ITEM_1", wantedComments.put("doxygen_parsing_enums_typeunsafe.SomeAnotherEnum.SOME_ITEM_1",
" The comment for the first item \n" + " The comment for the first item \n" +
" \n" + " \n" +
@ -35,6 +40,7 @@ public class doxygen_parsing_enums_typeunsafe_runme {
""); "");
wantedComments.put("doxygen_parsing_enums_typeunsafe.SomeAnotherEnum", wantedComments.put("doxygen_parsing_enums_typeunsafe.SomeAnotherEnum",
" Testing comments before enum items \n" + " Testing comments before enum items \n" +
" Including two line comments \n" +
" \n" + " \n" +
""); "");
wantedComments.put("doxygen_parsing_enums_typeunsafe.SomeAnotherEnum2", wantedComments.put("doxygen_parsing_enums_typeunsafe.SomeAnotherEnum2",

View File

@ -31,9 +31,17 @@ public class doxygen_parsing_runme {
wantedComments.put("doxygen_parsing.SomeAnotherClass.setClassAttr3(int)", wantedComments.put("doxygen_parsing.SomeAnotherClass.setClassAttr3(int)",
"The class attribute post-comment with details \n" + "The class attribute post-comment with details \n" +
""); "");
wantedComments.put("doxygen_parsing.SomeAnotherClass.setClassAttr4(int)",
" The class attribute comment with \n" +
" two lines of comments \n" +
"");
wantedComments.put("doxygen_parsing.SomeAnotherStruct.setStructAttr3(int)", wantedComments.put("doxygen_parsing.SomeAnotherStruct.setStructAttr3(int)",
"The struct attribute post-comment with details \n" + "The struct attribute post-comment with details \n" +
""); "");
wantedComments.put("doxygen_parsing.SomeAnotherStruct.setStructAttr4(int)",
" The struct attribute comment with \n" +
" two lines of comments \n" +
"");
wantedComments.put("doxygen_parsing.SomeAnotherClass.classMethodExtended2(int, int)", wantedComments.put("doxygen_parsing.SomeAnotherClass.classMethodExtended2(int, int)",
" The class method with parameter \n" + " The class method with parameter \n" +
" \n" + " \n" +
@ -90,6 +98,10 @@ public class doxygen_parsing_runme {
wantedComments.put("doxygen_parsing.SomeAnotherStruct.getStructAttr3()", wantedComments.put("doxygen_parsing.SomeAnotherStruct.getStructAttr3()",
"The struct attribute post-comment with details \n" + "The struct attribute post-comment with details \n" +
""); "");
wantedComments.put("doxygen_parsing.SomeAnotherStruct.getStructAttr4()",
" The struct attribute comment with \n" +
" two lines of comments \n" +
"");
wantedComments.put("doxygen_parsing.doxygen_parsing.getSomeVar()", wantedComments.put("doxygen_parsing.doxygen_parsing.getSomeVar()",
" The var comment \n" + " The var comment \n" +
" \n" + " \n" +
@ -114,6 +126,10 @@ public class doxygen_parsing_runme {
wantedComments.put("doxygen_parsing.SomeAnotherClass.getClassAttr3()", wantedComments.put("doxygen_parsing.SomeAnotherClass.getClassAttr3()",
"The class attribute post-comment with details \n" + "The class attribute post-comment with details \n" +
""); "");
wantedComments.put("doxygen_parsing.SomeAnotherClass.getClassAttr4()",
" The class attribute comment with \n" +
" two lines of comments \n" +
"");
wantedComments.put("doxygen_parsing.SomeAnotherClass.classMethod()", wantedComments.put("doxygen_parsing.SomeAnotherClass.classMethod()",
" The class method comment.<br>\n" + " The class method comment.<br>\n" +
" <br>\n" + " <br>\n" +
@ -126,12 +142,28 @@ public class doxygen_parsing_runme {
" @param b Parameter b \n" + " @param b Parameter b \n" +
" \n" + " \n" +
""); "");
wantedComments.put("doxygen_parsing.SomeAnotherStruct.structStaticMethod(int, int)",
" The struct static method one line comment \n" +
" \n" +
"");
wantedComments.put("doxygen_parsing.SomeAnotherStruct.structStaticMethod2(int, int)",
" The struct static method with parameters \n" +
" Two lines of comments \n" +
" \n" +
" @param aaa Parameter aaa \n" +
" @param bbb Parameter bbb \n" +
" \n" +
"");
wantedComments.put("doxygen_parsing.SomeAnotherClass.setClassAttr2(int)", wantedComments.put("doxygen_parsing.SomeAnotherClass.setClassAttr2(int)",
"The class attribute post-comment \n" + "The class attribute post-comment \n" +
""); "");
wantedComments.put("doxygen_parsing.doxygen_parsingConstants.CONSTANT_VALUE", wantedComments.put("doxygen_parsing.doxygen_parsingConstants.CONSTANT_VALUE",
"The constant comment \n" + "The constant comment \n" +
""); "");
wantedComments.put("doxygen_parsing.doxygen_parsingConstants.CONSTANT_VALUE_TWO_LINE",
" A two line \n" +
" constant comment \n" +
"");
wantedComments.put("doxygen_parsing.Foo1636.getGroupmember1()", wantedComments.put("doxygen_parsing.Foo1636.getGroupmember1()",
"groupmember1 description"); "groupmember1 description");
wantedComments.put("doxygen_parsing.Foo1636.setGroupmember1(int)", wantedComments.put("doxygen_parsing.Foo1636.setGroupmember1(int)",

View File

@ -1212,9 +1212,9 @@ public:
EnumFeature enum_feature = decodeEnumFeature(n); EnumFeature enum_feature = decodeEnumFeature(n);
String *typemap_lookup_type = Getattr(n, "name"); String *typemap_lookup_type = Getattr(n, "name");
// Translate and write comment if flagged // Translate documentation comments
if (have_docstring(n)) { if (have_docstring(n)) {
String *ds = docstring(n, tab4, true); String *ds = docstring(n, tab0, true);
Printv(enum_code, ds, NIL); Printv(enum_code, ds, NIL);
Delete(ds); Delete(ds);
} }
@ -1424,9 +1424,9 @@ public:
if (csattributes) if (csattributes)
Printf(enum_code, " %s\n", csattributes); Printf(enum_code, " %s\n", csattributes);
// Translate and write comment if flagged // Translate documentation comments
if (have_docstring(n)) { if (have_docstring(n)) {
String *ds = docstring(n, tab4, true); String *ds = docstring(n, tab2, true);
Printv(enum_code, ds, NIL); Printv(enum_code, ds, NIL);
Delete(ds); Delete(ds);
} }
@ -1580,9 +1580,9 @@ public:
const String *methodmods = Getattr(n, "feature:cs:methodmodifiers"); const String *methodmods = Getattr(n, "feature:cs:methodmodifiers");
methodmods = methodmods ? methodmods : (is_public(n) ? public_string : protected_string); methodmods = methodmods ? methodmods : (is_public(n) ? public_string : protected_string);
// Translate and write comment if flagged // Translate documentation comments
if (have_docstring(n)) { if (have_docstring(n)) {
String *ds = docstring(n, tab4, true); String *ds = docstring(n, tab2, true);
Printv(constants_code, ds, NIL); Printv(constants_code, ds, NIL);
Delete(ds); Delete(ds);
} }
@ -2260,9 +2260,9 @@ public:
Language::classHandler(n); Language::classHandler(n);
// Translate and write comment if flagged // Translate documentation comments
if (have_docstring(n)) { if (have_docstring(n)) {
String *ds = docstring(n, tab4, true); String *ds = docstring(n, tab0, true);
Printv(proxy_class_def, ds, NIL); Printv(proxy_class_def, ds, NIL);
Delete(ds); Delete(ds);
} }
@ -2420,13 +2420,6 @@ public:
} }
static_flag = false; static_flag = false;
// NO EFFECT
if (have_docstring(n)) {
String *ds = docstring(n, tab4, true);
Printv(module_class_code, ds, NIL);
Delete(ds);
}
return SWIG_OK; return SWIG_OK;
} }
@ -2648,9 +2641,9 @@ public:
if (is_interface) if (is_interface)
Printf(interface_class_code, ");\n"); Printf(interface_class_code, ");\n");
// Translate and write comment if flagged // Translate documentation comments
if (have_docstring(n)) { if (have_docstring(n)) {
String *ds = docstring(n, tab4, true); String *ds = docstring(n, tab2, true);
Printv(comment_code, ds, NIL); Printv(comment_code, ds, NIL);
Delete(ds); Delete(ds);
} }
@ -2749,9 +2742,9 @@ public:
if (!methodmods) if (!methodmods)
methodmods = (is_public(n) ? public_string : protected_string); methodmods = (is_public(n) ? public_string : protected_string);
// Translate and write comment if flagged // Translate documentation comments
if (have_docstring(n)) { if (have_docstring(n)) {
String *ds = docstring(n, tab4, true); String *ds = docstring(n, tab2, true);
Printv(proxy_class_code, ds, NIL); Printv(proxy_class_code, ds, NIL);
Delete(ds); Delete(ds);
} }
@ -3015,9 +3008,9 @@ public:
Replaceall(function_code, "$imcall", imcall); Replaceall(function_code, "$imcall", imcall);
} }
// Translate and write comment if flagged // Translate documentation comments
if (have_docstring(n)) { if (have_docstring(n)) {
String *ds = docstring(n, tab4, true); String *ds = docstring(n, tab2, true);
Printv(comment_code, ds, NIL); Printv(comment_code, ds, NIL);
Delete(ds); Delete(ds);
} }
@ -3205,9 +3198,9 @@ public:
const String *methodmods = Getattr(n, "feature:cs:methodmodifiers"); const String *methodmods = Getattr(n, "feature:cs:methodmodifiers");
methodmods = methodmods ? methodmods : (is_public(n) ? public_string : protected_string); methodmods = methodmods ? methodmods : (is_public(n) ? public_string : protected_string);
// Translate and write comment if flagged // Translate documentation comments
if (have_docstring(n)) { if (have_docstring(n)) {
String *ds = docstring(n, tab4, true); String *ds = docstring(n, tab2, true);
Printv(function_code, ds, NIL); Printv(function_code, ds, NIL);
Delete(ds); Delete(ds);
} }
@ -4748,8 +4741,7 @@ public:
/* ------------------------------------------------------------ /* ------------------------------------------------------------
* have_docstring() * have_docstring()
* *
* Check if there is a docstring directive and it has text, * Check for Doxygen comments
* or there is an autodoc flag set
*--------------------------------------------------------------------*/ *--------------------------------------------------------------------*/
bool have_docstring(Node *n) { bool have_docstring(Node *n) {
@ -4767,9 +4759,7 @@ public:
/* ------------------------------------------------------------ /* ------------------------------------------------------------
* docstring() * docstring()
* *
* Get the docstring text, stripping off {} if necessary, * Get documentation comments, if any
* and enclose in triple double quotes. If autodoc is also
* set then it will build a combined docstring.
*--------------------------------------------------------------------*/ *--------------------------------------------------------------------*/
String *docstring(Node *n, const String *indent, bool low_level = false) { String *docstring(Node *n, const String *indent, bool low_level = false) {
@ -4784,12 +4774,7 @@ public:
/* ------------------------------------------------------------ /* ------------------------------------------------------------
* build_combined_docstring() * build_combined_docstring()
* *
* Build the full docstring which may be a combination of the * Return new dosucmentation string to be deleted by caller (never NIL but
* explicit docstring and autodoc string or, if none of them
* is specified, obtained by translating Doxygen comment to
* Python.
*
* Return new string to be deleted by caller (never NIL but
* may be empty if there is no docstring). * may be empty if there is no docstring).
*--------------------------------------------------------------------*/ *--------------------------------------------------------------------*/
@ -4812,7 +4797,6 @@ public:
if (Strchr(docstr, '\n')) { if (Strchr(docstr, '\n')) {
String *tmp = NewString(""); String *tmp = NewString("");
Append(tmp, indent_docstring(docstr, indent)); Append(tmp, indent_docstring(docstr, indent));
Append(tmp, indent);
Delete(docstr); Delete(docstr);
docstr = tmp; docstr = tmp;
} else { } else {

View File

@ -40,6 +40,7 @@ extern String *argc_template_string;
/* Miscellaneous stuff */ /* Miscellaneous stuff */
#define tab0 ""
#define tab2 " " #define tab2 " "
#define tab4 " " #define tab4 " "
#define tab8 " " #define tab8 " "