PromucFlow_constructor/app/client/packages/eslint-plugin
Valera Melnikov ad810c0811
chore: add custom consistent-storybook-title rule (#38241)
## Automation

/ok-to-test tags="@tag.Sanity"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/12396717822>
> Commit: c556bda0ecbae89388821185ab86d340c553bc1e
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=12396717822&attempt=1"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.Sanity`
> Spec:
> <hr>Wed, 18 Dec 2024 16:46:31 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [x] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Updated titles for various components in Storybook for improved
readability (e.g., "NumberInput" to "Number Input").
- Introduced a new ESLint rule to enforce Title Case formatting for
Storybook titles.

- **Bug Fixes**
- Enhanced error handling and validation for Storybook titles through
the new ESLint rule.

- **Documentation**
- Added test cases for the new ESLint rule to validate title formats in
Storybook configurations.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-12-19 10:22:39 +03:00
..
src chore: add custom consistent-storybook-title rule (#38241) 2024-12-19 10:22:39 +03:00
.eslintrc.json chore: created shared utils package and moved objectKeys function to it (#35615) 2024-08-23 00:54:05 +05:30
.prettierignore chore: created shared utils package and moved objectKeys function to it (#35615) 2024-08-23 00:54:05 +05:30
jest.config.js chore: created shared utils package and moved objectKeys function to it (#35615) 2024-08-23 00:54:05 +05:30
package.json fix: removing unused dependencies and explicitly installing used ones (#36573) 2024-09-30 12:28:46 +03:00
README.md fix: eslint plugin readme updated (#35858) 2024-08-23 16:29:06 +05:30
tsconfig.json chore: created shared utils package and moved objectKeys function to it (#35615) 2024-08-23 00:54:05 +05:30

Adding a Custom Rule to Your Appsmith ESLint Plugin

Welcome to the guide for adding a custom rule to your Appsmith ESLint plugin. Follow these steps to create and integrate a new rule into your Appsmith ESLint plugin.

You can create one by following the official ESLint custom rule.

Step 1: Create the Custom Rule File

  1. Navigate to your Appsmith ESLint plugin directory i.e. app/client/packages/eslint-plugin.

  2. Create a new directory for your custom rule in the root of app/client/packages/eslint-plugin directory. For example, src/custom-rule/rule.ts.

    mkdir src/custom-rule
    touch src/custom-rule/rule.ts
    touch src/custom-rule/rule.test.ts
    
  3. Open src/custom-rule/rule.ts and define your rule. Here's a basic template to get you started:

    import type { TSESLint } from "@typescript-eslint/utils";
    
    export const customRule: TSESLint.RuleModule<"useObjectKeys"> = {
      defaultOptions: [],
      meta: {
        type: "problem", // or "suggestion" or "layout"
        docs: {
          description: "A description of what the rule does",
          category: "Best Practices",
          recommended: false,
        },
        fixable: null, // or "code" if the rule can fix issues automatically
        schema: [], // JSON Schema for rule options
      },
      create(context) {
        return {
          // Define the rule's behavior here
          // e.g., "Identifier": (node) => { /* logic */ }
        };
      },
    };
    

Step 2: Update the Plugin Index File

  1. Open the src/index.ts file inside eslint-plugin directory.

  2. Import your custom rule and add it to the rules object in index.ts. For example:

    import { customRule } from "./custom-rule/rule";
    
    const plugin = {
      rules: {
        "custom-rule": customRule,
      },
      configs: {
        recommended: {
          rules: {
            "@appsmith/custom-rule": "warn", // Add this in recommended if you want to add this rule by default to the repository as a recommended rule.
          },
        },
      },
    };
    
    module.exports = plugin;
    

Step 3: Add Tests for Your Custom Rule

  1. Open src/custom-rule/rule.test.ts and write tests using a testing framework like Jest. Here's a basic example using ESLint's RuleTester:

    import { TSESLint } from "@typescript-eslint/utils";
    import { customRule } from "./rule";
    
    const ruleTester = new TSESLint.RuleTester();
    
    ruleTester.run("custom-rule", customRule, {
      valid: [
        // Examples of valid code
      ],
      invalid: [
        {
          code: "const foo = 1;",
          errors: [{ message: "Your custom error message" }],
        },
      ],
    });
    
  2. Run your tests to ensure your rule works as expected:

    yarn run test:unit
    

Step 4: Steps to add it to client

  1. Go to app/client/.eslintrc.base.json

  2. Add your custom-rule entry to the rules object or if the recommended rule is present its already added in the config. e.g.

     "@appsmith/custom-rule": "warn"
    

Additional Resources

Happy linting!