From 537aa92b9fea3bb642252c34e1dacfe90e835832 Mon Sep 17 00:00:00 2001 From: Marcel Koch Date: Fri, 22 Nov 2024 15:26:25 +0000 Subject: [PATCH 1/2] Handle parameter packs `T...` --- sphinxcontrib/doxylink/parsing.py | 6 +++++- tests/test_parser.py | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/sphinxcontrib/doxylink/parsing.py b/sphinxcontrib/doxylink/parsing.py index 32b4b51..74be0f4 100644 --- a/sphinxcontrib/doxylink/parsing.py +++ b/sphinxcontrib/doxylink/parsing.py @@ -57,7 +57,8 @@ def normalise_templates(toks): input_type('input_type').setParseAction(' '.join) + \ Opt(pointer_or_reference, default='')("pointer_or_reference1") + \ Opt('const')('const_pointer_or_reference') + \ - Opt(pointer_or_reference, default='')("pointer_or_reference2") + Opt(pointer_or_reference, default='')("pointer_or_reference2") +\ + Opt('...')("parameter_pack") # Argument + variable name + default argument = Group(argument_type('argument_type') + Opt(input_name) + Opt(default_value)) @@ -137,6 +138,9 @@ def normalise(symbol: str) -> Tuple[str, str]: # And combine them into a single normalised string and add them to the argument list argument_string_list.extend(const_pointer_ref_list) + # Add template parameter pack + argument_string_list.append(arg.parameter_pack) + # Finally we join our argument string and add it to our list normalised_arg_list.append(''.join(argument_string_list)) diff --git a/tests/test_parser.py b/tests/test_parser.py index 216ecb0..887705b 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -45,6 +45,7 @@ ] varargs = [ + ('(Args&& ... args)', ('', '(Args&&...)')), ('(int nb=0,...)', ('', '(int, ...)')), ('printf( const char* format, ... )', ('printf', '(const char*, ...)')), ('fprintf( std::FILE* stream, const char* format, ... )', ('fprintf', '(std::FILE*, const char*, ...)')), From 0410fe631fcf0fcf43be40751c140eca2984a210 Mon Sep 17 00:00:00 2001 From: jce Date: Tue, 21 Jan 2025 15:16:14 +0100 Subject: [PATCH 2/2] Fix bad merge commit c5de14f9d29274d88f18c973c6db1ed1608a7d33 --- sphinxcontrib/doxylink/parsing.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/sphinxcontrib/doxylink/parsing.py b/sphinxcontrib/doxylink/parsing.py index 5383c0b..ee6e848 100644 --- a/sphinxcontrib/doxylink/parsing.py +++ b/sphinxcontrib/doxylink/parsing.py @@ -56,11 +56,10 @@ def normalise_templates(toks): default_value = Literal('=') + OneOrMore(number | quotedString | input_type | parentheses_pair | angle_bracket_pair | square_bracket_pair | curly_bracket_pair | Word('|&^')) # A combination building up the interesting bit -- the argument type, e.g. 'const QString &', 'int' or 'char*' -argument_type = Opt(qualifier, default='')("qualifier") + \ - input_type('input_type').setParseAction(' '.join) + \ - Opt(pointer_or_reference, default='')("pointer_or_reference1") + \ - Opt('const')('const_pointer_or_reference') + \ - Opt(pointer_or_reference, default='')("pointer_or_reference2") + \ +argument_type = Opt(qualifier, default='')("qualifier1") + \ + input_type("input_type").setParseAction(' '.join) + \ + Opt(qualifier, default='')("qualifier2") + \ + Group(ZeroOrMore(pointer_or_reference))("pointer_or_references") + \ Opt('...')("parameter_pack") # Argument + variable name + default