github.com/zkry/enry@v1.6.3/internal/code-generator/generator/aliases.go (about)

     1  package generator
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"io/ioutil"
     7  	"strings"
     8  	"text/template"
     9  
    10  	yaml "gopkg.in/yaml.v2"
    11  )
    12  
    13  // Aliases reads from fileToParse and builds source file from tmplPath. It complies with type File signature.
    14  func Aliases(fileToParse, samplesDir, outPath, tmplPath, tmplName, commit string) error {
    15  	data, err := ioutil.ReadFile(fileToParse)
    16  	if err != nil {
    17  		return err
    18  	}
    19  
    20  	languages := make(map[string]*languageInfo)
    21  	if err := yaml.Unmarshal(data, &languages); err != nil {
    22  		return err
    23  	}
    24  
    25  	orderedLangList := getAlphabeticalOrderedKeys(languages)
    26  	languagesByAlias := buildAliasLanguageMap(languages, orderedLangList)
    27  
    28  	buf := &bytes.Buffer{}
    29  	if err := executeAliasesTemplate(buf, languagesByAlias, tmplPath, tmplName, commit); err != nil {
    30  		return err
    31  	}
    32  
    33  	return formatedWrite(outPath, buf.Bytes())
    34  }
    35  
    36  func buildAliasLanguageMap(languages map[string]*languageInfo, orderedLangList []string) map[string]string {
    37  	aliasLangsMap := make(map[string]string)
    38  	for _, lang := range orderedLangList {
    39  		langInfo := languages[lang]
    40  		key := convertToAliasKey(lang)
    41  		aliasLangsMap[key] = lang
    42  		for _, alias := range langInfo.Aliases {
    43  			key := convertToAliasKey(alias)
    44  			aliasLangsMap[key] = lang
    45  		}
    46  	}
    47  
    48  	return aliasLangsMap
    49  }
    50  
    51  func convertToAliasKey(s string) (key string) {
    52  	key = strings.Replace(s, ` `, `_`, -1)
    53  	key = strings.ToLower(key)
    54  	return
    55  }
    56  
    57  func executeAliasesTemplate(out io.Writer, languagesByAlias map[string]string, aliasesTmplPath, aliasesTmpl, commit string) error {
    58  	fmap := template.FuncMap{
    59  		"getCommit": func() string { return commit },
    60  	}
    61  
    62  	t := template.Must(template.New(aliasesTmpl).Funcs(fmap).ParseFiles(aliasesTmplPath))
    63  	if err := t.Execute(out, languagesByAlias); err != nil {
    64  		return err
    65  	}
    66  
    67  	return nil
    68  }