From 55c76edd9390591b1ec621e3e729f2bb3336da4a Mon Sep 17 00:00:00 2001 From: Gennaro Prota Date: Tue, 12 Aug 2025 12:01:21 +0200 Subject: [PATCH 1/3] feat: AsciiDoc and HTML outputs support the final specifier for classes and class templates This was already supported in XML. In this commit, we also remove the semicolon when that would produce invalid C++ code, e.g. in class A final; or class A : B1, B2; Instead, "{ /* see-below */ }" is now always followed by a semicolon, even if the record is final and/or base classes are present. This closes issue #963. --- docs/modules/ROOT/pages/generators.adoc | 4 + include/mrdocs/Metadata/Info/Record.hpp | 1 + .../partials/symbol/signature/record.hbs | 10 +- .../config/auto-relates/derived.adoc | 6 +- .../config/auto-relates/derived.html | 6 +- .../base.adoc | 2 +- .../base.html | 2 +- .../extract-implicit-specializations.adoc | 2 +- .../extract-implicit-specializations.html | 2 +- .../no-extract-implicit-specializations.adoc | 2 +- .../no-extract-implicit-specializations.html | 2 +- .../base-overload-set.adoc | 4 +- .../base-overload-set.html | 4 +- .../copy-dependencies.adoc | 8 +- .../copy-dependencies.html | 8 +- .../config/inherit-base-members/copy.adoc | 8 +- .../config/inherit-base-members/copy.html | 8 +- .../config/inherit-base-members/never.adoc | 8 +- .../config/inherit-base-members/never.html | 8 +- .../inherit-base-members/reference.adoc | 8 +- .../inherit-base-members/reference.html | 8 +- .../inherit-base-members/skip-special.adoc | 8 +- .../inherit-base-members/skip-special.html | 8 +- .../symbol-name/excluded-base-class.adoc | 4 +- .../symbol-name/excluded-base-class.html | 4 +- test-files/golden-tests/javadoc/ref/ref.adoc | 2 +- test-files/golden-tests/javadoc/ref/ref.html | 2 +- .../golden-tests/symbols/function/mem-fn.adoc | 4 +- .../golden-tests/symbols/function/mem-fn.html | 4 +- .../class-template-specializations-1.adoc | 98 +++++----- .../class-template-specializations-1.html | 98 +++++----- .../symbols/record/final-class.adoc | 115 ++++++++++++ .../symbols/record/final-class.cpp | 20 +++ .../symbols/record/final-class.html | 169 ++++++++++++++++++ .../symbols/record/final-class.xml | 33 ++++ .../symbols/record/local-class.adoc | 2 +- .../symbols/record/local-class.html | 2 +- .../symbols/record/record-inheritance.adoc | 24 +-- .../symbols/record/record-inheritance.html | 24 +-- .../template-specialization-inheritance.adoc | 6 +- .../template-specialization-inheritance.html | 6 +- .../typedef/dependency-propagation.adoc | 2 +- .../typedef/dependency-propagation.html | 2 +- .../symbols/using/using-member-function.adoc | 2 +- .../symbols/using/using-member-function.html | 2 +- 45 files changed, 551 insertions(+), 201 deletions(-) create mode 100644 test-files/golden-tests/symbols/record/final-class.adoc create mode 100644 test-files/golden-tests/symbols/record/final-class.cpp create mode 100644 test-files/golden-tests/symbols/record/final-class.html create mode 100644 test-files/golden-tests/symbols/record/final-class.xml diff --git a/docs/modules/ROOT/pages/generators.adoc b/docs/modules/ROOT/pages/generators.adoc index 23521280d..7b6bccf2b 100644 --- a/docs/modules/ROOT/pages/generators.adoc +++ b/docs/modules/ROOT/pages/generators.adoc @@ -258,6 +258,10 @@ When the symbol kind is `record` (e.g., `class`, `struct`, `union`), the symbol | `string` | The default access level of the record members (e.g., `public`, `private`). +| `isFinal` +| `bool` +| Whether the record is final. + | `isTypedef` | `bool` | Whether the record is a typedef. diff --git a/include/mrdocs/Metadata/Info/Record.hpp b/include/mrdocs/Metadata/Info/Record.hpp index 0b5e750a1..1807183ae 100644 --- a/include/mrdocs/Metadata/Info/Record.hpp +++ b/include/mrdocs/Metadata/Info/Record.hpp @@ -353,6 +353,7 @@ tag_invoke( tag_invoke(t, io, dynamic_cast(I), domCorpus); io.map("tag", I.KeyKind); io.map("defaultAccess", getDefaultAccessString(I.KeyKind)); + io.map("isFinal", I.IsFinal); io.map("isTypedef", I.IsTypeDef); io.map("bases", dom::LazyArray(I.Bases, domCorpus)); io.map("derived", dom::LazyArray(I.Derived, domCorpus)); diff --git a/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs b/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs index 78f1767b8..fb2d8c12a 100644 --- a/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs +++ b/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs @@ -6,6 +6,7 @@ {{~else~}} {{>symbol/name-text symbol ~}} {{~/if}} +{{~#if isFinal}} final{{/if~}} {{#unless bases~}} {{else if isFriend~}} {{else}} @@ -17,4 +18,11 @@ {{#unless (eq access ../defaultAccess)}} {{access}}{{/unless~}} {{#if isVirtual}} virtual{{/if}} {{>type/declarator type~}} {{/each~}} -{{/unless}}{{#isSeeBelow}} { /* see-below */ }{{/isSeeBelow}}; \ No newline at end of file +{{/unless}} +{{!-- Unless we are going to show a class body ("{ ... }"), don't add a + semicolon if the record is final, because something like `class A + final;` is ill-formed (`final` can't be used on a non-defining + declaration). Similarly, don't show a semicolon if there are base + classes. --}} +{{~#unless (or isSeeBelow isFinal bases)}};{{/unless~}} +{{~#isSeeBelow}} { /* see-below */ };{{/isSeeBelow~}} \ No newline at end of file diff --git a/test-files/golden-tests/config/auto-relates/derived.adoc b/test-files/golden-tests/config/auto-relates/derived.adoc index 3b97e51f7..b1a101fc8 100644 --- a/test-files/golden-tests/config/auto-relates/derived.adoc +++ b/test-files/golden-tests/config/auto-relates/derived.adoc @@ -52,7 +52,7 @@ Declared in `<derived.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct A - : link:#ABase[ABase]; + : link:#ABase[ABase] ---- === Base Classes @@ -141,7 +141,7 @@ Declared in `<derived.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct AView - : link:#ABase[ABase]; + : link:#ABase[ABase] ---- === Base Classes @@ -194,7 +194,7 @@ Declared in `<derived.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct AView2 - : link:#AView[AView]; + : link:#AView[AView] ---- === Base Classes diff --git a/test-files/golden-tests/config/auto-relates/derived.html b/test-files/golden-tests/config/auto-relates/derived.html index 44a2fc2cb..c4b36dc1c 100644 --- a/test-files/golden-tests/config/auto-relates/derived.html +++ b/test-files/golden-tests/config/auto-relates/derived.html @@ -61,7 +61,7 @@

Synopsis

 
 struct A
-    : ABase;
+    : ABase
 
 
@@ -172,7 +172,7 @@

Synopsis

 
 struct AView
-    : ABase;
+    : ABase
 
 
@@ -241,7 +241,7 @@

Synopsis

 
 struct AView2
-    : AView;
+    : AView
 
 
diff --git a/test-files/golden-tests/config/extract-implicit-specializations/base.adoc b/test-files/golden-tests/config/extract-implicit-specializations/base.adoc index bd99bfc4e..c497efcfc 100644 --- a/test-files/golden-tests/config/extract-implicit-specializations/base.adoc +++ b/test-files/golden-tests/config/extract-implicit-specializations/base.adoc @@ -23,7 +23,7 @@ Declared in `<base.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct A - : link:#B[B]; + : link:#B[B] ---- === Base Classes diff --git a/test-files/golden-tests/config/extract-implicit-specializations/base.html b/test-files/golden-tests/config/extract-implicit-specializations/base.html index 24367b8ed..a73676919 100644 --- a/test-files/golden-tests/config/extract-implicit-specializations/base.html +++ b/test-files/golden-tests/config/extract-implicit-specializations/base.html @@ -35,7 +35,7 @@

Synopsis

 
 struct A
-    : B;
+    : B
 
 
diff --git a/test-files/golden-tests/config/extract-implicit-specializations/extract-implicit-specializations.adoc b/test-files/golden-tests/config/extract-implicit-specializations/extract-implicit-specializations.adoc index 79bc4cc9c..bd41f32de 100644 --- a/test-files/golden-tests/config/extract-implicit-specializations/extract-implicit-specializations.adoc +++ b/test-files/golden-tests/config/extract-implicit-specializations/extract-implicit-specializations.adoc @@ -23,7 +23,7 @@ Declared in `<extract‐implicit‐specializations.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct A - : link:#B-00[B<int>]; + : link:#B-00[B<int>] ---- === Base Classes diff --git a/test-files/golden-tests/config/extract-implicit-specializations/extract-implicit-specializations.html b/test-files/golden-tests/config/extract-implicit-specializations/extract-implicit-specializations.html index 2abbef785..473aa0aa3 100644 --- a/test-files/golden-tests/config/extract-implicit-specializations/extract-implicit-specializations.html +++ b/test-files/golden-tests/config/extract-implicit-specializations/extract-implicit-specializations.html @@ -35,7 +35,7 @@

Synopsis

 
 struct A
-    : B<int>;
+    : B<int>
 
 
diff --git a/test-files/golden-tests/config/extract-implicit-specializations/no-extract-implicit-specializations.adoc b/test-files/golden-tests/config/extract-implicit-specializations/no-extract-implicit-specializations.adoc index 0a2766cb0..65428e617 100644 --- a/test-files/golden-tests/config/extract-implicit-specializations/no-extract-implicit-specializations.adoc +++ b/test-files/golden-tests/config/extract-implicit-specializations/no-extract-implicit-specializations.adoc @@ -23,7 +23,7 @@ Declared in `<no‐extract‐implicit‐specializations&period [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct A - : link:#B[B<int>]; + : link:#B[B<int>] ---- === Base Classes diff --git a/test-files/golden-tests/config/extract-implicit-specializations/no-extract-implicit-specializations.html b/test-files/golden-tests/config/extract-implicit-specializations/no-extract-implicit-specializations.html index 34dbffa1a..f6fc57018 100644 --- a/test-files/golden-tests/config/extract-implicit-specializations/no-extract-implicit-specializations.html +++ b/test-files/golden-tests/config/extract-implicit-specializations/no-extract-implicit-specializations.html @@ -35,7 +35,7 @@

Synopsis

 
 struct A
-    : B<int>;
+    : B<int>
 
 
diff --git a/test-files/golden-tests/config/inherit-base-members/base-overload-set.adoc b/test-files/golden-tests/config/inherit-base-members/base-overload-set.adoc index 276bec401..2d333005a 100644 --- a/test-files/golden-tests/config/inherit-base-members/base-overload-set.adoc +++ b/test-files/golden-tests/config/inherit-base-members/base-overload-set.adoc @@ -24,7 +24,7 @@ Declared in `<base‐overload‐set.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class Base - : public link:#ConstBase[ConstBase]; + : public link:#ConstBase[ConstBase] ---- === Base Classes @@ -118,7 +118,7 @@ Declared in `<base‐overload‐set.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class C - : public link:#Base[Base]; + : public link:#Base[Base] ---- === Base Classes diff --git a/test-files/golden-tests/config/inherit-base-members/base-overload-set.html b/test-files/golden-tests/config/inherit-base-members/base-overload-set.html index dedc450f4..070e15d61 100644 --- a/test-files/golden-tests/config/inherit-base-members/base-overload-set.html +++ b/test-files/golden-tests/config/inherit-base-members/base-overload-set.html @@ -36,7 +36,7 @@

Synopsis

 
 class Base
-    : public ConstBase;
+    : public ConstBase
 
 
@@ -156,7 +156,7 @@

Synopsis

 
 class C
-    : public Base;
+    : public Base
 
 
diff --git a/test-files/golden-tests/config/inherit-base-members/copy-dependencies.adoc b/test-files/golden-tests/config/inherit-base-members/copy-dependencies.adoc index a2a998907..b4a99222e 100644 --- a/test-files/golden-tests/config/inherit-base-members/copy-dependencies.adoc +++ b/test-files/golden-tests/config/inherit-base-members/copy-dependencies.adoc @@ -34,7 +34,7 @@ Declared in `<copy‐dependencies.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class base - : public link:#base_base[base_base]; + : public link:#base_base[base_base] ---- === Base Classes @@ -290,7 +290,7 @@ Declared in `<copy‐dependencies.cpp>` ---- class derived : public link:#base[base] - , public excluded_base; + , public excluded_base ---- === Base Classes @@ -441,7 +441,7 @@ Declared in `<copy‐dependencies.cpp>` ---- class private_derived : link:#base[base] - , excluded_base; + , excluded_base ---- === Member Functions @@ -507,7 +507,7 @@ Declared in `<copy‐dependencies.cpp>` ---- class protected_derived : protected link:#base[base] - , protected excluded_base; + , protected excluded_base ---- === Member Functions diff --git a/test-files/golden-tests/config/inherit-base-members/copy-dependencies.html b/test-files/golden-tests/config/inherit-base-members/copy-dependencies.html index 13426e5fd..3ad5480bf 100644 --- a/test-files/golden-tests/config/inherit-base-members/copy-dependencies.html +++ b/test-files/golden-tests/config/inherit-base-members/copy-dependencies.html @@ -43,7 +43,7 @@

Synopsis

 
 class base
-    : public base_base;
+    : public base_base
 
 
@@ -372,7 +372,7 @@

Synopsis

class derived : public base - , public excluded_base; + , public excluded_base @@ -556,7 +556,7 @@

Synopsis

class private_derived : base - , excluded_base; + , excluded_base @@ -642,7 +642,7 @@

Synopsis

class protected_derived : protected base - , protected excluded_base; + , protected excluded_base diff --git a/test-files/golden-tests/config/inherit-base-members/copy.adoc b/test-files/golden-tests/config/inherit-base-members/copy.adoc index 2a8ce7327..6579a463f 100644 --- a/test-files/golden-tests/config/inherit-base-members/copy.adoc +++ b/test-files/golden-tests/config/inherit-base-members/copy.adoc @@ -34,7 +34,7 @@ Declared in `<copy.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class base - : public link:#base_base[base_base]; + : public link:#base_base[base_base] ---- === Base Classes @@ -328,7 +328,7 @@ Declared in `<copy.cpp>` ---- class derived : public link:#base[base] - , public excluded_base; + , public excluded_base ---- === Base Classes @@ -612,7 +612,7 @@ Declared in `<copy.cpp>` ---- class private_derived : link:#base[base] - , excluded_base; + , excluded_base ---- === Member Functions @@ -678,7 +678,7 @@ Declared in `<copy.cpp>` ---- class protected_derived : protected link:#base[base] - , protected excluded_base; + , protected excluded_base ---- === Member Functions diff --git a/test-files/golden-tests/config/inherit-base-members/copy.html b/test-files/golden-tests/config/inherit-base-members/copy.html index 7638091a3..1dc41d4b4 100644 --- a/test-files/golden-tests/config/inherit-base-members/copy.html +++ b/test-files/golden-tests/config/inherit-base-members/copy.html @@ -43,7 +43,7 @@

Synopsis

 
 class base
-    : public base_base;
+    : public base_base
 
 
@@ -420,7 +420,7 @@

Synopsis

class derived : public base - , public excluded_base; + , public excluded_base @@ -772,7 +772,7 @@

Synopsis

class private_derived : base - , excluded_base; + , excluded_base @@ -858,7 +858,7 @@

Synopsis

class protected_derived : protected base - , protected excluded_base; + , protected excluded_base diff --git a/test-files/golden-tests/config/inherit-base-members/never.adoc b/test-files/golden-tests/config/inherit-base-members/never.adoc index d76534f02..249e287a5 100644 --- a/test-files/golden-tests/config/inherit-base-members/never.adoc +++ b/test-files/golden-tests/config/inherit-base-members/never.adoc @@ -34,7 +34,7 @@ Declared in `<never.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class base - : public link:#base_base[base_base]; + : public link:#base_base[base_base] ---- === Base Classes @@ -286,7 +286,7 @@ Declared in `<never.cpp>` ---- class derived : public link:#base[base] - , public excluded_base; + , public excluded_base ---- === Base Classes @@ -364,7 +364,7 @@ Declared in `<never.cpp>` ---- class private_derived : link:#base[base] - , excluded_base; + , excluded_base ---- === Member Functions @@ -430,7 +430,7 @@ Declared in `<never.cpp>` ---- class protected_derived : protected link:#base[base] - , protected excluded_base; + , protected excluded_base ---- === Member Functions diff --git a/test-files/golden-tests/config/inherit-base-members/never.html b/test-files/golden-tests/config/inherit-base-members/never.html index 713644a2a..30246e867 100644 --- a/test-files/golden-tests/config/inherit-base-members/never.html +++ b/test-files/golden-tests/config/inherit-base-members/never.html @@ -43,7 +43,7 @@

Synopsis

 
 class base
-    : public base_base;
+    : public base_base
 
 
@@ -370,7 +370,7 @@

Synopsis

class derived : public base - , public excluded_base; + , public excluded_base @@ -471,7 +471,7 @@

Synopsis

class private_derived : base - , excluded_base; + , excluded_base @@ -557,7 +557,7 @@

Synopsis

class protected_derived : protected base - , protected excluded_base; + , protected excluded_base diff --git a/test-files/golden-tests/config/inherit-base-members/reference.adoc b/test-files/golden-tests/config/inherit-base-members/reference.adoc index 8c9414db9..39c5683ca 100644 --- a/test-files/golden-tests/config/inherit-base-members/reference.adoc +++ b/test-files/golden-tests/config/inherit-base-members/reference.adoc @@ -34,7 +34,7 @@ Declared in `<reference.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class base - : public link:#base_base[base_base]; + : public link:#base_base[base_base] ---- === Base Classes @@ -290,7 +290,7 @@ Declared in `<reference.cpp>` ---- class derived : public link:#base[base] - , public excluded_base; + , public excluded_base ---- === Base Classes @@ -390,7 +390,7 @@ Declared in `<reference.cpp>` ---- class private_derived : link:#base[base] - , excluded_base; + , excluded_base ---- === Member Functions @@ -456,7 +456,7 @@ Declared in `<reference.cpp>` ---- class protected_derived : protected link:#base[base] - , protected excluded_base; + , protected excluded_base ---- === Member Functions diff --git a/test-files/golden-tests/config/inherit-base-members/reference.html b/test-files/golden-tests/config/inherit-base-members/reference.html index 28efdbee6..87dfd61b4 100644 --- a/test-files/golden-tests/config/inherit-base-members/reference.html +++ b/test-files/golden-tests/config/inherit-base-members/reference.html @@ -43,7 +43,7 @@

Synopsis

 
 class base
-    : public base_base;
+    : public base_base
 
 
@@ -372,7 +372,7 @@

Synopsis

class derived : public base - , public excluded_base; + , public excluded_base @@ -493,7 +493,7 @@

Synopsis

class private_derived : base - , excluded_base; + , excluded_base @@ -579,7 +579,7 @@

Synopsis

class protected_derived : protected base - , protected excluded_base; + , protected excluded_base diff --git a/test-files/golden-tests/config/inherit-base-members/skip-special.adoc b/test-files/golden-tests/config/inherit-base-members/skip-special.adoc index cc16d9f09..7f42a5f5b 100644 --- a/test-files/golden-tests/config/inherit-base-members/skip-special.adoc +++ b/test-files/golden-tests/config/inherit-base-members/skip-special.adoc @@ -32,7 +32,7 @@ Declared in `<skip‐special.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class base - : public link:#base_base[base_base]; + : public link:#base_base[base_base] ---- === Base Classes @@ -316,7 +316,7 @@ Declared in `<skip‐special.cpp>` ---- class derived : public link:#base[base] - , public excluded_base; + , public excluded_base ---- === Base Classes @@ -489,7 +489,7 @@ Declared in `<skip‐special.cpp>` ---- class private_derived : link:#base[base] - , excluded_base; + , excluded_base ---- === Member Functions @@ -579,7 +579,7 @@ Declared in `<skip‐special.cpp>` ---- class protected_derived : protected link:#base[base] - , protected excluded_base; + , protected excluded_base ---- === Member Functions diff --git a/test-files/golden-tests/config/inherit-base-members/skip-special.html b/test-files/golden-tests/config/inherit-base-members/skip-special.html index 616ed6ea9..e5d014c90 100644 --- a/test-files/golden-tests/config/inherit-base-members/skip-special.html +++ b/test-files/golden-tests/config/inherit-base-members/skip-special.html @@ -39,7 +39,7 @@

Synopsis

 
 class base
-    : public base_base;
+    : public base_base
 
 
@@ -408,7 +408,7 @@

Synopsis

class derived : public base - , public excluded_base; + , public excluded_base @@ -620,7 +620,7 @@

Synopsis

class private_derived : base - , excluded_base; + , excluded_base @@ -738,7 +738,7 @@

Synopsis

class protected_derived : protected base - , protected excluded_base; + , protected excluded_base diff --git a/test-files/golden-tests/filters/symbol-name/excluded-base-class.adoc b/test-files/golden-tests/filters/symbol-name/excluded-base-class.adoc index f9ce4fa28..275311b63 100644 --- a/test-files/golden-tests/filters/symbol-name/excluded-base-class.adoc +++ b/test-files/golden-tests/filters/symbol-name/excluded-base-class.adoc @@ -34,7 +34,7 @@ Declared in `<excluded‐base‐class.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class D - : public B::C; + : public B::C ---- === Base Classes @@ -122,7 +122,7 @@ Declared in `<excluded‐base‐class.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class E - : public B::C; + : public B::C ---- === Base Classes diff --git a/test-files/golden-tests/filters/symbol-name/excluded-base-class.html b/test-files/golden-tests/filters/symbol-name/excluded-base-class.html index 94c3e998b..688cb415f 100644 --- a/test-files/golden-tests/filters/symbol-name/excluded-base-class.html +++ b/test-files/golden-tests/filters/symbol-name/excluded-base-class.html @@ -53,7 +53,7 @@

Synopsis

 
 class D
-    : public B::C;
+    : public B::C
 
 
@@ -167,7 +167,7 @@

Synopsis

 
 class E
-    : public B::C;
+    : public B::C
 
 
diff --git a/test-files/golden-tests/javadoc/ref/ref.adoc b/test-files/golden-tests/javadoc/ref/ref.adoc index 31679c571..0191e35d2 100644 --- a/test-files/golden-tests/javadoc/ref/ref.adoc +++ b/test-files/golden-tests/javadoc/ref/ref.adoc @@ -170,7 +170,7 @@ Declared in `<ref.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct D - : link:#A-C[C]; + : link:#A-C[C] ---- === Base Classes diff --git a/test-files/golden-tests/javadoc/ref/ref.html b/test-files/golden-tests/javadoc/ref/ref.html index 09203b136..e24e36c3a 100644 --- a/test-files/golden-tests/javadoc/ref/ref.html +++ b/test-files/golden-tests/javadoc/ref/ref.html @@ -232,7 +232,7 @@

Synopsis

 
 struct D
-    : C;
+    : C
 
 
diff --git a/test-files/golden-tests/symbols/function/mem-fn.adoc b/test-files/golden-tests/symbols/function/mem-fn.adoc index 68d48c55a..de2cc298d 100644 --- a/test-files/golden-tests/symbols/function/mem-fn.adoc +++ b/test-files/golden-tests/symbols/function/mem-fn.adoc @@ -549,7 +549,7 @@ Declared in `<mem‐fn.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct T17 - : link:#T14[T14]; + : link:#T14[T14] ---- === Base Classes @@ -676,7 +676,7 @@ Declared in `<mem‐fn.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct V - : link:#U[U]; + : link:#U[U] ---- === Base Classes diff --git a/test-files/golden-tests/symbols/function/mem-fn.html b/test-files/golden-tests/symbols/function/mem-fn.html index d0b0309a6..1dccf0a22 100644 --- a/test-files/golden-tests/symbols/function/mem-fn.html +++ b/test-files/golden-tests/symbols/function/mem-fn.html @@ -761,7 +761,7 @@

Synopsis

 
 struct T17
-    : T14;
+    : T14
 
 
@@ -934,7 +934,7 @@

Synopsis

 
 struct V
-    : U;
+    : U
 
 
diff --git a/test-files/golden-tests/symbols/record/class-template-specializations-1.adoc b/test-files/golden-tests/symbols/record/class-template-specializations-1.adoc index b44b45eb6..6e5936647 100644 --- a/test-files/golden-tests/symbols/record/class-template-specializations-1.adoc +++ b/test-files/golden-tests/symbols/record/class-template-specializations-1.adoc @@ -112,7 +112,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R0 - : link:#S0-0cf[S0<‐1>]; + : link:#S0-0cf[S0<‐1>] ---- === Base Classes @@ -152,7 +152,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R1 - : link:#S0-0be[S0<0>]; + : link:#S0-0be[S0<0>] ---- === Base Classes @@ -175,7 +175,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R10 - : link:#S0-08-S1-S2-08-S4[S0<10>::S1::S2<11>::S4<‐1>]; + : link:#S0-08-S1-S2-08-S4[S0<10>::S1::S2<11>::S4<‐1>] ---- === Base Classes @@ -198,7 +198,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R11 - : link:#S0-0e-S1-S2-02-S4-0c[S0<12>::S1::S2<13>::S4<14>]; + : link:#S0-0e-S1-S2-02-S4-0c[S0<12>::S1::S2<13>::S4<14>] ---- === Base Classes @@ -221,7 +221,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R12 - : link:#S0-09e4-S1-S2-02-S4-00[S0<15>::S1::S2<16>::S4<17, void*>]; + : link:#S0-09e4-S1-S2-02-S4-00[S0<15>::S1::S2<16>::S4<17, void*>] ---- === Base Classes @@ -244,7 +244,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R13 - : link:#S0-09e4-S1-S2-02-S4-02[S0<15>::S1::S2<16>::S4<17, int*>]; + : link:#S0-09e4-S1-S2-02-S4-02[S0<15>::S1::S2<16>::S4<17, int*>] ---- === Base Classes @@ -267,7 +267,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R14 - : link:#S0-07a-S5[S0<18>::S5<‐1>]; + : link:#S0-07a-S5[S0<18>::S5<‐1>] ---- === Base Classes @@ -290,7 +290,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R15 - : link:#S0-0a7-S5-07[S0<19>::S5<20>]; + : link:#S0-0a7-S5-07[S0<19>::S5<20>] ---- === Base Classes @@ -313,7 +313,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R16 - : link:#S0-0314-S5-07[S0<21>::S5<22, void*>]; + : link:#S0-0314-S5-07[S0<21>::S5<22, void*>] ---- === Base Classes @@ -336,7 +336,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R17 - : link:#S0-0314-S5-03[S0<21>::S5<22, int*>]; + : link:#S0-0314-S5-03[S0<21>::S5<22, int*>] ---- === Base Classes @@ -359,7 +359,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R18 - : link:#S0-058-S5-09-S6[S0<23>::S5<24>::S6]; + : link:#S0-058-S5-09-S6[S0<23>::S5<24>::S6] ---- === Base Classes @@ -382,7 +382,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R19 - : link:#S0-0a2-S5-02-S6-S7[S0<25>::S5<26>::S6::S7<‐1>]; + : link:#S0-0a2-S5-02-S6-S7[S0<25>::S5<26>::S6::S7<‐1>] ---- === Base Classes @@ -405,7 +405,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R2 - : link:#S0-0cf[S0<1, void*>]; + : link:#S0-0cf[S0<1, void*>] ---- === Base Classes @@ -445,7 +445,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R20 - : link:#S0-09e2-S5-0c-S6-S7-0b[S0<27>::S5<28>::S6::S7<29, void*>]; + : link:#S0-09e2-S5-0c-S6-S7-0b[S0<27>::S5<28>::S6::S7<29, void*>] ---- === Base Classes @@ -468,7 +468,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R21 - : link:#S0-09e2-S5-0c-S6-S7-0d[S0<27>::S5<28>::S6::S7<29, int*>]; + : link:#S0-09e2-S5-0c-S6-S7-0d[S0<27>::S5<28>::S6::S7<29, int*>] ---- === Base Classes @@ -491,7 +491,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R22 - : link:#S0-01-S5-04-S6-S7-05[S0<30>::S5<31>::S6::S7<32>]; + : link:#S0-01-S5-04-S6-S7-05[S0<30>::S5<31>::S6::S7<32>] ---- === Base Classes @@ -514,7 +514,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R23 - : link:#S0-09ee-S5-02-S6-S7-03-S8[S0<33>::S5<34>::S6::S7<35>::S8]; + : link:#S0-09ee-S5-02-S6-S7-03-S8[S0<33>::S5<34>::S6::S7<35>::S8] ---- === Base Classes @@ -537,7 +537,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R24 - : link:#S0-033-S5-0f-S6-S7-0d-S9[S0<36>::S5<37>::S6::S7<38>::S9<‐1>]; + : link:#S0-033-S5-0f-S6-S7-0d-S9[S0<36>::S5<37>::S6::S7<38>::S9<‐1>] ---- === Base Classes @@ -560,7 +560,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R25 - : link:#S0-06-S5-07-S6-S7-0a-S9-05[S0<39>::S5<40>::S6::S7<41>::S9<42, void*>]; + : link:#S0-06-S5-07-S6-S7-0a-S9-05[S0<39>::S5<40>::S6::S7<41>::S9<42, void*>] ---- === Base Classes @@ -583,7 +583,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R26 - : link:#S0-06-S5-07-S6-S7-0a-S9-08[S0<39>::S5<40>::S6::S7<41>::S9<42, int*>]; + : link:#S0-06-S5-07-S6-S7-0a-S9-08[S0<39>::S5<40>::S6::S7<41>::S9<42, int*>] ---- === Base Classes @@ -606,7 +606,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R27 - : link:#S0-0ba-S5-08-S6-S7-02-S9-0f[S0<43>::S5<44>::S6::S7<45>::S9<46>]; + : link:#S0-0ba-S5-08-S6-S7-02-S9-0f[S0<43>::S5<44>::S6::S7<45>::S9<46>] ---- === Base Classes @@ -629,7 +629,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R28 - : link:#S0-0cf[S0<0, bool>]; + : link:#S0-0cf[S0<0, bool>] ---- === Base Classes @@ -669,7 +669,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R29 - : link:#S0-0cf[S0<1, int>]; + : link:#S0-0cf[S0<1, int>] ---- === Base Classes @@ -709,7 +709,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R3 - : link:#S0-020a[S0<1, int*>]; + : link:#S0-020a[S0<1, int*>] ---- === Base Classes @@ -732,7 +732,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R30 - : link:#S0-03c[S0<2, bool>::S1]; + : link:#S0-03c[S0<2, bool>::S1] ---- === Base Classes @@ -802,7 +802,7 @@ template< int I, typename T> struct R31 - : link:#S0-092-S1[S0<3, bool>::S1::S2<I, T>]; + : link:#S0-092-S1[S0<3, bool>::S1::S2<I, T>] ---- === Base Classes @@ -825,7 +825,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R32 - : link:#S0-0b6-S1[S0<4, bool>::S1::S2<5, bool>]; + : link:#S0-0b6-S1[S0<4, bool>::S1::S2<5, bool>] ---- === Base Classes @@ -848,7 +848,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R33 - : link:#S0-023-S1[S0<6, bool>::S1::S2<7, int>]; + : link:#S0-023-S1[S0<6, bool>::S1::S2<7, int>] ---- === Base Classes @@ -871,7 +871,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R34 - : link:#S0-04-S1-S2-0a[S0<8, bool>::S1::S2<9, bool>::S3]; + : link:#S0-04-S1-S2-0a[S0<8, bool>::S1::S2<9, bool>::S3] ---- === Base Classes @@ -918,7 +918,7 @@ template< int I, typename T> struct R35 - : link:#S0-05a-S1-S2-0b[S0<10, bool>::S1::S2<11, bool>::S4<I, T>]; + : link:#S0-05a-S1-S2-0b[S0<10, bool>::S1::S2<11, bool>::S4<I, T>] ---- === Base Classes @@ -941,7 +941,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R36 - : link:#S0-0cd-S1-S2-05[S0<12, bool>::S1::S2<13, bool>::S4<14, bool>]; + : link:#S0-0cd-S1-S2-05[S0<12, bool>::S1::S2<13, bool>::S4<14, bool>] ---- === Base Classes @@ -964,7 +964,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R37 - : link:#S0-000-S1-S2-03[S0<15, bool>::S1::S2<16, bool>::S4<17, int>]; + : link:#S0-000-S1-S2-03[S0<15, bool>::S1::S2<16, bool>::S4<17, int>] ---- === Base Classes @@ -990,7 +990,7 @@ template< int I, typename T> struct R38 - : link:#S0-051[S0<18, bool>::S5<I, T>]; + : link:#S0-051[S0<18, bool>::S5<I, T>] ---- === Base Classes @@ -1013,7 +1013,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R39 - : link:#S0-002[S0<19, bool>::S5<20, bool>]; + : link:#S0-002[S0<19, bool>::S5<20, bool>] ---- === Base Classes @@ -1036,7 +1036,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R4 - : link:#S0-09c-S1[S0<2>::S1]; + : link:#S0-09c-S1[S0<2>::S1] ---- === Base Classes @@ -1059,7 +1059,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R40 - : link:#S0-003[S0<21, bool>::S5<22, int>]; + : link:#S0-003[S0<21, bool>::S5<22, int>] ---- === Base Classes @@ -1082,7 +1082,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R41 - : link:#S0-0c7-S5-0f[S0<23, bool>::S5<24, bool>::S6]; + : link:#S0-0c7-S5-0f[S0<23, bool>::S5<24, bool>::S6] ---- === Base Classes @@ -1152,7 +1152,7 @@ template< int I, typename T> struct R42 - : link:#S0-0529f-S5-05c-S6[S0<25, bool>::S5<26, bool>::S6::S7<I, T>]; + : link:#S0-0529f-S5-05c-S6[S0<25, bool>::S5<26, bool>::S6::S7<I, T>] ---- === Base Classes @@ -1175,7 +1175,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R43 - : link:#S0-007-S5-0d-S6[S0<27, bool>::S5<28, bool>::S6::S7<29, int>]; + : link:#S0-007-S5-0d-S6[S0<27, bool>::S5<28, bool>::S6::S7<29, int>] ---- === Base Classes @@ -1198,7 +1198,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R44 - : link:#S0-021-S5-0b-S6[S0<30, bool>::S5<31, bool>::S6::S7<32, bool>]; + : link:#S0-021-S5-0b-S6[S0<30, bool>::S5<31, bool>::S6::S7<32, bool>] ---- === Base Classes @@ -1221,7 +1221,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R45 - : link:#S0-0318-S5-0b-S6-S7-05[S0<33, bool>::S5<34, bool>::S6::S7<35, bool>::S8]; + : link:#S0-0318-S5-0b-S6-S7-05[S0<33, bool>::S5<34, bool>::S6::S7<35, bool>::S8] ---- === Base Classes @@ -1268,7 +1268,7 @@ template< int I, typename T> struct R46 - : link:#S0-0d-S5-0b-S6-S7-0d[S0<36, bool>::S5<37, bool>::S6::S7<38, bool>::S9<I, T>]; + : link:#S0-0d-S5-0b-S6-S7-0d[S0<36, bool>::S5<37, bool>::S6::S7<38, bool>::S9<I, T>] ---- === Base Classes @@ -1291,7 +1291,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R47 - : link:#S0-0206-S5-08-S6-S7-01[S0<39, bool>::S5<40, bool>::S6::S7<41, bool>::S9<42, int>]; + : link:#S0-0206-S5-08-S6-S7-01[S0<39, bool>::S5<40, bool>::S6::S7<41, bool>::S9<42, int>] ---- === Base Classes @@ -1314,7 +1314,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R48 - : link:#S0-05291-S5-0e-S6-S7-0f[S0<43, bool>::S5<44, bool>::S6::S7<45, bool>::S9<46, bool>]; + : link:#S0-05291-S5-0e-S6-S7-0f[S0<43, bool>::S5<44, bool>::S6::S7<45, bool>::S9<46, bool>] ---- === Base Classes @@ -1337,7 +1337,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R5 - : link:#S0-073-S1-S2[S0<3>::S1::S2<‐1>]; + : link:#S0-073-S1-S2[S0<3>::S1::S2<‐1>] ---- === Base Classes @@ -1360,7 +1360,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R6 - : link:#S0-0a1-S1-S2-0f[S0<4>::S1::S2<5>]; + : link:#S0-0a1-S1-S2-0f[S0<4>::S1::S2<5>] ---- === Base Classes @@ -1383,7 +1383,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R7 - : link:#S0-07e-S1-S2-04[S0<6>::S1::S2<7, void*>]; + : link:#S0-07e-S1-S2-04[S0<6>::S1::S2<7, void*>] ---- === Base Classes @@ -1406,7 +1406,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R8 - : link:#S0-07e-S1-S2-07[S0<6>::S1::S2<7, int*>]; + : link:#S0-07e-S1-S2-07[S0<6>::S1::S2<7, int*>] ---- === Base Classes @@ -1429,7 +1429,7 @@ Declared in `<class‐template‐specializations‐1.cp [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R9 - : link:#S0-0a3-S1-S2-0c-S3[S0<8>::S1::S2<9>::S3]; + : link:#S0-0a3-S1-S2-0c-S3[S0<8>::S1::S2<9>::S3] ---- === Base Classes diff --git a/test-files/golden-tests/symbols/record/class-template-specializations-1.html b/test-files/golden-tests/symbols/record/class-template-specializations-1.html index 994bfea4f..00486bf92 100644 --- a/test-files/golden-tests/symbols/record/class-template-specializations-1.html +++ b/test-files/golden-tests/symbols/record/class-template-specializations-1.html @@ -124,7 +124,7 @@

Synopsis

 
 struct R0
-    : S0<-1>;
+    : S0<-1>
 
 
@@ -183,7 +183,7 @@

Synopsis

 
 struct R1
-    : S0<0>;
+    : S0<0>
 
 
@@ -215,7 +215,7 @@

Synopsis

 
 struct R10
-    : S0<10>::S1::S2<11>::S4<-1>;
+    : S0<10>::S1::S2<11>::S4<-1>
 
 
@@ -247,7 +247,7 @@

Synopsis

 
 struct R11
-    : S0<12>::S1::S2<13>::S4<14>;
+    : S0<12>::S1::S2<13>::S4<14>
 
 
@@ -279,7 +279,7 @@

Synopsis

 
 struct R12
-    : S0<15>::S1::S2<16>::S4<17, void*>;
+    : S0<15>::S1::S2<16>::S4<17, void*>
 
 
@@ -311,7 +311,7 @@

Synopsis

 
 struct R13
-    : S0<15>::S1::S2<16>::S4<17, int*>;
+    : S0<15>::S1::S2<16>::S4<17, int*>
 
 
@@ -343,7 +343,7 @@

Synopsis

 
 struct R14
-    : S0<18>::S5<-1>;
+    : S0<18>::S5<-1>
 
 
@@ -375,7 +375,7 @@

Synopsis

 
 struct R15
-    : S0<19>::S5<20>;
+    : S0<19>::S5<20>
 
 
@@ -407,7 +407,7 @@

Synopsis

 
 struct R16
-    : S0<21>::S5<22, void*>;
+    : S0<21>::S5<22, void*>
 
 
@@ -439,7 +439,7 @@

Synopsis

 
 struct R17
-    : S0<21>::S5<22, int*>;
+    : S0<21>::S5<22, int*>
 
 
@@ -471,7 +471,7 @@

Synopsis

 
 struct R18
-    : S0<23>::S5<24>::S6;
+    : S0<23>::S5<24>::S6
 
 
@@ -503,7 +503,7 @@

Synopsis

 
 struct R19
-    : S0<25>::S5<26>::S6::S7<-1>;
+    : S0<25>::S5<26>::S6::S7<-1>
 
 
@@ -535,7 +535,7 @@

Synopsis

 
 struct R2
-    : S0<1, void*>;
+    : S0<1, void*>
 
 
@@ -594,7 +594,7 @@

Synopsis

 
 struct R20
-    : S0<27>::S5<28>::S6::S7<29, void*>;
+    : S0<27>::S5<28>::S6::S7<29, void*>
 
 
@@ -626,7 +626,7 @@

Synopsis

 
 struct R21
-    : S0<27>::S5<28>::S6::S7<29, int*>;
+    : S0<27>::S5<28>::S6::S7<29, int*>
 
 
@@ -658,7 +658,7 @@

Synopsis

 
 struct R22
-    : S0<30>::S5<31>::S6::S7<32>;
+    : S0<30>::S5<31>::S6::S7<32>
 
 
@@ -690,7 +690,7 @@

Synopsis

 
 struct R23
-    : S0<33>::S5<34>::S6::S7<35>::S8;
+    : S0<33>::S5<34>::S6::S7<35>::S8
 
 
@@ -722,7 +722,7 @@

Synopsis

 
 struct R24
-    : S0<36>::S5<37>::S6::S7<38>::S9<-1>;
+    : S0<36>::S5<37>::S6::S7<38>::S9<-1>
 
 
@@ -754,7 +754,7 @@

Synopsis

 
 struct R25
-    : S0<39>::S5<40>::S6::S7<41>::S9<42, void*>;
+    : S0<39>::S5<40>::S6::S7<41>::S9<42, void*>
 
 
@@ -786,7 +786,7 @@

Synopsis

 
 struct R26
-    : S0<39>::S5<40>::S6::S7<41>::S9<42, int*>;
+    : S0<39>::S5<40>::S6::S7<41>::S9<42, int*>
 
 
@@ -818,7 +818,7 @@

Synopsis

 
 struct R27
-    : S0<43>::S5<44>::S6::S7<45>::S9<46>;
+    : S0<43>::S5<44>::S6::S7<45>::S9<46>
 
 
@@ -850,7 +850,7 @@

Synopsis

 
 struct R28
-    : S0<0, bool>;
+    : S0<0, bool>
 
 
@@ -909,7 +909,7 @@

Synopsis

 
 struct R29
-    : S0<1, int>;
+    : S0<1, int>
 
 
@@ -968,7 +968,7 @@

Synopsis

 
 struct R3
-    : S0<1, int*>;
+    : S0<1, int*>
 
 
@@ -1000,7 +1000,7 @@

Synopsis

 
 struct R30
-    : S0<2, bool>::S1;
+    : S0<2, bool>::S1
 
 
@@ -1097,7 +1097,7 @@

Synopsis

int I, typename T> struct R31 - : S0<3, bool>::S1::S2<I, T>; + : S0<3, bool>::S1::S2<I, T> @@ -1129,7 +1129,7 @@

Synopsis

 
 struct R32
-    : S0<4, bool>::S1::S2<5, bool>;
+    : S0<4, bool>::S1::S2<5, bool>
 
 
@@ -1161,7 +1161,7 @@

Synopsis

 
 struct R33
-    : S0<6, bool>::S1::S2<7, int>;
+    : S0<6, bool>::S1::S2<7, int>
 
 
@@ -1193,7 +1193,7 @@

Synopsis

 
 struct R34
-    : S0<8, bool>::S1::S2<9, bool>::S3;
+    : S0<8, bool>::S1::S2<9, bool>::S3
 
 
@@ -1257,7 +1257,7 @@

Synopsis

int I, typename T> struct R35 - : S0<10, bool>::S1::S2<11, bool>::S4<I, T>; + : S0<10, bool>::S1::S2<11, bool>::S4<I, T> @@ -1289,7 +1289,7 @@

Synopsis

 
 struct R36
-    : S0<12, bool>::S1::S2<13, bool>::S4<14, bool>;
+    : S0<12, bool>::S1::S2<13, bool>::S4<14, bool>
 
 
@@ -1321,7 +1321,7 @@

Synopsis

 
 struct R37
-    : S0<15, bool>::S1::S2<16, bool>::S4<17, int>;
+    : S0<15, bool>::S1::S2<16, bool>::S4<17, int>
 
 
@@ -1356,7 +1356,7 @@

Synopsis

int I, typename T> struct R38 - : S0<18, bool>::S5<I, T>; + : S0<18, bool>::S5<I, T> @@ -1388,7 +1388,7 @@

Synopsis

 
 struct R39
-    : S0<19, bool>::S5<20, bool>;
+    : S0<19, bool>::S5<20, bool>
 
 
@@ -1420,7 +1420,7 @@

Synopsis

 
 struct R4
-    : S0<2>::S1;
+    : S0<2>::S1
 
 
@@ -1452,7 +1452,7 @@

Synopsis

 
 struct R40
-    : S0<21, bool>::S5<22, int>;
+    : S0<21, bool>::S5<22, int>
 
 
@@ -1484,7 +1484,7 @@

Synopsis

 
 struct R41
-    : S0<23, bool>::S5<24, bool>::S6;
+    : S0<23, bool>::S5<24, bool>::S6
 
 
@@ -1581,7 +1581,7 @@

Synopsis

int I, typename T> struct R42 - : S0<25, bool>::S5<26, bool>::S6::S7<I, T>; + : S0<25, bool>::S5<26, bool>::S6::S7<I, T> @@ -1613,7 +1613,7 @@

Synopsis

 
 struct R43
-    : S0<27, bool>::S5<28, bool>::S6::S7<29, int>;
+    : S0<27, bool>::S5<28, bool>::S6::S7<29, int>
 
 
@@ -1645,7 +1645,7 @@

Synopsis

 
 struct R44
-    : S0<30, bool>::S5<31, bool>::S6::S7<32, bool>;
+    : S0<30, bool>::S5<31, bool>::S6::S7<32, bool>
 
 
@@ -1677,7 +1677,7 @@

Synopsis

 
 struct R45
-    : S0<33, bool>::S5<34, bool>::S6::S7<35, bool>::S8;
+    : S0<33, bool>::S5<34, bool>::S6::S7<35, bool>::S8
 
 
@@ -1741,7 +1741,7 @@

Synopsis

int I, typename T> struct R46 - : S0<36, bool>::S5<37, bool>::S6::S7<38, bool>::S9<I, T>; + : S0<36, bool>::S5<37, bool>::S6::S7<38, bool>::S9<I, T> @@ -1773,7 +1773,7 @@

Synopsis

 
 struct R47
-    : S0<39, bool>::S5<40, bool>::S6::S7<41, bool>::S9<42, int>;
+    : S0<39, bool>::S5<40, bool>::S6::S7<41, bool>::S9<42, int>
 
 
@@ -1805,7 +1805,7 @@

Synopsis

 
 struct R48
-    : S0<43, bool>::S5<44, bool>::S6::S7<45, bool>::S9<46, bool>;
+    : S0<43, bool>::S5<44, bool>::S6::S7<45, bool>::S9<46, bool>
 
 
@@ -1837,7 +1837,7 @@

Synopsis

 
 struct R5
-    : S0<3>::S1::S2<-1>;
+    : S0<3>::S1::S2<-1>
 
 
@@ -1869,7 +1869,7 @@

Synopsis

 
 struct R6
-    : S0<4>::S1::S2<5>;
+    : S0<4>::S1::S2<5>
 
 
@@ -1901,7 +1901,7 @@

Synopsis

 
 struct R7
-    : S0<6>::S1::S2<7, void*>;
+    : S0<6>::S1::S2<7, void*>
 
 
@@ -1933,7 +1933,7 @@

Synopsis

 
 struct R8
-    : S0<6>::S1::S2<7, int*>;
+    : S0<6>::S1::S2<7, int*>
 
 
@@ -1965,7 +1965,7 @@

Synopsis

 
 struct R9
-    : S0<8>::S1::S2<9>::S3;
+    : S0<8>::S1::S2<9>::S3
 
 
diff --git a/test-files/golden-tests/symbols/record/final-class.adoc b/test-files/golden-tests/symbols/record/final-class.adoc new file mode 100644 index 000000000..aba13a332 --- /dev/null +++ b/test-files/golden-tests/symbols/record/final-class.adoc @@ -0,0 +1,115 @@ += Reference +:mrdocs: + +[#index] +== Global namespace + +=== Types + +[cols=1] +|=== +| Name +| link:#A1[`A1`] +| link:#A2[`A2`] +| link:#A3[`A3`] +| link:#B1[`B1`] +| link:#B2[`B2`] +|=== + +[#A1] +== A1 + +=== Synopsis + +Declared in `<final‐class.cpp>` + +[source,cpp,subs="verbatim,replacements,macros,-callouts"] +---- +class A1 final +---- + +[#A2] +== A2 + +=== Synopsis + +Declared in `<final‐class.cpp>` + +[source,cpp,subs="verbatim,replacements,macros,-callouts"] +---- +template<typename T> +class A2 final +---- + +[#A3] +== A3 + +=== Synopsis + +Declared in `<final‐class.cpp>` + +[source,cpp,subs="verbatim,replacements,macros,-callouts"] +---- +class A3 final + : public link:#B1[B1] + , public link:#B2[B2] +---- + +=== Base Classes + +[cols=2] +|=== +| Name +| Description +| `link:#B1[B1]` +| +| `link:#B2[B2]` +| +|=== + +[#B1] +== B1 + +=== Synopsis + +Declared in `<final‐class.cpp>` + +[source,cpp,subs="verbatim,replacements,macros,-callouts"] +---- +class B1; +---- + +=== Derived Classes + +[cols=2] +|=== +| Name +| Description +| link:#A3[`A3`] +| +|=== + +[#B2] +== B2 + +=== Synopsis + +Declared in `<final‐class.cpp>` + +[source,cpp,subs="verbatim,replacements,macros,-callouts"] +---- +class B2; +---- + +=== Derived Classes + +[cols=2] +|=== +| Name +| Description +| link:#A3[`A3`] +| +|=== + + +[.small]#Created with https://www.mrdocs.com[MrDocs]# diff --git a/test-files/golden-tests/symbols/record/final-class.cpp b/test-files/golden-tests/symbols/record/final-class.cpp new file mode 100644 index 000000000..1e6b35980 --- /dev/null +++ b/test-files/golden-tests/symbols/record/final-class.cpp @@ -0,0 +1,20 @@ +class B1 +{ +}; + +class B2 +{ +}; + +class A1 final +{ +}; + +template< typename T > +class A2 final +{ +}; + +class A3 final : public B1, public B2 +{ +}; diff --git a/test-files/golden-tests/symbols/record/final-class.html b/test-files/golden-tests/symbols/record/final-class.html new file mode 100644 index 000000000..ef08ea824 --- /dev/null +++ b/test-files/golden-tests/symbols/record/final-class.html @@ -0,0 +1,169 @@ + + +Reference + + +
+

Reference

+
+
+

+
+

Types

+ + + + + + + + + + + + + + +
Name
A1
A2
A3
B1
B2
+ +
+
+
+

A1

+
+
+

Synopsis

+
+Declared in <final-class.cpp>
+
+
+class A1 final
+
+
+
+ + +
+
+
+

A2

+
+
+

Synopsis

+
+Declared in <final-class.cpp>
+
+
+template<typename T>
+class A2 final
+
+
+
+ + +
+
+
+

A3

+
+
+

Synopsis

+
+Declared in <final-class.cpp>
+
+
+class A3 final
+    : public B1
+    , public B2
+
+
+
+
+

Base Classes

+ + + + + + + + + + + +
NameDescription
B1
B2
+
+ + +
+
+
+

B1

+
+
+

Synopsis

+
+Declared in <final-class.cpp>
+
+
+class B1;
+
+
+
+ + +
+

Derived Classes

+ + + + + + + + + + +
NameDescription
A3 +
+
+
+
+
+

B2

+
+
+

Synopsis

+
+Declared in <final-class.cpp>
+
+
+class B2;
+
+
+
+ + +
+

Derived Classes

+ + + + + + + + + + +
NameDescription
A3 +
+
+
+ +
+
+

Created with MrDocs

+
+ + \ No newline at end of file diff --git a/test-files/golden-tests/symbols/record/final-class.xml b/test-files/golden-tests/symbols/record/final-class.xml new file mode 100644 index 000000000..18e6bf9a3 --- /dev/null +++ b/test-files/golden-tests/symbols/record/final-class.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test-files/golden-tests/symbols/record/local-class.adoc b/test-files/golden-tests/symbols/record/local-class.adoc index 11b88060e..808d70222 100644 --- a/test-files/golden-tests/symbols/record/local-class.adoc +++ b/test-files/golden-tests/symbols/record/local-class.adoc @@ -30,7 +30,7 @@ Declared in `<local‐class.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct B - : decltype(f()); + : decltype(f()) ---- === Base Classes diff --git a/test-files/golden-tests/symbols/record/local-class.html b/test-files/golden-tests/symbols/record/local-class.html index 2d99e148a..cc0fef926 100644 --- a/test-files/golden-tests/symbols/record/local-class.html +++ b/test-files/golden-tests/symbols/record/local-class.html @@ -47,7 +47,7 @@

Synopsis

 
 struct B
-    : decltype(f());
+    : decltype(f())
 
 
diff --git a/test-files/golden-tests/symbols/record/record-inheritance.adoc b/test-files/golden-tests/symbols/record/record-inheritance.adoc index ded06c352..60b84dd22 100644 --- a/test-files/golden-tests/symbols/record/record-inheritance.adoc +++ b/test-files/golden-tests/symbols/record/record-inheritance.adoc @@ -59,7 +59,7 @@ Declared in `<record‐inheritance.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class C1 - : link:#C0[C0]; + : link:#C0[C0] ---- [#C2] @@ -72,7 +72,7 @@ Declared in `<record‐inheritance.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class C2 - : public link:#C0[C0]; + : public link:#C0[C0] ---- === Base Classes @@ -95,7 +95,7 @@ Declared in `<record‐inheritance.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class C3 - : protected link:#C0[C0]; + : protected link:#C0[C0] ---- [#C4] @@ -108,7 +108,7 @@ Declared in `<record‐inheritance.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class C4 - : link:#C0[C0]; + : link:#C0[C0] ---- [#C5] @@ -121,7 +121,7 @@ Declared in `<record‐inheritance.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class C5 - : virtual link:#C0[C0]; + : virtual link:#C0[C0] ---- === Derived Classes @@ -144,7 +144,7 @@ Declared in `<record‐inheritance.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class C6 - : virtual link:#C1[C1]; + : virtual link:#C1[C1] ---- === Derived Classes @@ -168,7 +168,7 @@ Declared in `<record‐inheritance.cpp>` ---- class C7 : public link:#C5[C5] - , public link:#C6[C6]; + , public link:#C6[C6] ---- === Base Classes @@ -237,7 +237,7 @@ Declared in `<record‐inheritance.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct S2 - : link:#S0[S0]; + : link:#S0[S0] ---- === Base Classes @@ -270,7 +270,7 @@ Declared in `<record‐inheritance.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct S3 - : link:#S1[S1]; + : link:#S1[S1] ---- === Base Classes @@ -304,7 +304,7 @@ Declared in `<record‐inheritance.cpp>` ---- struct S4 : link:#S2[S2] - , link:#S3[S3]; + , link:#S3[S3] ---- === Base Classes @@ -330,7 +330,7 @@ Declared in `<record‐inheritance.cpp>` ---- struct S5 : private link:#S0[S0] - , protected link:#S1[S1]; + , protected link:#S1[S1] ---- [#S6] @@ -344,7 +344,7 @@ Declared in `<record‐inheritance.cpp>` ---- template<typename... Ts> struct S6 - : Ts...; + : Ts... ---- === Base Classes diff --git a/test-files/golden-tests/symbols/record/record-inheritance.html b/test-files/golden-tests/symbols/record/record-inheritance.html index 8e1fe4bca..f04c7c496 100644 --- a/test-files/golden-tests/symbols/record/record-inheritance.html +++ b/test-files/golden-tests/symbols/record/record-inheritance.html @@ -81,7 +81,7 @@

Synopsis

 
 class C1
-    : C0;
+    : C0
 
 
@@ -99,7 +99,7 @@

Synopsis

 
 class C2
-    : public C0;
+    : public C0
 
 
@@ -131,7 +131,7 @@

Synopsis

 
 class C3
-    : protected C0;
+    : protected C0
 
 
@@ -149,7 +149,7 @@

Synopsis

 
 class C4
-    : C0;
+    : C0
 
 
@@ -167,7 +167,7 @@

Synopsis

 
 class C5
-    : virtual C0;
+    : virtual C0
 
 
@@ -200,7 +200,7 @@

Synopsis

 
 class C6
-    : virtual C1;
+    : virtual C1
 
 
@@ -234,7 +234,7 @@

Synopsis

class C7 : public C5 - , public C6; + , public C6 @@ -331,7 +331,7 @@

Synopsis

 
 struct S2
-    : S0;
+    : S0
 
 
@@ -378,7 +378,7 @@

Synopsis

 
 struct S3
-    : S1;
+    : S1
 
 
@@ -426,7 +426,7 @@

Synopsis

struct S4 : S2 - , S3; + , S3 @@ -460,7 +460,7 @@

Synopsis

struct S5 : private S0 - , protected S1; + , protected S1 @@ -479,7 +479,7 @@

Synopsis

template<typename... Ts> struct S6 - : Ts...; + : Ts... diff --git a/test-files/golden-tests/symbols/record/template-specialization-inheritance.adoc b/test-files/golden-tests/symbols/record/template-specialization-inheritance.adoc index 46c29c1c5..53f090262 100644 --- a/test-files/golden-tests/symbols/record/template-specialization-inheritance.adoc +++ b/test-files/golden-tests/symbols/record/template-specialization-inheritance.adoc @@ -68,7 +68,7 @@ Declared in `<template‐specialization‐inheritance.cpp> [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R0 - : link:#S0-0c[S0<1>]; + : link:#S0-0c[S0<1>] ---- === Base Classes @@ -99,7 +99,7 @@ Declared in `<template‐specialization‐inheritance.cpp> [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R1 - : link:#S0-09[S0<2>::S1]; + : link:#S0-09[S0<2>::S1] ---- === Base Classes @@ -122,7 +122,7 @@ Declared in `<template‐specialization‐inheritance.cpp> [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct R2 - : link:#S0-073[S0<3>]; + : link:#S0-073[S0<3>] ---- === Base Classes diff --git a/test-files/golden-tests/symbols/record/template-specialization-inheritance.html b/test-files/golden-tests/symbols/record/template-specialization-inheritance.html index 489fc8425..eebd9590d 100644 --- a/test-files/golden-tests/symbols/record/template-specialization-inheritance.html +++ b/test-files/golden-tests/symbols/record/template-specialization-inheritance.html @@ -89,7 +89,7 @@

Synopsis

 
 struct R0
-    : S0<1>;
+    : S0<1>
 
 
@@ -134,7 +134,7 @@

Synopsis

 
 struct R1
-    : S0<2>::S1;
+    : S0<2>::S1
 
 
@@ -166,7 +166,7 @@

Synopsis

 
 struct R2
-    : S0<3>;
+    : S0<3>
 
 
diff --git a/test-files/golden-tests/symbols/typedef/dependency-propagation.adoc b/test-files/golden-tests/symbols/typedef/dependency-propagation.adoc index b6601aff1..85fc9d033 100644 --- a/test-files/golden-tests/symbols/typedef/dependency-propagation.adoc +++ b/test-files/golden-tests/symbols/typedef/dependency-propagation.adoc @@ -95,7 +95,7 @@ Declared in `<dependency‐propagation.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct E - : link:#N-C[N::C<int>]; + : link:#N-C[N::C<int>] ---- === Base Classes diff --git a/test-files/golden-tests/symbols/typedef/dependency-propagation.html b/test-files/golden-tests/symbols/typedef/dependency-propagation.html index 09c548cfb..aa98b326e 100644 --- a/test-files/golden-tests/symbols/typedef/dependency-propagation.html +++ b/test-files/golden-tests/symbols/typedef/dependency-propagation.html @@ -135,7 +135,7 @@

Synopsis

 
 struct E
-    : N::C<int>;
+    : N::C<int>
 
 
diff --git a/test-files/golden-tests/symbols/using/using-member-function.adoc b/test-files/golden-tests/symbols/using/using-member-function.adoc index 716f31477..83c5d60fe 100644 --- a/test-files/golden-tests/symbols/using/using-member-function.adoc +++ b/test-files/golden-tests/symbols/using/using-member-function.adoc @@ -111,7 +111,7 @@ Declared in `<using‐member‐function.cpp>` ---- struct C : link:#A[A] - , link:#B[B]; + , link:#B[B] ---- === Base Classes diff --git a/test-files/golden-tests/symbols/using/using-member-function.html b/test-files/golden-tests/symbols/using/using-member-function.html index 73e77c1f9..5dbef3ddc 100644 --- a/test-files/golden-tests/symbols/using/using-member-function.html +++ b/test-files/golden-tests/symbols/using/using-member-function.html @@ -159,7 +159,7 @@

Synopsis

struct C : A - , B; + , B From 14fdcc4e42e4b8e828c3154906b2c19cb3b33ccf Mon Sep 17 00:00:00 2001 From: Gennaro Prota Date: Tue, 26 Aug 2025 17:07:32 +0200 Subject: [PATCH 2/3] fix: centralize the addition of the (optional) semicolon in our code snippets --- .../common/partials/symbol/signature/record.hbs | 4 ++-- src/lib/Support/Handlebars.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs b/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs index fb2d8c12a..70faa2aa4 100644 --- a/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs +++ b/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs @@ -24,5 +24,5 @@ final;` is ill-formed (`final` can't be used on a non-defining declaration). Similarly, don't show a semicolon if there are base classes. --}} -{{~#unless (or isSeeBelow isFinal bases)}};{{/unless~}} -{{~#isSeeBelow}} { /* see-below */ };{{/isSeeBelow~}} \ No newline at end of file +{{~#isSeeBelow}} { /* see-below */ }{{/isSeeBelow~}} +{{#if (or isSeeBelow (and (not isFinal) (isEmpty bases)))}};{{/if}} \ No newline at end of file diff --git a/src/lib/Support/Handlebars.cpp b/src/lib/Support/Handlebars.cpp index eb17a63be..2b7834698 100644 --- a/src/lib/Support/Handlebars.cpp +++ b/src/lib/Support/Handlebars.cpp @@ -3793,6 +3793,16 @@ block_helper_missing_fn( return {}; } +Expected +is_empty_fn(dom::Array const& arguments) +{ + if (arguments.size() != 2) { + return Unexpected(Error("isEmpty requires exactly one argument")); + } + + return dom::Value(isEmpty(arguments.get(0))); +} + void registerBuiltinHelpers(Handlebars& hbs) { @@ -3804,6 +3814,7 @@ registerBuiltinHelpers(Handlebars& hbs) hbs.registerHelper("log", dom::makeVariadicInvocable(log_fn)); hbs.registerHelper("helperMissing", dom::makeVariadicInvocable(helper_missing_fn)); hbs.registerHelper("blockHelperMissing", dom::makeInvocable(block_helper_missing_fn)); + hbs.registerHelper("isEmpty", dom::makeVariadicInvocable(is_empty_fn)); } void From eda7747f15c020c8550ec3d37f248095fc474ae2 Mon Sep 17 00:00:00 2001 From: Gennaro Prota Date: Wed, 27 Aug 2025 20:09:07 +0200 Subject: [PATCH 3/3] fix: give up using `isEmpty`, as per PR #965 comments --- .../generator/common/partials/symbol/signature/record.hbs | 2 +- src/lib/Support/Handlebars.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs b/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs index 70faa2aa4..7d5bcbf83 100644 --- a/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs +++ b/share/mrdocs/addons/generator/common/partials/symbol/signature/record.hbs @@ -25,4 +25,4 @@ declaration). Similarly, don't show a semicolon if there are base classes. --}} {{~#isSeeBelow}} { /* see-below */ }{{/isSeeBelow~}} -{{#if (or isSeeBelow (and (not isFinal) (isEmpty bases)))}};{{/if}} \ No newline at end of file +{{#if (or isSeeBelow (and (not isFinal) (eq (len bases) 0)))}};{{/if}} \ No newline at end of file diff --git a/src/lib/Support/Handlebars.cpp b/src/lib/Support/Handlebars.cpp index 2b7834698..1444ae6bf 100644 --- a/src/lib/Support/Handlebars.cpp +++ b/src/lib/Support/Handlebars.cpp @@ -3814,7 +3814,6 @@ registerBuiltinHelpers(Handlebars& hbs) hbs.registerHelper("log", dom::makeVariadicInvocable(log_fn)); hbs.registerHelper("helperMissing", dom::makeVariadicInvocable(helper_missing_fn)); hbs.registerHelper("blockHelperMissing", dom::makeInvocable(block_helper_missing_fn)); - hbs.registerHelper("isEmpty", dom::makeVariadicInvocable(is_empty_fn)); } void