Eslint with Drupal style
Note: with Drupal 9.x moving to eslint greater than 5.x this setup of having a globally installed plugins and configs will not work under eslint 6+ without major effort setting it up per project. As such if you need the changes provided in eslint 6+ it probably better to web/core yarn install the modules with just have eslint and prettier installed globally or running them from their node_modules path.
see:
- ESLint cannot find global install
- Migrating to ESLint v6.0.0: Plugins and shareable configs are no longer affected by ESLint’s location
ESLint bundled with the original Airbnb Style and prettier/recommended configs. Global installation is supported! No struggle with peer dependencies, easily integrates with your code editors.
See airbnb/javascript and prettier/eslint for more information.
See instructions for WebStorm, VSCode, Sublime Text and Atom
Installation
Install it globally:
yarn global add eslint-config-drupal-bundle
or
npm -g install eslint-config-drupal-bundle
You can install it locally as well:
yarn global add eslint-config-drupal-bundle
or
npm install --save-dev eslint-config-drupal-bundle
Setup your IDE / Editor:
Usage
You can now run feature packed eslint
from any directory:
eslint -v
Create .eslintrc
file in your project. Setup your IDE / Editor. And be smart!
ES6, ES7, React, JSX, async/await - all new features supported by default 👍
ESLint inside
You shouldn't add eslint
to your dependencies. It's bundled with this package, just specify the path if you need.
Here is an example for eslint-loader
:
{
loader: 'eslint-loader',
options: {
eslintPath: 'eslint-config-drupal-bundle/node_modules/eslint',
}
},
WebStorm
File ➤ Settings / Default Settings ➤ Languages and Frameworks ➤ JavaScript ➤ Code Quality Tools ➤ ESLint
Global installation in not necessary for WebStorm, but it is handy for the "Default Settings".
VSCode
-
Install this package globally (or locally)
-
Go to: View -> Extension or press
CTRL + SHIFT + X
-
Search for ESLint extension, click it and press "Install" button
-
Press "Reload" button or reopen the editor
-
Go to: File -> Preferences -> Settings
Add ESLint path to your workspace settings (do not use
~
):{ "eslint.nodePath": "/home/username/.nvm/versions/node/v10.5.0/lib/node_modules/eslint-config-drupal-bundle/node_modules/eslint", }
Relative path for local installation:
{ "eslint.nodePath": "node_modules/eslint-config-drupal-bundle/node_modules/eslint", }
-
Create
.eslintrc.js
file inside your working project root:process.chdir(__dirname); module.exports = { extends: [ 'drupal-bundle', ], };
Sublime Text 3
-
Install this package globally
-
Go to: Preferences -> Package Control -> install package
-
Install SublimeLinter
-
Install SublimeLinter-contrib-eslint
-
Run:
npm bin -g
... and copy the path
-
Go to: Tools -> SublimeLinter -> Open User Settings
Paste the path to NodeJS installation folder inside "paths" for your OS and save:
"paths": { "linux": [ "~/.nvm/versions/node/v8.8.1/bin" ], "osx": [], "windows": ["%AppData%\\npm"] },
-
Create
.eslintrc
file inside your working project:{ "extends": ["drupal-bundle"] }
-
Restart Sublime Text
-
Go to Tools -> SublimeLinter -> Lint this view
-
You can switch to squiggly underline mark style from Tools. Have fun!
Atom
-
Install this package globally
-
Go to: Edit -> Preferences -> Install
-
Install Linter
-
Install linter-eslint
-
Run:
npm prefix -g
... copy the prefix path
-
Go to: Preferences -> Packages -> linter-eslint -> Settings
a) Check "Use global ESLint installation" option at the bottom
b) Paste the prefix path to the field "Global Node Installation Path" and append:
/lib/node_modules/eslint-config-drupal-bundle
-
Create
.eslintrc
file inside your working project:{ "extends": ["drupal-bundle"] }
-
Press
Ctrl + Shift + P
-> enter "lint" -> click "Linter:Lint"
Custom Config
Add your own rules to the .eslintrc
file in your project folder. Note: you may want to add root: true
to your project.eslintrc
to limit eslint looking up parent directories for additional configs.
Credit
All credit to doasync and the original eslint-config-airbnb-bundle of which this is a fork just adding extra config/dependencies of prettier to have function under Drupal 8.6+.