github.com/src-d/enry@v1.7.3/internal/code-generator/generator/types.go (about)

     1  package generator
     2  
     3  import (
     4  	"bytes"
     5  	"gopkg.in/yaml.v2"
     6  	"io"
     7  	"io/ioutil"
     8  )
     9  
    10  var typeToTypeConst = map[string]int{
    11  	"data":        1,
    12  	"programming": 2,
    13  	"markup":      3,
    14  	"prose":       4,
    15  }
    16  
    17  // Types reads from fileToParse and builds source file from tmplPath. It complies with type File signature.
    18  func Types(fileToParse, samplesDir, outPath, tmplPath, tmplName, commit string) error {
    19  	data, err := ioutil.ReadFile(fileToParse)
    20  	if err != nil {
    21  		return err
    22  	}
    23  
    24  	languages := make(map[string]*languageInfo)
    25  	if err := yaml.Unmarshal(data, &languages); err != nil {
    26  		return err
    27  	}
    28  
    29  	langTypeMap := buildLanguageTypeMap(languages)
    30  
    31  	buf := &bytes.Buffer{}
    32  	if err := executeTypesTemplate(buf, langTypeMap, tmplPath, tmplName, commit); err != nil {
    33  		return err
    34  	}
    35  
    36  	return formatedWrite(outPath, buf.Bytes())
    37  }
    38  
    39  func buildLanguageTypeMap(languages map[string]*languageInfo) map[string]int {
    40  	langTypeMap := make(map[string]int)
    41  	for lang, info := range languages {
    42  		langTypeMap[lang] = typeToTypeConst[info.Type]
    43  	}
    44  
    45  	return langTypeMap
    46  }
    47  
    48  func executeTypesTemplate(out io.Writer, langTypeMap map[string]int, tmplPath, tmplName, commit string) error {
    49  	return executeTemplate(out, tmplName, tmplPath, commit, nil, langTypeMap)
    50  }