gqlanalysis definiert die Grenzfläche zwischen einer modularen statischen Analyse für GraphQL in GO. gqlanalysis ist von GO/Analyse inspiriert.
gqlanalysis erleichtert die Entwicklung von statischen Analyse -Tools für GraphQL in Go.
Der Haupttyp in der API ist Analysator. Ein Analysator beschreibt statisch eine Analysefunktion: seinen Namen, seine Dokumentation, Flaggen, die Beziehung zu anderen Analysatoren und natürlich seine Logik.
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 ) {
...
}Ein Analyse -Treiber ist ein Programm, das eine Reihe von Analysen ausführt und die von ihnen gemeldete Diagnose druckt. Das Treiberprogramm muss die Liste der Analysatoren importieren, die es benötigt.
Ein typischer Treiber kann mit einem Multichecker -Paket erstellt werden.
package main
import (
"github.com/gqlgo/gqlanalysis/multichecker"
"github.com/gqlgo/lackid"
"github.com/gqlgo/myanalyzer"
)
func main () {
multichecker . Main (
lackid . Analyzer ,
myanalyzer . Analyzer ,
)
}Ein Pass beschreibt eine einzelne Arbeitseinheit: die Anwendung eines bestimmten Analysators auf das festgelegte Schema- und Abfragedateien von GraphQL. Der Pass enthält Informationen zur Lauffunktion des Analysators zu den analysierten Schemas und Abfragen und bietet Vorgänge für die Lauffunktion für die Meldung von Diagnostik und anderen Informationen an den Treiber.
type Pass struct {
Analyzer * Analyzer
Schema * ast. Schema
Queries [] * ast. QueryDocument
Comments [] * Comment
Report func ( * Diagnostic )
ResultOf map [ * Analyzer ] interface {}
}Eine Diagnose ist eine Nachricht, die mit einem Quellort zugeordnet ist. Pass kann eine Diagnose über das Feld oder die Berichtsmethode für Berichtsbericht melden.
type Diagnostic struct {
Pos * ast. Position
Message string
}