如果它是文件名的一部分,为什么 PodSpelling 会抱怨被忽略的词?

Why does PodSpelling complain about an ignored word if it's part of a file name?

PodSpelling(运行 来自 Perlcritic)抱怨“html”,尽管我已将其添加到 stopwords:

=for stopwords html

=head2 some function

Generates an index.html page.

=cut

这得到:

robert@saaz:~$ perlcritic --brutal  test.pl | grep html
Check the spelling in your POD: html at line 1, column 1.  See page 148 of PBP.  (Severity: 1)

(我通过 grep 管道输出以忽略这个最小示例中与拼写无关的其他投诉。)

如果我将 POD 更改为使用 C<index.html>F<index.html>,或将其重写为 a .html file,或添加“index.html”作为停用词,则拼写检查员很高兴。第一个对我有意义(不要检查代码片段或文件名),但我看不出“index.html”和“.html”之间的最大区别是什么。

它是否与 =for stopwords index.html 一起工作,因为它忽略了白色 space 旁边的点?不过,我只是在猜测。

为什么我的 stopword html 不适用于“index.html”?如果我不想使用 C<...>F<...>,我该如何解决这个问题?

Pod::Wordlist 的作者就是这样实现的。他们想确保像 e.g. 这样的缩写。 “e.g.”将作为一个整体传递给拼写检查器。 由于停用词的拆分和剥离是在单词列表传递给拼写检查器之前完成的,因此您不能同时拥有两者。另一方面,默认的拼写检查器是 aspell。在我看来,无论缩写是否按句点拆分,缩写都通过了检查。

所以你可以这样改变Pod/Wordlist.pm:

#line 129
sub _strip_a_word {
    my ($self, $word) = @_;
    my $remainder;

    # try word as-is, including possible hyphenation vs stoplist
    if ($self->is_stopword($word) ) {
        $remainder = '';
    }

        # check individual parts of hyphenated or period separated word,
        # keep whatever isn't a stopword as individual words
        # aspell will accept split words for abbreviations as well
        # 'e.g' passes like 'e g' does
    elsif ( $word =~ /-|\./ ) {
            my @keep;
            for my $part ( split /-|\./, $word ) {
                push @keep, $part if ! $self->is_stopword( $part );
            }
            $remainder = join(" ", @keep) if @keep;
    }
    # otherwise, we just keep it
    else {
        $remainder = $word;
    }
    return $remainder;
}