Beaucoup de développeurs, même expérimentés, ne prêtent pas (ou pas assez)
attention au formatage du code.
Pourtant, l'utilisation d'un template de formatage de code présente les
entre autres les avantages suivants:
- le code est plus facile à lire
- Les lignes blanches successives et inutiles sont évitées
- En Java, le pavé des imports sera toujours cohérent entre les
développeurs
- Il permet de voir facilement les blocs, même ceux ne contenant qu'une
instruction
- Une fois un template de formatage choisi dans une équipe, les conflits à
l'update sont évités et les merges facilités
Malheureusement, la plupart des projets de développement n'imposent pas un
template de formatage et les développeurs se contentent trop souvent du
template par défaut de leur environnement de développement. Et comme tous les
développeurs n'utilisent pas le même IDE ...
Eclipse propose par exemple trois templates par défaut, qui tous utilisent
des tabulations pour indenter le code ... Pire, le profile "Java Conventions"
utilise à la fois des tabulations et des espaces. C'est bien dommage qu'Eclipse
propose de formater le code avec des tabulations, ce que très peu de gens font
encore. Parait t'il qu'historiquement, ce choix avait pour but de "sauver" de
l'espace disque !!! Cette époque là est bien révolue. Enfin, pour modifier la
façon de formater le code par défaut d'Eclipse, il faut dupliquer le profile
avant de pouvoir le modifier, ce qui n'est pas très commode. IntelliJ IDEA
n'impose pas cette restriction.
Dans ce billet, on va quand même dupliquer le profile par défaut d'IntelliJ,
pour pouvoir exporter nos paramètres et aussi revenir facilement au profile par
défaut.
Interdire la détection de l'indentation existante
Première chose à faire dans IntelliJ IDEA, décocher la case "Detect and use
existing file indents for editing". En effet, avec cette option, si un fichier
est indenté avec des tabulations, IntelliJ considèrera qu'il faut continuer
d'indenter de cette façon !!!
Utiliser EditorConfig ou pas ?
EditorConfig est un format de fichier texte permettant de définir des
profiles de formatage de code, via quelques propriétés. Ce format est censé
être supporté par de nombreux éditeurs, ce qui est très séduisant.
Malheureusement, trop peu de propriétés sont implémentées par exemple par le
plugin EditorConfig pour IntelliJ, et on est donc amené à définir le reste du
paramétrage dans la configuration standard de l'éditeur. J'y reviendrai peut
être dans un billet séparé. Pour l'instant, on va cocher qu'on n'utilise pas
EditorConfig.
Onglet 'Tabs and Indents'
On ne change rien dans cette section puisqu'IntelliJ utilise par défaut les
espaces pour l'indentation et 4 de plus à chaque bloc. Ce formatage nous
convient.
Onglet 'Spaces'
Dans cette section, on va cocher dans la sous-section 'Within' la case
'Array initializer braces', ce qui permet de mieux voir les paramètres dans les
appels à log4j ou java.util.logging.
Onglet 'Wrapping and braces'
C'est dans cette section que l'on va modifier le plus de choses.
Concernant la position des accolades, on va adopter le style Allman, c'est à dire positionner les accolades sur la ligne
suivante.
Toutes les valeurs de la sous section 'Braces placement' seront donc
positionnées à 'Next line'.
Une fois qu'on a fait cela, il est logique:
- dans 'if() statement' de cocher 'else on new line'
- dans 'try statement' de cocher 'catch on new line' et 'finally on new
line'
- dans 'do while statement' de cocher 'while on new line'
Enfin, afin que les blocs soient bien visibles, même ceux ne contenant
qu'une instruction, on va position à 'always' les propriétés 'Force braces' des
sous-sections suivantes:
- 'if() statement'
- 'for() statement'
- 'while() statement'
- 'do while() statement'
Onglet 'Blank lines'
Dans la sous-section 'Keep maximum blank lines', on positionnera les 3
propriétés suivantes à 1 au lieu de 2:
- In declarations:
- In code:
- Before '{':
En effet, je trouve que trop de lignes blanches n'aide pas à la lisibilité
mais nous oblige à scroller.
Onglets 'JavaDoc', 'Imports' et 'Arrangement'
Je ne modifie rien pour l'instant.
Onglet 'Code generation'
Dans la section 'Final modifier' on coche les deux cases:
- Make generated local variables final
- Make generated parameters final
Vous pouvez utiliser le Formateur
de code Java pour IDEA défini ci-dessous en le téléchargeant avec le lien
précédent.