An opinionated collection of ESLint shared configs and rules used by GitHub for maintaining code quality across JavaScript and TypeScript projects.
npx @tessl/cli install tessl/npm-eslint-plugin-github@6.0.0ESLint 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.
npm install eslint-plugin-githubimport eslintPluginGithub from "eslint-plugin-github";For CommonJS:
const eslintPluginGithub = require("eslint-plugin-github");// 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
];// .eslintrc.js
module.exports = {
plugins: ['github'],
rules: {
'github/no-blur': 'error',
'github/no-inner-html': 'error',
'github/authenticity-token': 'error'
}
};ESLint Plugin GitHub is organized around several key components:
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>;
}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;
}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]>;
}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';
};
}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;
}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;
}