7

如何防止 PerlTidy 对齐分配但继续添加单个空格?

这个问题类似于如何防止 PerlTidy 对齐我的作业?但我想在指定的地方添加单个空格。由于这个-naws开关对我不起作用。我只是不想插入多个空格。是否可以使用 perltidy 或其他工具?

Perl 整洁的变化:

my $a    = 1;
my $aa = 2;
my $aaa= 3;

进入

my $a   = 1;
my $aa  = 2;
my $aaa = 3;

使用 -naws 它保持不变:

my $a    = 1;
my $aa = 2;
my $aaa= 3;

我希望将此代码格式化为:

my $a = 1;
my $aa = 2;
my $aaa = 3;
4

2 回答 2

3

以下补丁对我有用:

--- Tidy.pm.org 2009-06-16 22:00:50.000000000 +0200
+++ Tidy.pm 2010-12-28 09:43:19.625000000 +0100
@@ -12404,7 +12404,7 @@
         # accept vertical alignment.

         # nothing to do if we aren't allowed to change whitespace
-        if ( !$rOpts_add_whitespace ) {
+        if ( 1 || !$rOpts_add_whitespace ) {
             for my $i ( 0 .. $max_index_to_go ) {
                 $matching_token_to_go[$i] = '';
             }
于 2010-12-28T10:03:22.927 回答
3

有一个未记录的标志--no-valign似乎可以在不修改 perltidy 源的情况下实现两全其美。

正如您所指出的,--no-add-whitespace它过于激进,并且会阻止在其他理想位置(在运算符周围等)中添加空格。使用--no-valignperltidy 仍在纠正类似的事情my ($arg)=@_;my ($arg) = @_;但不会尝试跨行垂直对齐运算符。该设置并没有完全禁用垂直对齐器,因此您仍然可以在其他地方获得一些好处(例如侧面评论)。

到目前为止,我发现的唯一问题是旁注块的第一个旁注与随后的旁注不一致:

my @DISAGREE_NONFATAL = grep { exists $warnings::Offsets{$_} } (
    'newline', # stat on nonexistent file with a newline in it
    'experimental', # no reason for these to be fatal
    'deprecated',   # unfortunately can't make these fatal
    'portable',     # everything worked fine here, just may not elsewhere
);

这只是尊重--minimum-space-to-comment。我不确定为什么后续(第三和第四)行正常工作。我很少使用旁注,所以这不是一个主要问题(你可以--format-skipping在这样的块上使用)。

于 2016-11-05T12:14:36.270 回答