diff --git a/cli/slinguist/main.go b/cli/slinguist/main.go index b6c475d..019621e 100644 --- a/cli/slinguist/main.go +++ b/cli/slinguist/main.go @@ -48,7 +48,7 @@ func main() { return nil } - l := slinguist.GetLanguage(path, content) + l := slinguist.GetLanguage(filepath.Base(path), content) r, err := filepath.Rel(root, path) if err != nil { diff --git a/common.go b/common.go index 6c00e7e..8b15640 100644 --- a/common.go +++ b/common.go @@ -36,6 +36,10 @@ func GetLanguageExtensions(language string) []string { // GetLanguage return the Language for a given filename and file content. func GetLanguage(filename string, content []byte) string { + if lang, safe := GetLanguageByFilename(filename); safe { + return lang + } + if lang, safe := GetLanguageByShebang(content); safe { return lang } diff --git a/filename_test.go b/filename_test.go new file mode 100644 index 0000000..239e4e3 --- /dev/null +++ b/filename_test.go @@ -0,0 +1,37 @@ +package slinguist + +import . "gopkg.in/check.v1" + +func (s *TSuite) TestGetLanguageByFilename(c *C) { + lang, safe := GetLanguageByFilename(`unknown.interpreter`) + c.Assert(lang, Equals, OtherLanguage) + c.Assert(safe, Equals, false) + + lang, safe = GetLanguageByFilename(`.bashrc`) + c.Assert(lang, Equals, "Shell") + c.Assert(safe, Equals, true) + + lang, safe = GetLanguageByFilename(`Dockerfile`) + c.Assert(lang, Equals, "Dockerfile") + c.Assert(safe, Equals, true) + + lang, safe = GetLanguageByFilename(`Makefile.frag`) + c.Assert(lang, Equals, "Makefile") + c.Assert(safe, Equals, true) + + lang, safe = GetLanguageByFilename(`makefile`) + c.Assert(lang, Equals, "Makefile") + c.Assert(safe, Equals, true) + + lang, safe = GetLanguageByFilename(`Vagrantfile`) + c.Assert(lang, Equals, "Ruby") + c.Assert(safe, Equals, true) + + lang, safe = GetLanguageByFilename(`_vimrc`) + c.Assert(lang, Equals, "Vim script") + c.Assert(safe, Equals, true) + + lang, safe = GetLanguageByFilename(`pom.xml`) + c.Assert(lang, Equals, "Maven POM") + c.Assert(safe, Equals, true) +}