2012-12-17 33 views
51

我已經使用JSLint驗證我的JavaScript大約2年了,偶爾會有規則發生變化。通常,當JSLint引入新規則時,有一個複選框可以在解析時忽略此規則,或者如果您選擇不忽略它,然後讓您的代碼符合它。爲什麼引入新的JSLint錯誤「使用空格,而不是製表符」和「不安全字符」?

正如我今天跑我的JSLint的驗證,但是,我碰到這兩個新的錯誤:

使用空格,而不是製表符。

這不是錯誤「的標籤和空間混合」。我只使用標籤。這是「製表符和空格混合」的最近修改版本,現在一般不允許製表符。

和:

不安全的字符。

*/

不安全的字符。

_const:{

有沒有新的選擇,不容忽視。我不明白什麼是不安全的關於關閉塊註釋,它爲什麼認爲_const:{不安全時,我有nomen: true,(懸空_在標識符),或者我爲什麼要突然從空間切換到標籤,當我仍對配置4個空格的縮進是一個選項卡。

有沒有人有,爲什麼這些被引入至少如何使的JSLint忽略這些新規則的想法?

更新:Messy White Space選項用來解決這個問題,但它會導致其他意外的行爲:

if (condition) { 
    //   ^-- there is a space but it won't indicate an error 
+0

請發佈您的linter配置。 – oleq

+6

* /在JSLint中被認爲是不安全的,因爲JSLint的創建者認爲在每行上使用//評論而不是阻止評論比較安全,因爲如果您不小心將「* /」放入您的評論中,就有可能發生人爲錯誤並且太早關閉該塊。就我個人而言,我忽略它。 – Dawn

+0

@Dawn我不明白這一點,我會更新另一個更不合理的地方。 –

回答

69

那麼它看起來像道格拉斯·克羅克福德只是做了一大堆更多的人轉向JSHint。看看this commit

「混合空格和製表符」的錯誤已被刪除,而新的「使用空格,而不是製表符」的錯誤在它的地方被添加。除此之外,差異中的一個微小變化顯示了這一點的原因。以下行(註釋添加):

at = source_row.search(/ \t/); 
//     ^Space 

已經被替換爲:

at = source_row.search(/\t/); 
//     ^No space! 

此之後搜索有一個if聲明。如果條件評估爲true,則發出「使用空格,不是製表符」警告。下面是聲明:

if (at >= 0) { 
    warn_at('use_spaces', line, at + 1); 
} 

希望這只是由克羅克福德一個小疏忽。正如你所看到的,如果你在任何地方使用製表符,JSLint現在會提出這個警告。不幸的是,他的提交信息完全沒用,而且文檔似乎沒有更新,所以除了推測這種變化背後的原因之外,我什麼也做不了。

我建議你放棄JSLint並立即切換到JSHint

+0

感謝您對此進行調查。從JSLint切換到另一個驗證器對我來說不是東方的事情。我有一個完整的基礎架構,可以運行鍼對JSLint的自動化驗證... –

+0

@ KonstantinD-Infragistics - JSHint作爲JSLint的一個分支開始了生活。交換它們應該很容易。如果有一個用於JSLint的工具,那麼通常也有一個用於JSHint的工具(例如,兩個都有Node.js包裝,它們允許您從終端運行它們)。或者,您是否能夠控制正在使用的JSLint的版本? –

+0

是的,我的Node.js代碼沒有下載更新的版本,我的自動執行不會顯示這些錯誤,直到我更新jslint文件,但是當您手動檢查錯誤時,您無法再在jslint.com上執行此操作。 –

12

您可以通過單擊「凌亂的空白區域」選項來消除錯誤。

+1

這對我來說是非常令人驚訝的,工作。 –

+0

我在這個解決方法中發現了一個缺陷,但它仍然是迄今爲止唯一可用的東西... –

+0

缺陷是什麼,@ KonstantinD-Infragistics? –

7

根據您的編輯器/ IDE,您可以調整TAB的工作方式。

例如,我使用Sublime Text。 在右下角附近有一個製表符大小:4.

我點擊它並設置'使用空格縮進'。

這更新了我的所有選項卡以使用空格和JSLint錯誤消失。我儘量使用盡可能少的JSLint選項,因爲我希望我的代碼結構良好。

我也使用JSFormat,它會根據我的編輯器設置進行選擇,所以每當我完成時我運行我的JSFormat,然後運行JSLint。沒有錯誤=快樂的孩子!

希望它有幫助。

+0

另外,對於vim,只需將其添加到.vimrc中,再也不用擔心:'set tabstop = 4 shiftwidth = 4 expandtab' – gmeben

+13

大多數編輯器選項使用空格的* indent *是你按下'Tab'一次,但必須按下'Backspace'四次。沒有編輯器,我知道,作爲一個單獨的實體正確處理製表符作爲空間。 –

+0

爲了解決這個問題,許多編輯都有自己的縮進和無意識的熱鍵。例如,使用崇高文本「cmd +」將縮進,而「cmd + ['將取消縮進。當你需要清理別人的污水時幫助你。 – TyMayn

4

要回答爲什麼的JSLint現在給有關標籤的錯誤,http://www.jslint.com/help.html給出了這樣的理由:

製表符和空格不應混爲一談。我們應該從 中挑選一個,以避免兩者都產生的​​問題。個人喜好 是一個非常不可靠的標準。既沒有提供強大的 優勢。五十年前,標籤有 的優勢消耗較少的內存,但摩爾定律消除了這一優勢。 空間有一個清晰的優勢比標籤:沒有可靠的標準 一個標籤代表多少空間,但它是普遍接受 一個空間佔據一個空間。所以使用空格。如果必須,您可以使用標籤 進行編輯,但在提交之前請確保它是空格。也許 總有一天我們終於會得到標籤的通用標準,但是直到 那一天,更好的選擇是空間。

從本質上講,他希望大家對是否使用製表符或空格來防止它們混合在一起達成共識。他決定空間寬度的一致性使其成爲優越的選擇,所以我們都應該使用它。顯然,有些人會不同意這種思路(包括我自己),但這就是JSLint拋出這個錯誤的原因。

+11

......這沒有意義。由於定義的寬度正是爲什麼空格不一致的原因......因爲有些人會使用2個空格,有些人會使用4個等,所以有些文件縮進將是其他縮進的兩倍。使用選項卡它只是1個選項卡==縮進,並且您的編輯器使用您的設置確定該縮進看起來有多遠...並且使用選項卡的每個文件都會顯示完全相同的內容。 Tab是完美的佔位符,可以說「它是一級縮進......無論你希望對你的編輯器來說意味着什麼」,並且每個使用該縮進的文件的縮進看起來都完全相同。 –

相關問題