2017-04-04 11:10:35 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io/ioutil"
|
|
|
|
"log"
|
|
|
|
|
2017-06-08 07:27:27 +00:00
|
|
|
"gopkg.in/src-d/enry.v1/internal/code-generator/generator"
|
2017-04-04 11:10:35 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
2017-04-19 09:24:01 +00:00
|
|
|
// languages info file
|
|
|
|
languagesYAML = ".linguist/lib/linguist/languages.yml"
|
|
|
|
|
2017-06-13 11:56:07 +00:00
|
|
|
// linguist's samples directory
|
|
|
|
samplesDir = ".linguist/samples"
|
|
|
|
|
2017-05-29 08:05:16 +00:00
|
|
|
// extension.go generation
|
2017-06-08 10:28:36 +00:00
|
|
|
extensionsFile = "data/extension.go"
|
2017-06-12 11:42:20 +00:00
|
|
|
extensionsTmplPath = "internal/code-generator/assets/extension.go.tmpl"
|
|
|
|
extensionsTmpl = "extension.go.tmpl"
|
2017-04-04 11:10:35 +00:00
|
|
|
|
2017-04-11 10:10:05 +00:00
|
|
|
// content.go generation
|
2017-04-04 11:10:35 +00:00
|
|
|
heuristicsRuby = ".linguist/lib/linguist/heuristics.rb"
|
2017-06-08 10:28:36 +00:00
|
|
|
contentFile = "data/content.go"
|
2017-04-05 15:49:58 +00:00
|
|
|
contentTmplPath = "internal/code-generator/assets/content.go.tmpl"
|
2017-04-04 11:10:35 +00:00
|
|
|
contentTmpl = "content.go.tmpl"
|
|
|
|
|
2017-05-29 08:05:16 +00:00
|
|
|
// vendor.go generation
|
2017-04-07 07:25:49 +00:00
|
|
|
vendorYAML = ".linguist/lib/linguist/vendor.yml"
|
2017-06-08 10:28:36 +00:00
|
|
|
vendorFile = "data/vendor.go"
|
2017-04-07 07:25:49 +00:00
|
|
|
vendorTmplPath = "internal/code-generator/assets/vendor.go.tmpl"
|
|
|
|
vendorTmpl = "vendor.go.tmpl"
|
2017-04-06 15:31:17 +00:00
|
|
|
|
2017-05-29 08:05:16 +00:00
|
|
|
// documentation.go generation
|
2017-04-10 09:30:23 +00:00
|
|
|
documentationYAML = ".linguist/lib/linguist/documentation.yml"
|
2017-06-08 10:28:36 +00:00
|
|
|
documentationFile = "data/documentation.go"
|
2017-04-10 09:30:23 +00:00
|
|
|
documentationTmplPath = "internal/code-generator/assets/documentation.go.tmpl"
|
|
|
|
documentationTmpl = "documentation.go.tmpl"
|
|
|
|
|
2017-04-11 10:10:05 +00:00
|
|
|
// type.go generation
|
2017-06-08 10:28:36 +00:00
|
|
|
typeFile = "data/type.go"
|
2017-06-12 11:42:20 +00:00
|
|
|
typeTmplPath = "internal/code-generator/assets/type.go.tmpl"
|
|
|
|
typeTmpl = "type.go.tmpl"
|
2017-04-11 09:26:23 +00:00
|
|
|
|
2017-05-29 08:05:16 +00:00
|
|
|
// interpreter.go generation
|
2017-06-08 10:28:36 +00:00
|
|
|
interpretersFile = "data/interpreter.go"
|
2017-06-12 11:42:20 +00:00
|
|
|
interpretersTmplPath = "internal/code-generator/assets/interpreter.go.tmpl"
|
|
|
|
interpretersTmpl = "interpreter.go.tmpl"
|
2017-04-17 06:14:46 +00:00
|
|
|
|
2017-05-29 08:05:16 +00:00
|
|
|
// filename.go generation
|
2017-06-08 10:28:36 +00:00
|
|
|
filenamesFile = "data/filename.go"
|
2017-06-12 11:42:20 +00:00
|
|
|
filenamesTmplPath = "internal/code-generator/assets/filename.go.tmpl"
|
|
|
|
filenamesTmpl = "filename.go.tmpl"
|
2017-04-19 08:22:46 +00:00
|
|
|
|
2017-05-29 08:05:16 +00:00
|
|
|
// alias.go generation
|
2017-06-08 10:28:36 +00:00
|
|
|
aliasesFile = "data/alias.go"
|
2017-06-12 11:42:20 +00:00
|
|
|
aliasesTmplPath = "internal/code-generator/assets/alias.go.tmpl"
|
|
|
|
aliasesTmpl = "alias.go.tmpl"
|
2017-05-04 13:03:54 +00:00
|
|
|
|
2017-05-25 10:33:26 +00:00
|
|
|
// frequencies.go generation
|
2017-06-08 10:28:36 +00:00
|
|
|
frequenciesFile = "data/frequencies.go"
|
2017-05-25 10:33:26 +00:00
|
|
|
frequenciesTmplPath = "internal/code-generator/assets/frequencies.go.tmpl"
|
|
|
|
frequenciesTmpl = "frequencies.go.tmpl"
|
|
|
|
|
2017-06-21 13:18:27 +00:00
|
|
|
// commit.go generation
|
2017-06-28 08:58:58 +00:00
|
|
|
commitFile = "data/commit.go"
|
2017-06-21 13:18:27 +00:00
|
|
|
commitTmplPath = "internal/code-generator/assets/commit.go.tmpl"
|
|
|
|
commitTmpl = "commit.go.tmpl"
|
|
|
|
|
2017-07-11 08:52:46 +00:00
|
|
|
// mimeType.go generation
|
|
|
|
mimeTypeFile = "data/mimeType.go"
|
|
|
|
mimeTypeTmplPath = "internal/code-generator/assets/mimeType.go.tmpl"
|
|
|
|
mimeTypeTmpl = "mimeType.go.tmpl"
|
2017-07-10 10:50:52 +00:00
|
|
|
|
2017-06-19 09:20:24 +00:00
|
|
|
commitPath = ".linguist/.git/HEAD"
|
2017-04-04 11:10:35 +00:00
|
|
|
)
|
|
|
|
|
2017-06-13 11:56:07 +00:00
|
|
|
type generatorFiles struct {
|
|
|
|
generate generator.File
|
2017-04-11 09:26:23 +00:00
|
|
|
fileToParse string
|
2017-06-13 11:56:07 +00:00
|
|
|
samplesDir string
|
2017-04-11 09:26:23 +00:00
|
|
|
outPath string
|
|
|
|
tmplPath string
|
|
|
|
tmplName string
|
|
|
|
commit string
|
|
|
|
}
|
|
|
|
|
2017-04-04 11:10:35 +00:00
|
|
|
func main() {
|
|
|
|
commit, err := getCommit(commitPath)
|
|
|
|
if err != nil {
|
|
|
|
log.Printf("couldn't find commit: %v", err)
|
|
|
|
}
|
|
|
|
|
2017-06-13 11:56:07 +00:00
|
|
|
fileList := []*generatorFiles{
|
2018-04-28 13:12:03 +00:00
|
|
|
{generator.Extensions, languagesYAML, "", extensionsFile, extensionsTmplPath, extensionsTmpl, commit},
|
|
|
|
{generator.Heuristics, heuristicsRuby, "", contentFile, contentTmplPath, contentTmpl, commit},
|
|
|
|
{generator.Vendor, vendorYAML, "", vendorFile, vendorTmplPath, vendorTmpl, commit},
|
|
|
|
{generator.Documentation, documentationYAML, "", documentationFile, documentationTmplPath, documentationTmpl, commit},
|
|
|
|
{generator.Types, languagesYAML, "", typeFile, typeTmplPath, typeTmpl, commit},
|
|
|
|
{generator.Interpreters, languagesYAML, "", interpretersFile, interpretersTmplPath, interpretersTmpl, commit},
|
|
|
|
{generator.Filenames, languagesYAML, samplesDir, filenamesFile, filenamesTmplPath, filenamesTmpl, commit},
|
|
|
|
{generator.Aliases, languagesYAML, "", aliasesFile, aliasesTmplPath, aliasesTmpl, commit},
|
|
|
|
{generator.Frequencies, "", samplesDir, frequenciesFile, frequenciesTmplPath, frequenciesTmpl, commit},
|
|
|
|
{generator.Commit, "", "", commitFile, commitTmplPath, commitTmpl, commit},
|
|
|
|
{generator.MimeType, languagesYAML, "", mimeTypeFile, mimeTypeTmplPath, mimeTypeTmpl, commit},
|
2017-04-06 15:31:17 +00:00
|
|
|
}
|
2017-04-10 09:30:23 +00:00
|
|
|
|
2017-06-13 11:56:07 +00:00
|
|
|
for _, file := range fileList {
|
|
|
|
if err := file.generate(file.fileToParse, file.samplesDir, file.outPath, file.tmplPath, file.tmplName, file.commit); err != nil {
|
2017-04-11 09:26:23 +00:00
|
|
|
log.Println(err)
|
|
|
|
}
|
2017-04-10 09:30:23 +00:00
|
|
|
}
|
2017-04-04 11:10:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func getCommit(path string) (string, error) {
|
|
|
|
commit, err := ioutil.ReadFile(path)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
2017-06-19 09:20:24 +00:00
|
|
|
if string(commit) == "ref: refs/heads/master\n" {
|
|
|
|
path = ".linguist/.git/" + string(commit[5:len(commit)-1])
|
2017-06-21 13:18:27 +00:00
|
|
|
commit, err = ioutil.ReadFile(path)
|
2017-06-19 09:20:24 +00:00
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-06-21 13:18:27 +00:00
|
|
|
return string(commit[:len(commit)-1]), nil
|
2017-04-04 11:10:35 +00:00
|
|
|
}
|