@@ -2049,7 +2049,7 @@ def __init__(self, args: list[ASTFunctionParameter], volatile: bool, const: bool
20492049 refQual : str | None , exceptionSpec : ASTNoexceptSpec ,
20502050 trailingReturn : ASTType ,
20512051 override : bool , final : bool , attrs : ASTAttributeList ,
2052- initializer : str | None ) -> None :
2052+ initializer : str | None , multiline : bool = False ) -> None :
20532053 self .args = args
20542054 self .volatile = volatile
20552055 self .const = const
@@ -2060,6 +2060,7 @@ def __init__(self, args: list[ASTFunctionParameter], volatile: bool, const: bool
20602060 self .final = final
20612061 self .attrs = attrs
20622062 self .initializer = initializer
2063+ self .multiline = multiline
20632064
20642065 @property
20652066 def function_params (self ) -> list [ASTFunctionParameter ]:
@@ -2129,13 +2130,17 @@ def _stringify(self, transform: StringifyTransform) -> str:
21292130 def describe_signature (self , signode : TextElement , mode : str ,
21302131 env : BuildEnvironment , symbol : Symbol ) -> None :
21312132 verify_description_mode (mode )
2133+ multiline = self .multiline
21322134 # only use the desc_parameterlist for the outer list, not for inner lists
21332135 if mode == 'lastIsName' :
2134- paramlist = addnodes .desc_parameterlist ()
2136+ paramlist = addnodes .desc_multiline_parameterlist () if multiline else addnodes . desc_parameterlist ()
21352137 for arg in self .args :
2138+ param_node = addnodes .desc_content () if multiline else paramlist
21362139 param = addnodes .desc_parameter ('' , '' , noemph = True )
21372140 arg .describe_signature (param , 'param' , env , symbol = symbol )
2138- paramlist += param
2141+ param_node += param
2142+ if multiline :
2143+ paramlist += param_node
21392144 signode += paramlist
21402145 else :
21412146 signode += addnodes .desc_sig_punctuation ('(' , '(' )
@@ -6240,7 +6245,7 @@ def _parse_parameters_and_qualifiers(self, paramMode: str) -> ASTParametersQuali
62406245
62416246 return ASTParametersQualifiers (
62426247 args , volatile , const , refQual , exceptionSpec , trailingReturn ,
6243- override , final , attrs , initializer )
6248+ override , final , attrs , initializer , multiline = self . multiline )
62446249
62456250 def _parse_decl_specs_simple (self , outer : str , typed : bool ) -> ASTDeclSpecsSimple :
62466251 """Just parse the simple ones."""
@@ -7194,6 +7199,7 @@ class CPPObject(ObjectDescription[ASTDeclaration]):
71947199 'noindexentry' : directives .flag ,
71957200 'nocontentsentry' : directives .flag ,
71967201 'tparam-line-spec' : directives .flag ,
7202+ 'singlelinesig' : directives .flag ,
71977203 }
71987204
71997205 def _add_enumerator_to_parent (self , ast : ASTDeclaration ) -> None :
@@ -7350,7 +7356,14 @@ def run(self) -> list[Node]:
73507356 def handle_signature (self , sig : str , signode : desc_signature ) -> ASTDeclaration :
73517357 parentSymbol : Symbol = self .env .temp_data ['cpp:parent_symbol' ]
73527358
7353- parser = DefinitionParser (sig , location = signode , config = self .env .config )
7359+ max_len = self .env .config .cpp_maximum_signature_line_length
7360+ multiline = (
7361+ max_len >= 0
7362+ and 'singlelinesig' not in self .options
7363+ and len (sig ) > max_len
7364+ )
7365+ signode ['is_multiline' ] = multiline
7366+ parser = DefinitionParser (sig , location = signode , config = self .env .config , multiline = multiline )
73547367 try :
73557368 ast = self .parse_definition (parser )
73567369 parser .assert_end ()
@@ -8142,6 +8155,7 @@ def setup(app: Sphinx) -> dict[str, Any]:
81428155 app .add_config_value ("cpp_index_common_prefix" , [], 'env' )
81438156 app .add_config_value ("cpp_id_attributes" , [], 'env' )
81448157 app .add_config_value ("cpp_paren_attributes" , [], 'env' )
8158+ app .add_config_value ("cpp_maximum_signature_line_length" , - 1 , 'env' )
81458159 app .add_post_transform (AliasTransform )
81468160
81478161 # debug stuff
0 commit comments