2012-11-15 7 views
6

Wie kann ich konfigurieren perltidy lange formatiert werden, wenn Aussagen wie folgt aus:perltidy Formatierung komplex, wenn

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

oder ähnliche

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: Die Idee ist es, eine neue Zeile nach der ersten ( und auch die letzte ) auf eine neue Zeile mit { zu haben. Wenn dies nicht möglich ist, werden weitere Vorschläge zur besseren Formatierung berücksichtigt.

Antwort

4

Der Standardstil von perltidy ist, wenn möglich, dem Perl Style Guide zu folgen. Welche dieser Ausgabe führt:

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

können Sie die geschweiften Klammern steuern, ob sie auf einer neuen Zeile sind oder nicht. Sie können die Dichtheit der Klammern kontrollieren. Sie können die neuen Zeilen jedoch nicht für Klammern in Codeblöcken steuern.

Der Standardstil ist so nah wie möglich an die gewünschte Ausgabe.

+0

Gibt es eine Möglichkeit, Leerzeichen vor/hinter den äußeren Klammern einzufügen, wenn die Anweisung mehrzeilig ist? (p.s. Ich habe meine perltidyrc hinzugefügt, in denen ich sie entfernen) – bliof

+0

@bliof, nein, die Optionen für die Gestaltung von Blöcken sind ziemlich begrenzt. – titanofold

2

Wenn es obnoxiously lang ist, könnte eine Idee sein, die maximale Länge jeder Zeile zu begrenzen, mit -l=n, wo n ist die maximale Länge jeder Zeile:

$ 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

versuchen

$ perltidy - bli -wba = 'oder' perltidy_test.pl

, die ... für dieses Beispiel arbeitet

+0

Ich bin mir nicht so sicher. Das 'bli' fügt die geschweiften Klammern ein und' wba' fügt eine neue Zeile nach 'oder' hinzu. Ich werde die Frage bearbeiten, um das Problem zu spezifizieren. – bliof

+0

** $ perltidy -anl -bbb tidy_test.pl ** :) '-anl' neue Zeilen hinzufügen ' -bbb' Leerzeile zwischen den Hauptblöcken hinzufügen –