A re-implementation of eslint-plugin-es
in TypeScript.
First off, I would like to deeply thank @mistycatea and everyone else involved in the original eslint-plugin-es
. None of this would have been possible without them, and all credit should go to them.
This package is an attempt to migrate eslint-plugin-es
to be written in TypeScript, and to use the great @typescript-eslint
repository for plugin development.
Below is taken verbatim from eslint-plugin-es
, and will be updated as needed.
Espree, the default parser of ESLint, has supported ecmaVersion
option.
However, the error messages of new syntax are not readable (e.g., "unexpected token" or something like).
When we use this plugin along with the latest ecmaVersion
option value, it tells us the readable error message for the new syntax, such as "ES2020 BigInt is forbidden."
Plus, this plugin lets us disable each syntactic feature individually.
Use npm or a compatible tool.
npm install --save-dev eslint eslint-plugin-es-roikoren
yarn add -D eslint eslint-plugin-es-roikoren
IMPORTANT
If you installed eslint
globally, you should install this plugin in the same way.
Requirements
- Node.js
12.22.0
or newer. - ESLint
7.0.0
or newer.
Configure your .eslintrc.*
file.
For example, to enable only Rest/Spread Properties in ES2018, as similar to legacy experimentalObjectRestSpread
option:
{
"plugins": ["es-roikoren"],
"parserOptions": {
"ecmaVersion": 2018
},
"rules": {
"es-roikoren/no-async-iteration": "error",
"es-roikoren/no-malformed-template-literals": "error",
"es-roikoren/no-regexp-lookbehind-assertions": "error",
"es-roikoren/no-regexp-named-capture-groups": "error",
"es-roikoren/no-regexp-s-flag": "error",
"es-roikoren/no-regexp-unicode-property-escapes": "error"
}
}
This plugin provides the following configs.
Config ID | Description |
---|---|
plugin:es-roikoren/restrict-to-es2020 |
disallow new stuff that ES2020 doesn't include. |
plugin:es-roikoren/restrict-to-es2019 |
disallow new stuff that ES2019 doesn't include. |
plugin:es-roikoren/restrict-to-es2018 |
disallow new stuff that ES2018 doesn't include. |
plugin:es-roikoren/restrict-to-es2017 |
disallow new stuff that ES2017 doesn't include. |
plugin:es-roikoren/restrict-to-es2016 |
disallow new stuff that ES2016 doesn't include. |
plugin:es-roikoren/restrict-to-es2015 |
disallow new stuff that ES2015 doesn't include. |
plugin:es-roikoren/restrict-to-es5 |
disallow new stuff that ES5 doesn't include. |
plugin:es-roikoren/restrict-to-es3 |
disallow new stuff that ES3 doesn't include. |
plugin:es-roikoren/no-new-in-es2021 |
disallow the new stuff in ES2021. |
plugin:es-roikoren/no-new-in-es2020 |
disallow the new stuff in ES2020. |
plugin:es-roikoren/no-new-in-es2019 |
disallow the new stuff in ES2019. |
plugin:es-roikoren/no-new-in-es2018 |
disallow the new stuff in ES2018. |
plugin:es-roikoren/no-new-in-es2017 |
disallow the new stuff in ES2017. |
plugin:es-roikoren/no-new-in-es2016 |
disallow the new stuff in ES2016. |
plugin:es-roikoren/no-new-in-es2015 |
disallow the new stuff in ES2015. |
plugin:es-roikoren/no-new-in-es5 |
disallow the new stuff in ES5. |
plugin:es-roikoren/no-new-in-esnext |
disallow the new stuff to be planned for the next yearly ECMAScript snapshot. |
plugin:es-roikoren/typescript |
turn off rules for stuff that TypeScript transpiles correctly, regardless of target ES version. |
For example:
{
"parserOptions": {
"ecmaVersion": 2021
},
"extends": [
"eslint:recommended",
"plugin:es-roikoren/restrict-to-es2018"
],
"rules": {
"es-roikoren/no-rest-spread-properties": "off"
}
}
This plugin never reports prototype methods by default. Because it's hard to know the type of objects, it will cause false positives.
If you configured the aggressive
mode, this plugin reports prototype methods even if the rules couldn't know the type of objects.
For example:
settings.es.aggressive = true
means the aggressive mode.
{
"plugins": ["es-roikoren"],
"rules": {
"es-roikoren/no-string-prototype-codepointat": "error"
},
"settings": {
"es": { "aggressive": true }
}
}
If using this plugin and TypeScript, this plugin reports prototype methods by default because we can easily know types. For example:
{
"plugins": ["es-roikoren"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "tsconfig.json"
},
"rules": {
"es-roikoren/no-string-prototype-codepointat": "error"
}
}
If you configured the aggressive
mode, this plugin reports prototype methods on any
types as well.
{
"plugins": ["es-roikoren"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "tsconfig.json"
},
"rules": {
"es-roikoren/no-string-prototype-codepointat": "error"
},
"settings": {
"es": { "aggressive": true }
}
}