gqlanalysis définit l'interface entre une analyse statique modulaire pour GraphQL dans GO. gqlanalysis est inspiré par GO / Analysis.
gqlanalysis facilite le développement d'outils d'analyse statique pour GraphQL dans GO.
Le type principal de l'API est l'analyseur. Un analyseur décrit statiquement une fonction d'analyse: son nom, sa documentation, ses drapeaux, sa relation avec d'autres analyseurs, et bien sûr, sa logique.
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 ) {
...
}Un pilote d'analyse est un programme qui exécute un ensemble d'analyses et imprime les diagnostics qu'ils signalent. Le programme Driver doit importer la liste des analyseurs dont il a besoin.
Un pilote typique peut être créé avec un package multi-chèques.
package main
import (
"github.com/gqlgo/gqlanalysis/multichecker"
"github.com/gqlgo/lackid"
"github.com/gqlgo/myanalyzer"
)
func main () {
multichecker . Main (
lackid . Analyzer ,
myanalyzer . Analyzer ,
)
}Un laissez-passer décrit une seule unité de travail: l'application d'un analyseur particulier pour donner le schéma et les fichiers de requête de GraphQL. Le PASS fournit des informations à la fonction d'exécution de l'analyseur sur les schémas et les requêtes en cours d'analyse, et fournit des opérations à la fonction d'exécution pour rapporter des diagnostics et d'autres informations au pilote.
type Pass struct {
Analyzer * Analyzer
Schema * ast. Schema
Queries [] * ast. QueryDocument
Comments [] * Comment
Report func ( * Diagnostic )
ResultOf map [ * Analyzer ] interface {}
}Un diagnostic est un message associé à un emplacement source. PASS peut signaler un diagnostic via le champ de rapport ou la méthode ReportF.
type Diagnostic struct {
Pos * ast. Position
Message string
}