CtrlK
BlogDocsLog inGet started
Tessl Logo

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.

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

plugin.mddocs/

Main Plugin

Core plugin functionality providing the main ESLint plugin interface with rules, configurations, and metadata.

Capabilities

Default Export

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;

Plugin Rules Access

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

Get Flat Configs Function

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

Types

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

docs

binary-tools.md

configs.md

formatters.md

index.md

plugin.md

rules.md

tile.json