Enforce best practices for JavaScript promises
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Configuration options and presets for ESLint Plugin Promise, including flat config and legacy config support.
Main plugin export containing all rules, configurations, and metadata.
/**
* Main ESLint plugin export for promise rules
* @type {ESLintPlugin}
*/
const pluginPromise = {
rules: { [ruleName: string]: ESLintRule },
configs: {
recommended: ESLintConfig,
'flat/recommended': ESLintFlatConfig
},
rulesConfig: { [ruleName: string]: number } // Legacy configuration
};Usage Examples:
// ESM import
import pluginPromise from 'eslint-plugin-promise';
// CommonJS require
const pluginPromise = require('eslint-plugin-promise');
// Access specific rule
const alwaysReturnRule = pluginPromise.rules['always-return'];
// Use recommended config
const config = pluginPromise.configs.recommended;Legacy ESLint configuration format with recommended rule settings.
/**
* Recommended configuration for legacy ESLint setups
* @type {ESLintConfig}
*/
const recommendedConfig = {
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': 'off',
'promise/no-new-statics': 'error',
'promise/no-return-in-finally': 'warn',
'promise/valid-params': 'warn'
}
};Usage Examples:
// .eslintrc.json
{
"extends": ["plugin:promise/recommended"]
}ESLint flat configuration format for modern ESLint setups (v9+).
/**
* Recommended configuration for ESLint flat config format
* @type {ESLintFlatConfig}
*/
const flatRecommendedConfig = {
name: 'promise/flat/recommended',
plugins: { promise: pluginPromise },
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': 'off',
'promise/no-new-statics': 'error',
'promise/no-return-in-finally': 'warn',
'promise/valid-params': 'warn'
}
};Usage Examples:
// eslint.config.js
import pluginPromise from 'eslint-plugin-promise';
export default [
// ... other configs
pluginPromise.configs['flat/recommended'],
];Deprecated rule configuration object maintained for backward compatibility.
/**
* Legacy rule configuration (deprecated)
* @type {{ [ruleName: string]: number }}
* @deprecated Use configs.recommended or configs['flat/recommended'] instead
*/
const rulesConfig = {
'param-names': 1,
'always-return': 1,
'no-return-wrap': 1,
'no-native': 0,
'catch-or-return': 1
};For custom rule setups, you can configure individual rules:
// Flat config
export default [
{
plugins: { promise: pluginPromise },
rules: {
'promise/always-return': 'error',
'promise/catch-or-return': 'warn',
'promise/no-nesting': 'off'
}
}
];// Legacy config
{
"plugins": ["promise"],
"rules": {
"promise/always-return": "error",
"promise/catch-or-return": "warn",
"promise/no-nesting": "off"
}
}ESLint supports three severity levels:
'off' or 0: Rule is disabled'warn' or 1: Rule reports warnings (doesn't affect exit code)'error' or 2: Rule reports errors (affects exit code)The plugin supports:
interface ESLintPlugin {
rules: { [ruleName: string]: ESLintRule };
configs: {
recommended: ESLintConfig;
'flat/recommended': ESLintFlatConfig;
};
rulesConfig: { [ruleName: string]: number };
}
interface ESLintConfig {
plugins: string[];
rules: { [ruleName: string]: RuleSeverity };
}
interface ESLintFlatConfig {
name: string;
plugins: { [pluginName: string]: ESLintPlugin };
rules: { [ruleName: string]: RuleSeverity };
}
type RuleSeverity = 'off' | 'warn' | 'error' | 0 | 1 | 2;