10

シンプルなモジュールを用意する

package Rrr;
use 5.014;
use warnings;
use namespace::sweep;
use Moo;
use Method::Signatures::Simple;

BEGIN {
    our $VERSION = '0.0.1';
}

has 'root' => (
    is => 'rw',
    default => 'root'
);

method func {
    say 'This is the func method from ' . __PACKAGE__ . ' with value: ', $self->root;
}

1;

perlcritic -1言う_

Code is not tidy at line 1, column 1.  See page 33 of PBP.  (Severity: 1)
Module does not end with "1;" at line 17, column 1.  Must end with a recognizable true value.  (Severity: 4)
Return value of flagged function ignored - say at line 18, column 5.  See pages 208,278 of PBP.  (Severity: 1)

perlcritic を幸せにする方法は?

編集 - @toolic のコメントに基づく

はい、Code is not tidy at line 1, column 1.違いは次のとおりです。

13c13
<     is => 'rw',
---
>     is      => 'rw',
18c18,19
<     say 'This is the func method from ' . __PACKAGE__ . ' with value: ', $self->root;
---
>     say 'This is the func method from ' . __PACKAGE__ . ' with value: ',
>       $self->root;

しかし、まだ得ています:

Module does not end with "1;" at line 17, column 1.  Must end with a recognizable true value.  (Severity: 4)
Return value of flagged function ignored - say at line 18, column 5.  See pages 208,278 of PBP.  (Severity: 1)

私のパークリティック:

$ perlcritic --version
1.125
4

1 に答える 1

13

fromのmethodキーワードMethod::Signatures::Simpleが perlcritic を無効にしているようです。PPI が次のプログラムを解析する方法の違いに注意してください。

$ tools/ppidump 'method foo { 1 } 1;'
                    PPI::Document
                      PPI::Statement
[    1,   1,   1 ]     PPI::Token::Word         'method'
[    1,   8,   8 ]     PPI::Token::Word         'foo'
                        PPI::Structure::Block   { ... }
                          PPI::Statement
[    1,  14,  14 ]         PPI::Token::Number   '1'
[    1,  18,  18 ]     PPI::Token::Number       '1'
[    1,  19,  19 ]     PPI::Token::Structure    ';'

$ tools/ppidump 'sub foo { 1 } 1;'
                    PPI::Document
                      PPI::Statement::Sub
[    1,   1,   1 ]     PPI::Token::Word         'sub'
[    1,   5,   5 ]     PPI::Token::Word         'foo'
                        PPI::Structure::Block   { ... }
                          PPI::Statement
[    1,  11,  11 ]         PPI::Token::Number   '1'
                      PPI::Statement
[    1,  15,  15 ]     PPI::Token::Number       '1'
[    1,  16,  16 ]     PPI::Token::Structure    ';'

を使用するmethodと、プログラム全体が 1 つのステートメントとして扱われます。を使用するsub場合1;は、別のステートメントとして扱われます。

perlcritic を静かにするには、メソッドの右中括弧の後にセミコロンを追加します:

method func {
    ...
};

1;

または代わりに

method func {
    ...
}

;1;

しかし、私はamonがコメントで良い点を指摘したと思います:

perlcritic はメソッド シグネチャなどの構文拡張を処理できません...このような問題のために、私は構文拡張と perlcritic のどちらかを選択する傾向があります。悲しいことに、ほとんどの場合、構文糖衣よりも静的解析を優先する必要があります。

于 2015-07-16T16:29:40.603 に答える