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 ) {
...
}分析ドライバーは、一連の分析を実行し、報告する診断を印刷するプログラムです。ドライバープログラムは、必要なアナライザーのリストをインポートする必要があります。
典型的なドライバーは、マルチシェッカーパッケージで作成できます。
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 {}
}診断は、ソースの場所に関連付けられたメッセージです。 Passは、レポートフィールドまたはReportFメソッドを介して診断をレポートできます。
type Diagnostic struct {
Pos * ast. Position
Message string
}