func (pc parseCtx) permitsMsg() bool {
	return pc.ctxType == fileCtx || pc.ctxType == msgCtx
}
does this ctx permit msg support?
package pbparser
type parseCtx struct {
	obj     interface{}
	ctxType ctxType
}
type ctxType int
const (
	fileCtx ctxType = iota
	msgCtx
	oneOfCtx
	enumCtx
	rpcCtx
	extendCtx
	serviceCtx
)
var ctxTypeToStringMap = [...]string{
	fileCtx:    "file",
	msgCtx:     "message",
	oneOfCtx:   "oneof",
	enumCtx:    "enum",
	rpcCtx:     "rpc",
	extendCtx:  "extend",
	serviceCtx: "service",
}
func (pc parseCtx) String() string {
	return ctxTypeToStringMap[pc.ctxType]
}
func (pc parseCtx) permitsPackage() bool {
	return pc.ctxType == fileCtx
}
func (pc parseCtx) permitsSyntax() bool {
	return pc.ctxType == fileCtx
}
func (pc parseCtx) permitsImport() bool {
	return pc.ctxType == fileCtx
}
func (pc parseCtx) permitsField() bool {
	return pc.ctxType == msgCtx || pc.ctxType == oneOfCtx || pc.ctxType == extendCtx
}
func (pc parseCtx) permitsOption() bool {
	return pc.ctxType == fileCtx ||
		pc.ctxType == msgCtx ||
		pc.ctxType == oneOfCtx ||
		pc.ctxType == enumCtx ||
		pc.ctxType == serviceCtx ||
		pc.ctxType == rpcCtx
}
func (pc parseCtx) permitsExtensions() bool {
	return pc.ctxType == msgCtx
}
func (pc parseCtx) permitsExtend() bool {
	return pc.ctxType == fileCtx || pc.ctxType == msgCtx
}
func (pc parseCtx) permitsReserved() bool {
	return pc.ctxType == msgCtx
}
func (pc parseCtx) permitsRPC() bool {
	return pc.ctxType == serviceCtx
}
func (pc parseCtx) permitsOneOf() bool {
	return pc.ctxType == msgCtx
}
func (pc parseCtx) permitsEnum() bool {
	return pc.ctxType == fileCtx || pc.ctxType == msgCtx
}