Я не могу заставить свое собственное правило для работы работать - PullRequest
0 голосов
/ 19 марта 2020

Я использую инструмент AST для создания собственного правила esLint. Я хочу создать правило, которое выдает предупреждение всякий раз, когда я использую жестко кодированный strings в вызове function.

Пример:

var greet = 'Hello';
console.log('Hello') // throws an warning
console.log(greet) // doesn't throw a warning

Я построил правила вот так:

module.exports = {
  rules: {
    'no-hardcoded-strings': {
      create(context) {
        return {
          Literal(node) {
            if (node.raw) {
              context.report(node, 'Do not use hardcoded strings');
            }
          },
        };
      },
    },
  },
};

Не работает, это AST детская площадка . Вы можете увидеть разницу между двумя литералами, которая является свойством raw. Однако мое правило не работает.

Редактировать

Включен файл .eslintrc.js:

  plugins: ['custom-rule'],
  extends: [
    'airbnb-base',
    'plugin:cypress/recommended',
    'plugin:prettier/recommended',
    'plugin:json/recommended',
  ],
  settings: {
    'import/resolver': 'webpack',
  },
  rules: {
    'import/prefer-default-export': 'off',
    'import/no-default-export': 'warn',
    'eqeqeq': 'warn',
    'import/no-extraneous-dependencies': 'off',
    'camelcase': 'error',
    'no-unused-expressions': 'error',
    'custom-rule/no-hardcoded-strings': 1
  },

1 Ответ

2 голосов
/ 19 марта 2020

Может быть, вам следует пройти через CallExpression вместо Literal:

module.exports.rules = {
  'no-hardcoded-strings': context => ({
    CallExpression: node => {
      if (node.arguments.some(arg => arg.type === 'Literal' && arg.value)) {
        context.report(node, 'Do not use hardcoded strings')
      }
    }
  })
}
...