mirror of
https://github.com/ralsina/tartrazine.git
synced 2025-06-19 06:33:06 -03:00
changed langs.go to unmarshal on a languageInfo struct
This commit is contained in:
@ -2,7 +2,6 @@ package generator
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"io"
|
||||
"strings"
|
||||
"text/template"
|
||||
@ -10,19 +9,22 @@ import (
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
var (
|
||||
// ErrExtensionsNotFound is the error returned if data parsed doesn't contain extensions.
|
||||
ErrExtensionsNotFound = errors.New("extensions not found")
|
||||
)
|
||||
type languageInfo struct {
|
||||
Type string `yaml:"type,omitempty" json:"type,omitempty"`
|
||||
Aliases []string `yaml:"aliases,omitempty,flow" json:"aliases,omitempty"`
|
||||
Extensions []string `yaml:"extensions,omitempty,flow" json:"extensions,omitempty"`
|
||||
Interpreters []string `yaml:"interpreters,omitempty,flow" json:"interpreters,omitempty"`
|
||||
Group string `yaml:"group,omitempty" json:"group,omitempty"`
|
||||
}
|
||||
|
||||
// Languages reads from buf and builds languages.go file from languagesTmplPath.
|
||||
func Languages(data []byte, languagesTmplPath, languagesTmplName, commit string) ([]byte, error) {
|
||||
var yamlSlice yaml.MapSlice
|
||||
if err := yaml.Unmarshal(data, &yamlSlice); err != nil {
|
||||
languages := make(map[string]*languageInfo)
|
||||
if err := yaml.Unmarshal(data, &languages); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
languagesByExtension, err := buildExtensionLanguageMap(yamlSlice)
|
||||
languagesByExtension, err := buildExtensionLanguageMap(languages)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -35,48 +37,17 @@ func Languages(data []byte, languagesTmplPath, languagesTmplName, commit string)
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func buildExtensionLanguageMap(yamlSlice yaml.MapSlice) (map[string][]string, error) {
|
||||
func buildExtensionLanguageMap(languages map[string]*languageInfo) (map[string][]string, error) {
|
||||
extensionLangsMap := make(map[string][]string)
|
||||
for _, lang := range yamlSlice {
|
||||
extensions, err := findExtensions(lang.Value.(yaml.MapSlice))
|
||||
if err != nil && err != ErrExtensionsNotFound {
|
||||
return nil, err
|
||||
for lang, info := range languages {
|
||||
for _, extension := range info.Extensions {
|
||||
extensionLangsMap[extension] = append(extensionLangsMap[extension], lang)
|
||||
}
|
||||
|
||||
fillMap(extensionLangsMap, lang.Key.(string), extensions)
|
||||
}
|
||||
|
||||
return extensionLangsMap, nil
|
||||
}
|
||||
|
||||
func findExtensions(items yaml.MapSlice) ([]string, error) {
|
||||
const extField = "extensions"
|
||||
for _, item := range items {
|
||||
if item.Key == extField {
|
||||
extensions := toStringSlice(item.Value.([]interface{}))
|
||||
return extensions, nil
|
||||
}
|
||||
}
|
||||
|
||||
return nil, ErrExtensionsNotFound
|
||||
}
|
||||
|
||||
func toStringSlice(slice []interface{}) []string {
|
||||
extensions := make([]string, 0, len(slice))
|
||||
for _, element := range slice {
|
||||
extension := element.(string)
|
||||
extensions = append(extensions, extension)
|
||||
}
|
||||
|
||||
return extensions
|
||||
}
|
||||
|
||||
func fillMap(extensionLangs map[string][]string, lang string, extensions []string) {
|
||||
for _, extension := range extensions {
|
||||
extensionLangs[extension] = append(extensionLangs[extension], lang)
|
||||
}
|
||||
}
|
||||
|
||||
func executeLanguagesTemplate(out io.Writer, languagesByExtension map[string][]string, languagesTmplPath, languagesTmpl, commit string) error {
|
||||
fmap := template.FuncMap{
|
||||
"getCommit": func() string { return commit },
|
||||
|
Reference in New Issue
Block a user