gqlanalysis mendefinisikan antarmuka antara analisis statis modular untuk graphQL di go. gqlanalysis terinspirasi oleh GO/Analisis.
gqlanalysis memudahkan alat analisis statis untuk graphql di go.
Jenis utama dalam API adalah penganalisa. Seorang penganalisa secara statis menggambarkan fungsi analisis: nama, dokumentasi, bendera, hubungan dengan analisis lain, dan tentu saja, logikanya.
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 ) {
...
}Pengemudi analisis adalah program yang menjalankan serangkaian analisis dan mencetak diagnostik yang mereka laporkan. Program pengemudi harus mengimpor daftar analisis yang dibutuhkannya.
Driver khas dapat dibuat dengan paket 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 ,
)
}Pass menjelaskan satu unit pekerjaan: aplikasi penganalisa tertentu untuk skema graphQL dan file kueri GraphQL. Pass ini memberikan informasi ke fungsi menjalankan penganalisa tentang skema dan pertanyaan yang dianalisis, dan menyediakan operasi untuk fungsi menjalankan untuk melaporkan diagnostik dan informasi lainnya kembali ke pengemudi.
type Pass struct {
Analyzer * Analyzer
Schema * ast. Schema
Queries [] * ast. QueryDocument
Comments [] * Comment
Report func ( * Diagnostic )
ResultOf map [ * Analyzer ] interface {}
}Diagnostik adalah pesan yang terkait dengan lokasi sumber. Pass dapat melaporkan diagnostik melalui bidang laporan atau metode laporan.
type Diagnostic struct {
Pos * ast. Position
Message string
}