Transpiles coffee files first with coffeescript, then runs eslint checks on them. Line / Column reporting is processed through sourcemap data, so they will be accurate for your coffee files.
The plugin ignores some rules that are impossible to satisfy from coffeescript (see this file)
It additionally runs rules from coffeelint2 by creating a fake rule in eslint which wraps and maps the coffeelint2 rules.
Special thanks to Alexander Mextner for getting this started and providing the base code.
You'll first need to install ESLint:
$ npm i eslint --save-dev
Next, install @fellow/eslint-plugin-coffee
:
$ npm install @fellow/eslint-plugin-coffee --save-dev
Note: If you installed ESLint globally (using the -g
flag) then you must also install @fellow/eslint-plugin-coffee
globally.
Edit your .eslintrc
file. and add this plugin. The easiest configuration is to just extend the base config provided to get a good set of rules (see here). You can omit the eslint-plugin-
prefix when configuring eslint.
Note: If you prefer the use of tabs, make sure to extend @fellow/coffee/recommended-tabs
instead.
{
"extends": ["plugin:@fellow/coffee/recommended"],
"plugins": [
"@fellow/coffee",
# ...
]
}
For ESLint rules only, add @fellow/coffee
to the plugins section of your .eslintrc
configuration file. This will cover many things well if use a good set of base rules. As always, you can omit the eslint-plugin-
prefix:
{
"plugins": [
"@fellow/coffee",
# ...
]
}
For better compatibility with other plugins (e.g. eslint-plugins-imports
), I also provide a "parser" which eslint can hook into. Plugins like the import
plugin do not run through checks or otherwise require module, you must set this plugin to wrap your default parser:
{
"parser": "@fellow/eslint-plugin-coffee",
"parserOptions": {
"parser": "babel-eslint", # original parser goes here (you must specify one to use this option).
"sourceType": "module", # any original parser config options you had.
"ecmaVersion": 6
},
"plugins": [
"@fellow/eslint-plugin-coffee",
# ...
],
"rules": {
"@fellow/coffee/coffeescript-error": ["error", {}],
# ...
}
}
To see how to add your own coffeelint-style rules, switch your .eslintrc
-> .eslintrc.js
and add:
require('@fellow/eslint-plugin-coffee').registerCoffeeLintRule('myRuleModule')
at the top.
Then include it in the rules
section of your .eslintrc.js
, passing any config options your rule might expect.
To learn how to write rules for coffeelint, check their docs.
For linting to work in Atom, install the linter-eslint
package and add source.cjsx
, source.coffee
and source.litcoffee
grammar scopes to your config:
"*":
# ...
"linter-eslint":
scopes: [
"source.js"
"source.jsx"
"source.js.jsx"
"source.flow"
"source.babel"
"source.js-semantic"
"source.cjsx"
"source.coffee"
"source.litcoffee"
]
For linting to work in VS Code, install the eslint
extension and add the following to your workspace settings:
"settings": {
// ...
"files.associations": {
"*.cjsx": "coffeescript"
},
"eslint.validate": [
"javascript",
"javascriptreact",
"coffeescript"
],
},