mirror of
https://github.com/github/codeql-action.git
synced 2025-12-31 11:40:24 +08:00
163 lines
5.1 KiB
Markdown
163 lines
5.1 KiB
Markdown
# eslint-plugin-filenames
|
|
|
|
[](https://www.npmjs.org/package/eslint-plugin-filenames)
|
|
[](https://travis-ci.org/selaux/eslint-plugin-filenames)
|
|
[](https://coveralls.io/r/selaux/eslint-plugin-filenames?branch=master)
|
|
[](https://david-dm.org/selaux/eslint-plugin-filenames)
|
|
|
|
Adds [eslint](http://eslint.org/) 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.
|
|
|
|
## Enabling the plugin
|
|
|
|
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.
|
|
|
|
```json
|
|
{
|
|
"plugins": [
|
|
"filenames"
|
|
],
|
|
"rules": {
|
|
"filenames/match-regex": 2,
|
|
"filenames/match-exported": 2,
|
|
"filenames/no-index": 2
|
|
}
|
|
}
|
|
```
|
|
|
|
## Rules
|
|
|
|
### Consistent Filenames via regex (match-regex)
|
|
|
|
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.
|
|
|
|
```json
|
|
"filenames/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. Please note that exported function calls are not
|
|
respected in this case.
|
|
|
|
### Matching Exported Values (match-exported)
|
|
|
|
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.
|
|
|
|
```js
|
|
// 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 one or multiple transforms:
|
|
|
|
```json
|
|
"filenames/match-exported": [ 2, "kebab" ]
|
|
```
|
|
|
|
Now, in your code:
|
|
|
|
```js
|
|
// Considered problem only if file isn't named variable-name.js or variable-name/index.js
|
|
export default function variableName;
|
|
```
|
|
|
|
Available transforms:
|
|
'[snake](https://www.npmjs.com/package/lodash.snakecase)',
|
|
'[kebab](https://www.npmjs.com/package/lodash.kebabcase)',
|
|
'[camel](https://www.npmjs.com/package/lodash.camelcase)', and
|
|
'pascal' (camel-cased with first letter in upper case).
|
|
|
|
For multiple transforms simply specify an array like this (null in this case stands for no transform):
|
|
|
|
```json
|
|
"filenames/match-exported": [2, [ null, "kebab", "snake" ] ]
|
|
```
|
|
|
|
If you prefer to use suffixes for your files (e.g. `Foo.react.js` for a React component file),
|
|
you can use a second configuration parameter. It allows you to remove parts of a filename matching a regex pattern
|
|
before transforming and matching against the export.
|
|
|
|
```json
|
|
"filenames/match-exported": [ 2, null, "\\.react$" ]
|
|
```
|
|
|
|
Now, in your code:
|
|
|
|
```js
|
|
// Considered problem only if file isn't named variableName.react.js, variableName.js or variableName/index.js
|
|
export default function variableName;
|
|
```
|
|
|
|
If you also want to match exported function calls you can use the third option (a boolean flag).
|
|
|
|
```json
|
|
"filenames/match-exported": [ 2, null, null, true ]
|
|
```
|
|
|
|
Now, in your code:
|
|
|
|
```js
|
|
// Considered problem only if file isn't named functionName.js or functionName/index.js
|
|
export default functionName();
|
|
```
|
|
|
|
### Don't allow index.js files (no-index)
|
|
|
|
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.
|
|
|
|
## Changelog
|
|
|
|
#### 1.3.2
|
|
|
|
- Fix issue with `match-regex` and `getExportedName`
|
|
|
|
#### 1.3.1
|
|
|
|
- Put breaking change from `1.3.0` behind a flag
|
|
|
|
#### 1.3.0
|
|
|
|
- Support call expressions as named exports
|
|
|
|
#### 1.2.0
|
|
- Introduce `strip` option for `match-exported`
|
|
- Introduce support for multiple transform options
|
|
- Introduce `pascal` transform
|
|
|
|
#### 1.1.0
|
|
- Introduce `transform` option for `match-exported`
|
|
|
|
#### 1.0.0
|
|
- Split rule into `match-regex`, `match-exported` and `no-index`
|
|
|
|
#### 0.2.0
|
|
- Add match-exported flags
|
|
|
|
#### 0.1.2
|
|
- Fix example in README
|
|
|
|
#### 0.1.1
|
|
- Fix: Text via stdin always passes
|
|
- Tests: Travis builds also run on node 0.12 and iojs now
|
|
|
|
#### 0.1.0
|
|
- Initial Release
|