Building Modular Functions for Reusability

Focus on creating modular and reusable functions to foster clean code and reduce redundancy.

0 likes
4 views

Rule Content

{
  "title": "Building Modular Functions for Reusability",
  "description": "Focus on creating modular and reusable functions to foster clean code and reduce redundancy.",
  "category": "JavaScript Cursor Rules",
  "rules": [
    {
      "name": "function-length-limit",
      "description": "Limit function length to enhance readability and maintainability.",
      "applyTo": "src/**/*.js",
      "maxLines": 50
    },
    {
      "name": "single-responsibility-principle",
      "description": "Ensure each function performs a single, well-defined task.",
      "applyTo": "src/**/*.js",
      "pattern": "function\\s+\\w+\\s*\\(.*\\)\\s*{[^}]*}",
      "validate": "functionBody => countStatements(functionBody) <= 10"
    },
    {
      "name": "avoid-nested-functions",
      "description": "Discourage the use of nested functions to maintain modularity.",
      "applyTo": "src/**/*.js",
      "pattern": "function\\s+\\w+\\s*\\(.*\\)\\s*{[^}]*function\\s+\\w+\\s*\\(.*\\)\\s*{[^}]*}"
    },
    {
      "name": "prefer-arrow-functions",
      "description": "Encourage the use of arrow functions for concise syntax and lexical scoping.",
      "applyTo": "src/**/*.js",
      "pattern": "function\\s+\\w+\\s*\\(.*\\)\\s*{[^}]*}",
      "suggest": "Replace with arrow function syntax."
    },
    {
      "name": "use-const-for-immutable",
      "description": "Use 'const' for variables that are not reassigned to promote immutability.",
      "applyTo": "src/**/*.js",
      "pattern": "var\\s+\\w+\\s*=\\s*[^;]+;",
      "suggest": "Replace 'var' with 'const' if the variable is not reassigned."
    },
    {
      "name": "consistent-naming-convention",
      "description": "Use camelCase for function names to maintain consistency.",
      "applyTo": "src/**/*.js",
      "pattern": "function\\s+[A-Z]\\w*\\s*\\(.*\\)\\s*{[^}]*}",
      "suggest": "Rename function to use camelCase."
    },
    {
      "name": "modular-file-structure",
      "description": "Organize functions into separate modules based on functionality.",
      "applyTo": "src/**/*.js",
      "pattern": "function\\s+\\w+\\s*\\(.*\\)\\s*{[^}]*}",
      "validate": "functionName => isFunctionInCorrectModule(functionName)"
    },
    {
      "name": "avoid-magic-numbers",
      "description": "Replace magic numbers with named constants for clarity.",
      "applyTo": "src/**/*.js",
      "pattern": "\\b\\d+\\b",
      "suggest": "Define a constant with a descriptive name for this number."
    },
    {
      "name": "use-descriptive-parameters",
      "description": "Use descriptive names for function parameters to enhance readability.",
      "applyTo": "src/**/*.js",
      "pattern": "function\\s+\\w+\\s*\\(([^)]*)\\)\\s*{[^}]*}",
      "validate": "parameters => parameters.every(param => isDescriptive(param))"
    },
    {
      "name": "document-functions",
      "description": "Provide JSDoc comments for all functions to improve maintainability.",
      "applyTo": "src/**/*.js",
      "pattern": "function\\s+\\w+\\s*\\(.*\\)\\s*{[^}]*}",
      "validate": "functionName => hasJSDocComment(functionName)"
    }
  ]
}