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>;
}