2012-11-15 6 views
6

Come posso configurare Perltidy formattare lungo se dichiarazioni come questa:Perltidy complesso formattazione se

if (
    ('this is an example' =~ /an.*example/ and 1 * 2 * 3 == 6) or 
    ('hello world' =~ /world/ and 6 = 3 * 2 * 1) 
) { 
    print "hello\n"; 
} 

o come questo

if (
    ('this is an example' =~ /an.*example/ and 1 * 2 * 3 == 6) 
    or ('hello world' =~ /world/ and 6 == 3 * 2 * 1) 
) { 
    print "hello\n"; 
} 

Edit1: perltidyrc

--maximum-line-length=100 
--indent-columns=4 
--default-tabsize=4 
--continuation-indentation=4 
--closing-token-indentation=0 

--no-indent-closing-brace 

--paren-tightness=2 
--square-bracket-tightness=2 
--block-brace-tightness=0 

--trim-qw 

--nospace-terminal-semicolon 
--nospace-for-semicolon 

--indent-spaced-block-comments 
--ignore-side-comment-lengths 

--cuddled-else 

--no-opening-brace-on-new-line 
--no-opening-sub-brace-on-new-line 
--no-opening-anonymous-sub-brace-on-new-line 
--no-brace-left-and-indent 

--blanks-before-comments 
--blank-lines-before-subs=1 
--blanks-before-blocks 
--maximum-consecutive-blank-lines=1 

Edit2: L'idea è di avere una nuova riga dopo il primo ( e anche l'ultimo ) di essere su una nuova riga con {. Se ciò non è possibile, saranno apprezzati altri suggerimenti per una migliore formattazione.

risposta

4

Lo stile predefinito di Pertidy è seguire lo Perl Style Guide dove possibile. Che si traduce in questo output:

if ( ('this is an example' =~ /an.*example/ and 1 * 2 * 3 == 6) 
    or ('hello world' =~ /world/ and 6 == 3 * 2 * 1)) 
{ 
    print "hello\n"; 
} 

è possibile controllare le parentesi graffe se sono su una nuova linea oppure no. Puoi controllare la rigidità delle parentesi. Tuttavia, non è possibile controllare le nuove linee per parentesi nei blocchi di codice.

Lo stile predefinito è il più vicino possibile a raggiungere l'output desiderato.

+0

C'è un modo per aggiungere spazi prima/dopo le parentesi esterne se l'istruzione è multilinea? (p.s. Ho aggiunto il mio perltidyrc in cui li rimuovo) – bliof

+0

@bliof, no, le opzioni per i blocchi di stile sono piuttosto limitate. – titanofold

2

Se è odioso lunga, un'idea potrebbe essere quella di limitare la lunghezza massima di ogni linea con -l=n, dove n è la lunghezza massima di ogni linea:

$ cat perltidy_test.pl 
if (
    ('this is an example' =~ /an.*example/ and 1 * 2 * 3 == 6) or('hello world' =~ /world/ and 6 = 3 * 2 * 1) 
) { 
    print "hello\n"; 
} 

$ perltidy -l=60 perltidy_test.pl 
$ cat pertidy_test.pl.tdy 
if (
    (
     'this is an example' =~ /an.*example/ 
     and 1 * 2 * 3 == 6 
    ) 
    or ('hello world' =~ /world/ and 6 == 3 * 2 * 1) 
) 
{ 
    print "hello\n"; 
} 
0

provare

$ Perltidy - bli -wba = 'o' perltidy_test.pl

che funziona per questo esempio ...

+0

Non ne sono così sicuro. Il 'bli' fa rientrare le parentesi graffe e' wba' aggiunge una nuova riga dopo 'or'. Modificherò la domanda per specificare il problema. – bliof

+0

** $ perltidy -anl -bbb tidy_test.pl ** :) '-anl' aggiungi nuove righe ' -bbb' aggiungi riga vuota tra i blocchi principali –