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  }