npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

eslint-config-leaflink

v3.4.0

Published

Opinionated ESLint configuration for LeafLink's frontend repositories.

Downloads

722

Readme

eslint-config-leaflink

Opinionated ESLint configuration that extends airbnb to not conflict with prettier.

version downloads MIT License semantic-release Commitizen friendly

Features

  • Extends Vue's recommend plugin variant.
  • Leverages Vue's prettier plugin, which run's prettier within ESLint, and overrides ESLint/TS rules that may conflict with Prettier.
  • Loads a built-in prettier config, but can be overridden by your project's prettier config if found.
  • Supports both Vue & non-Vue applications dynamically based on your project's dependencies.
  • Supports linting TypeScript (.ts and .tsx files) and TypeScript within .vue sfc files.
  • Leverages the simple-import-sort plugin with some opinionated defaults.

Usage

Install by running:

npx install-peerdeps --dev eslint-config-leaflink

Then extend from the leaflink config in your .eslintrc.js:

module.exports = {
  extends: ['leaflink'],
  rules: {
    // your overrides here
  },
};

Prettier

Prettier is automatically run through eslint with LeafLink's default configuration. You can optionally add a .prettierrc.js configuration file in the root of your project and it will take precedence over the built-in config within eslint-config-leaflink.

If you'd like to extend our prettier config and only override a couple of properties, you can do the following:

prettierrc.js

const prettierConfig = require('eslint-config-leaflink/prettier');

module.exports = Object.assign(prettierConfig, {
  // your overrides here
});

Stylelint

In your .stylelintrc file, you can extend from the shared LeafLink stylelint config.

{
  "extends": ["eslint-config-leaflink/stylelint"]
}

Or you can do so in your package.json:

{
  "stylelint": {
    "extends": ["eslint-config-leaflink/stylelint"],
  }
}

commitlint

Create a commitlint.config.js in your project so you can extend from the shared LeafLink commitlint config.

const commitlintConfig = require('eslint-config-leaflink/commitlint');

module.exports = Object.assign(commitlintConfig, {
  // your overrides here
  rules: {
    'scope-case': [1],
  },
})

Known issues

https://github.com/francoismassart/eslint-plugin-tailwindcss/issues/149

When building dynamic classes, the auto sorting of tailwind classes can break things so beware:

image

To avoid this happening you can re-wrap the dynamic class expression like so:

class="`p-0 ${`tw-border-${accentColor}`}`"

Migrating LeafLink projects

  1. Uninstall your projects linting depedencies.
    npm uninstall \
      eslint \
      @vue/eslint-config-prettier \
      @vue/eslint-config-typescript \
      eslint-plugin-simple-import-sort \
      eslint-plugin-vue vue-eslint-parser \
      eslint-plugin-testing-library \
      @typescript-eslint/eslint-plugin \
      @typescript-eslint/parser \
      eslint-plugin-cypress \
      stylelint \
      stylelint-config-prettier \
      stylelint-config-standard \
      stylelint-config-standard-scss \
      stylelint-config-standard-vue \
      stylelint-order \
      postcss-html \
      @commitlint/cli \
      @commitlint/config-conventional
  2. Optionally delete your project's stylelint config.
    rm .stylelint.config.js .stylelintrc
  3. Optionally delete your project's prettier config and uninstall prettier unless it's used for non-js/yml things like markdown, etc.
    npm uninstall prettier
    rm .prettierrc.cjs .prettierrc.js .prettierrc
  4. Install eslint-config-leaflink.
    npx install-peerdeps --dev eslint-config-leaflink
  5. Optionally delete your projects .eslintignore file if our default list of ignorePatterns is adequate. (Note: If you think there's a good general addition to this list, please open a PR).
  6. Check to see if your eslintignore can be deleted. The shared config will only support high level ignore patterns.
    ignorePatterns: ['dist', '!.github'],
  7. Update your projects' ESLint config.
    module.exports = {
    -   extends: [
    -     'plugin:vue/vue3-recommended',
    -     'eslint:recommended',
    -     '@vue/eslint-config-typescript',
    -     '@vue/eslint-config-prettier',
    -     'prettier',
    -     '@vue/prettier',
    -     '@vue/typescript',
    -     'plugin:testing-library/vue',
    -   ],
    -   env: {
    -     es2021: true,
    -     browser: true,
    -     es6: true,
    -     node: true,
    -     jest: true,
    -   },
    -   plugins: [
    -     '@typescript-eslint',
    -     'prettier',
    -     'simple-import-sort',
    -   ],
    -  parser: 'vue-eslint-parser',
    -  parserOptions: {
    -    ecmaVersion: 2018,
    -    sourceType: 'module',
    -    parser: '@typescript-eslint/parser',
    -   },
    +   extends: ['leaflink'],
    +   // overrides...
    }
  8. Update your projects' package.json.
    - "commitlint": {
    -   "extends": [
    -     "@commitlint/config-conventional"
    -   ],
    -   "rules": {
    -     "scope-case": [
    -       0
    -     ],
    -     "body-max-line-length": [
    -       0
    -     ]
    -   }
    - }
    + "stylelint": {
    +   "extends": ["eslint-config-leaflink/stylelint"]
    + }
  9. Add a separate commitlint.config.js file.
    const config = require('eslint-config-leaflink/commitlint');
    
    module.exports = config;

Note: It's recommended you attempt to remove as many of your specific overrides as possible and see how much can be autofixed to be inline with this shared configuration. You can extend from leaflink and set temporary overrides to turn some rules off in order to make the initial migration easier.