2010-12-27 13 views
7

W jaki sposób można zapobiec PerlTidy wyrównanie przypisania, ale nadal dodawanie pojedynczych spacji?W jaki sposób można uniemożliwić PerlTidy wyrównanie przypisań, ale nadal dodawać pojedyncze spacje?

To pytanie jest podobne do How can I prevent PerlTidy from aligning my assignments?, ale chciałbym dodać pojedyncze spacje tam, gdzie skierowane. Z tego powodu przełącznik -naws nie działa dla mnie. Po prostu nie chcę wstawiać wielu spacji. Czy jest to możliwe z perltidy lub jakimś innym narzędziem?

Perl schludne zmiany:

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

język

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

z -naws pozostaje niezmieniona:

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

chciałbym ten kod, aby być sformatowany jako:

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

Odpowiedz

3

Poniższa łata pracował dla mnie:

--- 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

To nie jest bardzo praktyczne rozwiązanie dla większości ludzi - będziesz chciał, aby to było łatwo powtarzalne na przykład na komputerach innych osób i infrastrukturze CI. –

2

Jest nieudokumentowana flag --no-valign który pojawia się, aby osiągnąć najlepsze z obu światów bez modyfikowania perltidy źródła.

Jak podkreślasz, --no-add-whitespace jest zbyt agresywny i zapobiega dodawaniu spacji w innych, pożądanych lokalizacjach (wokół operatorów itp.). Z --no-valign perltidy nadal koryguje takie rzeczy, jak my ($arg)[email protected]_; do my ($arg) = @_;, ale nie próbuje pionowo wyrównywać operatorów między wierszami. Ustawienie to nie wyłącza całkowicie pionowego wyrównania, więc nadal masz korzyści w innych miejscach (np. Komentarze boczne).

Jedyny problem z tym znalazłem do tej pory jest to, że pierwsza boczna komentarz bloku ubocznych komentarzach nie jest wyrównany z kolejnych punktów:

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 
); 

Jest poszanowaniem tylko --minimum-space-to-comment. Nie wiem, dlaczego kolejne linie (trzecia i czwarta) działają poprawnie. Nie używam komentarzy stronnych, więc nie jest to poważny problem (i na takich blokach można użyć --format-skipping).