créer un plugin / rule eslint

09/06/2023

créer un dossier /root/projects/eslint-plugin-raflint

créer le fichier principal

// index.js
module.exports = {
    rules: {
        'no-conditional-object-spread': require('./no-conditional-object-spread.js'),
    },
};

installer les packages

npm init -y
npm install -y -D @babel/eslint-parser eslint

créer une rule :

// no-conditional-object-spread.js
module.exports = {
    create(context) {
        return {
            SpreadElement(node) {
                if (node.argument.type === 'ConditionalExpression' || node.argument.type === 'LogicalExpression') {
                    context.report({
                        node,
                        message: 'Conditional object spread is not allowed.',
                    });
                }
            },
        };
    },
};

créer un fichier test.js

const { RuleTester } = require('eslint');
const noConditionalObjectSpread = require('./no-conditional-object-spread.js');

const ruleTester = new RuleTester({
    "parser": "/root/projects/no-conditional-object-spread/node_modules/@babel/eslint-parser",
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module",
        "requireConfigFile": false
    }
});

ruleTester.run('no-conditional-object-spread', noConditionalObjectSpread, {
    valid: [
        {
            code: `
                const condition = true;
                const obj = {};
                if (condition) obj.prop = value;
            `,
        }
    ],
    invalid: [
        {
            code: `
                const obj = {
                    ...(condition ? { prop: 'value' } : {}),
                };
            `,
            errors: [{ message: 'Conditional object spread is not allowed.' }],
        },
        {
            code: `
                const obj = {
                    ...(condition && { prop: 'value' }),
                };
            `,
            errors: [{ message: 'Conditional object spread is not allowed.' }],
        }
    ]
});

lancer avec mocha

mocha test.js

tester le plugin

on peut se mettre dans le dossier ou on veut utiliser le plugin pui lancer :

npm link ../pathDuPlugin

on peut ensuite le voir comme ça

npm ls --link

puis enlever le link

npm unlink xxx

Raccourcis