stencil-eslint
stencil-eslint copied to clipboard
ESLint rules specific to Stencil JS projects
@stencil-community/eslint-plugin
ESLint rules specific to Stencil JS projects.
Installation
If you're using npm v7+, you only need to install this package. Its peer dependencies will be automatically installed.
npm i --save-dev @stencil-community/eslint-plugin
If you're using npm v6 or lower, you will need to install this package and its peer dependencies in your stencil project:
npm i --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-react @stencil-community/eslint-plugin typescript
Usage
.eslintrc.json configuration file:
{
"parserOptions": {
"project": "./tsconfig.json"
},
"extends": [
"plugin:@stencil-community/recommended"
]
}
Add a new lint script to the package.json:
{
"scripts": {
"lint": "eslint src/**/*{.ts,.tsx}"
}
}
By default, ESLint will ignore your node_modules/ directory. Consider adding a .eslintignore file at the root of
your project with any output target directories to avoid false positive errors from ESLint.
# place any directories created by the Stencil compilation process here
dist
loader
www
Lint all your project:
npm run lint
Supported Rules
@stencil-community/async-methods
This rule catches Stencil public methods that are not async.
@stencil-community/ban-default-true
This rule catches Stencil Props with a default value of true.
@stencil-community/ban-prefix
This rule catches Stencil Component banned tag name prefix.
@stencil-community/class-pattern
This rule catches Stencil Component class name not matching configurable pattern.
@stencil-community/decorators-context
This rule catches Stencil decorators in bad locations.
@stencil-community/decorators-style
This rule catches Stencil decorators style usage.
@stencil-community/element-type
This rule catches Stencil Element decorator have the correct type.
@stencil-community/host-data-deprecated
This rule catches Stencil method hostData.
@stencil-community/methods-must-be-public
This rule catches Stencil Methods marked as private or protected.
@stencil-community/no-unused-watch
This rule catches Stencil Watchs with non existing Props or States.
@stencil-community/own-methods-must-be-private
This rule catches own class methods marked as public.
@stencil-community/own-props-must-be-private
This rule catches own class properties marked as public.
@stencil-community/prefer-vdom-listener
This rule catches Stencil Listen with vdom events.
@stencil-community/props-must-be-public
This rule catches Stencil Props marked as private or protected.
@stencil-community/props-must-be-readonly
This rule catches Stencil Props marked as non readonly, excluding mutable ones.
@stencil-community/render-returns-host
This rule catches Stencil Render returning array instead of Host tag.
@stencil-community/required-jsdoc
This rule catches Stencil Props, Methods and Events to define jsdoc.
@stencil-community/required-prefix
This rule catches Stencil Component required tag name prefix.
@stencil-community/reserved-member-names
This rule catches Stencil Prop names that share names of Global HTML Attributes.
@stencil-community/single-export
This rule catches modules that expose more than just the Stencil Component itself.
@stencil-community/strict-mutable
This rule catches Stencil Prop marked as mutable but not changing value in code.
Recommended rules
{
"@stencil-community/async-methods": "error",
"@stencil-community/ban-prefix": ["error", ["stencil", "stnl", "st"]],
"@stencil-community/decorators-context": "error",
"@stencil-community/decorators-style": [
"error", {
"prop": "inline",
"state": "inline",
"element": "inline",
"event": "inline",
"method": "multiline",
"watch": "multiline",
"listen": "multiline"
}],
"@stencil-community/element-type": "error",
"@stencil-community/host-data-deprecated": "error",
"@stencil-community/methods-must-be-public": "error",
"@stencil-community/no-unused-watch": "error",
"@stencil-community/own-methods-must-be-private": "error",
"@stencil-community/own-props-must-be-private": "error",
"@stencil-community/prefer-vdom-listener": "error",
"@stencil-community/props-must-be-public": "error",
"@stencil-community/props-must-be-readonly": "error",
"@stencil-community/render-returns-host": "error",
"@stencil-community/required-jsdoc": "error",
"@stencil-community/reserved-member-names": "error",
"@stencil-community/single-export": "error",
"@stencil-community/strict-mutable": "error"
}
Contributing
When submitting new rules please:
- Describe your new rule in the README.md
- Provide a suite of unit tests for your rule
- Follow ESLint Rule guidelines (the eslint-rule yeoman generator is good for this)
All contributions welcome.