gqlanalysis
v0.3.6
gqlanalysis定義了GO中GraphQl的模塊化靜態分析之間的接口。 gqlanalysis啟發是受GO/分析的啟發。
gqlanalysis可以輕鬆地為GO中的GraphQl開發靜態分析工具。
API中的主要類型是分析儀。一個分析儀靜態描述了一個分析功能:其名稱,文檔,標誌,與其他分析儀的關係,當然還有其邏輯。
package lackid
var Analyzer = & gqlanalysis. Analyzer {
Name : "lackid" ,
Doc : "lackid finds a selection for a type which has id field but the selection does not have id" ,
Run : run ,
...
}
func run ( pass * gqlanalysis. Pass ) ( interface {}, error ) {
...
}分析驅動程序是一個程序,可以運行一組分析並打印其報告的診斷。驅動程序程序必須導入所需的分析儀列表。
可以使用Multichecker軟件包創建典型的驅動程序。
package main
import (
"github.com/gqlgo/gqlanalysis/multichecker"
"github.com/gqlgo/lackid"
"github.com/gqlgo/myanalyzer"
)
func main () {
multichecker . Main (
lackid . Analyzer ,
myanalyzer . Analyzer ,
)
}一個通行證描述了一個單位工作:將特定分析儀應用於給定GraphQL的架構和查詢文件。通行證提供了分析儀的運行函數的信息,內容涉及正在分析的模式和查詢,並為運行功能提供了將診斷和其他信息報告回到驅動程序的運行功能的操作。
type Pass struct {
Analyzer * Analyzer
Schema * ast. Schema
Queries [] * ast. QueryDocument
Comments [] * Comment
Report func ( * Diagnostic )
ResultOf map [ * Analyzer ] interface {}
}診斷是與源位置關聯的消息。通過可以通過報告字段或ReportF方法報告診斷。
type Diagnostic struct {
Pos * ast. Position
Message string
}