2010-12-27 7 views
7

Wie kann ich verhindern, dass PerlTidy Zuweisungen ausrichtet, aber weiterhin einzelne Leerzeichen hinzufügt?Wie kann ich verhindern, dass PerlTidy Zuweisungen ausrichtet, aber weiterhin einzelne Leerzeichen hinzufügt?

Diese Frage ist ähnlich wie How can I prevent PerlTidy from aligning my assignments?, aber ich möchte einzelne Räume hinzugefügt werden, wo gerichtet. Aufgrund dieser -naws Schalter funktioniert nicht für mich. Ich möchte einfach nicht, dass mehrere Leerzeichen eingefügt werden. Ist es möglich mit Perltidy oder einem anderen Tool?

Perl ordentlich Änderungen:

my $a = 1; 
my $aa = 2; 
my $aaa= 3; 

in

my $a = 1; 
my $aa = 2; 
my $aaa = 3; 

mit -naws bleibt unverändert:

my $a = 1; 
my $aa = 2; 
my $aaa= 3; 

ich diesen Code möchte formatiert werden wie:

my $a = 1; 
my $aa = 2; 
my $aaa = 3; 

Antwort

3

Der folgende Patch für mich gearbeitet:

--- Tidy.pm.org 2009-06-16 22:00:50.000000000 +0200 
+++ Tidy.pm 2010-12-28 09:43:19.625000000 +0100 
@@ -12404,7 +12404,7 @@ 
     # accept vertical alignment. 

     # nothing to do if we aren't allowed to change whitespace 
-  if (!$rOpts_add_whitespace) { 
+  if (1 || !$rOpts_add_whitespace) { 
      for my $i (0 .. $max_index_to_go) { 
       $matching_token_to_go[$i] = ''; 
      } 
+0

Dies ist für die meisten Menschen keine sehr praktikable Lösung - Sie möchten, dass dies beispielsweise auf den Computern anderer Benutzer und der CI-Infrastruktur problemlos wiederholbar ist. –

2

Es ist eine nicht dokumentierte Flagge --no-valign, die ohne Änderung der perltidy Quelle das Beste aus beiden Welten zu erreichen scheint.

Wie Sie darauf hingewiesen haben, ist --no-add-whitespace zu aggressiv und verhindert, dass Leerzeichen an anderen gewünschten Orten (in der Nähe von Bedienern usw.) hinzugefügt werden. Mit --no-valign perltidy korrigiert immer noch Dinge wie my ($arg)[email protected]_; zu my ($arg) = @_;, aber nicht versucht, Operatoren über Leitungen vertikal auszurichten. Die Einstellung deaktiviert den vertikalen Aligner nicht vollständig, sodass Sie auch an anderen Stellen (z. B. Seitenkommentare) einige Vorteile erhalten.

Das einzige Problem, das ich mit diesem bisher gefunden habe, ist, dass der erste Seiten Kommentar eines Blockes von Neben Kommentaren nicht mit den nachfolgend denjenigen ausgerichtet ist:

my @DISAGREE_NONFATAL = grep { exists $warnings::Offsets{$_} } (
    'newline', # stat on nonexistent file with a newline in it 
    'experimental', # no reason for these to be fatal 
    'deprecated', # unfortunately can't make these fatal 
    'portable',  # everything worked fine here, just may not elsewhere 
); 

Es nur --minimum-space-to-comment nachkommt. Ich bin mir nicht sicher, warum die nachfolgende (dritte und vierte) Zeile richtig funktioniert. Ich benutze keine Seitenkommentare viel, also ist es kein großes Problem (und Sie könnten --format-skipping für solche Blöcke verwenden).