@@ -2049,7 +2049,7 @@ def __init__(self, args: List[ASTFunctionParameter], volatile: bool, const: bool
20492049 refQual : Optional [str ], exceptionSpec : ASTNoexceptSpec ,
20502050 trailingReturn : "ASTType" ,
20512051 override : bool , final : bool , attrs : ASTAttributeList ,
2052- initializer : Optional [str ]) -> None :
2052+ initializer : Optional [str ], 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 ('(' , '(' )
@@ -6235,7 +6240,7 @@ def _parse_parameters_and_qualifiers(self, paramMode: str) -> ASTParametersQuali
62356240
62366241 return ASTParametersQualifiers (
62376242 args , volatile , const , refQual , exceptionSpec , trailingReturn ,
6238- override , final , attrs , initializer )
6243+ override , final , attrs , initializer , multiline = self . multiline )
62396244
62406245 def _parse_decl_specs_simple (self , outer : str , typed : bool ) -> ASTDeclSpecsSimple :
62416246 """Just parse the simple ones."""
@@ -7189,6 +7194,7 @@ class CPPObject(ObjectDescription[ASTDeclaration]):
71897194 'noindexentry' : directives .flag ,
71907195 'nocontentsentry' : directives .flag ,
71917196 'tparam-line-spec' : directives .flag ,
7197+ 'singlelinesig' : directives .flag ,
71927198 }
71937199
71947200 def _add_enumerator_to_parent (self , ast : ASTDeclaration ) -> None :
@@ -7347,7 +7353,14 @@ def run(self) -> List[Node]:
73477353 def handle_signature (self , sig : str , signode : desc_signature ) -> ASTDeclaration :
73487354 parentSymbol : Symbol = self .env .temp_data ['cpp:parent_symbol' ]
73497355
7350- parser = DefinitionParser (sig , location = signode , config = self .env .config )
7356+ max_len = self .env .config .cpp_maximum_signature_line_length
7357+ multiline = (
7358+ max_len >= 0
7359+ and 'singlelinesig' not in self .options
7360+ and len (sig ) > max_len
7361+ )
7362+ signode ['is_multiline' ] = multiline
7363+ parser = DefinitionParser (sig , location = signode , config = self .env .config , multiline = multiline )
73517364 try :
73527365 ast = self .parse_definition (parser )
73537366 parser .assert_end ()
@@ -8139,6 +8152,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
81398152 app .add_config_value ("cpp_index_common_prefix" , [], 'env' )
81408153 app .add_config_value ("cpp_id_attributes" , [], 'env' )
81418154 app .add_config_value ("cpp_paren_attributes" , [], 'env' )
8155+ app .add_config_value ("cpp_maximum_signature_line_length" , - 1 , 'env' )
81428156 app .add_post_transform (AliasTransform )
81438157
81448158 # debug stuff
0 commit comments