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 ) {
...
}ไดรเวอร์การวิเคราะห์เป็นโปรแกรมที่เรียกใช้ชุดการวิเคราะห์และพิมพ์การวินิจฉัยที่รายงาน โปรแกรมไดรเวอร์จะต้องนำเข้ารายการเครื่องวิเคราะห์ที่ต้องการ
ไดรเวอร์ทั่วไปสามารถสร้างได้ด้วยแพ็คเกจ 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 ที่กำหนด บัตรผ่านให้ข้อมูลเกี่ยวกับฟังก์ชั่นการทำงานของเครื่องวิเคราะห์เกี่ยวกับ schemas และการสืบค้นที่กำลังวิเคราะห์และให้การดำเนินการกับฟังก์ชั่นการเรียกใช้สำหรับการรายงานการวินิจฉัยและข้อมูลอื่น ๆ กลับไปที่ไดรเวอร์
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
}