2010-08-23 88 views
33

我有一個通過JSLint的巨大腳本(包括避免所有不好的部分)。除了一個擴展,這是一些非常複雜的混淆代碼嵌入在更大的上下文中。 JSLint對本節產生了相當多的抱怨,並且我希望有選擇地將它禁用這段代碼。我已經做使用選擇性JSLint - 忽略代碼段

/*jlsint xxx:true/false*/ 

指令禁用該做的事情違背了結構解釋的代碼的某些微小綿延特別警告。

我使用的混淆代碼使用了我不知道它們是否可以被禁用的構造。

例如:

for(L=(117.> 

導致此消息:

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

當然,我知道我可以清理的代碼,但它是從一個混淆器發出的,我真不」我想要清理混淆的代碼!

那麼,有沒有辦法告訴JSLint完全忽略延伸代碼?

我知道這個查詢JSLint: control comments (selective ignore)但它沒有回答。

+0

檢查此 [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 2012-11-01 15:01:36

回答

11

我認爲這已經在JSHint中修復了一段時間了。只需使用註釋包裹代碼:

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

的文檔可以發現here和向下滾動到「指令」一節。

+16

問題是關於jsLint,而不是jsHint。 – 2015-03-13 22:14:20

+0

在我意識到這是提示而不是皮棉之前,我花了一段時間的「爲什麼不工作」...... -1 – Shadow 2016-07-29 04:27:16

1

如果你願意,你可以自己添加這個到JSLint,儘管這是Evil的邊界。

這裏有一個快速和骯髒的方式與當前版本:

我會走的路線是劫持token功能的switch/*風格的註釋。這是at line 1276 currently

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

讓我們改變,要尋找那些看起來像/*ignore:true */上線自己(雖然在技術上的true一半可以在這種情況下,線上的任何地方的意見,雖然/*ignore:false */到本身就是一條線,所以讓我們假裝兩者都成立)。

例不良,不起毛的失敗代碼:

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

如果我們發現/*ignore:true */,讓我們跳過線,直到我們找到一個與/*ignore:false *//*ignore:...就行的第一個字符。在此之前,我們忽略的所有內容

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; 

這是醜陋的,但似乎工作。

現在這可能會導致問題。例如,如果你在你忽略了,後來用它一節一var聲明,JSLint_Hacked會抱怨myVar was used before it was defined.例子:

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

這樣那樣的東西能得到討厭。

而且我只會在你瘋狂地被迫擦掉所有東西的情況下使用它,但由於某種原因,你沒有權力修復每個文件中的內容,儘管你可以編輯它奇怪的是,就像在這種情況下使用混淆代碼一樣。這整個ignore的事情是waaay seedy。

我需要花更多時間在JSLint裏面來了解它是如何工作的,但next_line()函數似乎是非破壞性的。也就是說,在「實」 /*jslint ignore:true */風格指令的do_jslint()功能,您可以(也應該)處理這個問題,但你必須在調用advance()函數來處理的副作用。我在這裏使用的黑客更容易,但也是很多醜陋。