or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

configuration-presets.mdindex.mdplugin-configuration.mdrules.md
tile.json

tessl/npm-eslint-plugin-functional

ESLint rules to promote functional programming in TypeScript.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/eslint-plugin-functional@9.0.x

To install, run

npx @tessl/cli install tessl/npm-eslint-plugin-functional@9.0.0

index.mddocs/

ESLint Plugin Functional

ESLint Plugin Functional is a comprehensive ESLint plugin that provides rules to promote functional programming patterns in JavaScript and TypeScript. It offers multiple configuration presets ranging from strict functional enforcement to more lenient approaches, with rule categories covering currying support, mutation prevention, exception handling, paradigm enforcement, statement restrictions, and stylistic preferences.

Package Information

  • Package Name: eslint-plugin-functional
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install eslint-plugin-functional

Core Imports

ESM Import:

import plugin from "eslint-plugin-functional";

CommonJS (not recommended, use ESM):

const plugin = require("eslint-plugin-functional");

Basic Usage

Quick Start with Recommended Config

import functional from "eslint-plugin-functional";

export default [
  {
    plugins: {
      functional,
    },
    rules: {
      ...functional.configs.recommended.rules,
    },
  },
];

Using Individual Rules

import functional from "eslint-plugin-functional";

export default [
  {
    plugins: {
      functional,
    },
    rules: {
      "functional/no-let": "error",
      "functional/immutable-data": "warn",
      "functional/no-throw-statements": "error",
    },
  },
];

Using Preset Configurations

import functional from "eslint-plugin-functional";

export default [
  {
    plugins: {
      functional,
    },
    rules: {
      // Use strict functional programming rules
      ...functional.configs.strict.rules,
    },
  },
];

Architecture

ESLint Plugin Functional is organized around several key components:

  • Plugin Object: Main export containing meta, rules, and configurations
  • Rules Engine: 20 individual ESLint rules covering different functional programming aspects
  • Configuration Presets: 14 predefined rule combinations for different use cases
  • TypeScript Integration: Advanced type-aware rules using TypeScript compiler API
  • Option System: Extensive configuration options with override capabilities

The plugin follows ESLint's flat configuration format and provides both individual rule control and preset configurations for different functional programming strictness levels.

Capabilities

Plugin Configuration

Core plugin functionality including metadata, rule registration, and configuration management.

interface EslintPluginFunctional {
  meta: {
    name: "eslint-plugin-functional";
    version: string;
  };
  rules: Record<string, ESLintRule>;
  configs: Record<string, FlatConfig.Config>;
}

declare const plugin: EslintPluginFunctional;
export default plugin;

Plugin Configuration

Functional Programming Rules

20 ESLint rules that enforce functional programming patterns, prevent mutations, and discourage imperative constructs.

interface Rules {
  "functional-parameters": ESLintRule;
  "immutable-data": ESLintRule;
  "no-classes": ESLintRule;
  "no-class-inheritance": ESLintRule;
  "no-conditional-statements": ESLintRule;
  "no-expression-statements": ESLintRule;
  "no-let": ESLintRule;
  "no-loop-statements": ESLintRule;
  "no-mixed-types": ESLintRule;
  "no-promise-reject": ESLintRule;
  "no-return-void": ESLintRule;
  "no-this-expressions": ESLintRule;
  "no-throw-statements": ESLintRule;
  "no-try-statements": ESLintRule;
  "prefer-immutable-types": ESLintRule;
  "prefer-property-signatures": ESLintRule;
  "prefer-readonly-type": ESLintRule;
  "prefer-tacit": ESLintRule;
  "readonly-type": ESLintRule;
  "type-declaration-immutability": ESLintRule;
}

Functional Programming Rules

Configuration Presets

14 predefined rule configurations covering different functional programming approaches from beginner-friendly to strict enforcement.

interface Configs {
  all: FlatConfig.Config;
  lite: FlatConfig.Config;
  recommended: FlatConfig.Config;
  strict: FlatConfig.Config;
  off: FlatConfig.Config;
  disableTypeChecked: FlatConfig.Config;
  externalVanillaRecommended: FlatConfig.Config;
  externalTypeScriptRecommended: FlatConfig.Config;
  currying: FlatConfig.Config;
  noExceptions: FlatConfig.Config;
  noMutations: FlatConfig.Config;
  noOtherParadigms: FlatConfig.Config;
  noStatements: FlatConfig.Config;
  stylistic: FlatConfig.Config;
}

Configuration Presets

Types

import type { FlatConfig } from "@typescript-eslint/utils/ts-eslint";

interface ESLintRule {
  meta: {
    type: "problem" | "suggestion" | "layout";
    docs: {
      description: string;
      recommended?: boolean | "recommended" | "strict";
      category: string;
      requiresTypeChecking?: boolean;
    };
    schema: JSONSchema4;
    deprecated?: boolean;
  };
  create(context: RuleContext): Record<string, Function>;
}

interface PluginMeta {
  name: "eslint-plugin-functional";
  version: string;
}