github.com/khulnasoft/codebase@v0.0.0-20231214144635-a707781cbb24/errorformat/fmts/fmt.go (about) 1 //go:generate go run gendoc.go 2 3 package fmts 4 5 import ( 6 "fmt" 7 "os" 8 ) 9 10 // Fmt represents defined errorformat 11 type Fmt struct { 12 // name of this errorformat (recommends program name and must be uniq) 13 Name string 14 15 // Errorformat is list of 'errorformat' 16 Errorformat []string 17 18 // one-line description 19 Description string 20 21 // Reference URL if any 22 URL string 23 24 // Target Programming Language of the program. 25 Language string 26 } 27 28 // Fmts holds all defined Fmt in this package. key is Fmt.Name. 29 type Fmts map[string]*Fmt 30 31 var ( 32 fmts Fmts = make(map[string]*Fmt) 33 langToFmts = make(map[string]Fmts) 34 ) 35 36 // register must be called in init(). 37 func register(f *Fmt) { 38 if _, ok := fmts[f.Name]; ok { 39 fmt.Fprintf(os.Stderr, "%v is already defined: %#v", f.Name, f) 40 os.Exit(1) 41 } 42 fmts[f.Name] = f 43 lang := f.Language 44 if lang == "" { 45 lang = "general" 46 } 47 if langToFmts[lang] == nil { 48 langToFmts[lang] = make(map[string]*Fmt) 49 } 50 langToFmts[lang][f.Name] = f 51 } 52 53 // DefinedFmts returns all defined errorformats. 54 func DefinedFmts() Fmts { 55 return fmts 56 } 57 58 // DefinedFmtsByLang returns all defined errorformats by language. 59 func DefinedFmtsByLang() map[string]Fmts { 60 return langToFmts 61 }