Skip to content
This repository has been archived by the owner on Sep 22, 2022. It is now read-only.

Eslint plugin for Coffeescript. Full coffee integration (including CJSX format) into eslint, with optional additional rules from (modified) coffeelint

License

Notifications You must be signed in to change notification settings

aminland/eslint-plugin-coffee

Repository files navigation

@fellow/eslint-plugin-coffee

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.

Installation

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.

Easy Usage

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",
      # ...
    ]
}

Manual Configuration

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.

Editor compatibility

Atom

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"
    ]

VSCode

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"
    ],
},

About

Eslint plugin for Coffeescript. Full coffee integration (including CJSX format) into eslint, with optional additional rules from (modified) coffeelint

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published