Wie kann ich verhindern, dass Perltidy Aufträge ausrichtet, aber weiterhin einzelne Räume hinzufügt?
Frage
Wie kann ich verhindern, dass Perltidy Aufträge ausrichtet, aber weiterhin einzelne Räume hinzufügt?
Diese Frage ähnelt der Wie kann ich verhindern, dass Perltidy meine Aufgaben ausrichtet? Aber ich möchte, dass einzelne Räume hinzugefügt werden, wohin gerichtet ist. Deswegen -naws
Switch funktioniert für mich nicht. Ich möchte einfach nicht, dass mehrere Räume eingefügt werden. Ist es möglich mit Perltidy oder einem anderen Werkzeug?
Perl Tidy ändert sich:
my $a = 1;
my $aa = 2;
my $aaa= 3;
hinein
my $a = 1;
my $aa = 2;
my $aaa = 3;
Mit -naws bleibt es unverändert:
my $a = 1;
my $aa = 2;
my $aaa= 3;
Ich möchte, dass dieser Code formatiert wird wie:
my $a = 1;
my $aa = 2;
my $aaa = 3;
Lösung
Der folgende Patch funktionierte für mich:
--- 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] = '';
}
Andere Tipps
Es gibt eine undokumentierte Flagge --no-valign
Das scheint das Beste aus beiden Welten zu erreichen, ohne die Perltidy -Quelle zu modifizieren.
Wie Sie betonen, --no-add-whitespace
ist zu aggressiv und verhindert, dass Weißespace an anderen, wünschenswerten Orten (um Operatoren usw.) hinzugefügt wird. Mit --no-valign
Perltidy korrigiert immer noch Dinge wie my ($arg)=@_;
zu my ($arg) = @_;
Versucht jedoch nicht, die Bediener über Linien hinweg vertikal auszurichten. Die Einstellung deaktiviert den vertikalen Aligner nicht vollständig, sodass Sie immer noch einige Vorteile an anderen Stellen (z. B. Nebenkombinationen) erhalten.
Das einzige Problem, das ich bisher damit gefunden habe, ist, dass die erste Nebenkomentin eines Seitenblocks nicht mit den nachfolgenden Ausrichtungen 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 respektiert sich nur --minimum-space-to-comment
. Ich bin mir nicht sicher, warum die nachfolgenden (dritten und vierten) Linien ordnungsgemäß funktionieren. Ich benutze keine Nebenkompetenz, daher ist es kein großes Problem (und Sie könnten verwenden --format-skipping
auf solchen Blöcken).