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