gqlanalysis
v0.3.6
gqlanalysis定义了GO中GraphQl的模块化静态分析之间的接口。 gqlanalysis启发是受GO/分析的启发。
gqlanalysis可以轻松地为GO中的GraphQl开发静态分析工具。
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 ) {
...
}分析驱动程序是一个程序,可以运行一组分析并打印其报告的诊断。驱动程序程序必须导入所需的分析仪列表。
可以使用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 ,
)
}一个通行证描述了一个单位工作:将特定分析仪应用于给定GraphQL的架构和查询文件。通行证提供了分析仪的运行函数的信息,内容涉及正在分析的模式和查询,并为运行功能提供了将诊断和其他信息报告回到驱动程序的运行功能的操作。
type Pass struct {
Analyzer * Analyzer
Schema * ast. Schema
Queries [] * ast. QueryDocument
Comments [] * Comment
Report func ( * Diagnostic )
ResultOf map [ * Analyzer ] interface {}
}诊断是与源位置关联的消息。通过可以通过报告字段或ReportF方法报告诊断。
type Diagnostic struct {
Pos * ast. Position
Message string
}