Tslint: Peringatan: Aturan 'tidak ada variabel yang tidak digunakan' memerlukan pemeriksaan jenis pesan...

Dibuat pada 16 Jun 2017  ·  46Komentar  ·  Sumber: palantir/tslint

Laporan Bug

dengan konfigurasi 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
  }
}

Apa sebenarnya yang saya lakukan salah?

  • __TSLint versi__: 5.4.3
  • __TypeScript versi__: 2.3.4
  • __Menjalankan TSLint melalui__: benang dan baris perintah

Perilaku sebenarnya

Saat menjalankan tslint dengan parameter di bawah ini:

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

Saya mendapatkan peringatan di bawah ini:

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.

Perilaku yang diharapkan

Menurut dokumentasi tslint untuk melakukan pengecekan tipe, yang perlu saya lakukan hanyalah memasukkan --type-check --project tsconfig.json tetapi sepertinya tidak berhasil.

Question

Komentar yang paling membantu

Jika Anda melihat VSCode 1.19 readme, ada fitur baru untuk menilai aturan ini dan lainnya sebagai peringatan.
Bagi kami, itu berarti:

  • hapus "no-unused-variable" dari tslint.json
  • tambahkan "noUnusedLocals" ke tsconfig.json

Aturan lain dibiarkan sebagai latihan untuk pembaca ;-)

Perhatikan, bahwa tslint adalah ekstensi ini, sedangkan tsconfig adalah perilaku bawaan VSCode.

Semua 46 komentar

Harap isi template masalah. Seperti apa tampilan tslint.json Anda?

Saya di rumah dan mencoba proyek yang sama dan berfungsi dengan baik. Saya akan membiarkan ini terbuka sampai saya mulai bekerja pada hari Senin untuk menguji lagi. Mungkin perlu menginstal ulang modul simpul saya.

Saya juga telah memperbarui untuk menggunakan template masalah.

Beberapa saat setelah tslint diperbarui (mungkin v4 -> v5), no-unused-variable tidak tersedia tanpa argumen --type-check , --project .

Opsi ini sulit digunakan dan membutuhkan waktu lama hingga hasil cetak setelah diperbarui, tetapi opsi linting penting dan paling sering digunakan. apakah ada cara untuk menggunakan opsi ini tanpa argumen atas?

Kadang-kadang setelah tslint diperbarui (mungkin v4 -> v5), tidak ada variabel yang tidak digunakan tidak tersedia tanpa argumen --type-check, --project.

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

Di komputer rumah saya, saya tidak mengalami masalah ini tetapi di komputer kantor saya.

@everedifice ada bug dengan implementasi aturan, kami hampir tidak menggunakannya lagi (https://github.com/palantir/tslint/issues/1481), dan akhirnya memutuskan untuk menyimpannya dengan mendelegasikan ke implementasi kompiler dari variabel tidak-tidak terpakai (ini membahas sebagian besar bug). Ada banyak utas diskusi tentangnya di repo ini yang saya sarankan untuk Anda periksa, sebagian besar ditautkan dari PR yang membuat perubahan besar ( https://github.com/palantir/tslint/pull/2235.

@mastrauckas Saya tidak dapat membantu Anda tanpa detail lebih lanjut tentang perbedaan antara dua lingkungan Anda yang berbeda.

@adidahiya Saya mendapatkan ini di komputer ketiga yang merupakan macOS tadi malam juga. Saya akan mencobanya lagi di komputer rumah saya lagi untuk melihat apakah itu masih terjadi.

Secara umum:
komputer 1: Windows 10 benar-benar mutakhir dan sampai sekarang saya tidak mendapatkan error .
komputer 2: macOS benar-benar diperbarui dan saya mendapatkan error .
komputer 3: Windows 7 diperbarui sepenuhnya dan saya mendapatkan error .

@everedifice Saya baru saja menerbitkan versi baru tslint-consistent-codestyle dengan aturan baru no-unused yang sebagian besar seperti no-unused-variable dengan beberapa fitur tambahan tetapi tanpa perlu menggunakan --project --type-check .

Jika Anda tertarik, Anda dapat menemukan dokumennya di sini: https://github.com/ajafff/tslint-consistent-codestyle/blob/master/docs/no-unused.md

Komputer yang saya pikir tidak mengalami masalah ternyata mengalami masalah. Apakah ini bug?

Ada yang baru tentang masalah ini?

Saya mengalami masalah yang sama.

Masalah yang sama, tetapi dengan kedua 'Peringatan: Aturan 'tidak ada variabel yang tidak digunakan' memerlukan informasi jenis.'
dan 'Peringatan: Aturan 'tidak digunakan-sebelum-deklarasikan' memerlukan informasi jenis.' (Saya dapat melihat bahwa kesalahan ketik dalam 'informasi' telah diperbaiki antara versi 5.5.0 dan 5.7.0, tetapi hanya itu yang berubah). Saya menjalankannya dengan TypeScript versi 2.4.1. Ada berita tentang masalah itu?

Masalah yang sama di sini

Apakah masalah ini teratasi atau perbaikan sementara untuk berhenti menampilkan peringatan.

Saya tidak berpikir itu sudah diperbaiki. Saya bahkan tidak berpikir mereka menerimanya sebagai masalah.

Perbaikan permanen, gunakan no-unused-variable di tsconfig.json alih-alih tslint.json. Jika kompiler dapat menyediakan fungsionalitas yang sama, tidak masuk akal untuk melakukannya dengan linter.

@AnimaMundi juga menyediakan fungsionalitas yang sama namun ketika menjalankan tslint sebagai bagian dari proses CI kami, ini perlu ditandai selama pengujian, bukan selama pembuatan. Saya tidak setuju bahwa ini harus diabaikan/dihapus karena kompiler melakukan ini pada waktu pembuatan.

@haswalt Saya tidak melihat alasan mengapa perlu ditandai selama fase linting daripada fase build. Lagi pula, tidak masalah apakah Anda setuju dengan saya atau tidak, saya tidak ada hubungannya dengan pengembangan proyek ini. Saya baru saja melihat bahwa seseorang sedang mencari perbaikan dan memberikannya.

Mirip dengan perbaikan @AnimaMundi , saya menggunakan noUnusedLocals dan noUnusedParameters di tsconfig.json saya. Kesalahan muncul di panel "masalah" saya.

@AnimaMundi @haswalt @keego manfaat aturan lint vs. pemeriksaan kompiler untuk var yang tidak digunakan telah dibahas secara luas di utas TSLint lainnya (https://github.com/palantir/tslint/issues/1481 dan utas tertaut); masalah ini sebenarnya bukan tempatnya.

@adidahiya komentar saya hanya dimaksudkan untuk membagikan perbaikan untuk masalah ini, bukan memberikan komentar tentang manfaat aturan linter vs pemeriksaan kompiler.

Menunda ke kompiler tidak melakukan hal yang sama: kompiler hanya memiliki satu opsi: GAGAL.
Alasan tslint untuk menanganinya adalah karena sering kali perlu peringatan (coretan hijau vs coretan merah).

masalah tslint tidak hanya dapat ditampilkan sebagai peringatan tetapi juga dapat diabaikan secara satu kali, sedangkan kesalahan kompilasi TypeScript tidak dapat

Poin-poin ini sudah di-hash (lihat komentar terakhir saya dan utas tertaut). Tidak ada yang menghentikan Anda untuk menggunakan no-unused-variable sebagai aturan TSLint sekarang. Saya tidak yakin apa yang ingin dicapai oleh komentar tindak lanjut ini.

@mastrauckas apakah Anda masih mengalami masalah dengan aturan ini? Bendera --type-check sudah tidak digunakan lagi, tetapi --project diperlukan untuk mengaktifkan aturan berbasis pemeriksaan tipe.

Selain: dengan TS 2.6 , Anda dapat menggunakan // @ts-ignore untuk menekan kesalahan kompiler.

@adidahiya saya hanya menanggapi komentar di atas yang mengklaim tidak ada alasan untuk menjadikan ini sebagai aturan serat daripada aturan kompiler.

tapi Anda benar, saya kira masalah yang relevan adalah dengan ekstensi vscode bukan tslint itu sendiri. tbh ada begitu banyak masalah pada topik ini sehingga saya butuh beberapa saat untuk mencari tahu mengapa itu tidak berhasil dan di mana.

menghargai tipnya. saya pasti akan beralih kembali menggunakan pengaturan kompiler segera setelah kami beralih ke 2.6

Poin lain bagi mereka yang mengklaim ini tidak boleh menjadi aturan lint: peringatan lint dapat diperbaiki, dan ini adalah kandidat utama untuk itu.

Saya mendapatkan peringatan yang sama di 1.19 VS Code terbaru The 'no-unused-variable' rule requires type information dengan ini (lihat di bawah). Apakah konfigurasi saya kehilangan sesuatu?

{
  "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
  }
}

Jika Anda melihat VSCode 1.19 readme, ada fitur baru untuk menilai aturan ini dan lainnya sebagai peringatan.
Bagi kami, itu berarti:

  • hapus "no-unused-variable" dari tslint.json
  • tambahkan "noUnusedLocals" ke tsconfig.json

Aturan lain dibiarkan sebagai latihan untuk pembaca ;-)

Perhatikan, bahwa tslint adalah ekstensi ini, sedangkan tsconfig adalah perilaku bawaan VSCode.

Saya telah memilih untuk menghapus no-unused-variable karena VS 1.19 tampaknya sudah melaporkannya.

Saya tidak mengerti apa hubungannya VSCode dengan ini. Tidak cukup hanya VSCode yang memperlakukan ini sebagai peringatan, saya perlu membangun jam tangan server dev webpack saya agar tidak gagal karena mereka. Apakah ada pengganti no-unused-variable yang, terlepas dari editor tertentu, akan

  • diperlakukan sebagai peringatan selama pengembangan
  • gagal membangun selama CI

?

@pelotom , beberapa orang dialihkan ke sini dari ekstensi VSCode TSLint, misalnya dari https://github.com/Microsoft/vscode-tslint/issues/219

Hingga saat ini, TS tidak dapat menampilkan beberapa masalah sebagai peringatan (coretan hijau), tetapi lints (ESlint, TSLint) dapat melakukannya. Jadi kami bertanya mengapa TSlint tidak melaporkan variabel yang tidak digunakan sebagai peringatan. Tetapi pada 1.19, TS VSCode dapat membuat peringatan ini dan kami menarik diri dari masalah ini

Untuk lebih jelasnya, saya juga menggunakan VSCode dan juga ingin melihat peringatan ini disorot di editor, tetapi pengaturan VSCode tampak seperti lapisan yang salah untuk _mengkonfigurasi_ tingkat keparahan kesalahan kompiler, karena tidak mempengaruhi sisa Anda rantai alat.

Saya setuju dengan Anda Tom, dan berharap solusinya akan ditemukan di mana editor serta prosedur build/CI kami akan memiliki dukungan yang tepat. Sejauh ini kita telah melihat penolakan yang kuat (tampaknya dibenarkan) dan beberapa (termasuk saya) akan mengambil apa yang kita bisa, hari ini, sambil tetap berharap untuk solusi nyata.

Jika Anda melihat VSCode 1.19 readme, ada fitur baru untuk menilai aturan ini dan lainnya sebagai peringatan.

@rnemec Saya pikir Anda bermaksud menulis "catatan rilis" alih-alih "readme". Saya cukup bodoh untuk mencari readme. Dan bagi siapa pun yang tiba di sini, kami mungkin juga mengutip bagian yang relevan:

Kode VS sekarang menampilkan masalah gaya kode TypeScript sebagai peringatan, bukan kesalahan. Ini berlaku untuk:

Variabel dideklarasikan tetapi tidak pernah digunakan
Properti dideklarasikan tetapi nilainya tidak pernah dibaca
Kode yang tidak dapat dijangkau terdeteksi
Label yang tidak digunakan
Jatuh melalui kasing di sakelar
Tidak semua jalur kode mengembalikan nilai
Memperlakukan ini sebagai peringatan konsisten dengan alat lain, seperti TSLint. Ini masih akan ditampilkan sebagai kesalahan saat Anda menjalankan tsc dari baris perintah.

Anda dapat menonaktifkan perilaku ini dengan menyetel: "typescript.reportStyleChecksAsWarnings": false.

Jadi ini adalah solusi sementara dan hanya akan berfungsi saat menggunakan VSCode. Alat build lain yang menggunakan tsc secara langsung tidak akan mengkompilasi kode jika peringatan dibiarkan di sana. Saya memiliki beberapa rekan yang menggunakan Atom, sehingga mereka tidak dapat mengkompilasi kode jika saya membuat perubahan dan mengabaikan salah satu peringatan. Benar?

Saya tidak begitu mengerti bagaimana ini menyelesaikan apa pun. Bagaimana menampilkan hal-hal ini sebagai peringatan berguna jika kompiler masih memperlakukannya sebagai kesalahan?

Dan jika saya mengerti dengan benar, solusi jangka panjangnya adalah menambahkan tanda untuk menegakkan perilaku yang sama di tsc (membuatnya dikompilasi dengan peringatan), atau menghapus pemeriksaan kompiler ini sepenuhnya?

--- edit ---
Saya tidak membaca semua komentar sebelumnya. @pelotom sudah membuat poin yang sama.

Jika Anda ingin pemeriksaan lint memiliki tingkat keparahan yang berbeda dalam mode dev vs. mode CI, Anda dapat melakukannya dengan beberapa konfigurasi tslint.json di mana satu extends yang lain. #2569 perlu diperbaiki agar UX di sini menjadi baik sehingga Anda dapat mengubah tingkat keparahan hanya dengan satu baris konfigurasi defaultSeverity -- sedang berlangsung.

@adidahiya apa yang sedang dibahas adalah _penggantian yang dimaksudkan untuk aturan serat no-unused-variable , menggunakan tsc 's noUnusedLocals .

@pelotom benar, saya mengerti -- tapi saya rasa tsc mendukung alur kerja seperti itu. Anda dapat memiliki dua file tsconfig.json mana yang satu memperluas yang lain dan menonaktifkan setiap pemeriksaan kompiler "non-fatal" (dalam hal ini, noUnusedLocals , noUnusedParameters ) satu per satu, namun ini tidak akan 't membiarkan Anda melihat cek sebagai peringatan di editor Anda.

@adidahiya ya, itu sebabnya itu bukan pengganti yang valid saat ini. Dan saya lebih suka melihat no-unused-variable dibuat berfungsi dengan baik di VSCode daripada menginvestasikan lebih banyak upaya untuk membuat noUnusedLocals berperilaku lebih seperti aturan lint. IMO itu adalah kesalahan bagi kompiler untuk mencoba mengambil kepemilikan atas pemeriksaan semacam ini sejak awal.

Dan saya lebih suka melihat no-unused-variable dibuat untuk bekerja dengan baik di VSCode daripada menginvestasikan lebih banyak upaya untuk membuat noUnusedLocals berperilaku lebih seperti aturan lint.

Masuk akal. Saya percaya proyek ini bertujuan untuk melakukan itu: https://github.com/angelozerr/tslint-language-service. Anda dapat menggunakan aturan yang memerlukan pemeriksaan tipe dengan plugin itu.

Saya berbicara terlalu cepat. Kami diblokir di https://github.com/palantir/tslint/issues/2649 agar plugin itu bermanfaat. Lacak masalah itu sebagai gantinya.

@adidahiya ya, saya sudah melacaknya cukup lama.

Ada berita tentang ini? Apakah akan ditinggalkan atau tidak?

@philip-firstorder menggunakan ini memperbaiki masalah untuk saya --project tsconfig.json

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

no-unused-variable sekarang tidak digunakan lagi, lihat #3918 dan #3919

Bunyi bip! TSLint sudah usang dan Anda harus beralih ke TypeScript-eslint ! 🤖

Masalah ini sedang dikunci untuk mencegah diskusi lebih lanjut yang tidak perlu. Terima kasih! 👋

Apakah halaman ini membantu?
0 / 5 - 0 peringkat