Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Emacs, Perl et indentation

15 réponses
Avatar
Pierrick LE GALL
Bonjour,

Je n'arrive à configurer Emacs pour qu'il indente mon code Perl comme je
le souhaite. J'utilise le mode cperl (comme conseillé un partout).

Voici ce que je souhaite obtenir :

if (exists $opt{backup}) {

my @directories = (
'intranet/cgi-bin',
'intranet/htdocs/intranet-tmpl',
'intranet/modules/C4',
'opac/cgi-bin',
'opac/htdocs',
);

foreach my $directory (map {$opt{install_dir}.'/'.$_} @directories) {
system 'mv', $directory, $directory.'.bak';
}
}

Donc, indentation de 4 colonnes (avec des espaces) ce que j'arrive à
faire sans problème, là où j'ai du mal, c'est l'indentation de 4
colonnes pour les éléments de mon tableau @directories. Pour le moment,
je n'obtiens que :

my @directories = (
'intranet/cgi-bin',
'intranet/htdocs/intranet-tmpl',
'intranet/modules/C4',
'opac/cgi-bin',
'opac/htdocs',
);

Ce qui ne me convient pas car l'indentation est fonction de la longueur
du nom de mon tableau :-/

@+

--
Pierrick LE GALL

10 réponses

1 2
Avatar
Paul Gaborit
À (at) Thu, 09 Mar 2006 11:32:59 +0100,
Pierrick LE GALL écrivait (wrote):
Je n'arrive à configurer Emacs pour qu'il indente mon code Perl comme je
le souhaite. J'utilise le mode cperl (comme conseillé un partout).
[...]

Donc, indentation de 4 colonnes (avec des espaces) ce que j'arrive à
faire sans problème, là où j'ai du mal, c'est l'indentation de 4
colonnes pour les éléments de mon tableau @directories. Pour le moment,
je n'obtiens que :

my @directories = (
'intranet/cgi-bin',
'intranet/htdocs/intranet-tmpl',
'intranet/modules/C4',
'opac/cgi-bin',
'opac/htdocs',
);

Ce qui ne me convient pas car l'indentation est fonction de la longueur
du nom de mon tableau :-/


Deux solutions :

1 - Positionner la variable 'cperl-indent-parens-as-block' à 1. Ça
fera ce que vous voulez pour les tableaux mais ça peut avoir des
effets par ailleurs (je n'ai jamais utilisé cette valeur pour cette
variable).

2 - Écrire vos tableaux (ou tables de hachage un peu différement :

my @directories (
'intranet/cgi-bin',
'intranet/htdocs/intranet-tmpl',
'intranet/modules/C4',
'opac/cgi-bin',
'opac/htdocs',
);

C'est la solution que j'ai retenue personnellement car je conserve
ainsi les deux possibilités d'indentation...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Pierrick LE GALL
Paul Gaborit writes:

Deux solutions :

1 - Positionner la variable 'cperl-indent-parens-as-block' à 1. Ça
fera ce que vous voulez pour les tableaux mais ça peut avoir des
effets par ailleurs (je n'ai jamais utilisé cette valeur pour cette
variable).


Malheureusement, cette variable n'a aucun effet sur mon installation
(Emacs 21.4.1, CPerl 4.23), avant de la placer dans mon fichier de
configuration, je l'ai cherché via M-x describe-variable, sans succès.

2 - Écrire vos tableaux (ou tables de hachage un peu différement :

my @directories > (
'intranet/cgi-bin',
'intranet/htdocs/intranet-tmpl',
'intranet/modules/C4',
'opac/cgi-bin',
'opac/htdocs',
);

C'est la solution que j'ai retenue personnellement car je conserve
ainsi les deux possibilités d'indentation...


C'est la solution que je vais finir par retenir également :-/ C'est déjà
très proche du résultat initialement souhaité :-)

Pouvez vous me donner l'extrait de votre fichier de configuration
traitant CPerl ? (parce que je n'obtiens pas tout à fait la présentation
que vous proposez et par comparaison, j'arriverai mieux à comprendre
quelle variable a quel effet)

Merci pour le coup de main.

@+

--
Pierrick LE GALL

Avatar
Paul Gaborit
À (at) Thu, 09 Mar 2006 14:54:59 +0100,
Pierrick LE GALL écrivait (wrote):
Malheureusement, cette variable n'a aucun effet sur mon installation
(Emacs 21.4.1, CPerl 4.23), avant de la placer dans mon fichier de
configuration, je l'ai cherché via M-x describe-variable, sans succès.


J'utilise la version 5.0 qui est datée du 17/02/2003. Votre version me
semble très très vieille. La dernière version (la 5.16) date du
21/02/2006 et elle est disponible sur :

<http://math.berkeley.edu/~ilya/software/emacs/>

Pouvez vous me donner l'extrait de votre fichier de configuration
traitant CPerl ? (parce que je n'obtiens pas tout à fait la présentation
que vous proposez et par comparaison, j'arriverai mieux à comprendre
quelle variable a quel effet)


La présentation que j'obtiens n'est pas exactement celle que je vous
ai montrée. Voici ce que j'obtiens :

my @array (
1,
2,
);

Ceci avec les règlages par défaut (indent-style 'CPerl'). Si vous
choisissez le style 'PerlStyle' qui utilise une indentation sur 4
espaces comme vous le souhaitez, vous devriez obtenir :

my @array (
1,
2,
);

Le choix du style d'indentation se fait soit par customize soit dans
le menu Perl du mode CPerl.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Pierrick LE GALL
Paul Gaborit writes:

[...] Votre version me semble très très vieille. [...]


Ah oui en effet, une fois la 5.16 installée, ça va beaucoup mieux !

Voici l'extrait de mon ~/.emacs.el qui traite de CPerl:

(custom-set-variables
'(cperl-close-paren-offset -4)
'(cperl-continued-statement-offset 4)
'(cperl-indent-level 4)
'(cperl-indent-parens-as-block t)
'(cperl-tab-always-indent t)
)

(cela correspond à la configuration recommandée par Damian Conway dans
"Perl Best Practices"), et le résultat correspond exactement à mes
attentes initiales :-)

Merci beaucoup Paul

--
Pierrick LE GALL

Avatar
Paul Gaborit
À (at) Thu, 09 Mar 2006 16:42:24 +0100,
Pierrick LE GALL écrivait (wrote):
Ah oui en effet, une fois la 5.16 installée, ça va beaucoup mieux !


Super...

[...]
(cela correspond à la configuration recommandée par Damian Conway dans
"Perl Best Practices"), et le résultat correspond exactement à mes
attentes initiales :-)


Comme on dit : les goûts et les couleurs... ;-)

Ce qui compte vraiment c'est que le mode d'indentation choisi soit le
même dans tout le source (voir dans tout le projet).

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Pierrick LE GALL
Paul Gaborit writes:

Ce qui compte vraiment c'est que le mode d'indentation choisi soit le
même dans tout le source (voir dans tout le projet).


En effet, et c'est le plus difficile car je rejoins un projet déjà
existant avec des dizaines de milliers de lignes, sans cohérence globale
au niveau des règles de présentation :-/

@+

--
Pierrick LE GALL

Avatar
paul POULAIN
Pierrick LE GALL wrote:
En effet, et c'est le plus difficile car je rejoins un projet déjà
existant avec des dizaines de milliers de lignes, sans cohérence globale
au niveau des règles de présentation :-/


(ce qui suit est un peu privé, mais comme ca vous saurez que maintenant vous
n'avez pas qu'un développeur Koha qui vient poser des questions ici, mais
2 !!! - je ne sais pas si Henri-Damien, le 3eme larron français du projet
lit ce ng- )

Oh !!! que je ne suis pas d'accord :
Déjà il y a ca : http://www.kohadocs.org/codingguidelines.html (qui ne parle
pas du sujet proprement dit, mais n'hésite pas à compléter le XML)

Et puis ensuite, on a déjà parlé sur koha-devel (il y a très longtemps) de
la fameuse question des tabulations ou espaces : pour ma part, je mets
systématiquement des tabulations réglées sur 8 espaces (ou 6 ? petit trou
sur l'instant)
Et comme je suis le principal fournisseur de commits sur ce projet... ;-)
Il y a dans certains scripts la règle vi qui permet de régler ca même avec
des espaces.

PS : pour l'épineuse et récurrente question des if { } else {} et de
l'indentation, je me moque de la position des {} (même ligne ou au
dessous), mais j'indente le contenu immédiatement :
if () {
<code>
} else {
<re code>
}

joshua a commité il y a peu des choses pas très lisibles, il faudra que l'on
aborde la question à nouveau cela dit...

Désolé pour le hors sujet ;-)
--
Paul

Avatar
Paul Gaborit
À (at) Thu, 16 Mar 2006 12:00:53 +0100,
paul POULAIN écrivait (wrote):
Et puis ensuite, on a déjà parlé sur koha-devel (il y a très long temps) de
la fameuse question des tabulations ou espaces : pour ma part, je mets
systématiquement des tabulations réglées sur 8 espaces (ou 6 ? peti t trou
sur l'instant)


Un petit conseil : n'utilisez jamais de tabulation mais toujours des
espaces. Afin de garantir votre présentation. Ça n'empêche pas
d'utiliser la touche tabulation pour indenter. Il faut juste que votre
éditeur remplace cela par le bons nombre d'espaces...

6 (ou pire 8) espaces d'indentation me semble très gros.
Habituellement, en programmation on choisit entre 2 et 4.
Personnellement je préfère 2 mais si un projet utilise 4, je respecte.

Et comme je suis le principal fournisseur de commits sur ce projet... ;-)
Il y a dans certains scripts la règle vi qui permet de régler ca mê me avec
des espaces.

PS : pour l'épineuse et récurrente question des if { } else {} et de
l'indentation, je me moque de la position des {} (même ligne ou au
dessous), mais j'indente le contenu immédiatement :
if () {
<code>
} else {
<re code>
}


Dans tout projet de développement, il *faut* des règles de
présentation du code. Celles que vous choisirez seront les
bonnes... si vous vous y tenez ;-)

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
gerbier
Paul Gaborit wrote:

Un petit conseil : n'utilisez jamais de tabulation mais toujours des
espaces. Afin de garantir votre présentation. Ça n'empêche pas
d'utiliser la touche tabulation pour indenter. Il faut juste que votre
éditeur remplace cela par le bons nombre d'espaces...



j'ai du mal à comprendre l'argumentation : si chaque indentation est
tabulée, la présentation aura la même tête partout. Et chaque
utilisateur pourra régler l'espacement selon ses goûts sans perturber
les autres, ni les forcer à s'adapter.

Avatar
Pierrick LE GALL
Bonjour,

Paul Gaborit writes:

Un petit conseil : n'utilisez jamais de tabulation mais toujours des
espaces. [...]


Je suis bien d'accord, j'ai abandonné les tabulations depuis des
années. Tous les bookins que j'ai pu lire qui traite le sujet sont
unanimement d'accord sur ce point. Je vais faire du lobbying sur le
projet, on verra ce que ça donne :-)

6 (ou pire 8) espaces d'indentation me semble très gros.
Habituellement, en programmation on choisit entre 2 et 4.
Personnellement je préfère 2 mais si un projet utilise 4, je respecte.


Idem, 8 c'est énorme ! J'utilise souvent 2 mais je concède volontiers 4
pour atteindre le compromis.

En fait, cela dépend de la longueur des lignes que l'on souhaite
produire. Si on dit qu'on ne dépasse pas 80 colonnes par exemple, 8
colonnes d'indentation, c'est absolument ingérable.

Dans tout projet de développement, il *faut* des règles de
présentation du code. Celles que vous choisirez seront les
bonnes... si vous vous y tenez ;-)


Oui, tout le sujet étant de se mettre d'accord (ou d'imposer).

@+ et merci Paul pour les conseils

--
Pierrick LE GALL

1 2