Tslint: Начать отменять правило запрета неиспользуемых переменных

Созданный на 13 авг. 2016  ·  30Комментарии  ·  Источник: palantir/tslint

Я только что заметил эти новые проверки компилятора в версии 2.0: --noUnusedParameters и --noUnusedLocals . По сути, это делает правило no-unused-variable устаревшим. Поскольку это очень важное правило, я не думаю, что мы должны удалять его сразу.

Предложение:

  • удалить no-unused-variable из tslint:latest и tslint:recommended в v4.0
  • пометить правило как устаревшее в версии 4.0

    • может в сообщении об ошибке?

  • полностью удалить реализацию правила в TSLint v5.0
Won't Fix Breaking Change

Самый полезный комментарий

Небольшой отзыв. Наличие этих правил в tslint действительно удобно, так как вы получаете предупреждение линтера, но ваш код все равно компилируется. Лично меня очень раздражают сбои компилятора из-за неиспользуемой переменной, параметра или импорта, особенно при быстром изменении кода, таком как рефакторинг или проверка идеи.

Все 30 Комментарий

Хорошей особенностью здесь является то, что компилятор предоставляет возможность отказа: дайте имени переменной первое подчеркивание, и компилятор не пометит его. Это должно упростить задачу для людей, которые хотят включить проверки компилятора, но могут столкнуться с крайним случаем или двумя, которые они не хотят менять.

@JKillian Это применимо только к параметрам, верно?

@ glen-84 - хороший улов, я думаю, ты прав.

@adidahiya , чтобы отметить, что --noUnusedLocals и no-unused-variable работают совершенно по-разному.

Кажется, что --noUnusedLocals также проверяет свойства класса (в версии TS 2.0.2).

@charsleysa да, реализация немного отличается. Я думаю, что параметры компилятора лучше, чем правило TSLint, поэтому я хочу отдать ему предпочтение. Как отмечалось в исходном сообщении о проблеме, мы будем постепенно удалять его из ядра TSLint.

Я думаю, вы должны удалить его в версии 4. Должно быть много предварительных выпусков, в которых все разработчики должны видеть предупреждение об устаревании. И вы все равно удалили другие правила в пользу параметров компилятора.

PD: В версии dev-1, я думаю, это рекомендуемые настройки.

В качестве небольшого отзыва я столкнулся с этой проблемой сегодня вечером, и даже после обнаружения этой проблемы мне потребовалось некоторое время, чтобы понять, что --noUnusedLocals и --noUnusedParameters были конфигурациями tsc, а не tslint. Было бы полезно уточнить это в сообщении об ошибке.

@ryanguill спасибо за отзыв. Я совершил изменение, которое разъясняет сообщение

Небольшой отзыв. Наличие этих правил в tslint действительно удобно, так как вы получаете предупреждение линтера, но ваш код все равно компилируется. Лично меня очень раздражают сбои компилятора из-за неиспользуемой переменной, параметра или импорта, особенно при быстром изменении кода, таком как рефакторинг или проверка идеи.

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

@zubivan

Соглашаться. Я предпочитаю держать это предупреждение на стадии lint. Мой рабочий процесс:

any file/code changes => run ts-compile => run tests => run ts-lint

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

@michaeljota

Хотя я предпочитаю показывать предупреждение после тестирования, есть ли пример веб-пакета для достижения цели?

Интересно, может ли TSLint просто запустить компилятор, проанализировать и вывести его предупреждения как предупреждения TSLint? это избавит TSLint от необходимости поддерживать реализацию правила, но позволит пользователям по-прежнему иметь возможность использовать полезную функцию отключения / игнорирования комментариев TSLint среди других преимуществ.

@xareelee в моем профиле вы можете увидеть настройку Angular 2 с компиляцией TS без бросков.

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

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

Для всех остальных, которые ищут решение по этому вопросу, потому что они не хотят использовать параметры компилятора из-за того, что они будут препятствовать быстрой локальной разработке (комментирование некоторого кода и т. д. приведет к сбою транспиляции), вы можете сделать что-то вроде это:

const Rule = require('tslint/lib/rules/noUnusedVariableRule').Rule;

// Hide deprecation message
Rule.metadata.deprecationMessage = '';
Rule.metadata.ruleName = 'no-unused-variable-wrapped';

module.exports.Rule = Rule;

в вашем собственном файле правила noUnusedVariableWrapped.js , а затем включите его через "no-unused-variable-wrapped": true .

Я хотел бы отметить, что одна вещь, потерянная в зависимости от правила компилятора, а не от правила tslint, — это возможность автоматически исправлять и удалять неиспользуемые импорты/переменные.

Похоже, есть большой интерес к сохранению этого правила. Я пошел дальше и объединил # 2256, что отменяет правило. Это по-прежнему не будет поощряться во встроенных конфигурациях, но будет доступно по желанию.

Похоже, что если в вашем tsconfig есть "jsx": "react" , то tslint должен выдать ошибку из-за отсутствия импорта реакции.

@ccorcos «отсутствует импорт» - это совершенно другая ошибка, чем «нет неиспользуемой переменной». tsc должны вам помочь.

звучит отлично. я просто не вижу эту ошибку в VSCode...:/

Привет @adidahiya ,

Спасибо, что вернули это правило. Вопрос, когда выйдет? Как я вижу еще не включен в 5.1.0.

@ javier-tarazaga, он есть в версии 5, как и всегда. однако он не включен в конфигурации tslint:recommended .

Привет @adidahiya ,

Эм странно. Когда я включаю правило в версию tslint 5.1.0, я получаю следующую ошибку:

Could not find implementations for the following rules specified in the configuration:
    no-unused-vars
Try upgrading TSLint and/or ensuring that you have all necessary custom rules installed.
If TSLint was recently upgraded, you may have old rules configured which need to be cleaned up.

Это потому, что вы использовали неправильное имя файла. Это не неиспользуемая переменная, не
нет неиспользуемых варов

Am 02.05.2017 09:33 schrieb "Хавьер Таразага" уведомления@github.com :

Привет @adidahiya https://github.com/adidahiya ,

Эм странно. Когда я включаю правило в версию tslint 5.1.0, я получаю
следующая ошибка,

Не удалось найти реализации для следующих правил, указанных в конфигурации:
нет неиспользуемых варов
Попробуйте обновить TSLint и/или убедиться, что у вас установлены все необходимые пользовательские правила.
Если TSLint был недавно обновлен, возможно, у вас настроены старые правила, которые необходимо очистить.


Вы получаете это, потому что подписаны на эту тему.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/palantir/tslint/issues/1481#issuecomment-298527837 ,
или заглушить тему
https://github.com/notifications/unsubscribe-auth/ALaeKKYydi8vQ8MAhxOwBk3uL02jgzKNks5r1txLgaJpZM4JjuQh
.

Спасибо за внимание! Теперь я столкнулся с # 2650, поэтому я не могу это проверить.

Я установил https://github.com/blakeembrey/tslint-config-standard
Есть ли способ избавиться от этих предупреждений, я не уверен, связано ли это со стандартом или просто с tslint

> [email protected] lint /Users/nikos/WebstormProjects/common
> tslint 'src/**/*.ts' 'test/**/*.ts'

Warning: The 'await-promise' rule requires type information.
Warning: The 'no-unused-variable' rule requires type information.
Warning: The 'no-use-before-declare' rule requires type information.
Warning: The 'return-undefined' rule requires type information.
Warning: The 'no-floating-promises' rule requires type information.
Warning: The 'no-unnecessary-qualifier' rule requires type information.
Warning: The 'no-unnecessary-type-assertion' rule requires type information.
Warning: The 'strict-type-predicates' rule requires type information.

@QuantumInformation Вы пробовали использовать --project ?

Да, это работает, спасибо

🤖 Бип-буп! 👉 TSLint устарел 👈 и вам следует переключиться на typescript-eslint ! 🤖

🔒 Эта проблема заблокирована, чтобы избежать дальнейших ненужных обсуждений. Спасибо! 👋

Была ли эта страница полезной?
0 / 5 - 0 рейтинги