2009-02-10 111 views
100

我習慣於讓我的編譯器抱怨,當我做一些愚蠢的事情時,像變量名稱上的拼寫錯誤,但JavaScript有習慣讓這個傳遞。有沒有JavaScript靜態分析工具?

是否有JavaScript的靜態分析工具?

+0

現在天打字稿是你的朋友 - 它支持JavaScript隱式類型檢查,如果你想要去100%,你可以寫jsdoc3或谷歌封閉註釋,它會從那裏推斷類型。像vscode或webstorm這樣的編輯器支持開箱即用:https://github.com/Microsoft/TypeScript/wiki/Type-Checking-JavaScript-Files – cancerbero 2017-12-08 19:26:45

回答

43

我同意JSLint的是最好的地方開始。請注意0​​不同於JSLint。我還建議查看JSure,在我的有限測試中,這兩項測試比其中任何一項測試都做得更好,儘管在執行過程中存在一些粗糙的問題 - 英特爾Mac版本在啓動時崩潰了,儘管PowerPC版本在英特爾上運行良好,而且Linux版本也運行良好。 (開發人員Berke Durak說,當這個問題得到解決後,他會回覆我的,但我還沒有收到他的回覆。)

不要像從一個好東西那樣期待JavaScript靜態分析C檢查器。正如Durak告訴我的那樣,「由於Javascript的動態性質,任何非平凡的分析都非常困難。」

(另一個更加模糊的僅限於Mac的bug,這次使用JSLint的Konfabulator小部件:將BBEdit文檔圖標拖動到開發人員Douglas Crockford沒有在Mac上試用這個組件)

2009年8月10日:今天在Static Analysis Symposium,Simon Holm Jensen提交了一篇關於TAJS: Type Analyzer for JavaScript的論文,用Anders Møller和Peter Thiemann。這篇論文沒有提到上述工具,但Jensen告訴我他看過其中一些並沒有留下深刻的印象。 TAJS的代碼應該在今年夏天的某個時候提供。

+0

可惜JSLint只在線上。 – UpTheCreek 2012-03-13 08:04:35

+2

@UpTheCreek:JSLint在GitHub上提供。 – 2012-03-27 16:37:58

+0

@Dave哦,對,太棒了:) – UpTheCreek 2012-03-27 16:41:59

3

我喜歡Jslint了這樣的事情......

+0

很酷。我在http://www.rockstarapps.com/joomla-1.5.8/products/jslint-eclipse-plugin.html找到了一個JSLint的Eclipse插件,它看起來相當不錯。請注意,需要從'Eclipse Update站點爲jsLex 1.2.2的Beta版本'進行安裝以獲取JSLint功能。 – Mat 2009-02-10 23:39:47

20

Google's "Closure" JS compiler在編譯時產生可配置的警告和錯誤。它肯定會發現拼寫錯誤的變量和方法,再加上參數錯誤。如果你願意寫JsDoc Closure方法,它也可以用類型信息做很多事情。

YUI「Compressor」工具也可以產生警告,但還沒有嘗試過。

我沒有太多的運氣與建立在Eclipse上的Aptana IDE,但其他人喜歡它。請參閱JS IDE的堆棧溢出討論。

IntelliJ IDE,這是不是最後我檢查了自由,有frickin'傑出的JS支持。它會檢測並突出顯示拼寫錯誤的變量和方法,以及更多。它也有自動完成功能。

1

我們的SD ECMAScript CloneDR是一款工具,用於在大型JavaScript源代碼庫中查找重複代碼的精確和接近錯過的副本。

它使用語言語法來指導檢測,因此無論格式如何變化,插入/刪除註釋,重命名變量甚至是一些插入/刪除語句,它都能找到克隆。

該網站在Google的Closure庫上運行示例CloneDR。

2

JSAnalyse剛剛發佈在codeplex上。 這是一個分析JavaScript文件之間的依賴關係的工具。你甚至可以定義允許的依賴關係,並且JSAnalysis檢查定義的規則是否被滿足。這使得即使在大型項目中也可以跟蹤JavaScript依賴項,並且擁有乾淨的架構。

JSAnalyse可以作爲命令行工具執行,也可以通過Visual Studio Layer Diagramm進行配置。集成到構建中也很容易。通過門控簽入,您可以控制依賴關係。

http://jsanalyse.codeplex.com/

56

修訂ANSWER,2017年:是的。使用ESLint。 http://eslint.org


除了JSLint(在Flash Sheridan's answer已經提到)和Closure compiler(以前在awhyte's answer提到的)我曾經也得到了很多好處運行JSHintPHP CodeSniffer。截至2012年,所有四種工具都是免費的開源軟件,並且擁有一個大型且活躍的開發者社區。他們每一位不同的(我認爲,互補)在各式各樣的檢查他們的表現:

的JSLint的設計是,現在仍然是道格拉斯Crockford的個人掉毛工具。它附帶一個偉大的默認規則集 - Crockford自己的,constantly updated關於JavaScript及其缺陷的continues to learn。 JSLint是highly opinionated,這通常是seen as a good thing.因此,您可以通過limited amount(有意)配置或禁用單個規則。但是,這可能會讓JSLint應用於遺留代碼變得困難。

JSHint非常相似的JSLint(實際上它began life作爲JSLint的叉),但它更容易/能夠configure or disable所有經由命令行選項或經由.jshintrc file的JSLint的檢查。

我特別喜歡我可以告訴JSHint在文件中報告所有錯誤,即使有數百個錯誤。相比之下,儘管JSLint確實有配置選項,但在嘗試處理包含大量錯誤的文件時,通常會相對較早地進行救援。

的Closure編譯器是在非常有用的,如果代碼不會用封編譯,你可以感受到非常肯定說代碼在一些基本的方式深深暢飲。關閉編譯可能是有在JS世界的「解釋」語法檢查像php -lruby -c

閉幕最接近的事也warns you about potential issues如缺少的參數和未申報或重新定義變量。如果你沒有看到你所期望的警告,試圖通過與--warning_level VERBOSE

PHP CodeSniffercan parse JavaScript以及PHP和CSS的選項調用閉幕提高警告級別。 CodeSniffer附帶幾種不同的編碼標準(例如phpcs -i),其中包含許多有用的JavaScript代碼嗅探,包括針對inline control structuressuperfluous whitespace的檢查。

這是一個list of JavaScript sniffs從1.3版本的PHP CodeSniffer中可用。6,這裏是custom ruleset that would allow you to run them all at once.使用自定義規則集,很容易pick and choose the rules你想申請。如果你想強制執行某種特定的「房子風格」,那麼你甚至可以使用write your own sniffs。 Afaik CodeSniffer是這裏提到的四種支持定製和創建新靜態分析規則的唯一工具。但有一點需要注意:CodeSniffer也是上述任何工具中運行速度最慢的。

11

綜上所述,JSLint的,JSHint,柏拉圖,ESLint,Google Closure-Linter是可用的工具。 我在嘗試用於Windows的Google Closure-Linter時遇到了安裝問題。但是,它在網頁上提到它對Windows的支持是實驗性的。 我發現並嘗試了另一種工作良好的工具。這裏是鏈接吧: http://esprima.org/

此外,這是GitHub的鏈接工具Esprima: https://github.com/ariya/esprima

4

更安全的重點不是通用的名單可以在Mozilla的維基在Security/B2G/JavaScript code analysis

被發現

本文檔的目的是收集JavaScript代碼分析 工具適合包括在即將到來的Mozilla項目或 內部使用。

而且至少有一個商業產品,做安全分析:Burp gets new JavaScript analysis capabilities

打嗝的最新版本包含的JavaScript代碼靜態分析的新引擎。這使得打嗝掃描報告了一系列新的安全漏洞,其中包括:

  • 基於DOM的XSS
  • JavaScript注入
  • 客戶端SQL注入
  • 的WebSocket劫持
  • 本地文件路徑操作
  • 基於DOM的開放式重定向
  • Cookie操作
  • Ajax請求頭操縱
  • 基於DOM的拒絕服務
  • 網絡消息處理
  • HTML5存儲操作
3

在商業領域,Coverity Static Analysis支持從版本7.7(2015年中)開始對JavaScript進行分析。關於您輸入錯別字的具體查詢,我的寵物項目出現在最新版本(8.0,2016年初)確實在程序元素的名稱中找到了輸入錯誤。作爲該項目的關鍵開發人員,請接受我的無恥插件:儘管尚未像venerated C/C++ analysis那樣成熟,但Coverity的JavaScript分析與許多相同的引擎共享,同樣專注於尋找低價值的缺陷假陽性缺陷報告率。除了發現一般的編程錯誤之外,我們越來越重視查找JavaScript(和其他語言)中的安全缺陷。

現在,這裏有一些錯別字發現(確切錯字作爲練習留給讀者,強調如何輕鬆地將這些可忽略):

merge.js:(stable link)(latest revision)

命令,包-query.js:(stable link)(latest revision)

系列餅tests.js:(stable link)(latest revision)

outline_case.js:(stable link)(latest revision)

3

您可以在此Wiki中看到一些用於JavaScript靜態代碼分析的工具。

Wiki中的一個工具,但在這篇文章中沒有提到,是DeepScan。 它的重點是找到運行時錯誤和質量問題,而不是編碼linters的約定。它也涵蓋了TypeScript和React。

你可以嘗試一下你的GitHub項目。

相關問題