14 predefined rule configurations covering different functional programming approaches from beginner-friendly to strict enforcement. Each preset combines multiple rules with appropriate settings for specific use cases.
Enables all available rules with their default settings.
/**
* Enables all available rules
* Config: functional.configs.all
*/
interface AllConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: Record<string, "error">;
}Usage Example:
import functional from "eslint-plugin-functional";
export default [
{
plugins: { functional },
rules: {
...functional.configs.all.rules,
},
},
];Lightweight configuration ideal for beginners or gradual adoption of functional programming patterns.
/**
* Beginner-friendly functional programming rules
* Config: functional.configs.lite
*/
interface LiteConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: {
// Based on recommended rules with lighter overrides
"functional/functional-parameters": ["error", {
enforceParameterCount: false;
}];
"functional/immutable-data": ["error", {
ignoreClasses: "fieldsOnly";
}];
"functional/no-classes": "off";
"functional/no-conditional-statements": "off";
"functional/no-expression-statements": "off";
"functional/prefer-immutable-types": ["error", {
enforcement: "None";
overrides: Array<{
specifiers: { from: "file" };
options: {
ignoreInferredTypes: true;
parameters: { enforcement: "ReadonlyShallow" };
};
}>;
}];
// ... plus other recommended rules
};
}Usage Example:
import functional from "eslint-plugin-functional";
export default [
{
plugins: { functional },
rules: {
...functional.configs.lite.rules,
},
},
];Balanced configuration with practical overrides for real-world usage. Good balance between functional programming enforcement and practicality.
/**
* Recommended rules with practical overrides
* Config: functional.configs.recommended
*/
interface RecommendedConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: {
"functional/functional-parameters": ["error", {
enforceParameterCount: false;
overrides: Array<{
specifiers: Array<{ from: "file" }>;
options: {
enforceParameterCount: {
count: "atLeastOne";
ignoreLambdaExpression: true;
ignoreIIFE: true;
ignoreGettersAndSetters: true;
};
};
}>;
}];
"functional/no-conditional-statements": ["error", {
allowReturningBranches: true;
}];
"functional/no-let": ["error", {
allowInForLoopInit: true;
}];
"functional/no-this-expressions": "off";
"functional/no-throw-statements": ["error", {
allowToRejectPromises: true;
}];
"functional/no-try-statements": "off";
// ... other rules with specific configurations
};
}Usage Example:
import functional from "eslint-plugin-functional";
export default [
{
plugins: { functional },
rules: {
...functional.configs.recommended.rules,
},
},
];Strict functional programming enforcement with minimal exceptions.
/**
* Strict functional programming rules
* Config: functional.configs.strict
*/
interface StrictConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: Record<string, "error">;
}Usage Example:
import functional from "eslint-plugin-functional";
export default [
{
plugins: { functional },
rules: {
...functional.configs.strict.rules,
},
},
];Disables all functional programming rules. Useful for temporarily disabling the plugin.
/**
* Disables all rules
* Config: functional.configs.off
*/
interface OffConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: Record<string, "off">;
}Usage Example:
import functional from "eslint-plugin-functional";
export default [
{
plugins: { functional },
rules: {
...functional.configs.off.rules,
},
},
];Disables TypeScript type-aware rules while keeping other functional programming rules active.
/**
* Disables TypeScript type-aware rules
* Config: functional.configs.disableTypeChecked
*/
interface DisableTypeCheckedConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: Record<string, "off">;
}Usage Example:
import functional from "eslint-plugin-functional";
export default [
{
plugins: { functional },
rules: {
...functional.configs.recommended.rules,
...functional.configs.disableTypeChecked.rules,
},
},
];External recommended configuration optimized for vanilla JavaScript projects.
/**
* External recommended for vanilla JavaScript
* Config: functional.configs.externalVanillaRecommended
*/
interface ExternalVanillaRecommendedConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: Record<string, RuleConfiguration>;
}External recommended configuration optimized for TypeScript projects.
/**
* External recommended for TypeScript
* Config: functional.configs.externalTypeScriptRecommended
*/
interface ExternalTypeScriptRecommendedConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: Record<string, RuleConfiguration>;
}Rules focused on supporting and encouraging currying patterns.
/**
* Rules for currying support
* Config: functional.configs.currying
*/
interface CurryingConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: {
"functional/functional-parameters": "error";
"functional/prefer-tacit": "error";
// ... other currying-related rules
};
}Usage Example:
import functional from "eslint-plugin-functional";
export default [
{
plugins: { functional },
rules: {
...functional.configs.lite.rules,
...functional.configs.currying.rules,
},
},
];Rules that prevent exception-based error handling.
/**
* Rules preventing exceptions
* Config: functional.configs.noExceptions
*/
interface NoExceptionsConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: {
"functional/no-promise-reject": "error";
"functional/no-throw-statements": "error";
"functional/no-try-statements": "error";
};
}Rules that prevent data mutations.
/**
* Rules preventing mutations
* Config: functional.configs.noMutations
*/
interface NoMutationsConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: {
"functional/immutable-data": "error";
"functional/no-let": "error";
"functional/prefer-immutable-types": "error";
"functional/readonly-type": "error";
"functional/type-declaration-immutability": "error";
};
}Rules that prevent non-functional programming paradigms.
/**
* Rules preventing non-functional paradigms
* Config: functional.configs.noOtherParadigms
*/
interface NoOtherParadigmsConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: {
"functional/no-classes": "error";
"functional/no-class-inheritance": "error";
"functional/no-mixed-types": "error";
"functional/no-this-expressions": "error";
};
}Rules that prevent imperative statements.
/**
* Rules preventing imperative statements
* Config: functional.configs.noStatements
*/
interface NoStatementsConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: {
"functional/no-conditional-statements": "error";
"functional/no-expression-statements": "error";
"functional/no-loop-statements": "error";
"functional/no-return-void": "error";
};
}Stylistic functional programming rules that don't affect functionality but encourage better patterns.
/**
* Stylistic functional programming rules
* Config: functional.configs.stylistic
*/
interface StylisticConfig extends FlatConfig.Config {
plugins: { functional: EslintPluginFunctional };
rules: {
"functional/prefer-property-signatures": "error";
"functional/prefer-tacit": "error";
// ... other stylistic rules
};
}You can combine multiple presets to create custom configurations:
Usage Examples:
import functional from "eslint-plugin-functional";
// Combine lite with specific focuses
export default [
{
plugins: { functional },
rules: {
...functional.configs.lite.rules,
...functional.configs.noMutations.rules,
...functional.configs.stylistic.rules,
},
},
];
// Build custom strict configuration
export default [
{
plugins: { functional },
rules: {
...functional.configs.recommended.rules,
...functional.configs.noExceptions.rules,
...functional.configs.noStatements.rules,
},
},
];
// TypeScript-specific configuration
export default [
{
plugins: { functional },
rules: {
...functional.configs.externalTypeScriptRecommended.rules,
...functional.configs.noMutations.rules,
},
},
];type RuleConfiguration =
| "off" | 0
| "warn" | 1
| "error" | 2
| ["off" | "warn" | "error" | 0 | 1 | 2]
| ["off" | "warn" | "error" | 0 | 1 | 2, any];
interface FlatConfig.Config {
plugins?: Record<string, Plugin>;
rules?: Record<string, RuleConfiguration>;
files?: string[];
ignores?: string[];
languageOptions?: LanguageOptions;
linterOptions?: LinterOptions;
processor?: string | Processor;
settings?: Record<string, any>;
}