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

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

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

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

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

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

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

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

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

Ответ 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 = - это соответствующий параметр, используемый для изменения конечного маркера для пропуска формата. Значение по умолчанию эквивалентно -fse = '# < < <..

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