Jshint: Parameter reguler tidak boleh muncul setelah parameter default

Dibuat pada 31 Mar 2016  ·  19Komentar  ·  Sumber: jshint/jshint

> jshint -v
jshint v2.9.1

file untuk menguji perilaku:

var a = function(x = 1, i) {}

hasil dari jshint a.js

a.js: line 1, col 26, Regular parameters should not come after default parameters.

1 error

isi .jshintrc :

{
  "asi": true,
  "esversion": 6
}
Needs Discussion

Komentar yang paling membantu

@derwaldgeist Tentu! Berikut adalah contoh file .jshintrc yang akan membungkam peringatan:

{
  "esversion": 6,
  "-W138": true
}

Semua 19 komentar

Pesan ini awalnya diimplementasikan sebagai "kesalahan" JSHint (artinya bisa
tidak boleh diabaikan): gh-1779. Meskipun itu mungkin merupakan SyntaxError di awal
draft, itu tidak diselesaikan dengan cara itu, jadi di gh-2543, kami "menurunkan" versi
pesan ke peringatan. Ini berarti Anda _may_ mengabaikannya di JSHint 2.9.1 melalui
-W138 .

Yang mengatakan, masih belum jelas apakah peringatan ini sesuai sama sekali. Saya
secara pribadi berpikir bahwa fungsi yang dirancang dengan cara ini sulit digunakan, tetapi
Saya tidak dapat mengidentifikasi potensi masalah keamanan kode.

@rwaldron @caitp Apakah salah satu dari Anda memiliki pemikiran tentang ini?

Hanya ingin menyebutkan bahwa tanda tangan semacam itu adalah bagian dari contoh kode redux. Cari baris:

function counter(state = 0, action) {

jadi, ini banyak digunakan, IMHO.

Pola semacam ini _benar-benar_ definisi dari "serat".

jadi, ini banyak digunakan, IMHO.

Saya sangat tidak setuju dengan implikasi bahwa pola yang muncul di redux menunjukkan sesuatu yang "banyak digunakan". Saya melihat melalui redux dan menemukan contoh counter(undefined, action) dan saya bertanya-tanya apa gunanya ini, mengingat masing-masing dari mereka sebenarnya _memerlukan_ argumen action , atau menghadapi runtime kesalahan. Jika action adalah _always_ diperlukan dan state adalah opsional, mengapa memerlukan panggilan yang harus secara eksplisit melewati undefined —yang mengalahkan tujuan nilai parameter default .

...Saya tergoda untuk mengajukan bug.


Yang mengatakan, masih belum jelas apakah peringatan ini sesuai sama sekali.

Saya percaya itu, dan siapa pun yang tidak menginginkan peringatan dipersilakan untuk mematikannya.

Jangan ragu untuk menutup @jugglinmike ini

@rwaldron ok, sebenarnya kita tidak membahas redux. Bisakah Anda memberikan contoh kesalahan yang dapat muncul dengan tanda tangan seperti itu?
Bagi saya itu hanya properti bahasa. Jadi, apa alasan untuk menandainya sebagai "salah"?

Bisakah Anda memberikan contoh kesalahan yang dapat muncul dengan tanda tangan seperti itu?

Satu-satunya kesalahan runtime yang akan Anda temui adalah menelepon seperti: counter() dan counter(undefined) , tapi bukan itu maksud saya. Maksud saya adalah itu desain yang mengerikan dan menempatkan beban yang tidak semestinya pada programmer dan peralatan mereka. Misalnya, minifier dapat menganalisis hal berikut secara wajar:

function counter(action, state = 0) {
  return [action, state];
}
counter({});
counter({}, 0);
counter({}, undefined);

Dan menghasilkan:

function c(a,s=0){return[a,s]}
c({});
c({});
c({});

Padahal, mengutamakan default:

function counter(state = 0, action) {
  return [state, action];
}
counter(0, {});
counter(undefined, {});

akan menghasilkan:

function c(s=0,a){return[s,a]}
c(0, {});
c(undefined, {});

Itu contoh yang cukup dibuat-buat, tetapi masih menggambarkan poin saya bahwa itu membuat penggunaan parameter default sepenuhnya dan sama sekali tidak ada gunanya.

Bagi saya itu hanya properti bahasa.

Hanya karena Anda bisa, bukan berarti Anda harus melakukannya.

Jadi, saat ini Anda tidak dapat menjelaskan mengapa desainnya buruk kecuali mengkhawatirkan bug di minifiers

Mengharuskan semua situs panggilan untuk mengirimkan undefined eksplisit, demi menyiasati tanda tangan panggilan yang dirancang dengan buruk dianggap sebagai praktik yang buruk dan penggunaan parameter default yang salah.

Perilaku ini didorong oleh React/Redux. Saya lebih cenderung menghapus jshint daripada menghapus React/Redux :/

http://redux.js.org/docs/basics/Reducers.html

Salah satu trik yang rapi adalah dengan menggunakan sintaks argumen default ES6 untuk menulis ini dengan cara yang lebih ringkas:

function todoApp(status = initialState, aksi) {
// Untuk saat ini, jangan menangani tindakan apa pun
// dan kembalikan saja status yang diberikan kepada kita.
keadaan kembali
}

@jugglinmike wdyt ^^ ?

@txm apa yang terjadi dengan parameter action yang tidak pernah digunakan?

Saya masih berpendapat bahwa tanpa adanya bahaya nyata (dan bahkan dalam
kehadiran pola yang tidak diinginkan), JSHint harus tetap diam.
Karena itu, saya kesulitan memahami bagaimana contoh @txm berbeda.

Bagaimana saya bisa menonaktifkannya ..?

@thalesfsp : Tambahkan /* jshint -W138 */ tambahkan awal file Anda. (Pastikan Anda menggunakan jshint v2.9.1 atau yang lebih baru)

Menemukan masalah yang sama dengan Redux. Bisakah ini dinonaktifkan di file konfigurasi .jshintrc?

@derwaldgeist Tentu! Berikut adalah contoh file .jshintrc yang akan membungkam peringatan:

{
  "esversion": 6,
  "-W138": true
}

(Omong-omong, dokumentasi JSHint memiliki lebih banyak informasi tentang menonaktifkan peringatan tertentu.)

@jugglinmike Terima kasih. Saya tidak tahu bahwa sintaks "-Wxxx" dapat digunakan dalam file .jshintrc juga. Saya selalu menggunakan ini di bagian atas file. Bagus untuk diketahui!

Dengan 'panggilan balik' yang banyak digunakan sebagai parameter terakhir dari suatu fungsi, peringatan serat ini tampak agak konyol bagi saya

openDialog(url, nama, argumen = {}, pos) {
mengembalikan Janji baru(fungsi(menyelesaikan, menolak) {
chrome.windows.create({
url: url,
ketik: "munculan",
lebar: pos && pos.lebar || tidak terdefinisi,
tinggi: pos && pos.tinggi || tidak terdefinisi,
kiri: pos && pos.kiri || tidak terdefinisi,
atas: pos && pos.top || tidak terdefinisi
}, fungsi(w) {

Tampaknya default parameter lain ke undefined valid dan lulus proses linting. Saya tidak mengatakan itu pola yang lebih baik tetapi melewati proses linting.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat