From 5d61ca93d8b517eba96293906cc29280dd9ec758 Mon Sep 17 00:00:00 2001 From: Manuel Carmona Date: Mon, 10 Apr 2017 12:39:35 +0200 Subject: [PATCH] changed langs.go to unmarshal on a languageInfo struct --- internal/code-generator/generator/langs.go | 57 ++++--------- languages.go | 96 +++++++++++----------- utils_test.go | 7 -- 3 files changed, 62 insertions(+), 98 deletions(-) diff --git a/internal/code-generator/generator/langs.go b/internal/code-generator/generator/langs.go index 07b6c29..7b972d3 100644 --- a/internal/code-generator/generator/langs.go +++ b/internal/code-generator/generator/langs.go @@ -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 }, diff --git a/languages.go b/languages.go index d7d9050..c0a698c 100644 --- a/languages.go +++ b/languages.go @@ -62,7 +62,7 @@ var languagesByExtension = map[string][]string{ ".arpa": {"DNS Zone"}, ".as": {"ActionScript"}, ".asax": {"ASP"}, - ".asc": {"AGS Script", "AsciiDoc", "Public Key"}, + ".asc": {"AsciiDoc", "AGS Script", "Public Key"}, ".asciidoc": {"AsciiDoc"}, ".ascx": {"ASP"}, ".asd": {"Common Lisp"}, @@ -87,15 +87,15 @@ var languagesByExtension = map[string][]string{ ".axml": {"XML"}, ".axs": {"NetLinx"}, ".axs.erb": {"NetLinx+ERB"}, - ".b": {"Brainfuck", "Limbo"}, + ".b": {"Limbo", "Brainfuck"}, ".bas": {"Visual Basic"}, ".bash": {"Shell"}, ".bat": {"Batchfile"}, ".bats": {"Shell"}, - ".bb": {"BitBake", "BlitzBasic"}, + ".bb": {"BlitzBasic", "BitBake"}, ".bbx": {"TeX"}, ".befunge": {"Befunge"}, - ".bf": {"Brainfuck", "HyPhy"}, + ".bf": {"HyPhy", "Brainfuck"}, ".bib": {"TeX"}, ".bison": {"Bison"}, ".blade": {"Blade"}, @@ -104,7 +104,7 @@ var languagesByExtension = map[string][]string{ ".bones": {"JavaScript"}, ".boo": {"Boo"}, ".boot": {"Clojure"}, - ".brd": {"Eagle", "KiCad"}, + ".brd": {"KiCad", "Eagle"}, ".bro": {"Bro"}, ".brs": {"Brightscript"}, ".bsl": {"1C Enterprise"}, @@ -117,7 +117,7 @@ var languagesByExtension = map[string][]string{ ".c++-objdump": {"Cpp-ObjDump"}, ".c++objdump": {"Cpp-ObjDump"}, ".c-objdump": {"C-ObjDump"}, - ".cake": {"C#", "CoffeeScript"}, + ".cake": {"CoffeeScript", "C#"}, ".capnp": {"Cap'n Proto"}, ".cats": {"C"}, ".cbl": {"COBOL"}, @@ -131,7 +131,7 @@ var languagesByExtension = map[string][]string{ ".cfg": {"INI"}, ".cfm": {"ColdFusion"}, ".cfml": {"ColdFusion"}, - ".cgi": {"Perl", "Python", "Shell"}, + ".cgi": {"Shell", "Python", "Perl"}, ".ch": {"Charity", "xBase"}, ".chem": {"Pic"}, ".chpl": {"Chapel"}, @@ -139,7 +139,7 @@ var languagesByExtension = map[string][]string{ ".cirru": {"Cirru"}, ".cjsx": {"CoffeeScript"}, ".ck": {"ChucK"}, - ".cl": {"Common Lisp", "Cool", "OpenCL"}, + ".cl": {"OpenCL", "Common Lisp", "Cool"}, ".cl2": {"Clojure"}, ".click": {"Click"}, ".clixml": {"XML"}, @@ -150,7 +150,7 @@ var languagesByExtension = map[string][]string{ ".cljscm": {"Clojure"}, ".cljx": {"Clojure"}, ".clp": {"CLIPS"}, - ".cls": {"Apex", "OpenEdge ABL", "TeX", "Visual Basic"}, + ".cls": {"TeX", "Apex", "OpenEdge ABL", "Visual Basic"}, ".clw": {"Clarion"}, ".cmake": {"CMake"}, ".cmake.in": {"CMake"}, @@ -189,7 +189,7 @@ var languagesByExtension = map[string][]string{ ".cxx": {"C++"}, ".cxx-objdump": {"Cpp-ObjDump"}, ".cy": {"Cycript"}, - ".d": {"D", "DTrace", "Makefile"}, + ".d": {"Makefile", "DTrace", "D"}, ".d-objdump": {"D-ObjDump"}, ".dae": {"COLLADA"}, ".darcspatch": {"Darcs Patch"}, @@ -229,7 +229,7 @@ var languagesByExtension = map[string][]string{ ".ebnf": {"EBNF"}, ".ebuild": {"Gentoo Ebuild"}, ".ec": {"eC"}, - ".ecl": {"ECL", "ECLiPSe"}, + ".ecl": {"ECLiPSe", "ECL"}, ".eclass": {"Gentoo Eclass"}, ".eclxml": {"ECL"}, ".ecr": {"HTML+ECR"}, @@ -257,7 +257,7 @@ var languagesByExtension = map[string][]string{ ".ex": {"Elixir"}, ".exs": {"Elixir"}, ".eye": {"Ruby"}, - ".f": {"Filebench WML", "Forth", "Fortran"}, + ".f": {"Fortran", "Filebench WML", "Forth"}, ".f03": {"Fortran"}, ".f08": {"Fortran"}, ".f77": {"Fortran"}, @@ -266,24 +266,24 @@ var languagesByExtension = map[string][]string{ ".factor": {"Factor"}, ".fan": {"Fantom"}, ".fancypack": {"Fancy"}, - ".fcgi": {"Lua", "PHP", "Perl", "Python", "Ruby", "Shell"}, + ".fcgi": {"Lua", "Shell", "PHP", "Python", "Perl", "Ruby"}, ".fea": {"OpenType Feature File"}, ".feature": {"Gherkin"}, ".filters": {"XML"}, ".fish": {"fish"}, ".flex": {"JFlex"}, ".flux": {"FLUX"}, - ".for": {"Formatted", "Forth", "Fortran"}, + ".for": {"Formatted", "Fortran", "Forth"}, ".forth": {"Forth"}, ".fp": {"GLSL"}, ".fpp": {"Fortran"}, - ".fr": {"Forth", "Frege", "Text"}, - ".frag": {"GLSL", "JavaScript"}, + ".fr": {"Text", "Frege", "Forth"}, + ".frag": {"JavaScript", "GLSL"}, ".frg": {"GLSL"}, ".frm": {"Visual Basic"}, ".frt": {"Forth"}, ".frx": {"Visual Basic"}, - ".fs": {"F#", "Filterscript", "Forth", "GLSL"}, + ".fs": {"Filterscript", "GLSL", "F#", "Forth"}, ".fsh": {"GLSL"}, ".fshader": {"GLSL"}, ".fsi": {"F#"}, @@ -292,7 +292,7 @@ var languagesByExtension = map[string][]string{ ".fth": {"Forth"}, ".ftl": {"FreeMarker"}, ".fun": {"Standard ML"}, - ".fx": {"FLUX", "HLSL"}, + ".fx": {"HLSL", "FLUX"}, ".fxh": {"HLSL"}, ".fxml": {"XML"}, ".fy": {"Fancy"}, @@ -302,7 +302,7 @@ var languagesByExtension = map[string][]string{ ".gawk": {"Awk"}, ".gco": {"G-code"}, ".gcode": {"G-code"}, - ".gd": {"GAP", "GDScript"}, + ".gd": {"GDScript", "GAP"}, ".gdb": {"GDB"}, ".gdbinit": {"GDB"}, ".gemspec": {"Ruby"}, @@ -315,7 +315,7 @@ var languagesByExtension = map[string][]string{ ".glf": {"Glyph"}, ".glsl": {"GLSL"}, ".glslv": {"GLSL"}, - ".gml": {"Game Maker Language", "Graph Modeling Language", "XML"}, + ".gml": {"Graph Modeling Language", "Game Maker Language", "XML"}, ".gms": {"GAMS"}, ".gn": {"GN"}, ".gni": {"GN"}, @@ -331,7 +331,7 @@ var languagesByExtension = map[string][]string{ ".groovy": {"Groovy"}, ".grt": {"Groovy"}, ".grxml": {"XML"}, - ".gs": {"Genie", "Gosu", "JavaScript"}, + ".gs": {"JavaScript", "Genie", "Gosu"}, ".gshader": {"GLSL"}, ".gsp": {"Groovy Server Pages"}, ".gst": {"Gosu"}, @@ -341,7 +341,7 @@ var languagesByExtension = map[string][]string{ ".gvy": {"Groovy"}, ".gyp": {"Python"}, ".gypi": {"Python"}, - ".h": {"C", "C++", "Objective-C"}, + ".h": {"C", "Objective-C", "C++"}, ".h++": {"C++"}, ".haml": {"Haml"}, ".haml.deface": {"Haml"}, @@ -378,7 +378,7 @@ var languagesByExtension = map[string][]string{ ".ik": {"Ioke"}, ".ily": {"LilyPond"}, ".iml": {"XML"}, - ".inc": {"Assembly", "C++", "HTML", "PAWN", "PHP", "POV-Ray SDL", "Pascal", "SQL", "SourcePawn"}, + ".inc": {"Assembly", "POV-Ray SDL", "HTML", "PHP", "PAWN", "Pascal", "C++", "SQL", "SourcePawn"}, ".ini": {"INI"}, ".inl": {"C++"}, ".ino": {"Arduino"}, @@ -425,7 +425,7 @@ var languagesByExtension = map[string][]string{ ".kt": {"Kotlin"}, ".ktm": {"Kotlin"}, ".kts": {"Kotlin"}, - ".l": {"Common Lisp", "Lex", "PicoLisp", "Roff"}, + ".l": {"Roff", "Common Lisp", "PicoLisp", "Lex"}, ".lagda": {"Literate Agda"}, ".las": {"Lasso"}, ".lasso": {"Lasso"}, @@ -446,7 +446,7 @@ var languagesByExtension = map[string][]string{ ".lid": {"Dylan"}, ".lidr": {"Idris"}, ".liquid": {"Liquid"}, - ".lisp": {"Common Lisp", "NewLisp"}, + ".lisp": {"NewLisp", "Common Lisp"}, ".litcoffee": {"Literate CoffeeScript"}, ".ll": {"LLVM"}, ".lmi": {"Python"}, @@ -454,15 +454,15 @@ var languagesByExtension = map[string][]string{ ".lol": {"LOLCODE"}, ".lookml": {"LookML"}, ".lpr": {"Pascal"}, - ".ls": {"LiveScript", "LoomScript"}, + ".ls": {"LoomScript", "LiveScript"}, ".lsl": {"LSL"}, ".lslp": {"LSL"}, - ".lsp": {"Common Lisp", "NewLisp"}, + ".lsp": {"NewLisp", "Common Lisp"}, ".ltx": {"TeX"}, ".lua": {"Lua"}, ".lvproj": {"LabVIEW"}, ".ly": {"LilyPond"}, - ".m": {"Limbo", "M", "MUF", "Mathematica", "Matlab", "Mercury", "Objective-C"}, + ".m": {"M", "Limbo", "Objective-C", "MUF", "Matlab", "Mercury", "Mathematica"}, ".m4": {"M4", "M4Sugar"}, ".ma": {"Mathematica"}, ".mak": {"Makefile"}, @@ -511,7 +511,7 @@ var languagesByExtension = map[string][]string{ ".mmk": {"Module Management System"}, ".mms": {"Module Management System"}, ".mo": {"Modelica"}, - ".mod": {"AMPL", "Linux Kernel Module", "Modula-2", "XML"}, + ".mod": {"Linux Kernel Module", "AMPL", "Modula-2", "XML"}, ".model.lkml": {"LookML"}, ".monkey": {"Monkey"}, ".moo": {"Mercury", "Moocode"}, @@ -519,7 +519,7 @@ var languagesByExtension = map[string][]string{ ".mq4": {"MQL4"}, ".mq5": {"MQL5"}, ".mqh": {"MQL4", "MQL5"}, - ".ms": {"MAXScript", "Roff", "Unix Assembly"}, + ".ms": {"Roff", "Unix Assembly", "MAXScript"}, ".mspec": {"Ruby"}, ".mss": {"CartoCSS"}, ".mt": {"Mathematica"}, @@ -533,10 +533,10 @@ var languagesByExtension = map[string][]string{ ".mxt": {"Max"}, ".mysql": {"SQL"}, ".myt": {"Myghty"}, - ".n": {"Nemerle", "Roff"}, + ".n": {"Roff", "Nemerle"}, ".nasm": {"Assembly"}, ".nawk": {"Awk"}, - ".nb": {"Mathematica", "Text"}, + ".nb": {"Text", "Mathematica"}, ".nbp": {"Mathematica"}, ".nc": {"nesC"}, ".ncl": {"NCL", "Text"}, @@ -549,7 +549,7 @@ var languagesByExtension = map[string][]string{ ".nix": {"Nix"}, ".njk": {"HTML+Django"}, ".njs": {"JavaScript"}, - ".nl": {"NL", "NewLisp"}, + ".nl": {"NewLisp", "NL"}, ".nlogo": {"NetLogo"}, ".no": {"Text"}, ".nproj": {"XML"}, @@ -604,7 +604,7 @@ var languagesByExtension = map[string][]string{ ".pde": {"Processing"}, ".perl": {"Perl"}, ".ph": {"Perl"}, - ".php": {"Hack", "PHP"}, + ".php": {"PHP", "Hack"}, ".php3": {"PHP"}, ".php4": {"PHP"}, ".php5": {"PHP"}, @@ -619,7 +619,7 @@ var languagesByExtension = map[string][]string{ ".pkgproj": {"XML"}, ".pkl": {"Pickle"}, ".pks": {"PLSQL"}, - ".pl": {"Perl", "Perl6", "Prolog"}, + ".pl": {"Prolog", "Perl", "Perl6"}, ".pl6": {"Perl6"}, ".plb": {"PLSQL"}, ".plist": {"XML"}, @@ -633,14 +633,14 @@ var languagesByExtension = map[string][]string{ ".pm6": {"Perl6"}, ".pmod": {"Pike"}, ".po": {"Gettext Catalog"}, - ".pod": {"Perl", "Pod"}, + ".pod": {"Pod", "Perl"}, ".podsl": {"Common Lisp"}, ".podspec": {"Ruby"}, ".pogo": {"PogoScript"}, ".pony": {"Pony"}, ".pot": {"Gettext Catalog"}, ".pov": {"POV-Ray SDL"}, - ".pp": {"Pascal", "Puppet"}, + ".pp": {"Puppet", "Pascal"}, ".pprx": {"REXX"}, ".prc": {"SQL"}, ".prefab": {"Unity3D Asset"}, @@ -678,7 +678,7 @@ var languagesByExtension = map[string][]string{ ".pyx": {"Cython"}, ".qbs": {"QML"}, ".qml": {"QML"}, - ".r": {"R", "Rebol"}, + ".r": {"Rebol", "R"}, ".r2": {"Rebol"}, ".r3": {"Rebol"}, ".rabl": {"Ruby"}, @@ -699,7 +699,7 @@ var languagesByExtension = map[string][]string{ ".rd": {"R"}, ".rdf": {"XML"}, ".rdoc": {"RDoc"}, - ".re": {"C++", "Reason"}, + ".re": {"Reason", "C++"}, ".reb": {"Rebol"}, ".rebol": {"Rebol"}, ".red": {"Red"}, @@ -727,7 +727,7 @@ var languagesByExtension = map[string][]string{ ".ron": {"Markdown"}, ".rpy": {"Python", "Ren'Py"}, ".rq": {"SPARQL"}, - ".rs": {"RenderScript", "Rust"}, + ".rs": {"Rust", "RenderScript"}, ".rs.in": {"Rust"}, ".rsc": {"Rascal"}, ".rsh": {"RenderScript"}, @@ -751,7 +751,7 @@ var languagesByExtension = map[string][]string{ ".scaml": {"Scaml"}, ".scd": {"SuperCollider"}, ".sce": {"Scilab"}, - ".sch": {"Eagle", "KiCad", "XML"}, + ".sch": {"KiCad", "Eagle", "XML"}, ".sci": {"Scilab"}, ".scm": {"Scheme"}, ".sco": {"Csound Score"}, @@ -774,7 +774,7 @@ var languagesByExtension = map[string][]string{ ".sl": {"Slash"}, ".sld": {"Scheme"}, ".slim": {"Slim"}, - ".sls": {"SaltStack", "Scheme"}, + ".sls": {"Scheme", "SaltStack"}, ".sma": {"SourcePawn"}, ".smali": {"Smali"}, ".sml": {"Standard ML"}, @@ -782,14 +782,14 @@ var languagesByExtension = map[string][]string{ ".smt2": {"SMT"}, ".sp": {"SourcePawn"}, ".sparql": {"SPARQL"}, - ".spec": {"Python", "RPM Spec", "Ruby"}, + ".spec": {"Python", "Ruby", "RPM Spec"}, ".spin": {"Propeller Spin"}, ".sps": {"Scheme"}, ".sqf": {"SQF"}, - ".sql": {"PLSQL", "PLpgSQL", "SQL", "SQLPL"}, + ".sql": {"PLpgSQL", "PLSQL", "SQL", "SQLPL"}, ".sra": {"PowerBuilder"}, ".srdf": {"XML"}, - ".srt": {"SRecode Template", "SubRip Text"}, + ".srt": {"SubRip Text", "SRecode Template"}, ".sru": {"PowerBuilder"}, ".srw": {"PowerBuilder"}, ".ss": {"Scheme"}, @@ -822,7 +822,7 @@ var languagesByExtension = map[string][]string{ ".svh": {"SystemVerilog"}, ".swift": {"Swift"}, ".syntax": {"YAML"}, - ".t": {"Perl", "Perl6", "Terra", "Turing"}, + ".t": {"Turing", "Perl", "Terra", "Perl6"}, ".tab": {"SQL"}, ".tac": {"Python"}, ".targets": {"XML"}, @@ -853,7 +853,7 @@ var languagesByExtension = map[string][]string{ ".tpl": {"Smarty"}, ".tpp": {"C++"}, ".ts": {"TypeScript", "XML"}, - ".tst": {"GAP", "Scilab"}, + ".tst": {"Scilab", "GAP"}, ".tsx": {"TypeScript", "XML"}, ".ttl": {"Turtle"}, ".tu": {"Turing"}, @@ -890,7 +890,7 @@ var languagesByExtension = map[string][]string{ ".vhf": {"VHDL"}, ".vhi": {"VHDL"}, ".vho": {"VHDL"}, - ".vhost": {"ApacheConf", "Nginx"}, + ".vhost": {"Nginx", "ApacheConf"}, ".vhs": {"VHDL"}, ".vht": {"VHDL"}, ".vhw": {"VHDL"}, diff --git a/utils_test.go b/utils_test.go index 28ba604..9bc1a45 100644 --- a/utils_test.go +++ b/utils_test.go @@ -21,13 +21,6 @@ func (s *TSuite) TestIsVendor(c *C) { func (s *TSuite) TestIsDocumentation(c *C) { c.Assert(IsDocumentation("foo"), Equals, false) c.Assert(IsDocumentation("README"), Equals, true) - c.Assert(IsDocumentation("samples/something"), Equals, true) - c.Assert(IsDocumentation("Docs/whatever"), Equals, true) - c.Assert(IsDocumentation("/javadoc/*"), Equals, true) - c.Assert(IsDocumentation("License"), Equals, true) - c.Assert(IsDocumentation("CONTRIBUTING.bar"), Equals, true) - c.Assert(IsDocumentation("/CHANGES"), Equals, true) - c.Assert(IsDocumentation("INSTALL"), Equals, true) } func (s *TSuite) TestIsConfiguration(c *C) {