## 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 --> |
||
|---|---|---|
| .. | ||
| src | ||
| .eslintrc.json | ||
| .prettierignore | ||
| jest.config.js | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
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
-
Navigate to your Appsmith ESLint plugin directory i.e.
app/client/packages/eslint-plugin. -
Create a new directory for your custom rule in the root of
app/client/packages/eslint-plugindirectory. For example,src/custom-rule/rule.ts.mkdir src/custom-rule touch src/custom-rule/rule.ts touch src/custom-rule/rule.test.ts -
Open
src/custom-rule/rule.tsand 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
-
Open the
src/index.tsfile insideeslint-plugindirectory. -
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
-
Open
src/custom-rule/rule.test.tsand write tests using a testing framework like Jest. Here's a basic example using ESLint'sRuleTester: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" }], }, ], }); -
Run your tests to ensure your rule works as expected:
yarn run test:unit
Step 4: Steps to add it to client
-
Go to
app/client/.eslintrc.base.json -
Add your
custom-ruleentry 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!