Настройте ESLint RuleTester для использования парсера Typescript

Я пытаюсь написать несколько собственных правил ESLint для своего проекта на машинописном тексте. В своем проекте я использую eslint / typescript для линтинга.

Я уже написал настраиваемый плагин eslint, который проверяет настраиваемое правило. Теперь я хочу написать модульные тесты для этого настраиваемого правила. Мой тестовый файл выглядит так:

/**
 * @fileoverview This rule verifies that logic can only depend on other logic
 * @author Dayem Siddiqui
 */
"use strict";

//------------------------------------------------------------------------------
// Requirements
//------------------------------------------------------------------------------
const typescriptParser = require('@typescript-eslint/parser')
var rule = require("../../../lib/rules/logic-dependency"),
  RuleTester = require("eslint").RuleTester;

//------------------------------------------------------------------------------
// Tests
//------------------------------------------------------------------------------
typescriptParser.parseForESLint()
var ruleTester = new RuleTester({ parserOptions: {} });
ruleTester.run("logic-dependency", rule, {
  valid: [
    `class DeleteLogic {

        }
    class CreateLogic {
            constructor(private deleteLogic: DeleteLogic) {}
    }`
  ],

  invalid: [
    {
      code: `class ExternalClient {

            }
            
            class UpdateLogic {
                constructor(private externalClient: ExternalClient) {}
            }`,
      errors: [
        {
          message: "Logic cannot have a dependency on client",
          type: "MethodDefinition"
        }
      ]
    }
  ]
});

Прямо сейчас мои тесты терпят неудачу, потому что по умолчанию eslint понимает только простой код Javascript. Я понимаю, что мне нужно как-то настроить его для использования специального парсера, который позволяет ему понимать / анализировать код машинописного текста. Однако я не могу найти в Интернете хороший пример того, как это сделать.


person Dayem Siddiqui    schedule 07.02.2020    source источник


Ответы (2)


Конструктор RuleTester принимает параметры парсера eslint, которые позволяют настраивать сам анализатор. Так что передайте его вот так, и Боб - ваш дядя:

const ruleTester = new RuleTester({
  parser: '@typescript-eslint/parser',
});

собственные тесты правил typescript-eslint (например, this) используйте именно это.

(Искал ответ на этот вопрос и продолжал заканчивать здесь, поэтому я опубликовал решение, которое нашел здесь, в надежде, что оно будет полезно.)


eslint 6.0+

Включая комментарий @Sonata:

Eslint 6.0+ требует абсолютного пути к парсеру (см. руководство по переходу на 6.0):

const ruleTester = new RuleTester({
  parser: require.resolve('@typescript-eslint/parser'),
});
person Sander    schedule 07.03.2020
comment
Новые версии eslint (›v6.0.0) требуют использования абсолютного пути: parser: require.resolve('@typescript-eslint/parser'). См. github.com/eslint/eslint/blob/master/docs/user-guide/ - person Sonata; 04.09.2020
comment
Спасибо @Sonata! Это сработало! - person Frnak; 27.05.2021

Используйте такой пакет, как typescript-eslint / parser. В данном случае я не могу предоставить ничего, кроме ссылки. Если вам понадобится помощь, дайте мне знать.

person Death Waltz    schedule 21.02.2020
comment
Другого выхода, кроме написания совершенно нового парсера, нет. - person Death Waltz; 21.02.2020