Skip to content

phanect/eslint-plugin-editorconfig

Repository files navigation

eslint-plugin-editorconfig

An ESLint plugin to enforce EditorConfig rules

CircleCI NPM Version

Requirements

  • ESLint v8
    • ESLint v9 and flat config support is not ready yet. Even if you use legacy .eslintrc.*, it does not work on v9. Sorry! 🙏
  • Node.js v{16, 18, 20}
    • While not officially supported, also tested on v14 and v21. v14 support will be dropped on next major release. v21 support will be dropped when it reaches EOL and without major update of eslint-plugin-editorconfig.

Install

$ npm install --save-dev eslint@8 eslint-plugin-editorconfig

or

$ yarn add --dev eslint@8 eslint-plugin-editorconfig

If you use typescript-eslint, you need to install @typescript-eslint/eslint-plugin too.

$ npm install --save-dev @typescript-eslint/eslint-plugin

Usage

eslint.config.* (Flat Config)

Unfortunately, eslint-plugin-editorconfig does not work properly with Flat Config for now, even if you use @eslint/eslintrc for compatibility. Please wait for the next version.

.eslintrc.*

Like other ESLint plugins,

  • add rules in the rules
  • add "editorconfig" in the plugins

in your .eslintrc*

{
  // ...
  "rules": {
    "editorconfig/charset": "error",
    "editorconfig/eol-last": "error",
    "editorconfig/indent": "error",
    "editorconfig/linebreak-style": "error",
    "editorconfig/no-trailing-spaces": "error"
  },
  "plugins": [ "editorconfig" ]
}

Or you can extend plugin:editorconfig/all instead of adding rules.

{
  // ...
  "extends": [ "plugin:editorconfig/all" ],
  "plugins": [ "editorconfig" ]
}

Conflicting ESLint rules

Following rules may conflict editorconfig/* rule. It is recommended to disable them.

  • eol-last
  • indent
  • linebreak-style
  • no-trailing-spaces
  • unicode-bom
  • @typescript-eslint/eol-last
  • @typescript-eslint/indent
  • @typescript-eslint/linebreak-style
  • @typescript-eslint/no-trailing-spaces
  • @typescript-eslint/unicode-bom

If above rules are specified in your .eslintrc, just remove them. If they are specified in the extended config, consider adding plugin:editorconfig/noconflict to your extends.

{
  "extends": [
    "@phanect/phanective",
    "plugin:editorconfig/noconflict"
  ],
  // ...
}

If you extend plugin:editorconfig/all, the rules above are turned off too, so you don't have to add plugin:editorconfig/noconflict in addition to plugin:editorconfig/all.

Rules

Internally, eslint-plugin-editorconfig uses the existing ESLint and typescript-eslint rules to verify/fix the code. Some rules allow passing options.

All the citation in the docs is from the backend ESLint rule document otherwise noted.

Rule Description Fixable
editorconfig/charset Enforce EditorConfig rules for charset
editorconfig/eol-last Enforce EditorConfig rules for the newlines at the end of files
editorconfig/indent Enforce EditorConfig rules for indentation
editorconfig/linebreak-style Enforce EditorConfig rules for linebreak style
editorconfig/no-trailing-spaces Enforce EditorConfig rules for trailing spaces

License & Credit

MIT

This plugin includes code derived from klona.