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

Как запретить 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;

person agsamek    schedule 27.12.2010    source источник


Ответы (2)


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

--- 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] = '';
             }
person agsamek    schedule 28.12.2010
comment
Это не очень подходящее решение для большинства людей - например, вам нужно, чтобы это можно было легко воспроизвести на чужих машинах и в инфраструктуре CI. - person Sam Brightman; 04.11.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 в таких блоках).

person Sam Brightman    schedule 05.11.2016