import { A, B, C } from './file';
console.log('No imports used');
export const D = 4;
с конфигурацией tslint.json
:
{
"rules": {
"no-unused-variable": [true, {"ignore-pattern": "^_"}]
}
}
The 'no-unused-variable' rule threw an error in '/Users/andrew.mitchell/Documents/Projects/test/test.ts':
TypeError: Cannot read property '1' of null
at walk (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/rules/noUnusedVariableRule.js:105:54)
at Rule.AbstractRule.applyWithFunction (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/language/rule/abstractRule.js:39:9)
at Rule.applyWithProgram (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/rules/noUnusedVariableRule.js:32:21)
at Linter.applyRule (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:194:29)
at /Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:139:85
at Object.flatMap (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/utils.js:151:29)
at Linter.getAllFailures (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:139:32)
at Linter.lint (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:99:33)
at /Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/runner.js:209:32
at step (/Users/andrew.mitchell/Documents/test/node_modules/tslint/node_modules/tslib/tslib.js:133:27)
Правило должно предупреждать All imports in import declaration are unused.
для строки 1.
Это вызвано noUnusedVariableRule.ts # L123, потому что сообщение failure
- это All imports in import declaration are unused.
, в котором нет имени переменной, которое может найти регулярное выражение.
Это правило работает правильно, если параметр ignore-pattern
не указан, поскольку он не будет пытаться проверить имя переменной.
Хорошая находка @hotforfeature. Я начал решать эту проблему в https://github.com/palantir/tslint/pull/3919, потому что это связано с некоторыми изменениями в TS 2.9, которые только усугубят эту проблему.
Мой PR предотвращает создание исключения, однако он просто игнорирует ignorePattern
в упомянутых вами случаях, что не очень хорошо. Я считаю, что нам нужно добавить какой-то сложный код вроде того, что мы делаем для импорта автофиксов прямо сейчас: /
Мне интересно, стоит ли нам отказаться от этого правила. tsc теперь предоставляет способ игнорировать свои предупреждения и обеспечивает поддержку автоматических исправлений для своих предупреждений через IDE.
Насколько я понимаю, основным преимуществом этого правила является ignore-pattern
, но это трудно реализовать правильно так, как правило теперь написано в зависимости от диагностики tsc. TSLint также немного более гибок, чем tsc, в отношении отключения правил в определенных файлах. @suchanlee есть мысли по этому
Мой основной вариант использования этого правила - автоисправление проблем при фиксации в хуке git при линтинге. Так что я по-прежнему считаю, что здесь есть большая ценность, даже если tsc предлагает что-то через интеграцию с IDE.
@JKillian, я думаю, что поддержка правила становится все более дорогостоящей благодаря поддержке TSLint нескольких версий Typescript и постоянным изменениям в поведении Typescript. И поскольку Typescript поддерживает эту функцию, мы должны склоняться к ее использованию. Но поскольку более ранние версии TS не поддерживают его, я не думаю, что мы должны его удалять. Однако я думаю, что нам следует подумать об отказе от правила и работать с людьми TS, чтобы лучше поддерживать текущие рабочие процессы TSLint с TS.
Я поддержу предложение
@hotforfeature - подтвердите свой вариант использования и
Как всегда, любой может скопировать исходный код правила и переместить его во внешний пакет и продолжать использовать / улучшать его таким образом!
Для чего это стоит:
{
"compilerOptions": {
"noUnusedLocals": true,
"noUnusedParameters": true,
}
}
Использование приведенного выше в tsconfig
позволяет отключить правило no-unused-variable
lint.
no-unused-variable
устарела, и compilerOptions
указанное выше, теперь является официальным решением.
Определение noUnusedLocals
и noUnusedParameters
в compilerOptions
не совсем то же самое, что no-unused-variable
tslint. На данный момент неиспользуемые вары либо приводят к сбою сборки, либо остаются незамеченными, и режима предупреждения больше нет 😞
@giladgray , @killtheliterate написал:
Использование приведенного выше в tsconfig позволяет отключить правило lint без неиспользуемых переменных.
Я не хочу отключать это правило, потому что, как писал @kachkaev
Определение
noUnusedLocals
иnoUnusedParameters
вcompilerOptions
не совсем то же самое, чтоno-unused-variable
tslint.
Мой вариант использования - это сгенерированный код. Я хочу, чтобы мой код, написанный вручную, следовал этому правилу, но, чтобы избежать чрезмерной сложности генератора кода, я хотел бы отключить это правило в сгенерированном коде (или, по крайней мере, в некоторых разделах сгенерированного кода) - это то, что может ' Это можно сделать с помощью параметров компилятора TypeScript 😞
По крайней мере, это устаревание должно быть задокументировано на веб-сайте TSLint , но я полностью согласен с тем, что это устаревание было преждевременным. Есть ли планы пересмотреть? Будет ли принят вклад сообщества?
Это осуждение смешно. Флаги компилятора - УЖАСНАЯ замена. Они ломают конструкцию и сами себя не исправляют. Как такое разумное решение указывать людям? Если вариант ignore-pattern
слишком сложен для работы сейчас, вместо этого откажитесь от него.
👋 ребята - просто свяжите это с https://github.com/palantir/tslint/issues/4232. Хорошо известно и согласовано, что встроенные параметры компилятора _не_ достаточная замена для no-unused-variable
. Первоначальная реализация правила не подходила для других инструментов TS, и ее пришлось отключить. # 4232 отслеживает, как снова включить его.
А пока вы можете использовать что-то вроде tsc --noEmit --noUnusedLocals --noUnusedParameters
в качестве отдельного инструмента для использования встроенных проверок. Да, это не так хорошо, как настраиваемый no-unused-variables
.
продолжить обсуждение в # 4100 и # 4232
Самый полезный комментарий
Определение
noUnusedLocals
иnoUnusedParameters
вcompilerOptions
не совсем то же самое, чтоno-unused-variable
tslint. На данный момент неиспользуемые вары либо приводят к сбою сборки, либо остаются незамеченными, и режима предупреждения больше нет 😞