Je suis intéressé à mettre une accolade ouvrante pour les fonctions (mais pas si les instructions et autres contextes). Par exemple
void foo()
{
...
}
Mis à part les guerres de flammes, y a-t-il une bonne justification pour pas faire cela? Bien que j'utilise des crochets ouverts de même ligne pour les blocs if/else et plus petits, je pense que dans ce cas, l'organisation visuelle d'unités de code plus grandes (fonctions/méthodes/classes/structures) peut l'emporter sur une cohérence parfaite.
De plus, comment puis-je obtenir le format clang pour suivre ce style?
Comme le dit documentation , appelez clang-format
avec -style=file
, et utilisez un .clang-format
fichier placé dans un répertoire englobant pour personnaliser les options de style. L'option de style de format spécifiant le placement de l'accolade s'appelle BreakBeforeBraces
. Depuis les documents,
BreakBeforeBraces (
BraceBreakingStyle
)Le style de rupture d'accolade à utiliser.
Valeurs possibles:
BS_Attach
(dans la configuration:Attach
) Attachez toujours les accolades au contexte environnant.BS_Linux
(dans la configuration:Linux
) CommeAttach
, mais s'arrête avant les accolades sur les définitions de fonction, d'espace de nom et de classe.BS_Stroustrup
(dans la configuration:Stroustrup
) CommeAttach
, mais casse avant les définitions de fonction et ‘else’.BS_Allman
(dans la configuration:Allman
) Toujours rompre avant les accolades.BS_GNU
(dans la configuration:GNU
) Séparez toujours avant les accolades et ajoutez un niveau supplémentaire d'indentation aux accolades des instructions de contrôle, pas à celles de la classe, de la fonction ou d'autres définitions.
Le style qui correspond à votre description est BS_Stroustrup
. Ajoutez l'entrée suivante à votre .clang-format
BreakBeforeBraces: Stroustrup
En plus des documents, clangformat.com répertorie toutes les options et illustre bon nombre d'entre elles avec des exemples.
Pradhan a un excellente réponse , mais vous pouvez constater que vous obtenez des pauses là où vous ne les voulez pas (comme je l'ai trouvé).
Il existe une autre option, "Custom", dans au moins les versions au format clang 3.8 et 5 (j'utilise 3.8 et j'ai trouvé BS_Custom dans les 5 documents). Avec cela, vous pouvez spécifier dans BraceWrapping ce que vous voulez, y compris une option "AfterFunction".
Dans l'extrait d'exemple suivant, j'ai répertorié les autres comme vrai/faux car la question de l'OP spécifie uniquement AfterFunction (c'est-à-dire "avant d'ouvrir l'accolade d'une fonction"):
BraceWrapping:
AfterClass: true
AfterControlStatement: true
AfterEnum: true/false
AfterFunction: true
AfterNamespace: true/false
AfterObjCDeclaration: true/false
AfterStruct: true/false
AfterUnion: true/false
BeforeCatch: true/false
BeforeElse: true/false
IndentBraces: true/false
BreakBeforeBraces: Custom
J'ai testé cela avec ma configuration et cela donne un contrôle plus fin de la rupture de l'accolade.