Настройка Perl::Tidy для обработки пользовательских ключевых слов

Есть ли простой способ настроить Perl::Tidy, чтобы правильно обрабатывает пользовательские ключевые слова, созданные с помощью Devel::Declare?

В частности, я использую Sub::Curried, который создает ключевое слово curry, которое более или менее работает как sub. с сигнатурой метода в 5.20, но с возможностью каррирования:

curry add ($x, $y) {
    return $x + $y;
}

Обратите внимание, что ; не требуется, о чем Perl::Tidy не знает, поскольку дает:

curry add( $x, $y ) {
    return $x + $y;
  }

С более длинной подпрограммой дело обстоит хуже, с ; или без него:

curry add( $x, $y ) {
    my $z = $x + $y;
      return $z;
};

Я полагаю, что нельзя сказать Perl::Tidy обращаться с curry точно так же, как с sub. В качестве альтернативы, есть ли способ, по крайней мере, игнорировать те разделы, которые он не понимает, и при этом убирать остальную часть файла?


person scozy    schedule 23.05.2014    source источник


Ответы (1)


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

Пропуск выбранных разделов кода

Выбранные строки кода могут быть дословно переданы в вывод без какого-либо форматирования. Эта функция включена по умолчанию, но ее можно отключить с помощью флага --noformat-skipping или -nfs. Его следует использовать с осторожностью, чтобы не загромождать код маркерами, но он может быть полезен для решения случайных проблем. Например, это может быть полезно для сохранения неизменного отступа старого комментируемого кода, сохранения неизменным отступа длинных блоков выровненных комментариев, сохранения неизменного форматирования определенного списка или устранения сбоя в perltidy.

-fs, --format-skipping

Этот флаг, включенный по умолчанию, заставляет любой код между специальными начальными и конечными маркерами комментария передаваться в вывод без форматирования. Маркером начала по умолчанию является #‹‹‹, а маркером окончания по умолчанию является #>>>, но они могут быть изменены (см. следующие пункты ниже). В этих специальных строках комментариев может появляться дополнительный текст при условии, что он отделен от маркера хотя бы одним пробелом. Например

 #<<<  do not let perltidy touch this
    my @list = (1,
                1, 1,
                1, 2, 1,
                1, 3, 3, 1,
                1, 4, 6, 4, 1,);
 #>>>

Маркеры комментариев могут быть размещены в любом месте, где может появиться блочный комментарий. Если они не работают, используйте флаг -log и проверьте файл .LOG. Используйте -nfs, чтобы отключить эту функцию.

Итак, в вашем случае код будет следующим:

#<<<
curry add ($x, $y) {
    return $x + $y;
}
#>>>

Обновить

Я понял, что вы можете захотеть установить custom специальных маркеров комментариев, которые описаны ниже:

-fsb=string, --format-skipping-begin=string

Параметр -fsb=string может использоваться для изменения начального маркера пропуска формата. Значение по умолчанию эквивалентно -fsb='#‹‹‹'. Строка, которую вы вводите, должна начинаться с символа # и должна быть заключена в кавычки, чтобы пройти через командную оболочку вашей системы. На самом деле это начальный текст шаблона, который создается путем добавления '\s', поэтому вы должны также включать обратную косую черту, чтобы символы воспринимались буквально, а не как шаблоны.

Некоторые примеры показывают, как строки примеров становятся шаблонами:

 -fsb='#\{\{\{' becomes /^#\{\{\{\s/  which matches  #{{{ but not #{{{{
 -fsb='#\*\*'   becomes /^#\*\*\s/    which matches  #** but not #***
 -fsb='#\*{2,}' becomes /^#\*{2,}\s/  which matches  #** and #*****

Затем вам нужно установить конечную строку специального комментария:

-fse=string, --format-skipping-end=string

Параметр -fsb=string используется для изменения конечного маркера пропуска формата. Значение по умолчанию эквивалентно -fse='#‹‹‹'.

Примечание. Строки специальных комментариев должны быть комментариями, поэтому они всегда должны начинаться с #.

person MattSizzle    schedule 24.05.2014