or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

binary-tools.mdconfigs.mdformatters.mdindex.mdplugin.mdrules.md
tile.json

tessl/npm-eslint-plugin-github

An opinionated collection of ESLint shared configs and rules used by GitHub for maintaining code quality across JavaScript and TypeScript projects.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/eslint-plugin-github@6.0.x

To install, run

npx @tessl/cli install tessl/npm-eslint-plugin-github@6.0.0

index.mddocs/

ESLint Plugin GitHub

ESLint Plugin GitHub is an opinionated collection of ESLint shared configurations and rules specifically designed and used by GitHub for maintaining code quality and consistency across JavaScript and TypeScript projects. It provides comprehensive linting solutions with accessibility, security, performance, and best practice rules, supporting both legacy and modern ESLint flat configuration formats.

Package Information

  • Package Name: eslint-plugin-github
  • Package Type: npm
  • Language: JavaScript (ES modules)
  • Installation: npm install eslint-plugin-github

Core Imports

import eslintPluginGithub from "eslint-plugin-github";

For CommonJS:

const eslintPluginGithub = require("eslint-plugin-github");

Basic Usage

Using Preset Configurations

// Legacy ESLint configuration (.eslintrc.js)
module.exports = {
  extends: [
    'plugin:github/recommended'
  ],
  plugins: ['github']
};

// Flat ESLint configuration (eslint.config.js)
import eslintPluginGithub from "eslint-plugin-github";

export default [
  eslintPluginGithub.getFlatConfigs().recommended
];

Using Individual Rules

// .eslintrc.js
module.exports = {
  plugins: ['github'],
  rules: {
    'github/no-blur': 'error',
    'github/no-inner-html': 'error',
    'github/authenticity-token': 'error'
  }
};

Architecture

ESLint Plugin GitHub is organized around several key components:

  • Plugin Core: Main plugin object with metadata and rule definitions
  • Rule System: 25 custom ESLint rules covering accessibility, security, performance, and best practices
  • Configuration Presets: Five curated preset configurations (recommended, browser, typescript, react, internal)
  • Dual Format Support: Both legacy and modern flat ESLint configuration formats
  • Binary Tools: Command-line utilities for automated rule disable comment insertion
  • Custom Formatters: Enhanced ESLint output formatting with fix previews

Capabilities

Main Plugin Export

Core plugin functionality providing access to rules, configurations, and utilities.

interface ESLintPluginGithub {
  /** All available ESLint rules */
  rules: Record<string, ESLintRule>;
  /** Legacy ESLint configuration presets */
  configs: {
    browser: ESLintConfig;
    internal: ESLintConfig;
    recommended: ESLintConfig;
    typescript: ESLintConfig;
    react: ESLintConfig;
  };
  /** Function returning flat ESLint configuration presets */
  getFlatConfigs(): {
    browser: FlatESLintConfig;
    internal: FlatESLintConfig;
    recommended: FlatESLintConfig;
    typescript: FlatESLintConfig;
    react: FlatESLintConfig;
  };
}

interface ESLintRule {
  meta: {
    type: 'problem' | 'suggestion' | 'layout';
    docs: {
      description: string;
      url: string;
      recommended: boolean;
    };
    schema: any[];
    messages: Record<string, string>;
  };
  create(context: any): Record<string, Function>;
}

Main Plugin

ESLint Rules

Collection of 25 custom ESLint rules covering accessibility, security, performance, and coding best practices.

interface AvailableRules {
  // Accessibility rules
  'a11y-no-visually-hidden-interactive-element': ESLintRule;
  'a11y-no-generic-link-text': ESLintRule;
  'a11y-no-title-attribute': ESLintRule;
  'a11y-aria-label-is-well-formatted': ESLintRule;
  'a11y-role-supports-aria-props': ESLintRule;
  'a11y-svg-has-accessible-name': ESLintRule;
  
  // Performance and best practice rules
  'array-foreach': ESLintRule;
  'async-currenttarget': ESLintRule;
  'async-preventdefault': ESLintRule;
  'no-blur': ESLintRule;
  'no-then': ESLintRule;
  'prefer-observers': ESLintRule;
  
  // Security rules
  'authenticity-token': ESLintRule;
  'no-dynamic-script-tag': ESLintRule;
  'no-inner-html': ESLintRule;
  'unescaped-html-literal': ESLintRule;
  
  // Additional utility rules
  'filenames-match-regex': ESLintRule;
  'get-attribute': ESLintRule;
  'js-class-name': ESLintRule;
  'no-d-none': ESLintRule;
  'no-dataset': ESLintRule;
  'no-implicit-buggy-globals': ESLintRule;
  'no-innerText': ESLintRule;
  'no-useless-passive': ESLintRule;
  'require-passive-events': ESLintRule;
}

ESLint Rules

Configuration Presets

Curated ESLint configuration presets for different environments and use cases, available in both legacy and flat config formats.

interface ConfigurationPresets {
  /** Browser-specific linting configuration */
  browser: ESLintConfig;
  /** Internal GitHub-specific rules and settings */
  internal: ESLintConfig;
  /** General-purpose recommended configuration */
  recommended: ESLintConfig;
  /** TypeScript-specific linting setup */
  typescript: ESLintConfig;
  /** React-specific rules and settings */
  react: ESLintConfig;
}

interface ESLintConfig {
  env?: Record<string, boolean>;
  parserOptions?: {
    ecmaFeatures?: Record<string, any>;
    sourceType?: string;
  };
  plugins?: string[];
  extends?: string[];
  rules: Record<string, string | [string, any]>;
}

interface FlatESLintConfig {
  languageOptions?: {
    ecmaVersion?: number;
    sourceType?: string;
    globals?: Record<string, boolean>;
  };
  plugins?: Record<string, any>;
  rules: Record<string, string | [string, any]>;
}

Configuration Presets

Binary Tools

Command-line utilities for automated ESLint workflow enhancement.

interface BinaryTools {
  /** Executable: eslint-ignore-errors */
  'eslint-ignore-errors': {
    usage: 'eslint-ignore-errors <file.js>';
    description: 'Automatically adds eslint-disable-next-line comments for ESLint violations';
  };
}

Binary Tools

Custom Formatters

Enhanced ESLint output formatters with additional functionality.

/**
 * Enhanced ESLint formatter with fix previews and detailed output
 * @param results - ESLint results array
 * @returns Formatted output string
 */
function stylishFixesFormatter(results: ESLintResult[]): string;

interface ESLintResult {
  filePath: string;
  messages: ESLintMessage[];
  errorCount: number;
  warningCount: number;
  source?: string;
}

interface ESLintMessage {
  line: number;
  column: number;
  ruleId: string;
  message: string;
  fix?: ESLintFix;
}

Custom Formatters

Types

type ESLintSeverity = 'off' | 'warn' | 'error' | 0 | 1 | 2;

interface ESLintFix {
  range: [number, number];
  text: string;
}

interface ValidationError {
  line: number;
  column: number;
  message: string;
  ruleId: string;
}