ESLint, indent и ignoreNodes - проблема с правильной работой селекторов AST - PullRequest
0 голосов
/ 22 января 2020

Поскольку TSLint устарел, я нахожусь в процессе преобразования проектов для использования ESLint.

Я бы хотел установить правила отступов, чтобы это разрешалось:

type HtmlColor = 'attrib' | 'background' | 'bg_whitespace' | 'comment' | 'entity' | 'error' | 'foreground' |
                 'invalid' | 'markup' | 'tag' | 'value' | 'warning' | 'whitespace';

В настоящее время я получаю ошибку об отступе во второй строке, что это должно быть 0 пробелов вместо 17. Я мог бы ожидать, что ошибка будет жаловаться, что это не 2 пробела, но, конечно, не 0.

В любом случае, если я не могу получить указанный c отступ, который я хочу распознать, я бы хотя бы хотел, чтобы отступ в этом случае игнорировался.

Я пытался это исправить используя опцию ignoredNodes для правила ESLint indent следующим образом:

    "@typescript-eslint/indent": [
      "error",
      2,
      {
        "ArrayExpression": "first",
        "FunctionDeclaration": { parameters: "first" },
        "ignoredNodes": [
          "ArrowFunction > Block",
          "NoSubstitutionTemplateLiteral",
          "TemplateLiteral",
          "TypeAliasDeclaration *"
        ],
        "ObjectExpression": "first",
        "VariableDeclarator": "first",
        "SwitchCase": 1
      }
    ],

Я вижу, что part списка ignoredNodes работает так, как я ожидал, например, часть "TemplateLiteral", но я не могу понять правильный синтаксис AST для работы с объявлением type и другими вещами, такими как функции стрелок.

Я использовал AST Explorer , чтобы выяснить, какими должны быть селекторы AST, но без пока удачи.

1 Ответ

0 голосов
/ 22 января 2020

Я нашел синтаксис, который искал:

        "ignoredNodes": [
          "ArrowFunctionExpression > BlockStatement",
          "NoSubstitutionTemplateLiteral",
          "TemplateLiteral",
          "TSTypeAliasDeclaration *"
        ],

Хитрость заключалась в том, что разные настройки для AST Explorer создают разных имен узлов для одного и того же Языковые конструкции TypeScript! Пока я специально не установил в AST Explorer использование @typescript-eslint/parser, а не просто typescript и преобразование "ESLint v4", я получал неправильные имена селекторов в дереве разбора, сгенерированном из моего кода TypeScript.

...