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-plugin-github

v5.1.4

Published

An opinionated collection of ESLint shared configs and rules used by GitHub.

Downloads

418,577

Readme

eslint-plugin-github

Installation

npm install --save-dev eslint eslint-plugin-github

Setup

Legacy Configuration (.eslintrc)

Add github to your list of plugins in your ESLint config.

JSON ESLint config example:

{
  "plugins": ["github"]
}

Extend the configs you wish to use.

JSON ESLint config example:

{
  "extends": ["plugin:github/recommended"]
}

Flat Configuration (eslint-config.js)

Import the eslint-plugin-github, and extend any of the configurations using getFlatConfigs() as needed like so:

import github from 'eslint-plugin-github'

export default [
  github.getFlatConfigs().browser,
  github.getFlatConfigs().recommended,
  github.getFlatConfigs().react,
  ...github.getFlatConfigs().typescript,
  {
    files: ['**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}'],
    ignores: ['eslint.config.mjs'],
    rules: {
      'github/array-foreach': 'error',
      'github/async-preventdefault': 'warn',
      'github/no-then': 'error',
      'github/no-blur': 'error',
    },
  },
]

[!NOTE] If you configured the filenames/match-regex rule, please note we have adapted the match regex rule into eslint-plugin-github as the original eslint-filenames-plugin is no longer maintained and needed a flat config support update.

Please update the name to github/filenames-match-regex, and note, the default rule is kebab case or camelCase with one hump. For custom configuration, such as matching for camelCase regex, here's an example:

'github/filenames-match-regex': ['error', '^([a-z0-9]+)([A-Z][a-z0-9]+)*$'],

The available configs are:

  • internal
    • Rules useful for github applications.
  • browser
    • Useful rules when shipping your app to the browser.
  • react
    • Recommended rules for React applications.
  • recommended
    • Recommended rules for every application.
  • typescript
    • Useful rules when writing TypeScript.

Component mapping (Experimental)

Note: This is experimental and subject to change.

The react config includes rules which target specific HTML elements. You may provide a mapping of custom components to an HTML element in your eslintrc configuration to increase linter coverage.

By default, these eslint rules will check the "as" prop for underlying element changes. If your repo uses a different prop name for polymorphic components provide the prop name in your eslintrc configuration under polymorphicPropName.

{
  "settings": {
    "github": {
      "polymorphicPropName": "asChild",
      "components": {
        "Box": "p",
        "Link": "a"
      }
    }
  }
}

This config will be interpreted in the following way:

  • All <Box> elements will be treated as a p element type.
  • <Link> without a defined as prop will be treated as a a.
  • <Link as='button'> will be treated as a button element type.

Rules

💼 Configurations enabled in.
🔍 Set in the browser configuration.
🔐 Set in the internal configuration.
⚛️ Set in the react configuration.
✅ Set in the recommended configuration.
🔧 Automatically fixable by the --fix CLI option.
❌ Deprecated.

| Name                                        | Description | 💼 | 🔧 | ❌ | | :------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------- | :- | :- | :- | | a11y-aria-label-is-well-formatted | [aria-label] text should be formatted as you would visual text. | ⚛️ | | | | a11y-no-generic-link-text | disallow generic link text | | | ❌ | | a11y-no-title-attribute | Guards against developers using the title attribute | ⚛️ | | | | a11y-no-visually-hidden-interactive-element | Ensures that interactive elements are not visually hidden | ⚛️ | | | | a11y-role-supports-aria-props | Enforce that elements with explicit or implicit roles defined contain only aria-* properties supported by that role. | ⚛️ | | | | a11y-svg-has-accessible-name | SVGs must have an accessible name | ⚛️ | | | | array-foreach | enforce for..of loops over Array.forEach | ✅ | | | | async-currenttarget | disallow event.currentTarget calls inside of async functions | 🔍 | | | | async-preventdefault | disallow event.preventDefault calls inside of async functions | 🔍 | | | | authenticity-token | disallow usage of CSRF tokens in JavaScript | 🔐 | | | | filenames-match-regex | ensure filenames match a regex naming convention | | | | | get-attribute | disallow wrong usage of attribute names | 🔍 | 🔧 | | | js-class-name | enforce a naming convention for js- prefixed classes | 🔐 | | | | no-blur | disallow usage of Element.prototype.blur() | 🔍 | | | | no-d-none | disallow usage the d-none CSS class | 🔐 | | | | no-dataset | enforce usage of Element.prototype.getAttribute instead of Element.prototype.datalist | 🔍 | | | | no-dynamic-script-tag | disallow creating dynamic script tags | ✅ | | | | no-implicit-buggy-globals | disallow implicit global variables | ✅ | | | | no-inner-html | disallow Element.prototype.innerHTML in favor of Element.prototype.textContent | 🔍 | | | | no-innerText | disallow Element.prototype.innerText in favor of Element.prototype.textContent | 🔍 | 🔧 | | | no-then | enforce using async/await syntax over Promises | ✅ | | | | no-useless-passive | disallow marking a event handler as passive when it has no effect | 🔍 | 🔧 | | | prefer-observers | disallow poorly performing event listeners | 🔍 | | | | require-passive-events | enforce marking high frequency event handlers as passive | 🔍 | | | | unescaped-html-literal | disallow unescaped HTML literals | 🔍 | | |