An opinionated collection of ESLint shared configs and rules used by GitHub for maintaining code quality across JavaScript and TypeScript projects.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Core plugin functionality providing the main ESLint plugin interface with rules, configurations, and metadata.
The main plugin export provides access to all plugin functionality.
/**
* Main ESLint Plugin GitHub export
*/
interface ESLintPluginGithub {
/** Collection of all 25 custom ESLint rules */
rules: Record<string, ESLintRule>;
/** Legacy ESLint configuration presets */
configs: ConfigurationPresets;
/** Function returning flat ESLint configuration presets */
getFlatConfigs(): FlatConfigurationPresets;
}
interface ConfigurationPresets {
browser: ESLintConfig;
internal: ESLintConfig;
recommended: ESLintConfig;
typescript: ESLintConfig;
react: ESLintConfig;
}
interface FlatConfigurationPresets {
browser: FlatESLintConfig;
internal: FlatESLintConfig;
recommended: FlatESLintConfig;
typescript: FlatESLintConfig;
react: FlatESLintConfig;
}Usage Examples:
import eslintPluginGithub from "eslint-plugin-github";
// Access all rules
const allRules = eslintPluginGithub.rules;
// Access legacy configs
const recommendedConfig = eslintPluginGithub.configs.recommended;
// Access flat configs
const flatConfigs = eslintPluginGithub.getFlatConfigs();
const flatRecommended = flatConfigs.recommended;Access individual rules from the plugin.
/**
* Access specific rules from the plugin
*/
interface PluginRules {
'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;
'array-foreach': ESLintRule;
'async-currenttarget': ESLintRule;
'async-preventdefault': ESLintRule;
'authenticity-token': ESLintRule;
'filenames-match-regex': ESLintRule;
'get-attribute': ESLintRule;
'js-class-name': ESLintRule;
'no-blur': ESLintRule;
'no-d-none': ESLintRule;
'no-dataset': ESLintRule;
'no-implicit-buggy-globals': ESLintRule;
'no-inner-html': ESLintRule;
'no-innerText': ESLintRule;
'no-dynamic-script-tag': ESLintRule;
'no-then': ESLintRule;
'no-useless-passive': ESLintRule;
'prefer-observers': ESLintRule;
'require-passive-events': ESLintRule;
'unescaped-html-literal': ESLintRule;
}
interface ESLintRule {
meta: ESLintRuleMeta;
create(context: ESLintContext): Record<string, Function>;
}
interface ESLintRuleMeta {
type: 'problem' | 'suggestion' | 'layout';
docs: {
description: string;
url: string;
recommended: boolean;
};
schema: any[];
messages: Record<string, string>;
}
interface ESLintContext {
report(descriptor: {
node: any;
messageId: string;
data?: Record<string, any>;
}): void;
getSourceCode(): any;
getFilename(): string;
}Usage Examples:
import eslintPluginGithub from "eslint-plugin-github";
// Get a specific rule
const noBlurRule = eslintPluginGithub.rules['no-blur'];
// Check rule metadata
console.log(noBlurRule.meta.docs.description);
// "disallow usage of `Element.prototype.blur()`"
// Use in ESLint configuration
export default [
{
plugins: {
github: eslintPluginGithub
},
rules: {
'github/no-blur': 'error'
}
}
];Returns flat ESLint configuration objects for modern ESLint setups.
/**
* Returns flat ESLint configuration presets
* @returns Object containing all flat configuration presets
*/
function getFlatConfigs(): FlatConfigurationPresets;
interface FlatConfigurationPresets {
browser: FlatESLintConfig;
internal: FlatESLintConfig;
recommended: FlatESLintConfig;
typescript: FlatESLintConfig;
react: FlatESLintConfig;
}
interface FlatESLintConfig {
languageOptions?: {
ecmaVersion?: number;
sourceType?: 'module' | 'script';
globals?: Record<string, boolean>;
parser?: any;
parserOptions?: Record<string, any>;
};
plugins?: Record<string, any>;
rules: Record<string, ESLintSeverity | [ESLintSeverity, any]>;
settings?: Record<string, any>;
}Usage Examples:
import eslintPluginGithub from "eslint-plugin-github";
// Get all flat configs
const flatConfigs = eslintPluginGithub.getFlatConfigs();
// Use in flat ESLint configuration
export default [
flatConfigs.recommended,
flatConfigs.browser,
{
files: ['**/*.ts', '**/*.tsx'],
...flatConfigs.typescript
}
];type ESLintSeverity = 'off' | 'warn' | 'error' | 0 | 1 | 2;
interface ESLintConfig {
env?: Record<string, boolean>;
parserOptions?: {
ecmaFeatures?: Record<string, any>;
sourceType?: 'module' | 'script';
ecmaVersion?: number;
};
plugins?: string[];
extends?: string[];
rules: Record<string, ESLintSeverity | [ESLintSeverity, any]>;
settings?: Record<string, any>;
}