gqlanalysis определяет границу между модульным статическим анализом для GraphQL в GO. gqlanalysis вдохновлен GO/анализом.
gqlanalysis позволяет легко разработать статические инструменты анализа для GraphQL в GO.
Основным типом в 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 ) {
...
}Драйвер анализа - это программа, которая запускает набор анализов и печатает диагностику, о которой они сообщают. Программа драйвера должна импортировать список анализаторов, в которых она нуждается.
Типичный драйвер может быть создан с помощью Multicecker Package.
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. Pass предоставляет информацию для функции Run Analyzer об анализируемых схемах и запросах и предоставляет операции функции Run для отчетности диагностики и другой информации обратно для драйвера.
type Pass struct {
Analyzer * Analyzer
Schema * ast. Schema
Queries [] * ast. QueryDocument
Comments [] * Comment
Report func ( * Diagnostic )
ResultOf map [ * Analyzer ] interface {}
}Диагностика - это сообщение, связанное с местоположением источника. Pass может сообщить о диагностике с помощью отчета или метода отчета.
type Diagnostic struct {
Pos * ast. Position
Message string
}