12

EclipseとEPICを組み合わせてPerlコードを記述しています。コードをフォーマットするために「-pbp」(perlベストプラクティススタイル)でPerltidyを使用するようにEPICを構成しました。

これは、 Method ::Signatures名前付きパラメーターを使用する場合はうまく機能しません。たとえば、エラーが発生するようにfunc (:$arg1, : $arg2)フォーマットされています。func (: $arg1, : $arg2)

また、funcキーワードが認識されないsubため、インデントが間違っています。

この以前の未回答の質問とこのクロスポストに関連しています。

4

4 に答える 4

4

前後のフィルタを使用して perlcritic スクリプトを変更できます。変更ログは次の例を提供します

Perl::Tidy::perltidy(
  prefilter => sub { $_ = $_[0]; s/^method (.*)/sub $1 \#__METHOD/gm; return $_ },
  postfilter => sub { $_ = $_[0]; s/^sub (.*?)\s* \#__METHOD/method $1/gm; return $_ }
);

Perlcritic はフォーマットの目的でとして扱うmethodようになりました。subで同じことができますfunc。/usr/local/bin/perlcritic をfunc次のように変更しました。

#!/usr/bin/perl

eval 'exec /usr/bin/perl  -S $0 ${1+"$@"}'
    if 0; # not running under some shell
package main;

use Perl::Tidy;

my $arg_string = undef;

# give Macs a chance to provide command line parameters
if ($^O =~ /Mac/) {
    $arg_string =
      MacPerl::Ask( 'Please enter @ARGV (-h for help)',
        defined $ARGV[0] ? "\"$ARGV[0]\"" : "" );
}

Perl::Tidy::perltidy(
    argv => $arg_string,
    prefilter => sub { $_ = $_[0]; s/\W\Kfunc\((.*)/sub($1 \#__FUNC/gm; return $_ },
    postfilter => sub { $_ = $_[0]; s/\W\Ksub\((.*?)\s* \#__FUNC/func($1/gm; return $_ }
);
于 2011-12-10T07:58:03.077 に答える
3

Perl::Tidy/perltidy は PPI を使用せず、PPI よりも約 9 年前から存在します ( http://sourceforge.net/projects/perltidy/は Registered: 2000-12-23 と述べています)。

于 2010-10-11T10:02:09.493 に答える
2

PPIPerltidyがほとんどの作業に使用するを作成しない限りMooseX::Method::Signatures、、、、Method::Signatures::Simpleなどのさまざまな署名モジュールを認識することはできませんMethod::Signatures

合理的な回避策は、すべてのコードでPerltidyを実行するのではなく、作成したばかりで何らかの方法でフォーマットしたいコードのチャンクでのみ実行することです。そうすれば、メソッドシグネチャでの実行を簡単にスキップして、代わりにメソッド本体のみを処理することができます。

于 2010-10-09T06:41:02.850 に答える
1

その間、この問題を解決する新しいモジュールが CPAN に存在します。呼び出されPerl::Tidy::Sweetenedてスクリプトを提供しますperltidier

prefilterのおよびpostfilterフックも使用しPerl::Tidyますが、自分でそれを気にする必要はありません。

于 2017-01-04T12:51:34.470 に答える