2012-08-05 97 views
3

JSLint,JSHint或其他一些開源靜態代碼分析工具是否支持添加用於代碼合規性的自定義規則,或者是否存在一些ECMAScript兼容的解析器,可用於使結果儘可能接近於下面的代碼段?例如,我想查看JavaScript代碼並列出調用哪些函數,如果它調用庫(或由智能手機提供的用於HTML5小部件的API)來註冊屬於該API名稱空間的所有內容,創建對象及其屬性的樹,以查看是否可以從可以追溯到的對象中調用函數,可能使用XML,JSON或其他結構化格式的輸出。使用JavaScript的自定義規則進行靜態分析?

例如說我有這個JavaScript代碼(它什麼都不是隻是爲參數的緣故):

jobs = mylibrary.getJobs(); 
found = jobs.find("Python"); 
list = found.convert("html"); 

我希望我的分析工具來得到這個:

{ 
    "mylibrary": { 
     "jobs": {"maker":"getJobs", "parent": "mylibrary"}, 
     "found": {"maker": "find", "parent": "jobs", "parameters": "Python"}, 
     "list": {"maker": "convert", "parent": "found"} 
    } 
} 
+0

您的意思是喜歡分析,但是會在您的HTML5內容中返回Analytics的XML數據?例如,監控所有人點擊HTML5音頻,然後用XML數據發送這些數據,以便導出到圖表等。 – TheBlackBenzKid 2012-08-06 09:30:19

+0

@TheBlackBenzKid:我的意思是靜態分析(不是動態分析),而是代碼(包括.js和

1

我嘗試了一些可以從代碼訪問的JavaScript解釋器(在我的例子中是python)。所以像pynocerospynarcissuspyv8這樣的口譯員可能會幫助我。

這裏有關於如何安裝py8答案:https://stackoverflow.com/a/11879224/1577343

由於上述辦法我也沒有太多的成功,我更喜歡使用的ECMAScript的解析器的靜態分析解決方案。

靜態分析,儘可能使用JSLINT解析器(Run JSLint on a .js file from debugging console in chrome or firefox): 但我不知道如何進一步使用它。

{ 
    "string": "(begin)", 
    "first": [ 
     { 
      "string": "var", 
      "arity": "statement", 
      "first": [ 
       { 
        "string": "jobs" 
       }, 
       { 
        "string": "found" 
       }, 
       { 
        "string": "list" 
       } 
      ] 
     }, 
     { 
      "string": "=", 
      "arity": "infix", 
      "first": { 
       "string": "jobs" 
      }, 
      "second": { 
       "string": "(", 
       "arity": "infix", 
       "first": { 
        "string": ".", 
        "arity": "infix", 
        "first": { 
         "string": "mylibrary" 
        }, 
        "second": { 
         "string": "getJobs" 
        } 
       }, 
       "second": [] 
      } 
     }, 
     { 
      "string": "=", 
      "arity": "infix", 
      "first": { 
       "string": "found" 
      }, 
      "second": { 
       "string": "(", 
       "arity": "infix", 
       "first": { 
        "string": ".", 
        "arity": "infix", 
        "first": { 
         "string": "jobs" 
        }, 
        "second": { 
         "string": "find" 
        } 
       }, 
       "second": [ 
        { 
         "string": "Python", 
         "arity": "string" 
        } 
       ] 
      } 
     }, 
     { 
      "string": "=", 
      "arity": "infix", 
      "first": { 
       "string": "list" 
      }, 
      "second": { 
       "string": "(", 
       "arity": "infix", 
       "first": { 
        "string": ".", 
        "arity": "infix", 
        "first": { 
         "string": "found" 
        }, 
        "second": { 
         "string": "convert" 
        } 
       }, 
       "second": [ 
        { 
         "string": "html", 
         "arity": "string" 
        } 
       ] 
      } 
     } 
    ] 
} 
1

PMD支持ECMAScript的靜態分析與自定義規則:

使用當前的規則集作爲例子之一。將其複製並粘貼到新文件中,從中刪除所有舊規則,然後更改名稱和說明。

請注意,您可以自定義個別參考規則。您的自定義規則集中的所有內容都可以覆蓋規則的類。

您還可以使用排除模式排除某些文件被規則集處理,並使用可選的覆蓋包含模式。當存在匹配的排除模式但沒有匹配的包含模式時,文件將從處理中排除。

源文件路徑中的路徑分隔符被標準化爲'/'字符,因此可以在多個平臺上透明地使用相同的規則集。

此外,無論如何使用PMD(例如命令行,IDE,Ant),此排除/包含技術都可以工作,從而更容易在整個環境中保持PMD規則的應用一致。

您可以指定到您的自定義規則集名稱的完整路徑內置的PMD規則集

要看到它在你的IDE,它添加到規則集/ rulesets.properties

參考的旁邊