Может ли perltidy удалить все начальные пробелы перед выполнением правил отступа?

#perl #perl-tidy

Вопрос:

Предположим, у меня есть какой-то код Perl, который выглядит следующим образом

       use Data::Dump q[pp];
  sub something{
      return 2   2;
  }
 

Я хочу, чтобы он был отформатирован perltidy как

 use Data::Dump q[pp];
sub something{
    return 2   2;
}   
 

То есть все начальные пробелы удалены, а все строки выровнены по левому краю, но затем применяются правила отступа. Я пробовал -dws , но это не сработало, и ни один из других вариантов, похоже, ничего не дает. Возможно ли это?

Комментарии:

1. Всегда можно удалить начальные пробелы в качестве отдельного шага… perl -pe 's/^s //' foo.pl | perltidy > foo_pretty.pl

2. Но это вывод perltidy, который я получаю (за исключением пустой строки между use и подпрограммой)…

3. @Shawn и в вашем вводе есть пробелы перед всеми строками? Если да, то какие perltidy настройки вы используете?

4. То же самое и здесь, если все строки имеют некоторый отступ, то perltidy это не касается этого. Но он делает свое дело, кроме этого; я так понимаю, что у него нет оснований касаться общего отступа. Я пролистал его справочную страницу и не нашел для этого никаких вариантов. Однако, если какая-либо одна строка имеет 0 отступов (например, линия shebang), то она корректирует общий отступ. Итак … может быть, просто добавьте одну (1) строку? Например, комментарий, отметка времени, что угодно.

5. Нет, никаких ведущих пробелов, кроме отступа в теле подлодки. Никаких вариантов вообще или просто -dws . (Однако файл шаблона perl, в который я копирую и вставляю, имеет проблемы.)

Ответ №1:

Как показано, это невозможно.

Некоторые дополнительные эксперименты показывают, что до тех пор, пока есть хотя бы одна строка (которая может содержать практически все), в которой отступ меньше четырех пробелов в начале файла, perltidy будет отступать, как и ожидалось в исходном вопросе.

Решение для этого конкретного примера состоит в том, чтобы включить этапы предварительной обработки в файл Makefile, который просто удаляет все пустые строки и оставленные пробелы перед запуском perltidy. Это решает проблему.

 sed -i -e 's/^[ t]*//' file.pl
sed -i -e '/./!d' file.pl
perltidy file.pl