GithubHelp home page GithubHelp logo

manovotny / eslint-config-get-off-my-lawn Goto Github PK

View Code? Open in Web Editor NEW
55.0 4.0 8.0 1.31 MB

A highly opinionated, sharable config of ESLint rules to produce beautiful, readable JavaScript.

License: MIT License

JavaScript 100.00%
eslint eslint-config eslint-rules eslint-plugin

eslint-config-get-off-my-lawn's Introduction

eslint-config-get-off-my-lawn

A highly opinionated, sharable config of ESLint rules to produce beautiful, readable JavaScript.

eslint-config-get-off-my-lawn

As developers, we spend more time reading code than writing it. These rules aim to make reading JavaScript a priority.

That means some rules will feel oppressive or "over the top" for many developers, which is fine. If you don't like it, you can get off my lawn! ... Or extend the rules and override them with the ones that bother you. Either way. ๐Ÿ˜Š

This config also comes with the following plugins, and corresponding rules, baked in.

Each and every single rule has been meticulously poured over and purposefully hand picked or excluded.

eslint-config-get-off-my-lawn will automatically enable and disable plugins (and thus rules) based on your package.json dependencies. Not using React? Cool. eslint-plugin-jsx-a11y, eslint-plugin-react, eslint-plugin-react-hooks, and eslint-plugin-react-native won't be included. Not using a React version that supports hooks? eslint-plugin-react-hooks will be disabled. Not a React Native project? No problem. Those rules won't be included. I think you get the idea... ๐Ÿ˜‰

Install

NPM

$ npm i eslint eslint-config-get-off-my-lawn --save-dev

Yarn

$ yarn add eslint eslint-config-get-off-my-lawn --dev

Usage

Create an ESLint config in your package.json or .eslintrc.js file.

package.json

{
    "name": "my-awesome-project",
    "eslintConfig": {
        "extends": "get-off-my-lawn",
        "rules": {
            // enable additional rules, override rule options, or disable rules
        }
    }
}

.eslintrc.js

module.exports = {
    extends: 'get-off-my-lawn',
    rules: {
        // enable additional rules, override rule options, or disable rules
    },
};

Once your rules are configured, we recommend running the following command in your package.json as an npm script.

eslint . --ext .js,.json

Supported extensions:

  • .js
  • .jsx
  • .json
  • .json5
  • .jsonc
  • .ts
  • .tsx

Usage With Prettier

Love eslint-config-get-off-my-lawn? Love prettier? Well you're in luck!

eslint-config-get-off-my-lawn will automatically detect if your project is using prettier and it will apply eslint-config-prettier to turn off all rules that are unnecessary or might conflict with prettier.

Usage With TypeScript

But what about TypeScript? Don't worry, we got you!

eslint-config-get-off-my-lawn will automatically detect if your project is using TypeScript and it will configure and enable @typescript-eslint/eslint-plugin for you. How's that for handy?

Related

License

MIT ยฉ Michael Novotny

eslint-config-get-off-my-lawn's People

Contributors

alexashley avatar dependabot-preview[bot] avatar dependabot[bot] avatar djejaquino avatar don-smith avatar logankeenan avatar manovotny avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

eslint-config-get-off-my-lawn's Issues

Relax `react/display-name` rule

React display names are not necessary for code to React, but they do aid in debugging issues.

In most cases, React can intuitively and automatically determine what the display name should be. But in other cases, namely in anonymous usages, it is not able to determine a display name, which makes debugging some React errors / warnings very, very difficult.

Warning: Each child in an array or iterator should have a unique "key" prop. Check the top-level render call using <div>.

The proposition is to relax the react/display-name rule so it will only error on instances where a display name cannot be intuitively and automatically determined.

Recommendation is to change react/display-name's ignoreTranspilerName from true to false.

'react/display-name': [
    'error',
    {
        ignoreTranspilerName: false
    }
]

Update eslint rules

We needed to upgrade eslint in order to fix #19, but I didn't want to add any new rules at this point in time.

At some point, we'll need to investigate what rules were added / deprecated between eslint 3.7.0 and 3.15.0 and do a breaking change.

Relax `react/jsx-handler-names` rule

I don't understand the benefit of this rule to be honest. My biggest issue is the eventHandlerPropPrefix option. You might not have control over the naming of the functions that you are passed like router.goBack when using React Router.

Consider removing or changing subjective rules

Let's take max-statements, for example... Say it's set to 10 lines. I then write this function that is 11 lines. Maybe it should be broken up into smaller, more easily consumable functions. Maybe the code makes more sense to stay together because it eloquently encapsulates a piece of functionality well. And that's the problem...

It depends.

Subjective rules like this are usually better left disabled and the kinds of things they try to prevent are better left to code reviews and conversations than hard and fast, black and white rules that arbitrarily force you to change the code or add a disable comment.

The following rules are in eslint-config-get-off-my-lawn and should be considered for removal, or at the very least, changed to a warning.

  • complexity
  • max-depth
  • max-nested-callbacks
  • max-params
  • react/no-set-state

Update `eslint-plugin-import` rules

We needed to upgrade the eslint-plugin-import in order to fix #20, but I didn't want to add any new rules at this point in time.

At some point, we'll need to investigate what rules were added / deprecated between eslint-plugin-import 2.0.0 and 2.2.0 and do a breaking change.

Remove duplicate rule for missing requires / imports

3:22  error  'assets-webpack-plugin' should be listed in the project's dependencies. Run 'npm i -S assets-webpack-plugin' to add it  import/no-extraneous-dependencies
3:30  error  "assets-webpack-plugin" is not found                                                                                    node/no-missing-require

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.