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?
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.
Menurut dokumentasi tslint
untuk melakukan pengecekan tipe, yang perlu saya lakukan hanyalah memasukkan --type-check --project tsconfig.json
tetapi sepertinya tidak berhasil.
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:
"no-unused-variable"
dari tslint.json
"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
?
@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! 👋
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:
"no-unused-variable"
daritslint.json
"noUnusedLocals"
ketsconfig.json
Aturan lain dibiarkan sebagai latihan untuk pembaca ;-)
Perhatikan, bahwa tslint adalah ekstensi ini, sedangkan tsconfig adalah perilaku bawaan VSCode.