2010-08-23 24 views
33

JSLint'ten geçen büyük bir komut dosyası (tüm kötü parçalardan kaçınmak dahil). Daha geniş bir bağlamda gömülü olan bazı çok kıvrık gizlenmiş kod olan bir streç hariç. JSLint bu bölüm için oldukça fazla şikayet üretiyor ve bu kod için seçici olarak devre dışı bırakmak istiyorum. Zaten yapı yorumuna aykırı şeyler yapmak kod belirli minik menziller için belirli uyarıları devre dışı bırakmak için seçiciJSLint - kod bölümlerini gözardı et

/*jlsint xxx:true/false*/ 

direktifleri kullanıyoruz.

Kullandığım gizlenmiş kod, devre dışı bırakılıp bırakılamayacağını bildiğim yapılar kullanıyor.

for(L=(117.> 

nedenleri Bu mesajı:

Problem at line 1 character 57: A trailing decimal point can be confused with a dot '117. 

, ben kod temizlenebileceğini ortaya biliyorum Emin ama bu bir Gizleyiciyi yayılan ve gerçekten don edilir Örneğin

gizlenmiş kodu temizlemek zorunda kalmak istiyorum!

JSLint'in bir kısıtlama kodunu tamamen yok saymasını söylemek için bir yol var mı?

Bu sorguyu biliyordum JSLint: control comments (selective ignore) ama yanıtlanmadı.

+0

ara bu [http://stackoverflow.com/questions/599859/jslint-control-comments-selective-ignore/13175495#13175495][1] [1]: http://stackoverflow.com/questions/599859/jslint-control-comments-selective-ignore/13175495#13175495 – napoleonss

cevap

11

Bunun bir süredir JSHint'te zaten giderilmiş olduğunu düşünüyorum. dokümantasyon here bulunabilir

/* jshint ignore:start */ 
// Code here will be linted with ignored by JSHint. 
/* jshint ignore:end */ 

ve "direktifleri" bölümüne gidin: Sadece yorumlarla kodunuzu sarın.

+16

Soru, jsHint değil jsLint hakkındadır. –

+0

Bir süredir "neden bu işe yaramaz", bunun farkına varmadan önce ipucu ve ipucu değil ... -1 – Shadow

1

İsterseniz, kendinizi sınırsız Evil olarak ekleyebilirsiniz, bunu JSLint'e ekleyebilirsiniz.

ben alacağım rota /* tarzı yorumlar için token işlevin switch blok ele geçirmektir:

Burada güncel sürümüyle biri hızlı ve kirli bir yoldur. İşte at line 1276 currently var: teknik true yarım yerde bu durumda hat üzerinde olabilir rağmen (kendileri bir satırda /*ignore:true */ benziyor yorumlar için aramaya

case '/*': 
    for (;;) { 
     i = source_row.search(lx); 
... 

edelim değişim, /*ignore:false */ hat için olmasına rağmen kendi başına bir satırda olun, bu yüzden her ikisi için de geçerli gibi davranalım).

Örnek kötü, tiftik başarısız kod: Biz /*ignore:true */ bulursanız

function spam() 
{ 
    var sand = "sand"; 
/*ignore:true */ 
    var spud = "spud"; 
/*ignore:false */ 
    window.console.log(sand); 
} 

, çizgiden üzerine ilk karakter olarak /*ignore:... ile /*ignore:false */ile bulana kadar en satırları atlayalım. Kendi başına bir satırdaki yanlış ifadeye kadar, her şeyi reddediyoruz.

case '/*': // Opening /* has already been sliced. if (source_row.startsWith("ignore:true")) { do { if (console.log) { console.log(source_row) }; } while (next_line() && !source_row.trim().startsWith("/*ignore:false")); } else { // Put in the code that was originally there } break; 

Bu çirkin, ancak çalışıyor gibi görünüyor.

Şimdi bu sorunlara neden olabilir. Eğer göz ardı edip sonra kullanmak bir bölümünde var beyanı varsa Örneğin, JSLint_Hacked o myVar was used before it was defined. Örnek şikayet:

/*jslint white:true, sloppy:true, browser:true */ 
function spam() 
{ 
    var sand = "spam"; 
/*ignore:true */ 
    var spud = "spud"; 
/*ignore:false */ 
    window.console.log(sand + spud); 
} 

Yani bu tür şeyler sarpa sarabilir.

Ve bunu yalnızca herşeyi teneffüs etmeye zorlandığınız durumlarda kullanacağım, ama bir nedenden ötürü her dosyayı düzenleyebilme gücüne sahip değilsiniz. garip bir şekilde, bu durumda garip bir kod ile. Bu tüm ignore şey waaay keyifsiz.

Gerçekten nasıl çalıştığını öğrenmek için JSLint'in içine daha fazla zaman harcamam gerekiyor, ancak next_line() işlevi tahribatsız gibi görünüyor. Yani, (")" gerçek "/*jslint ignore:true */ stil yönergelerinde işlevinde işleyebilir (ancak yapmalısınız), ancak advance() işlevini çağırdığınızda yan etkilerle ilgilenmeniz gerekir. Burada kullanıyorum hack çok daha kolay, ama aynı zamanda çok uglier.

İlgili konular