gqlanalysis define a interface entre uma análise estática modular para grafql no GO. gqlanalysis é inspirada em Go/Análise.
gqlanalysis facilita o desenvolvimento de ferramentas de análise estática para o GraphQL no GO.
O tipo primário na API é o analisador. Um analisador descreve estaticamente uma função de análise: seu nome, documentação, sinalizadores, relação com outros analisadores e, claro, sua lógica.
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 ) {
...
}Um driver de análise é um programa que executa um conjunto de análises e imprime os diagnósticos que eles relatam. O programa de driver deve importar a lista de analisadores de que precisa.
Um driver típico pode ser criado com o pacote 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 ,
)
}Um passe descreve uma única unidade de trabalho: a aplicação de um analisador específico ao esquema e arquivos de consulta do GraphQL. O passe fornece informações para a função de execução do analisador sobre esquemas e consultas que estão sendo analisadas e fornece operações para a função de execução para relatar diagnósticos e outras informações de volta ao driver.
type Pass struct {
Analyzer * Analyzer
Schema * ast. Schema
Queries [] * ast. QueryDocument
Comments [] * Comment
Report func ( * Diagnostic )
ResultOf map [ * Analyzer ] interface {}
}Um diagnóstico é uma mensagem associada a um local de origem. O passe pode relatar um diagnóstico via campo de relatório ou método relatório.
type Diagnostic struct {
Pos * ast. Position
Message string
}