or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

configuration.mdindex.mdrules.md
tile.json

index.mddocs/

ESLint Plugin Promise

ESLint Plugin Promise is a comprehensive ESLint plugin that enforces best practices for JavaScript promises and async/await patterns. It provides 17 different rules to help developers avoid common pitfalls such as forgetting return statements, improper error handling, nested promises, callback mixing, and invalid promise usage patterns.

Package Information

  • Package Name: eslint-plugin-promise
  • Package Type: npm
  • Language: JavaScript
  • Installation: npm install eslint-plugin-promise --save-dev

Core Imports

ESM (flat config):

import pluginPromise from 'eslint-plugin-promise';

CommonJS (legacy config):

const pluginPromise = require('eslint-plugin-promise');

Basic Usage

Flat Config (ESLint 9+)

import pluginPromise from 'eslint-plugin-promise';

export default [
  // ... other configs
  pluginPromise.configs['flat/recommended'],
];

Legacy Config (.eslintrc.*)

{
  "plugins": ["promise"],
  "extends": ["plugin:promise/recommended"]
}

Custom Rule Configuration

{
  "plugins": ["promise"],
  "rules": {
    "promise/always-return": "error",
    "promise/no-return-wrap": "error",
    "promise/param-names": "error",
    "promise/catch-or-return": "error",
    "promise/no-native": "off",
    "promise/no-nesting": "warn",
    "promise/no-promise-in-callback": "warn",
    "promise/no-callback-in-promise": "warn",
    "promise/avoid-new": "warn",
    "promise/no-new-statics": "error",
    "promise/no-return-in-finally": "warn",
    "promise/valid-params": "warn",
    "promise/no-multiple-resolved": "error"
  }
}

Architecture

ESLint Plugin Promise is built around several key components:

  • Plugin Object: Main export containing rules, configurations, and metadata
  • Rule Implementations: Individual ESLint rule definitions with comprehensive checking logic
  • Configuration Presets: Pre-configured rule sets for common use cases
  • Utility Libraries: Shared helper functions for promise detection and AST analysis
  • Auto-fixing: Automatic code fixes for certain rule violations

Capabilities

Plugin Configuration

Core plugin configuration including recommended rule presets and legacy compatibility options.

const pluginPromise = {
  rules: { [ruleName: string]: ESLintRule },
  configs: {
    recommended: ESLintConfig,
    'flat/recommended': ESLintFlatConfig
  },
  rulesConfig: { [ruleName: string]: number } // Legacy
};

Configuration

Promise Rules

Comprehensive set of 17 ESLint rules for enforcing promise best practices, covering error handling, return statements, nesting, callback integration, and parameter validation.

// Core recommended rules
const recommendedRules = {
  'promise/always-return': 'error',
  'promise/no-return-wrap': 'error', 
  'promise/param-names': 'error',
  'promise/catch-or-return': 'error',
  'promise/no-native': 'off',
  'promise/no-nesting': 'warn',
  'promise/no-promise-in-callback': 'warn',
  'promise/no-callback-in-promise': 'warn',
  'promise/avoid-new': 'off',
  'promise/no-new-statics': 'error',
  'promise/no-return-in-finally': 'warn',
  'promise/valid-params': 'warn'
};

Promise Rules

Types

interface ESLintRule {
  meta: {
    type: 'problem' | 'suggestion' | 'layout';
    docs: {
      description: string;
      url: string;
    };
    fixable?: 'code' | 'whitespace';
    schema: any[];
    messages: { [messageId: string]: string };
  };
  create(context: ESLintContext): ESLintVisitor;
}

interface ESLintConfig {
  plugins: string[];
  rules: { [ruleName: string]: string | number };
}

interface ESLintFlatConfig {
  name: string;
  plugins: { [pluginName: string]: ESLintPlugin };
  rules: { [ruleName: string]: string | number };
}

interface ESLintContext {
  report(descriptor: ReportDescriptor): void;
  getSourceCode(): SourceCode;
  // ... additional ESLint context methods
}

interface ReportDescriptor {
  node: ESTreeNode;
  messageId: string;
  data?: { [key: string]: string };
  fix?(fixer: RuleFixer): Fix;
}