eslint-plugin-coffee

v0.1.15
ESLint plugin for Coffeescript
eslint coffeescript eslint-plugin eslintplugin

eslint-plugin-coffee

ESLint custom parser + rules for linting CoffeeScript source files

Table of Contents

Getting Started

The following sections will give you an overview of what this project is, why it exists and how it works.

If you are ready to get started you can jump to Installation.

Why does this project exist?

ESLint is the preeminent linter in the JavaScript world.

As of CoffeeScript v2.5.0, the CoffeeScript compiler exposes an Abstract Syntax Tree (AST) representation of your source code which enables usage with AST-based tools like ESLint.

eslint-plugin-coffee is the package that allows you to use ESLint in CoffeeScript-based projects :sparkles: :rainbow: :sparkles:

How does eslint-plugin-coffee work?

The AST (see above) produced by CoffeeScript is different than the AST format that ESLint requires to work.

This means that by default, the CoffeeScript AST is not compatible with the 1000s of rules which have been written by and for ESLint users over the many years the project has been going.

The great thing is, though, we can provide ESLint with an alternative parser to use - that is a first-class use case offered by ESLint. eslint-plugin-coffee provides ESLint with that alternative parser for CoffeeScript.

At that point, ESLint is capable of "digesting" CoffeeScript source code. But what about the rules? Keep reading...

Can I use all of the existing ESLint plugins and rules without any changes?

The short answer is, no.

The great news is, there are many rules which will "just work" without you having to change anything about them or provide any custom alternatives.

For rules which don't "just work" for CoffeeScript, eslint-plugin-coffee aims to provide a CoffeeScript-compatible custom alternative rule - this includes rules that come with ESLint, as well as from the popular ESLint plugins eslint-plugin-react, eslint-plugin-import, eslint-plugin-react-native, and eslint-plugin-jsx-a11y.

Here's a guide to all of the supported rules.

Installation

Make sure you have supported versions of CoffeeScript and ESLint installed and install the plugin:

yarn:

yarn add --dev coffeescript@^2.5.0 eslint@^6.0.0 eslint-plugin-coffee

npm:

npm install --save-dev coffeescript@^2.5.0 eslint@^6.0.0 eslint-plugin-coffee

Usage

Add eslint-plugin-coffee to the parser field and coffee to the plugins section of your .eslintrc configuration file, and disable ESLint rules that aren't compatible with CoffeeScript:

{
  "parser": "eslint-plugin-coffee",
  "plugins": ["coffee"],
  "extends": [
    "plugin/coffee:disable-incompatible"
  ]
}

Then configure the rules you want to use under the rules section.

{
  "parser": "eslint-plugin-coffee",
  "plugins": ["coffee"],
  "rules": {
    // Can include existing rules that "just work":
    "no-undef": "error",
    "react/no-array-index-key": "error",
    // ...CoffeeScript-specific rules:
    "coffee/spread-direction": ["error", "postfix"],
    // ...and CoffeeScript custom overriding rules.
    // For these, the corresponding existing rule should also be disabled if need be:
    "no-unused-vars": "off",
    "coffee/no-unused-vars": "error"
}

To apply eslint:recommended (the set of rules which are recommended for all projects by the ESLint team) with this plugin, add plugin:coffee/eslint-recommended (which will adjust the eslint:recommended config appropriately for CoffeeScript) to your config:

{
  "extends": [
    "plugin:coffee/eslint-recommended"
  ]
}

To apply the well-known Airbnb config with this plugin, add plugin:coffee/airbnb (for React projects) or plugin:coffee/airbnb-base (for non-React projects) to your config:

{
  "extends": [
    // for React projects:
    "plugin:coffee/airbnb",
    // OR for non-React projects:
    "plugin:coffee/airbnb-base"
  ],
  "rules": {
    // You may then want to disable some of the more "controversial" Airbnb rules
    // when applied to CoffeeScript, e.g.:
    "coffee/implicit-arrow-linebreak": "off",
    "coffee/comma-style": "off",
    "coffee/jsx-wrap-multilines": "off"
  }
}

eslint-plugin-import

If you want to use rules from eslint-plugin-import (whether rules that "just work" or CoffeeScript custom overrides), add plugin:coffee/import (which configures eslint-plugin-import to work with CoffeeScript) to your config, along with the rules you want to use:

{
  "extends": [
    "plugin:coffee/import"
  ],
  "rules": {
    // Can include existing rules that "just work":
    "import/no-unresolved": "error",
    // ...and CoffeeScript custom overriding rules.
    // For these, the corresponding existing rule should also be disabled if need be:
    "import/no-anonymous-default-export": "off",
    "coffee/no-anonymous-default-export": "error",
  }
}

See below for a list of all supported rules from eslint-plugin-import.

eslint-plugin-react, eslint-plugin-react-native, eslint-plugin-jsx-a11y

If you want to use rules from eslint-plugin-react, eslint-plugin-react-native and/or eslint-plugin-jsx-a11y (whether rules that "just work" or CoffeeScript custom overrides), add those plugins and rules to your config:

{
  "plugins": [
    "coffee",
    "react",
    "react-native",
    "jsx-a11y"
  ],
  "rules": {
    // Can include existing rules that "just work":
    "react/no-array-index-key": "error",
    "react-native/no-inline-styles": "error",
    "jsx-a11y/accessible-emoji": "error",
    // ...and CoffeeScript custom overriding rules.
    // For these, the corresponding existing rule should also be disabled if need be:
    "react/prop-types": "off",
    "coffee/prop-types": "error",
    "react-native/no-unused-styles": "off",
    "coffee/no-unused-styles": "error",
  }
} 

To apply the recommended config from eslint-plugin-react, add plugin:coffee/react-recommended to your config:

{
  "extends": [
    "plugin:coffee/react-recommended"
  ]
}

To apply the all config from eslint-plugin-react, add plugin:coffee/react-all to your config:

{
  "extends": [
    "plugin:coffee/react-all"
  ]
}

To apply the recommended config from eslint-plugin-jsx-a11y, add plugin:jsx-a11y/recommended to your config:

{
  "plugins: [
    "coffee",
    "jsx-a11y"
  ],
  "extends": [
    "plugin:jsx-a11y/recommended"
  ]
}

To apply the strict config from eslint-plugin-jsx-a11y, add plugin:jsx-a11y/strict to your config:

{
  "plugins: [
    "coffee",
    "jsx-a11y"
  ],
  "extends": [
    "plugin:jsx-a11y/strict"
  ]
}

See below for a list of all supported rules from eslint-plugin-react, eslint-plugin-react-native and eslint-plugin-jsx-a11y.

Running from the command line

To invoke ESLint from the command line, you can add an appropriate script to your package.json scripts section, for example:

{
  "scripts": {
    "lint": "eslint 'src/**/*.coffee'",
    "lint-fix": "eslint --fix 'src/**/*.coffee'"
  }
}

Then you can invoke those scripts as needed from the command line to lint the CoffeeScript source files in your project:

npm run lint

Running from your editor

Running ESLint directly from your code editor (e.g. on save) provides a quick feedback loop while developing.

Depending on your editor, there may or may not currently be a straightforward way to get ESLint running against .coffee files (e.g. using an ESLint editor plugin).

If you're having trouble getting ESLint running in your editor (and it's not listed below), please file an issue and we'll try and help with support for your editor.

VS Code

To run ESLint from VS Code, first install the VS Code ESLint extension.

Then add to your VS Code settings.json:

"eslint.validate": [
    // "javascript", "javascriptreact" is the default setting
    "javascript",
    "javascriptreact",
    {
        "language": "coffeescript",
        "autoFix": true
    },
]

Sublime Text

From @PatrickKing:

  • Enable Package Control (if it is not already enabled).
  • Enable CoffeeScript language support by installing Better CoffeeScript with Package Control (if it is not already installed).
  • Install SublimeLinter and SublimeLinter-eslint with Package Control.
  • Ensure eslint and eslint-plugin-coffee are installed locally with package.json or globally. (If globally, Try eslint some_file.coffee at your terminal to make sure.)
  • Open "Preferences: SublimeLinter settings", and add/modify your user settings with:
"linters": {
    "eslint": {
        "selector": "source.js - meta.attribute-with-value, source.coffee"
    }
}

Other editors

We will add instructions for different code editors here as they become supported.

If you've gotten ESLint running in an editor not listed here and would like to share back, please file an issue!

Usage with Prettier

You can now use Prettier to format your CoffeeScript code, see the Prettier CoffeeScript plugin README for instructions.

To disable our code formatting related rules, install eslint-config-prettier:

npm install --save-dev eslint-config-prettier

Then use the prettier config exposed by this plugin:

{
  "extends": ["plugin:coffee/prettier"]
}

Alternatively, if you want to run Prettier as an ESLint rule (a nice option especially if you're running ESLint in fix mode via your editor):

npm install --save-dev eslint-config-prettier eslint-plugin-prettier

Then use the prettier-run-as-rule config exposed by this plugin:

{
  "extends": ["plugin:coffee/prettier-run-as-rule"]
}

Supported Rules

Key: :heavy_check_mark: = ESLint recommended, :wrench: = fixable

ESLint-included rules

Possible Errors

Name Description
:heavy_check_mark: coffee/no-async-promise-executor disallow using an async function as a Promise executor
coffee/no-await-in-loop disallow await inside of loops
:heavy_check_mark: coffee/no-compare-neg-zero disallow comparing against -0
:heavy_check_mark: coffee/no-cond-assign disallow assignment operators in conditional expressions
no-console disallow the use of console
:heavy_check_mark: coffee/no-constant-condition disallow constant expressions in conditions
:heavy_check_mark: no-control-regex disallow control characters in regular expressions
:heavy_check_mark: no-debugger disallow the use of debugger
:heavy_check_mark: no-dupe-keys disallow duplicate keys in object literals
:heavy_check_mark: no-duplicate-case disallow duplicate case labels
:heavy_check_mark: no-empty disallow empty block statements
:heavy_check_mark: coffee/no-empty-character-class disallow empty character classes in regular expressions
:heavy_check_mark: no-ex-assign disallow reassigning exceptions in catch clauses
:heavy_check_mark: coffee/no-extra-boolean-cast disallow unnecessary boolean casts
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
:heavy_check_mark: coffee/no-inner-declarations disallow variable or function "declarations" in nested blocks
:heavy_check_mark: no-invalid-regexp disallow invalid regular expression strings in RegExp constructors
:heavy_check_mark: no-irregular-whitespace disallow irregular whitespace
:heavy_check_mark: no-misleading-character-class disallow characters which are made with multiple code points in character class syntax
:heavy_check_mark: no-obj-calls disallow calling global object properties as functions
:heavy_check_mark: no-prototype-builtins disallow calling some Object.prototype methods directly on objects
:heavy_check_mark: :wrench: coffee/no-regex-spaces disallow multiple spaces in regular expressions
:heavy_check_mark: no-sparse-arrays disallow sparse arrays
coffee/no-template-curly-in-string disallow template literal placeholder syntax in regular strings
:heavy_check_mark: coffee/no-unreachable disallow unreachable code after return, throw, continue, and break statements
:heavy_check_mark: no-unsafe-finally disallow control flow statements in finally blocks
:heavy_check_mark: coffee/no-unsafe-negation disallow negating the left operand of relational operators
:heavy_check_mark: require-atomic-updates disallow assignments that can lead to race conditions due to usage of await or yield
:heavy_check_mark: coffee/use-isnan require calls to isNaN() when checking for NaN
:heavy_check_mark: coffee/valid-typeof enforce comparing typeof expressions against valid strings

Best Practices

Name Description
accessor-pairs enforce getter and setter pairs in objects and classes
:warning: Only checks e.g. Object.defineProperty() since CoffeeScript doesn't support getters/setters
coffee/block-scoped-var enforce the use of variables within the scope they are defined
coffee/class-methods-use-this enforce that class methods utilize this
coffee/complexity enforce a maximum cyclomatic complexity allowed in a program
default-case require else cases in switch statements
:wrench: coffee/dot-location enforce consistent newlines before and after dots
:wrench: coffee/dot-notation enforce dot notation whenever possible
coffee/guard-for-in require for-of loops to include own or an if statement
max-classes-per-file enforce a maximum number of classes per file
no-alert disallow the use of alert, confirm, and prompt
no-caller disallow the use of arguments.caller or arguments.callee
:wrench: coffee/no-div-regex disallow division operators explicitly at the beginning of regular expressions
coffee/no-else-return disallow else blocks after return statements in if statements
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
coffee/no-empty-function disallow empty functions
:heavy_check_mark: no-empty-pattern disallow empty destructuring patterns
no-eval disallow the use of eval()
no-extend-native disallow extending native types
:wrench: coffee/no-extra-bind disallow unnecessary calls to .bind()
:wrench: no-floating-decimal disallow leading or trailing decimal points in numeric literals
:heavy_check_mark: no-global-assign disallow assignments to native objects or read-only global variables
:warning: Only applies to e.g. ++ operations since CoffeeScript generates declarations on other write references.
:wrench: coffee/no-implicit-coercion disallow shorthand type conversions
no-implied-eval disallow the use of eval()-like methods
coffee/no-invalid-this disallow this keywords outside of classes or class-like objects
no-iterator disallow the use of the __iterator__ property
coffee/no-loop-func disallow function declarations that contain unsafe references inside loop statements
coffee/no-magic-numbers disallow magic numbers
:wrench: coffee/no-multi-spaces disallow multiple spaces
coffee/no-new disallow new operators outside of assignments or comparisons
no-new-func disallow new operators with the Function object
no-new-wrappers disallow new operators with the String, Number, and Boolean objects
no-param-reassign disallow reassigning function parameters
no-proto disallow the use of the __proto__ property
no-restricted-properties disallow certain properties on certain objects
coffee/no-return-assign disallow assignment operators in return statements
:warning: Currently, this also flags assignments in implicit return statements
no-script-url disallow javascript: urls
:heavy_check_mark: coffee/no-self-assign disallow assignments where both sides are exactly the same
coffee/no-self-compare disallow comparisons where both sides are exactly the same
coffee/no-sequences disallow semicolon operators
no-throw-literal disallow throwing literals as exceptions
coffee/no-unmodified-loop-condition disallow unmodified loop conditions
coffee/no-unused-expressions disallow unused expressions
no-useless-call disallow unnecessary calls to .call() and .apply()
:heavy_check_mark: no-useless-catch disallow unnecessary catch clauses
no-useless-concat disallow unnecessary concatenation of literals or template literals
:heavy_check_mark: coffee/no-useless-escape disallow unnecessary escape characters
:wrench: coffee/no-useless-return disallow redundant return statements
no-warning-comments disallow specified warning terms in comments
prefer-promise-reject-errors require using Error objects as Promise rejection reasons
radix enforce the consistent use of the radix argument when using parseInt()
require-unicode-regexp enforce the use of u flag on RegExp
coffee/vars-on-top require "declarations" be placed at the top of their containing scope
coffee/yoda require or disallow "Yoda" conditions
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
:heavy_check_mark: no-delete-var disallow deleting variables
no-restricted-globals disallow specified global variables
coffee/no-shadow disallow variable declarations from shadowing variables declared in the outer scope
:heavy_check_mark: no-undef disallow the use of undeclared variables unless mentioned in ###global ### comments
:heavy_check_mark: coffee/no-unused-vars disallow unused variables
coffee/no-use-before-define disallow the use of variables before they are "defined"

Node.js and CommonJS

Name Description
coffee/callback-return require return statements after callbacks
global-require require require() calls to be placed at top-level module scope
handle-callback-err require error handling in callbacks
no-buffer-constructor disallow use of the Buffer() constructor
no-new-require disallow new operators with calls to require
no-path-concat disallow string concatenation with __dirname and __filename
no-process-env disallow the use of process.env
no-process-exit disallow the use of process.exit()
no-restricted-modules disallow specified modules when loaded by require
no-sync disallow synchronous methods

Stylistic Issues

Name Description
coffee/array-bracket-newline enforce linebreaks after opening and before closing array brackets
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
:wrench: coffee/array-bracket-spacing enforce consistent spacing inside array brackets
coffee/array-element-newline enforce line breaks after each array element
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
coffee/camelcase enforce camelcase naming convention
:wrench: coffee/capitalized-comments enforce or disallow capitalization of the first letter of a comment
:wrench: comma-spacing enforce consistent spacing before and after commas
coffee/comma-style enforce consistent comma style
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
:wrench: computed-property-spacing enforce consistent spacing inside computed property brackets
coffee/consistent-this enforce consistent naming when capturing the current execution context
:wrench: eol-last require or disallow newline at the end of files
coffee/function-paren-newline enforce consistent line breaks inside function parentheses
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
id-blacklist disallow specified identifiers
coffee/id-length enforce minimum and maximum identifier lengths
coffee/id-match require identifiers to match a specified regular expression
coffee/implicit-arrow-linebreak enforce the location of function bodies
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
:wrench: jsx-quotes enforce the consistent use of either double or single quotes in JSX attributes
:wrench: key-spacing enforce consistent spacing between keys and values in object literal properties
:wrench: coffee/keyword-spacing enforce consistent spacing before and after keywords
line-comment-position enforce position of line comments
:wrench: linebreak-style enforce consistent linebreak style
:wrench: coffee/lines-around-comment require empty lines around comments
coffee/lines-between-class-members require or disallow an empty line between class members
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
coffee/max-depth enforce a maximum depth that blocks can be nested
coffee/max-len enforce a maximum line length
max-lines enforce a maximum number of lines per file
coffee/max-lines-per-function enforce a maximum number of line of code in a function
max-nested-callbacks enforce a maximum depth that callbacks can be nested
max-params enforce a maximum number of parameters in function definitions
max-statements enforce a maximum number of statements allowed in function blocks
:wrench: coffee/multiline-comment-style enforce a particular style for multiline comments
new-cap require constructor names to begin with a capital letter
:wrench: new-parens enforce or disallow parentheses when invoking a constructor with no arguments
coffee/newline-per-chained-call require a newline after each call in a method chain
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
no-array-constructor disallow Array constructors
no-bitwise disallow bitwise operators
no-continue disallow continue statements
no-inline-comments disallow inline comments after code
coffee/no-lonely-if disallow if statements as the only statement in else blocks
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
coffee/no-mixed-operators disallow mixed binary operators
no-multi-assign disallow use of chained assignment expressions
:wrench: coffee/no-multiple-empty-lines disallow multiple empty lines
coffee/no-negated-condition disallow negated conditions
no-new-object disallow Object constructors
no-plusplus disallow the unary operators ++ and --
no-restricted-syntax disallow specified syntax
no-tabs disallow all tabs
:wrench: no-trailing-spaces disallow trailing whitespace at the end of lines
coffee/no-underscore-dangle disallow dangling underscores in identifiers
:wrench: coffee/no-unneeded-ternary disallow if/else expressions when simpler alternatives exist
:wrench: coffee/no-whitespace-before-property disallow whitespace before properties
:wrench: coffee/object-curly-spacing enforce consistent spacing inside braces
coffee/object-property-newline enforce placing object properties on separate lines
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
:wrench: coffee/operator-assignment require or disallow assignment operator shorthand where possible
coffee/operator-linebreak enforce consistent linebreak style for operators
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
coffee/prefer-object-spread disallow using Object.assign with an object literal as the first argument and prefer the use of object spread instead
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
:wrench: quote-props require quotes around object literal property names
sort-keys require object keys to be sorted
:wrench: space-in-parens enforce consistent spacing inside parentheses
:wrench: coffee/space-infix-ops require spacing around infix operators
:wrench: coffee/space-unary-ops enforce consistent spacing before or after unary operators
:wrench: coffee/spaced-comment enforce consistent spacing after the # or ### in a comment
:wrench: unicode-bom require or disallow Unicode byte order mark (BOM)
:wrench: coffee/wrap-regex require parenthesis around regex literals

"ECMAScript 6"

Name Description
:wrench: coffee/arrow-spacing enforce consistent spacing before and after the arrow in functions
:heavy_check_mark: constructor-super require super() calls in constructors
:heavy_check_mark: coffee/no-class-assign disallow reassigning class members
:heavy_check_mark: no-dupe-class-members disallow duplicate class members
no-duplicate-imports disallow duplicate module imports
:heavy_check_mark: no-new-symbol disallow new operators with the Symbol object
no-restricted-imports disallow specified modules when loaded by import
:heavy_check_mark: coffee/no-this-before-super disallow this/super before calling super() in constructors
:wrench: coffee/no-useless-computed-key disallow unnecessary computed property keys in objects and classes
coffee/no-useless-constructor disallow unnecessary constructors
:wrench: no-useless-rename disallow renaming import, export, and destructured assignments to the same name
coffee/object-shorthand require or disallow method and property shorthand syntax for object literals
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
coffee/prefer-destructuring require destructuring from arrays and/or objects
:warning: Unlike the ESLint rule, the CoffeeScript version is not fixable
:wrench: prefer-numeric-literals disallow parseInt() and Number.parseInt() in favor of binary, octal, and hexadecimal literals
prefer-rest-params require rest parameters instead of arguments
prefer-spread require spread operators instead of .apply()
:wrench: coffee/prefer-template require interpolated strings instead of string concatenation
:wrench: coffee/rest-spread-spacing enforce spacing between rest and spread operators and their expressions
:wrench: sort-imports enforce sorted import declarations within modules
symbol-description require symbol descriptions
:wrench: coffee/template-curly-spacing require or disallow spacing around embedded expressions of template strings

CoffeeScript-specific rules

Name Description
coffee/capitalized-class-names Enforce capitalization of the first letter of a class name
coffee/no-backticks Disallow use of the backtick operator
coffee/english-operators Enforce or disallow use of "English" operators
coffee/implicit-object Disallow implicit objects
coffee/implicit-call Disallow implicit function calls
coffee/empty-func-parens Enforce or disallow the use of parentheses for empty parameter lists
coffee/shorthand-this Enforce or disallow use of @ vs this
coffee/spread-direction Enforce consistent use of prefix vs postfix ...
:wrench: coffee/postfix-comprehension-assign-parens Require parentheses around potentially confusing assignments in postfix comprehensions
coffee/no-nested-interpolation Disallow nesting interpolations
coffee/no-private-function-fat-arrows Disallow use of => for "private" functions in class bodies
coffee/no-unnecessary-double-quotes Disallow use of double quotes for strings when single quotes would suffice
:wrench: coffee/boolean-keywords Require or disallow usage of specific boolean keywords

eslint-plugin-react rules

Key: :heavy_check_mark: = recommended, :wrench: = fixable

Name Description
coffee/boolean-prop-naming Enforces consistent naming for boolean props
react/button-has-type Forbid "button" element without an explicit "type" attribute
coffee/default-props-match-prop-types Prevent extraneous defaultProps on components
coffee/destructuring-assignment Rule enforces consistent usage of destructuring assignment in component
:heavy_check_mark: coffee/display-name Prevent missing displayName in a React component definition
react/forbid-component-props Forbid certain props on Components
react/forbid-dom-props Forbid certain props on DOM Nodes
react/forbid-elements Forbid certain elements
coffee/forbid-prop-types Forbid certain propTypes
react/forbid-foreign-prop-types Forbid foreign propTypes
coffee/no-access-state-in-setstate Prevent using this.state inside this.setState
react/no-array-index-key Prevent using Array index in key props
:heavy_check_mark: react/no-children-prop Prevent passing children as props
react/no-danger Prevent usage of dangerous JSX properties
:heavy_check_mark: coffee/no-danger-with-children Prevent problem with children and props.dangerouslySetInnerHTML
:heavy_check_mark: coffee/no-deprecated Prevent usage of deprecated methods, including component lifecycle methods
react/no-did-mount-set-state Prevent usage of setState in componentDidMount
react/no-did-update-set-state Prevent usage of setState in componentDidUpdate
:heavy_check_mark: react/no-direct-mutation-state Prevent direct mutation of this.state
:heavy_check_mark: react/no-find-dom-node Prevent usage of findDOMNode
:heavy_check_mark: react/no-is-mounted Prevent usage of isMounted
coffee/no-multi-comp Prevent multiple component definition per file
coffee/no-redundant-should-component-update Prevent usage of shouldComponentUpdate when extending React.PureComponent
:heavy_check_mark: coffee/no-render-return-value Prevent usage of the return value of React.render
react/no-set-state Prevent usage of setState
coffee/no-typos Prevent common casing typos
:heavy_check_mark: react/no-string-refs Prevent using string references in ref attribute.
coffee/no-this-in-sfc Prevent using this in stateless functional components
:heavy_check_mark: coffee/no-unescaped-entities Prevent invalid characters from appearing in markup
:heavy_check_mark: :wrench: react/no-unknown-property Prevent usage of unknown DOM property
react/no-unsafe Prevent usage of unsafe lifecycle methods
coffee/no-unused-prop-types Prevent definitions of unused prop types
coffee/no-unused-state Prevent definitions of unused state properties
react/no-will-update-set-state Prevent usage of setState in componentWillUpdate
react/prefer-es6-class Enforce ES5 or ES6 class for React Components
coffee/prefer-stateless-function Enforce stateless React Components to be written as a pure function
:heavy_check_mark: coffee/prop-types Prevent missing props validation in a React component definition
:heavy_check_mark: react/react-in-jsx-scope Prevent missing React when using JSX
coffee/require-default-props Enforce a defaultProps definition for every prop that is not a required prop
react/require-optimization Enforce React components to have a shouldComponentUpdate method
:wrench: react/self-closing-comp Prevent extra closing tags for components without children
coffee/sort-comp Enforce component methods order
:warning: Unlike the eslint-plugin-react rule, the CoffeeScript version is not fixable
coffee/sort-prop-types Enforce propTypes declarations alphabetical sorting
react/static-property-placement Enforces where React component static properties should be positioned
coffee/style-prop-object Enforce style prop value being an object
react/void-dom-elements-no-children Prevent void DOM elements (e.g. <img />, <br />) from receiving children

JSX-specific rules

Name Description
coffee/jsx-boolean-value Enforce boolean attributes notation in JSX
:warning: Unlike the eslint-plugin-react rule, the CoffeeScript version is not fixable
react/jsx-child-element-spacing Enforce or disallow spaces inside of curly braces in JSX attributes and expressions.
:wrench: coffee/jsx-closing-bracket-location Validate closing bracket location in JSX
:wrench: react/jsx-closing-tag-location Validate closing tag location in JSX
coffee/jsx-curly-newline Enforce or disallow newlines inside of curly braces in JSX attributes and expressions
:warning: Unlike the eslint-plugin-react rule, the CoffeeScript version is not fixable
:wrench: react/jsx-curly-spacing Enforce or disallow spaces inside of curly braces in JSX attributes and expressions
:wrench: react/jsx-equals-spacing Enforce or disallow spaces around equal signs in JSX attributes
react/jsx-filename-extension Restrict file extensions that may contain JSX
coffee/jsx-first-prop-new-line Enforce position of the first prop in JSX
:warning: Unlike the eslint-plugin-react rule, the CoffeeScript version is not fixable
coffee/jsx-handler-names Enforce event handler naming conventions in JSX
:wrench: coffee/jsx-indent Validate JSX indentation
:wrench: react/jsx-indent-props Validate props indentation in JSX
:heavy_check_mark: coffee/jsx-key Validate JSX has key prop when in array or iterator
react/jsx-max-depth Validate JSX maximum depth
coffee/jsx-max-props-per-line Limit maximum of props on a single line in JSX
:warning: Unlike the eslint-plugin-react rule, the CoffeeScript version is not fixable
coffee/jsx-no-bind Prevent usage of .bind() and arrow functions in JSX props
:heavy_check_mark: coffee/jsx-no-comment-textnodes Prevent comments from being inserted as text nodes
:heavy_check_mark: react/jsx-no-duplicate-props Prevent duplicate props in JSX
react/jsx-no-literals Prevent usage of unwrapped JSX strings
:heavy_check_mark: coffee/jsx-no-target-blank Prevent usage of unsafe target='_blank'
:heavy_check_mark: react/jsx-no-undef Disallow undeclared variables in JSX
coffee/jsx-one-expression-per-line Limit to one expression per line in JSX
:wrench: react/jsx-curly-brace-presence Enforce curly braces or disallow unnecessary curly braces in JSX
:wrench: coffee/jsx-fragments Enforce shorthand or standard form for React fragments
react/jsx-pascal-case Enforce PascalCase for user-defined JSX components
:wrench: react/jsx-props-no-multi-spaces Disallow multiple spaces between inline JSX props
react/jsx-props-no-spreading Disallow JSX props spreading
coffee/jsx-sort-default-props Enforce default props alphabetical sorting
:wrench: react/jsx-sort-props Enforce props alphabetical sorting
:wrench: coffee/jsx-tag-spacing Validate whitespace in and around the JSX opening and closing brackets
:heavy_check_mark: react/jsx-uses-react Prevent React to be incorrectly marked as unused
:heavy_check_mark: react/jsx-uses-vars Prevent variables used in JSX to be incorrectly marked as unused
coffee/jsx-wrap-multilines Prevent missing parentheses around multilines JSX
:warning: Unlike the eslint-plugin-react rule, the CoffeeScript version is not fixable

eslint-plugin-import rules

Static analysis

Name Description
import/no-unresolved Ensure imports point to a file/module that can be resolved
import/named Ensure named imports correspond to a named export in the remote file
import/default Ensure a default export is present, given a default import
coffee/namespace Ensure imported namespaces contain dereferenced properties as they are dereferenced
import/no-restricted-paths Restrict which files can be imported in a given folder
import/no-absolute-path Forbid import of modules using absolute paths
import/no-dynamic-require Forbid require() calls with expressions
[import/no-internal-modules](h
npm i eslint-plugin-coffee

Metadata

  • MIT
  • Whatever
  • Julian Rosse
  • released 9/8/2021

Downloads

Maintainers