Игнорировать отступ в литерале шаблона с помощью правила ESLint `indent` - PullRequest
0 голосов
/ 05 сентября 2018

Правило ESLint для отступ позволяет вам указать, какие узлы игнорируются, при определении, должно ли правило применяться к этому узлу, используя параметр ignoredNodes.

У меня есть следующий код, который я хочу игнорировать с этим правилом:

const a = b
  ? `c${
      d
    }`
  : e

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

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

Я знаю, что могу использовать eslint-disable-next-line, eslint-disable и т. Д., Но я не хочу использовать их, потому что тогда мне придется использовать их каждый раз, когда это происходит.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Чтобы игнорировать все ошибки отступа и перехода на новую строку в ESLint внутри литерала шаблона, включая вызовы функций или глубоко вложенный синтаксис JS, вы можете использовать "ignoredNodes": ["TemplateLiteral *"] (без дочернего селектора > для нацеливания на всех потомков).

  "rules": {
    "indent": ["error", 2, { "ignoredNodes": ["TemplateLiteral *"] }],
    "function-paren-newline": "off"
  }

Вы также должны указать свое обычное правило отступа, например, "error", 2 для принудительного использования 2 пробелов или "error", "tab" для вкладок.

"function-paren-newline" также выдавал ошибки внутри литералов моего шаблона, я также хотел отключить это (потому что я расширяю существующую конфигурацию ESLint, которая отображала ошибку для этого).

0 голосов
/ 01 ноября 2018

Посмотрев на ast tree просто ${foo}, я подтвердил, что это действительно узел TemplateLiteral. Однако я также узнал решение оттуда: нужно выбрать и его детей. Это можно сделать с помощью TemplateLiteral > *. Причина, по которой ваше решение не работает, заключается в том, что ESLint будет освобождать TemplateLiteral от правил отступа, но только маленькие части ${ и }, а не содержимое.

Это может войти в ваш файл ESLintrc следующим образом:

"indent": [{ "ignoredNodes": ["TemplateLiteral > *"] }]

Извините, никто больше не смог ответить на ваш вопрос раньше.

...