github.com/src-d/simple-linguist@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  }