配置Perl :: Tidy来处理自定义关键字

时间:2014-05-23 18:02:09

标签: perl macros code-formatting perl-tidy

是否有一种直接的方式来配置Perl::Tidy,以便正确处理使用Devel::Declare创建的自定义关键字?

具体来说,我使用的是Sub::Curried,它创建的关键字curry或多或少类似于sub,其方法签名为5.20,但具有currying功能:

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不应该是不可能的。或者,有没有办法让它忽略那些它不理解并仍然整理文件其余部分的部分?

1 个答案:

答案 0 :(得分:7)

我知道如何操作的唯一方法如下:手册页:

跳过选定的代码段

选定的代码行可以逐字传递给输出而不进行任何格式化。默认情况下启用此功能,但可以使用--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 =&#39;#&lt;&lt;&lt;&lt;&#39;。您输入的字符串必须以#开头,并且必须在引号中以便通过系统的命令shell。它实际上是通过附加&#39; \ s&#39;来构造的模式的主要文本,因此您还必须包含字面反斜杠,而不是模式。

一些示例显示了示例字符串如何成为模式:

 -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 =&#39;#&lt;&lt;&lt;&#39;。

注意特殊评论字符串必须是评论,因此它们必须始于#