2014-05-23 23 views
11

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

具体来说,我使用Sub::Curried,它创建了一个关键字curry的作品或多或少是在5.20 sub与方法签名,但设施柯里:

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

回答

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参数可用于更改f的开始标记ormat跳过。缺省值相当于-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 ='#< < <'。

注意特殊的注释内容也必须是注释,所以他们总是先从#