Glean源碼分析引擎
Glean 是一個用于收集、推導(dǎo)和查詢有關(guān)源代碼信息的系統(tǒng)。它旨在收集和存儲有關(guān)代碼結(jié)構(gòu)的詳細信息,并提供對數(shù)據(jù)的訪問,以提供從在線 IDE 功能到離線代碼分析的強大工具和體驗。你可以將其用于:
-
收集和存儲有關(guān)代碼結(jié)構(gòu)的詳細信息。Glean 是圍繞高效的存儲模型設(shè)計的,該模型可以大規(guī)模存儲有關(guān)代碼的信息。
-
查詢有關(guān)代碼的信息,為從在線 IDE 功能到離線代碼分析的工具和體驗提供支持。
Glean 由以下組件組成:
-
一個建立在 RocksDB 上的高效存儲后端,用于存儲事實。事實是由用戶定義的模式描述的不可變的術(shù)語,并形成一個DAG。事實是由存儲后端自動去重的??梢园阉醋魇悄軌蛴行У卮鎯筒樵兡愕拇a的AST,并且具有完全的類型安全。
-
實現(xiàn)聲明式查詢語言 Angle 的查詢引擎。Angle 是一種與 Datalog 相似的邏輯語言,但具有擴展功能,使其適用于構(gòu)建對 Glean data 復(fù)雜查詢。就像在 Datalog 中一樣,Glean 可以通過使用 Angle定義規(guī)則來自動推導(dǎo)出新的事實。
-
一個服務(wù)器管理的磁盤多個數(shù)據(jù)庫,并提供從客戶創(chuàng)造,寫和查詢數(shù)據(jù)庫的請求。該服務(wù)器目前使用 Thrift,但沒有理由將來服務(wù)器也不能公開其他協(xié)議。該服務(wù)器旨在大規(guī)模部署,為大量客戶端提供復(fù)制的數(shù)據(jù)庫。
-
一個交互式 shell,你可以在其中鍵入查詢并瀏覽數(shù)據(jù)。
-
用于直接或通過連接到服務(wù)器來創(chuàng)建、編寫和查詢數(shù)據(jù)庫的命令行工具。
-
常見編程語言的幾個示例模式,以及 其中一些的索引器。請注意,Glean 不會強制將所有數(shù)據(jù)放入一個單一模式中;每種語言的模式中可以有任意數(shù)量的特定于語言的細節(jié)??梢酝ㄟ^使用 Angle 派生事實來構(gòu)建語言中立的抽象。
主要特點:
-
種類豐富:存儲代碼的詳細信息
-
緊湊型存儲:大規(guī)模存儲有關(guān)代碼的數(shù)據(jù)
-
高效查詢:從代碼中獲得深刻見解,構(gòu)建體驗
目前支持:
計劃提供:
- Python
- C++
- Objective-C
- Java
- Rust
