logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Perl::Critic::Policy::Modules::RequireFilenameMatchesPackage - Package declaration must match filename.

Affiliation

       This Policy is part of the core Perl::Critic distribution.

Author

       Chris Dolan <cdolan@cpan.org>

Configuration

       This Policy is not configurable except for the standard options.

Description

       The package declaration should always match the name of the file that contains it.  For example, "package
       Foo::Bar;" should be in a file called "Bar.pm".  This makes it easier for developers to figure out which
       file a symbol comes from when they see it in your code.  For instance, when you see "Foo::Bar->new()",
       you should be able to find the class definition for a "Foo::Bar" in a file called Bar.pm

       Therefore, this Policy requires the last component of the first package name declared in the file to
       match the physical filename.  Or if "#line" directives are used, then it must match the logical filename
       defined by the prevailing "#line" directive at the point of the package declaration.  Here are some
       examples:

         # Any of the following in file "Foo/Bar/Baz.pm":
         package Foo::Bar::Baz;     # ok
         package Baz;               # ok
         package Nuts;              # not ok (doesn't match physical filename)

         # using #line directives in file "Foo/Bar/Baz.pm":
         #line 1 Nuts.pm
         package Nuts;             # ok
         package Baz;              # not ok (contradicts #line directive)

       If the file is not deemed to be a module, then this Policy does not apply.  Also, if the first package
       namespace found in the file is "main" then this Policy does not apply.

Name

       Perl::Critic::Policy::Modules::RequireFilenameMatchesPackage - Package declaration must match filename.

See Also