Как я могу запретить PerlTidy выравнивать назначения, но продолжать добавлять одиночные пробелы? - PullRequest
7 голосов
/ 27 декабря 2010

Как я могу запретить PerlTidy выравнивать назначения, но продолжать добавлять одиночные пробелы?

Этот вопрос похож на Как я могу помешать PerlTidy выровнять мои назначения? но я бы хотел, чтобы отдельные пробелы добавлялись туда, куда они направлены. Из-за этого у меня не работает переключатель -naws. Я просто не хочу вставлять несколько пробелов. Возможно ли это с помощью perltidy или другого инструмента?

Изменения в Perl:

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

в

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

с -naws остается неизменным:

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

Я бы хотел, чтобы этот код был отформатирован как

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

Ответы [ 2 ]

3 голосов
/ 28 декабря 2010

У меня сработал следующий патч:

--- 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] = '';
             }
2 голосов
/ 05 ноября 2016

Существует недокументированный флаг --no-valign, который, по-видимому, обеспечивает лучшее из обоих миров без изменения источника perltidy.

Как вы отметили, --no-add-whitespace слишком агрессивен и не позволяет добавлять пробелы вдругие, желательные места (вокруг операторов и т. д.).С --no-valign perltidy по-прежнему корректирует такие вещи, как my ($arg)=@_; до my ($arg) = @_;, но не пытается выровнять операторы по линиям по вертикали.Параметр не полностью отключает вертикальный выравниватель, поэтому вы по-прежнему получаете некоторые преимущества в других местах (например, побочные комментарии).

Единственная проблема, с которой я до сих пор сталкивался, заключается в том, что первый побочный комментарийблок побочных комментариев не выровнен с последующими:

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

Это только уважение --minimum-space-to-comment.Я не уверен, почему последующие (третья и четвертая) строки работают должным образом.Я редко использую побочные комментарии, так что это не главная проблема (и вы можете использовать --format-skipping для таких блоков).

...