как изолировать параметры конструктора при написании пользовательского правила ESLint для Typescript

#typescript #eslint #customization #abstract-syntax-tree

Вопрос:

Моя цель-отсортировать параметры конструктора в алфавитном порядке с помощью «быстрого исправления» из eslint (для этого я пытаюсь написать это пользовательское правило).

а пока я просто хочу «изолировать» параметры конструктора и заставить eslint отображать волнистые линии и мой message , когда я наведу на них курсор, но я не знаю, как это сделать, просто посмотрев на AST этого примера кода здесь: https://astexplorer.net/#/gist/dc0def03c26658b1bfa5d8743f9a9f91/70365c30bee24bbec8289744ef4d33cf42268cb8

Какой из них мне выбрать? и как мне убедиться, что он проверяет только те, которые находятся в конструкторе?

 //example code used in AST explorer      
constructor(
        private _appService: AppService,
        private _authService: AuthService,
        private _formBuilder: FormBuilder,
        private _manageScenarioService: ManageScenarioService,
      ) {}
 

это то, что у меня есть до сих пор: проблема с этим заключается в том, что он выделяет все идентификаторы, а не только те, которые находятся внутри конструктора

  import { Rule } from 'eslint';
    export function diSortRule(context: Rule.RuleContext): Rule.RuleListener {
      return {
        Identifier(node) {
          context.report({
            node,
            message: 'this pops up here',
          });
        },
      };
    }
 

любая помощь была бы так признательна!!

Ответ №1:

Я знаю, что это было уже давно, но я надеюсь, что это все еще может пригодиться вам или другим. Мы только что опубликовали правило, которое можно автоматически исправить, и оно сортирует параметры конструктора в классах, оформленных одним из @Component() , @Directive() , @Injectable() , @Pipe() .

Вы можете использовать его как:

  1. установите наш плагин: npm install --save-dev @erento/eslint-plugin-erento-rules
  2. Добавьте это в свой файл .eslintrc
     "plugins": [
        "@erento/erento-rules"
    ],
    "rules": {
        "@erento/erento-rules/injectable-order": "error"
    }
     
  3. запустите свой линтер ESLint

Подробнее об этом правиле здесь: https://github.com/erento/eslint-plugin-erento-rules/blob/master/src/rules/injectable-order.md