Analyzer::Go::Kratos
Inherits Analyzer < FileHelper < Reference < Object
Kratos (https://go-kratos.dev/) is a Go microservices framework whose
HTTP surface is (almost always) generated from .proto service
definitions by protoc-gen-go-http, not hand-registered. A generated
*_http.pb.go file looks like:
func RegisterTodoServiceHTTPServer(s *http.Server, srv TodoServiceHTTPServer) { r := s.Route("/") r.Handle("POST", "/v1/todos/create", _TodoService_CreateTodo0_HTTP_Handler(srv)) r.Handle("GET", "/v1/todos/{id}", _TodoService_GetTodo0_HTTP_Handler(srv)) }
protoc-gen-go-http v3+ emits the method-first r.Handle("METHOD", "path", handler) shape shown above; v2.x (still the majority of
deployed Kratos services) emits verb shortcuts instead
(r.GET("/v1/todos/{id}", handler), r.POST(...), ...). The shared
tree-sitter Go route walker already recognises both shapes (it backs
httprouter's analyzer for the same Handle + verb-method combo), so
this analyzer is a thin Kratos-specific wrapper around it rather than
a bespoke parser.
Path params ({id}) are left in the URL as-is; EndpointOptimizer
derives Param entries from {...} placeholders for every analyzer,
so they don't need to be extracted here.
Constants
HTTP methods protoc-gen-go-http allows a google.api.http body
rule on. The generator itself enforces (and warns at generation
time when violated) that only these verbs bind a request body —
GET/DELETE never do. Field-level body/query shapes require the
paired .proto/generated request struct, which this analyzer
does not parse, so a generic body param is attached instead
(mirrors the connect_rpc analyzer's level of detail).
Only .go files that import Kratos' own HTTP transport package
are scanned. This is a narrow, framework-specific marker — unlike
a bare .GET("/path", handler) call, which virtually any Go
router could produce — so a Kratos-tagged repository never steals
routes registered by a sibling framework living in the same tree
(see the analyzer project-scoping campaign, #2417-2432). Matches
both github.com/go-kratos/kratos/v2/transport/http and the
newer v3 module path.
Class methods
Instance methods
Instance-side view of the same declaration. The per-file rescues live on
this base class, which has no way to name the analyzer that is running
inside them, so a skipped file could not be attributed to a tech.
Deriving it from analyzer_for keeps the name written exactly once.