Tslint: Предупреждение: Правило 'no-unused-variable' требует сообщения проверки типа ...

Созданный на 16 июн. 2017  ·  46Комментарии  ·  Источник: palantir/tslint

Сообщение об ошибке

с конфигурацией tslint.json :

{
  "rulesDirectory": [
    "node_modules/codelyzer"
  ],
  "rules": {
    "arrow-return-shorthand": true,
    "callable-types": true,
    "class-name": true,
    "comment-format": [
      true,
      "check-space"
    ],
    "curly": true,
    "eofline": true,
    "forin": true,
    "import-blacklist": [
      true,
      "rxjs"
    ],
    "import-spacing": true,
    "indent": [
      true,
      "spaces"
    ],
    "interface-over-type-literal": true,
    "label-position": true,
    "max-line-length": [
      true,
      140
    ],
    "member-access": false,
    "member-ordering": [
      true,
      {
        "order": [
          "public-static-field",
          "protected-static-field",
          "public-static-method",
          "protected-static-method"
        ]
      }
    ],
    "no-arg": true,
    "no-bitwise": true,
    "no-console": [
      true,
      "debug",
      "info",
      "time",
      "timeEnd",
      "trace"
    ],
    "no-construct": true,
    "no-debugger": true,
    "no-duplicate-super": true,
    "no-empty": false,
    "no-empty-interface": true,
    "no-eval": true,
    "no-inferrable-types": [
      true,
      "ignore-params"
    ],
    "no-unused-variable": true,
    "no-misused-new": true,
    "no-non-null-assertion": true,
    "no-shadowed-variable": true,
    "no-string-literal": false,
    "no-string-throw": true,
    "no-switch-case-fall-through": true,
    "no-trailing-whitespace": true,
    "no-unnecessary-initializer": true,
    "no-unused-expression": true,
    "no-var-keyword": true,
    "object-literal-sort-keys": false,
    "one-line": [
      true,
      "check-open-brace",
      "check-catch",
      "check-else",
      "check-whitespace"
    ],
    "prefer-const": true,
    "quotemark": [
      true,
      "single"
    ],
    "radix": true,
    "semicolon": [
      "always"
    ],
    "triple-equals": [
      true,
      "allow-null-check"
    ],
    "typedef-whitespace": [
      true,
      {
        "call-signature": "nospace",
        "index-signature": "nospace",
        "parameter": "nospace",
        "property-declaration": "nospace",
        "variable-declaration": "nospace"
      }
    ],
    "typeof-compare": true,
    "unified-signatures": true,
    "variable-name": false,
    "whitespace": [
      true,
      "check-branch",
      "check-decl",
      "check-operator",
      "check-separator",
      "check-type"
    ],
    "directive-selector": [
      true,
      "attribute",
      "app",
      "camelCase"
    ],
    "component-selector": [
      true,
      "element",
      "app",
      "kebab-case"
    ],
    "use-input-property-decorator": true,
    "use-output-property-decorator": true,
    "use-host-property-decorator": true,
    "no-input-rename": true,
    "no-output-rename": true,
    "use-life-cycle-interface": true,
    "use-pipe-transform-interface": true,
    "component-class-suffix": true,
    "directive-class-suffix": true,
    "no-access-missing-member": true,
    "templates-use-public": true,
    "invoke-injectable": true
  }
}

Что именно я делаю не так?

  • __TSLint версия__: 5.4.3
  • __TypeScript version__: 2.3.4
  • __ Запуск TSLint через__: пряжу и командную строку

Фактическое поведение

При запуске tslint со следующими параметрами:

tslint --type-check --project tsconfig.json  src/**/*.ts

Я получаю предупреждение ниже:

Could not find implementations for the following rules specified in the configuration:
    Warning: The 'no-unused-variable' rule requires type checking
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.

Ожидаемое поведение

Согласно документации tslint для проверки типов все, что мне нужно сделать, это передать --type-check --project tsconfig.json но это, похоже, не работает.

Question

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

Если вы посмотрите файл readme для VSCode 1.19, то увидите новую функцию для обработки этого и других правил как предупреждений.
Для нас это означает:

  • удалить "no-unused-variable" из tslint.json
  • добавить "noUnusedLocals" в наши tsconfig.json

Остальные правила оставим читателю в качестве упражнения ;-)

Обратите внимание, что tslint - это расширение, а tsconfig - это встроенное поведение VSCode.

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

Пожалуйста, заполните шаблон проблемы. Как выглядит ваш tslint.json?

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

Я также обновился, чтобы использовать шаблон задачи.

Через некоторое время после обновления tslint (возможно, v4 -> v5) no-unused-variable будут недоступны без аргументов --type-check , --project .

Эту опцию сложно использовать, и требуется много времени для получения результатов печати после обновления, но она важная и наиболее часто используемая опция линтинга. есть ли способ использовать эти параметры без верхних аргументов?

Через некоторое время после обновления tslint (возможно, v4 -> v5) переменная no-unused-variable будет недоступна без аргументов --type-check, --project.

Я передаю --project с tslint --type-check --project tsconfig.json src/**/*.ts

На моем домашнем компьютере у меня нет этой проблемы, но на моем рабочем компьютере у меня есть.

@everedifice были ошибки с реализацией правила, мы почти отказались от него (https://github.com/palantir/tslint/issues/1481) и в конечном итоге решили сохранить его, делегировав компилятору реализацию no-unused-variable (это устранило большинство ошибок). В этом репозитории есть много обсуждений по этому поводу, которые я рекомендую вам проверить, в основном они связаны с PR, который внес критические изменения ( https://github.com/palantir/tslint/pull/2235.

@mastrauckas Я не могу вам помочь без более подробной информации о различиях между вашими двумя разными средами.

@adidahiya Я получил это на третьем компьютере, который тоже является macOS прошлой ночью. Я собираюсь снова попробовать это на своем домашнем компьютере, чтобы проверить, происходит ли это по-прежнему.

В основном:
компьютер 1: Windows 10 полностью обновлена, и на данный момент я не получаю error .
компьютер 2: macOS полностью обновлен, и я получаю error .
компьютер 3: Windows 7 полностью обновлена, и я получаю error .

@everedifice Я только что опубликовал новую версию tslint-consistent-codestyle с новым правилом no-unused которое в основном похоже на no-unused-variable с некоторыми дополнительными функциями, но без необходимости использования --project --type-check .

Если вам интересно, вы можете найти документы здесь: https://github.com/ajafff/tslint-consistent-codestyle/blob/master/docs/no-unused.md

Компьютер, который, как я думал, не имел проблемы, похоже, в конце концов, имеет проблему. Это ошибка?

Что-нибудь новенькое по этому поводу?

У меня такая же проблема.

Та же проблема, но с обоими «Предупреждение: правило« no-unused-variable »требует информации о типе».
и «Предупреждение: правило« не использовать перед объявлением »требует информации о типе». (Я вижу, что опечатка в «информации» была исправлена ​​между версиями 5.5.0 и 5.7.0, но это единственное, что изменилось). Я запускаю его с машинописной версией 2.4.1. Есть новости по этой проблеме?

Такая же проблема здесь

Решена ли эта проблема или есть какое-либо временное исправление для прекращения отображения предупреждений.

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

Постоянное исправление, используйте no-unused-variable в tsconfig.json вместо tslint.json. Если компилятор может предоставить такую ​​же функциональность, нет смысла делать это с помощью линтера.

@AnimaMundi: ну, он действительно обеспечивает ту же функциональность, однако при запуске tslint как части нашего процесса CI они должны быть отмечены во время теста, а не во время сборки. Я не согласен с тем, что это следует игнорировать / удалять, потому что компилятор делает это во время сборки.

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

Подобно исправлению @AnimaMundi , я использовал noUnusedLocals и noUnusedParameters в моем tsconfig.json. Ошибки появляются на моей панели «Проблемы».

@AnimaMundi @haswalt @keego преимущества правила lint по сравнению с проверкой компилятором неиспользуемых переменных подробно обсуждались в других потоках TSLint (https://github.com/palantir/tslint/issues/1481 и связанные потоки); этот выпуск на самом деле не место для этого.

@adidahiya мой комментарий был просто предназначен для того, чтобы поделиться исправлением этой проблемы, а не комментировать достоинства правил линтера по сравнению с проверками компилятора.

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

Проблемы с tslint могут не только отображаться как предупреждения, но и игнорироваться на единовременной основе, в то время как ошибки компиляции машинописного текста не могут быть

Все эти пункты уже были обработаны (см. Мой последний комментарий и связанные темы). Ничто не мешает вам прямо сейчас использовать no-unused-variable в качестве правила TSLint. Я не уверен, чего пытаются достичь эти последующие комментарии.

@mastrauckas , у вас все еще есть проблемы с этим правилом? Флаг --type-check устарел, но для включения правил на основе проверки типов требуется --project .

Кроме того: с TS 2.6 вы можете использовать // @ts-ignore для подавления ошибок компилятора.

@adidahiya Я просто отвечал на комментарии выше, в которых утверждается, что нет причин использовать это как правило lint, а не правило компилятора.

но вы правы, я думаю, проблема связана с расширением vscode, а не с самим tslint. tbh было так много проблем по этой теме, что мне потребовалось время, чтобы разобраться, почему именно она не работает и где.

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

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

Я получаю такое же предупреждение в последней версии 1.19 VS Code The 'no-unused-variable' rule requires type information с этим (см. Ниже). В моей конфигурации чего-то не хватает?

{
  "extends": "tslint:recommended",
  "rules": {
    "linebreak-style": [true, "LF"],
    "quotemark": [true, "single", "avoid-escape", "avoid-template"],
    "no-console": false,
    "no-unused-expression": false,
    "ordered-imports": false,
    "member-access": [true, "no-public"],
    "object-literal-sort-keys": false,
    "curly": [true, "ignore-same-line"],
    "semicolon": [true, "never"],
    "no-var-requires": false,
    "no-unused-variable": true
  }
}

Если вы посмотрите файл readme для VSCode 1.19, то увидите новую функцию для обработки этого и других правил как предупреждений.
Для нас это означает:

  • удалить "no-unused-variable" из tslint.json
  • добавить "noUnusedLocals" в наши tsconfig.json

Остальные правила оставим читателю в качестве упражнения ;-)

Обратите внимание, что tslint - это расширение, а tsconfig - это встроенное поведение VSCode.

Я решил удалить no-unused-variable поскольку VS 1.19, похоже, уже сообщает об этом.

Я не понимаю, при чем тут VSCode. Недостаточно, чтобы только VSCode обрабатывал их как предупреждения, мне нужно, чтобы мой сервер webpack dev смотрел сборку, чтобы не отказывать из-за них. Есть ли замена для no-unused-variable которая, независимо от конкретных редакторов, будет

  • рассматриваться как предупреждение во время разработки
  • сбой сборки во время CI

?

@pelotom , несколько человек были перенаправлены сюда из расширения VSCode TSLint, например, с https://github.com/Microsoft/vscode-tslint/issues/219

До сих пор TS не мог отображать некоторые проблемы в виде предупреждений (зеленые волнистые линии), но линты (ESlint, TSLint) могли. Итак, мы спрашивали, почему TSlint не сообщает о неиспользуемых переменных в качестве предупреждений. Но с 1.19 TS VSCode может делать эти предупреждения, и мы отказываемся от этой проблемы 😉

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

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

Если вы посмотрите файл readme для VSCode 1.19, то увидите новую функцию для обработки этого и других правил как предупреждений.

@rnemec Я думаю, вы хотели написать «примечания к выпуску» вместо «readme». Я был достаточно глуп, чтобы искать ридми. И для всех, кто приезжает сюда, мы могли бы также процитировать соответствующий фрагмент:

VS Code теперь отображает проблемы стиля кода TypeScript в виде предупреждений, а не ошибок. Это касается:

Переменная объявлена, но никогда не используется
Свойство объявлено, но его значение никогда не читается
Обнаружен недостижимый код
Неиспользованная этикетка
Падение через футляр в переключателе
Не все пути кода возвращают значение
Обработка их как предупреждений совместима с другими инструментами, такими как TSLint. Они по-прежнему будут отображаться как ошибки при запуске tsc из командной строки.

Вы можете отключить это поведение, установив: "typescript.reportStyleChecksAsWarnings": false.

Так что это временное решение, которое будет работать только при использовании VSCode. Любой другой инструмент сборки, использующий tsc напрямую, не будет компилировать код, если там останутся предупреждения. У меня есть коллеги, которые используют Atom, поэтому они не смогут скомпилировать код, если я внесу изменения и проигнорирую одно из предупреждений. Верно?

Я не совсем понимаю, как это что-то решает. Чем полезно отображение этих вещей в виде предупреждений, если компилятор по-прежнему рассматривает их как ошибки?

И если я правильно понимаю, долгосрочным решением было бы либо добавить флаг для обеспечения того же поведения в tsc (что заставит его компилировать с предупреждениями), либо полностью удалить эти проверки компилятора?

--- редактировать ---
Я не прочитал все предыдущие комментарии. @pelotom уже

Если вы хотите, чтобы проверки lint имели разную серьезность в режиме разработки и в режиме CI, вы можете сделать это с помощью нескольких конфигураций tslint.json, где один extends другой. # 2569 необходимо исправить, чтобы UX здесь был хорошим, чтобы вы могли переключать серьезность с помощью всего одной строки defaultSeverity config - она ​​в процессе.

@adidahiya то, что обсуждается, является предполагаемой _заменой_ для правила no-unused-variable lint с использованием tsc noUnusedLocals .

@pelotom правильно, я понял, но я не думаю, что tsc пока поддерживает такой рабочий процесс. У вас может быть два файла tsconfig.json один из которых расширяет другой и отключает каждую «нефатальную» проверку компилятора (в данном случае noUnusedLocals , noUnusedParameters ) по отдельности, однако это не будет не позволяйте вам видеть проверки как предупреждения в вашем редакторе.

@adidahiya да, поэтому в настоящее время это не действительная замена. И я бы предпочел увидеть, как no-unused-variable правильно работает в VSCode, чем приложить больше усилий, чтобы noUnusedLocals вел себя больше как правило lint. ИМО, это было ошибкой для компилятора, чтобы попытаться взять на себя эту проверку в первую очередь.

И я бы предпочел, чтобы переменная no-unused-variable правильно работала в VSCode, чем приложить больше усилий, чтобы noUnusedLocals вела себя больше как правило lint.

Имеет смысл. Я считаю, что этот проект нацелен на это: https://github.com/angelozerr/tslint-language-service. Вы можете использовать правила, требующие проверки типов с этим плагином.

Я заговорил слишком рано. Мы заблокированы на https://github.com/palantir/tslint/issues/2649, чтобы этот плагин был полезен. Вместо этого отслеживайте эту проблему.

@adidahiya ага , я уже давно это отслеживаю.

Есть новости по этому поводу? Будет ли он устаревшим или нет?

@ philip-firstorder с помощью этого исправил проблему для меня --project tsconfig.json

tslint -c tslint.json --project tsconfig.json src/**/*.ts

no-unused-variable теперь устарело, см. # 3918 и # 3919

🤖 Бип-буп! 👉 TSLint устарел 👈 и вам следует перейти на typescript-eslint ! 🤖

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

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