【问题标题】:Perl::Critic: Life after Moose?Perl::Critic: Moose 之后的生活?
【发布时间】:2025-12-10 06:40:01
【问题描述】:

我已经开始将一个项目转换为 Moose,我注意到的第一件事是我的critic/tidy 测试陷入困境。 Moose、Tidy 和 Critic 似乎不像以前那么喜欢彼此了。

是否有关于如何让评论家/整洁者更欣赏 Moose 方言的文档?大多数 Moose 用户都做什么?为更重的 Moose 模块放松/放弃评论家?自定义政策?

【问题讨论】:

    标签: perl moose perl-critic perl-tidy


    【解决方案1】:

    你见过Perl::Critic::Moose吗?

    【讨论】:

      【解决方案2】:

      两者都可以详细配置。

      我不知道为什么 perltidy 不喜欢它,这与它无关。 Perltidy 只控制风格。您可以在不更改任何功能的情况下更改代码的样式,这实际上主要是空格问题。您应该更改样式或使用 .perltidyrc 文件更改 perltidy 配置。

      我不知道 perlcritic 有什么问题(可能是左值方法?),但您可以考虑使用 .perlcriticrc 文件关闭这些特定策略。此外,如果您的 perlcritic 是旧的,您可能需要升级它,因为一些旧版本在 Moose 类中给出了一些不正确的错误。

      【讨论】:

      • 好吧,我想更重要的是。有没有人为基于 Moose 的项目调整了criticrc/perltidyrc?每次我偏离 stock tidy rc 时,我都会觉得很脏,而且通常最终会让事情变得更糟。 :-)
      • 添加:Perltidy 只控制样式。您可以在不更改任何功能的情况下更改代码的样式,实际上主要是空格问题。
      • Moose 不会为您创建左值方法。我什至不认为有一个 MooseX 扩展。
      • PerlTidy 无法处理 MooseX::Method::Signatures,认为到处都有语法错误并破坏缩进:(
      • 详细说明一下,perltidy 会将 function(:$requirednamedparam!) 变成无效的 function(:$requirednamedparam!)
      【解决方案3】:

      早期版本的 Perl::Critic 的“使用严格”政策不知道 Moose 为您启用严格,但如果您升级,这将得到修复 Perl::Critic。

      我在 Moose 中同时使用 Perl::Critic 和 Perl::Tidy,但我没有看到 任何特别破碎的东西。好吧,实际上,我无法获得 Perl::Tidy 正确布局这样的东西:

      my $apple = Apple->new({
          color => "red",
          type  => "delicious",
      });
      

      Tidy 会坚持认为 ( 和 { 是缩进的两个开头级别, 它会看起来很傻:

      my $apple = Apple->new({
              color => "red",
              type  => "delicious",
      });
      

      但是我们之前也遇到过这个问题;项目中的编码约定 是对命名参数使用hashref,而不是hash。所以不是 确实是与 Moose 相关的问题。

      你的症状具体是什么?

      /J

      【讨论】:

        【解决方案4】:

        我对 Critic 测试没有任何问题 - 诚然,我以 Severity=3 运行,至少部分原因是我必须处理的一些遗留代码是我没有 /time/ 来整理的,但是我的 Moose事情顺利通过。

        【讨论】: