Adds eslint rules to ensure consistent filenames for your javascript files.
Please note: This plugin will only lint the filenames of the .js
, .jsx
files you are linting with eslint. It will ignore other files that are not linted with eslint.
This plugin requires a version of eslint>=1.0.0
to be installed as a peer dependency.
Modify your .eslintrc
file to load the plugin and enable the rules you want to use.
{
"plugins": [
"filenames-suffix"
],
"rules": {
"filenames-suffix/match-regex": 2,
"filenames-suffix/match-exported": 2,
"filenames-suffix/no-index": 2
}
}
A rule to enforce a certain file naming convention using a regular expression.
The convention can be configured using a regular expression (the default is camelCase.js
). Additionally
exporting files can be ignored with a second configuration parameter.
"filenames-suffix/match-regex": [2, "^[a-z_]+$", true]
With these configuration options, camelCase.js
will be reported as an error while snake_case.js
will pass.
Additionally the files that have a named default export (according to the logic in the match-exported
rule) will be
ignored. They could be linted with the match-exported
rule.
Match the file name against the default exported value in the module. Files that dont have a default export will
be ignored. The exports of index.js
are matched against their parent directory.
// Considered problem only if the file isn't named foo.js or foo/index.js
export default function foo() {}
// Considered problem only if the file isn't named Foo.js or Foo/index.js
module.exports = class Foo() {}
// Considered problem only if the file isn't named someVariable.js or someVariable/index.js
module.exports = someVariable;
// Never considered a problem
export default { foo: "bar" };
If your filename policy doesn't quite match with your variable naming policy, you can add a tansform:
"filenames-suffix/match-exported": [2, "kebab"]
Now, in your code:
// Considered problem only if file isn't named variable-name.js or variable-name/index.js
export default function variableName;
Available transforms: 'snake', 'kebab', and 'camel'
In addition to applying a transform, you can also allow files to have suffixes. A suffix describes the type
of module the file exports. A suffix is a singular word that is separated from the filename by a .
and
precedes the file extension, e.g. filename.suffix.ext
. A file with a suffix must reside in a directory
whose name is the plural version of the suffix, or a subdirectory therein. So for example, if suffixes are
enabled and a file is named example.component.jsx
, it must live in a directory named components
or a
subdirectory of it.
"filenames-suffix/match-exported": [2, "kebab", "check-suffix"]
index
files do not require a suffix.
Having a bunch of index.js
files can have negative influence on developer experience, e.g. when
opening files by name. When enabling this rule. index.js
files will always be considered a problem.
- Introduce
transform
option formatch-exported
- Split rule into
match-regex
,match-exported
andno-index
- Add match-exported flags
- Fix example in README
- Fix: Text via stdin always passes
- Tests: Travis builds also run on node 0.12 and iojs now
- Initial Release