Skip to content

Commit

Permalink
Use already created lineComments slice instead of splitting it every …
Browse files Browse the repository at this point in the history
…time
  • Loading branch information
n10v committed May 28, 2017
1 parent ad027a3 commit 6f57424
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 142 deletions.
6 changes: 2 additions & 4 deletions file.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,12 @@ func analyzeFile(filename string, language *Language) *ClocFile {
continue
}

if language.lineComment != "" {
singleComments := strings.Split(language.lineComment, ",")
if len(language.lineComments) > 0 {
isSingleComment := false
if isFirstLine {
line = trimBOM(line)
isFirstLine = false
}
for _, singleComment := range singleComments {
for _, singleComment := range language.lineComments {
if strings.HasPrefix(line, singleComment) {
clocFile.Comments++
isSingleComment = true
Expand Down
4 changes: 2 additions & 2 deletions file_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class A:
pass
`))

language := NewLanguage("Python", "#", "\"\"\"", "\"\"\"")
language := NewLanguage("Python", []string{"#"}, "\"\"\"", "\"\"\"")
clocFile := analyzeFile(tmpfile.Name(), language)
tmpfile.Close()

Expand Down Expand Up @@ -56,7 +56,7 @@ class A:
pass
`))

language := NewLanguage("Python", "#", "\"\"\"", "\"\"\"")
language := NewLanguage("Python", []string{"#"}, "\"\"\"", "\"\"\"")
clocFile := analyzeFile(tmpfile.Name(), language)
tmpfile.Close()

Expand Down
264 changes: 131 additions & 133 deletions language.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (

type Language struct {
name string
lineComment string
lineComments []string
multiLine string
multiLineEnd string
files []string
Expand Down Expand Up @@ -329,10 +329,10 @@ func getFileType(path string) (ext string, ok bool) {
return ext, ok
}

func NewLanguage(name, lineComment, multiLine, multiLineEnd string) *Language {
func NewLanguage(name string, lineComments []string, multiLine, multiLineEnd string) *Language {
return &Language{
name: name,
lineComment: lineComment,
lineComments: lineComments,
multiLine: multiLine,
multiLineEnd: multiLineEnd,
files: []string{},
Expand All @@ -359,9 +359,9 @@ func lang2exts(lang string) (exts string) {
return strings.Join(es, ", ")
}

func PrintDefinitionLanguages() {
func PrintDefinedLanguages() {
printLangs := []string{}
for _, lang := range GetDefinitionLanguages() {
for _, lang := range GetDefinedLanguages() {
printLangs = append(printLangs, lang.name)
}
sort.Strings(printLangs)
Expand All @@ -370,134 +370,132 @@ func PrintDefinitionLanguages() {
}
}

func GetDefinitionLanguages() map[string]*Language {
// define languages

func GetDefinedLanguages() map[string]*Language {
return map[string]*Language{
"ActionScript": NewLanguage("ActionScript", "//", "/*", "*/"),
"Ada": NewLanguage("Ada", "--", "", ""),
"Ant": NewLanguage("Ant", "<!--", "<!--", "-->"),
"Assembly": NewLanguage("Assembly", "//,;,#,@,|,!", "/*", "*/"),
"Awk": NewLanguage("Awk", "#", "", ""),
"Batch": NewLanguage("Batch", "REM,rem", "", ""),
"BASH": NewLanguage("BASH", "#", "", ""),
"C": NewLanguage("C", "//", "/*", "*/"),
"C Header": NewLanguage("C Header", "//", "/*", "*/"),
"C Shell": NewLanguage("C Shell", "#", "", ""),
"Cap'n Proto": NewLanguage("Cap'n Proto", "#", "", ""),
"Carp": NewLanguage("Carp", ";", "", ""),
"C#": NewLanguage("C#", "//", "/*", "*/"),
"Chapel": NewLanguage("Chapel", "//", "/*", "*/"),
"Clojure": NewLanguage("Clojure", ",#,#_", "", ""),
"COBOL": NewLanguage("COBOL", "*,/", "", ""),
"CoffeeScript": NewLanguage("CoffeeScript", "#", "###", "###"),
"Coq": NewLanguage("Coq", "(*", "(*", "*)"),
"ColdFusion": NewLanguage("ColdFusion", "", "<!---", "--->"),
"ColdFusion CFScript": NewLanguage("ColdFusion CFScript", "//", "/*", "*/"),
"CMake": NewLanguage("CMake", "#", "", ""),
"C++": NewLanguage("C++", "//", "/*", "*/"),
"C++ Header": NewLanguage("C++ Header", "//", "/*", "*/"),
"Crystal": NewLanguage("Crystal", "#", "", ""),
"CSS": NewLanguage("CSS", "//", "/*", "*/"),
"Cython": NewLanguage("Cython", "#", "\"\"\"", "\"\"\""),
"CUDA": NewLanguage("CUDA", "//", "/*", "*/"),
"D": NewLanguage("D", "//", "/*", "*/"),
"Dart": NewLanguage("Dart", "//", "/*", "*/"),
"DTrace": NewLanguage("DTrace", "", "/*", "*/"),
"Device Tree": NewLanguage("Device Tree", "//", "/*", "*/"),
"Elm": NewLanguage("Elm", "--", "{-", "-}"),
"Elixir": NewLanguage("Elixir", "#", "", ""),
"Erlang": NewLanguage("Erlang", "%", "", ""),
"Expect": NewLanguage("Expect", "#", "", ""),
"Frege": NewLanguage("Frege", "--", "{-", "-}"),
"F#": NewLanguage("F#", "(*", "(*", "*)"),
"Lean": NewLanguage("Lean", "--", "/-", "-/"),
"Logtalk": NewLanguage("Logtalk", "%", "", ""),
"Lua": NewLanguage("Lua", "--", "--[[", "]]"),
"LISP": NewLanguage("LISP", ";;", "#|", "|#"),
"LiveScript": NewLanguage("LiveScript", "#", "/*", "*/"),
"FORTRAN Legacy": NewLanguage("FORTRAN Legacy", "c,C,!,*", "", ""),
"FORTRAN Modern": NewLanguage("FORTRAN Modern", "!", "", ""),
"GLSL": NewLanguage("GLSL", "//", "/*", "*/"),
"Go": NewLanguage("Go", "//", "/*", "*/"),
"Groovy": NewLanguage("Groovy", "//", "/*", "*/"),
"Haskell": NewLanguage("Haskell", "--", "{-", "-}"),
"Haxe": NewLanguage("Haxe", "//", "/*", "*/"),
"HLSL": NewLanguage("HLSL", "//", "/*", "*/"),
"HTML": NewLanguage("HTML", "//,<!--", "<!--", "-->"),
"Idris": NewLanguage("Idris", "--", "{-", "-}"),
"Io": NewLanguage("Io", "//,#", "/*", "*/"),
"SKILL": NewLanguage("SKILL", ";", "/*", "*/"),
"JAI": NewLanguage("JAI", "//", "/*", "*/"),
"Java": NewLanguage("Java", "//", "/*", "*/"),
"JavaScript": NewLanguage("JavaScript", "//", "/*", "*/"),
"Julia": NewLanguage("Julia", "#", "#:=", ":=#"),
"Jupyter Notebook": NewLanguage("Jupyter Notebook", "#", "", ""),
"JSON": NewLanguage("JSON", "", "", ""),
"JSX": NewLanguage("JSX", "//", "/*", "*/"),
"Kotlin": NewLanguage("Kotlin", "//", "/*", "*/"),
"LD Script": NewLanguage("LD Script", "//", "/*", "*/"),
"LESS": NewLanguage("LESS", "//", "/*", "*/"),
"Objective-C": NewLanguage("Objective-C", "//", "/*", "*/"),
"Markdown": NewLanguage("Markdown", "", "", ""),
"Nix": NewLanguage("Nix", "#", "/*", "*/"),
"NSIS": NewLanguage("NSIS", "#,;", "/*", "*/"),
"Nu": NewLanguage("Nu", ";,#", "", ""),
"OCaml": NewLanguage("OCaml", "", "(*", "*)"),
"Objective-C++": NewLanguage("Objective-C++", "//", "/*", "*/"),
"Makefile": NewLanguage("Makefile", "#", "", ""),
"MATLAB": NewLanguage("MATLAB", "%", "%{", "}%"),
"Mercury": NewLanguage("Mercury", "%", "/*", "*/"),
"Maven": NewLanguage("Maven", "<!--", "<!--", "-->"),
"Mustache": NewLanguage("Mustache", "", "{{!", "}}"),
"M4": NewLanguage("M4", "#", "", ""),
"Nim": NewLanguage("Nim", "#", "#[", "]#"),
"lex": NewLanguage("lex", "", "/*", "*/"),
"PHP": NewLanguage("PHP", "#,//", "/*", "*/"),
"Pascal": NewLanguage("Pascal", "//,(*", "{", ")"),
"Perl": NewLanguage("Perl", "#", ":=", ":=cut"),
"Plain Text": NewLanguage("Plain Text", "", "", ""),
"Plan9 Shell": NewLanguage("Plan9 Shell", "#", "", ""),
"Pony": NewLanguage("Pony", "//", "/*", "*/"),
"PowerShell": NewLanguage("PowerShell", "#", "<#", "#>"),
"Polly": NewLanguage("Polly", "<!--", "<!--", "-->"),
"Protocol Buffers": NewLanguage("Protocol Buffers", "//", "", ""),
"Python": NewLanguage("Python", "#", "\"\"\"", "\"\"\""),
"R": NewLanguage("R", "#", "", ""),
"Rebol": NewLanguage("Rebol", ";", "", ""),
"Red": NewLanguage("Red", ";", "", ""),
"RMarkdown": NewLanguage("RMarkdown", "", "", ""),
"Racket": NewLanguage("Racket", ";", "#|", "|#"),
"Ruby": NewLanguage("Ruby", "#", ":=begin", ":=end"),
"Ruby HTML": NewLanguage("Ruby HTML", "<!--", "<!--", "-->"),
"Rust": NewLanguage("Rust", "//,///,//!", "/*", "*/"),
"Scala": NewLanguage("Scala", "//", "/*", "*/"),
"Sass": NewLanguage("Sass", "//", "/*", "*/"),
"Scheme": NewLanguage("Scheme", ";", "#|", "|#"),
"sed": NewLanguage("sed", "#", "", ""),
"Stan": NewLanguage("Stan", "//", "/*", "*/"),
"Bourne Shell": NewLanguage("Bourne Shell", "#", "", ""),
"Standard ML": NewLanguage("Standard ML", "", "(*", "*)"),
"SQL": NewLanguage("SQL", "--", "/*", "*/"),
"Swift": NewLanguage("Swift", "//", "/*", "*/"),
"Terra": NewLanguage("Terra", "--", "--[[", "]]"),
"TeX": NewLanguage("TeX", "%", "", ""),
"Isabelle": NewLanguage("Isabelle", "", "(*", "*)"),
"TLA": NewLanguage("TLA", "/*", "(*", "*)"),
"Tcl/Tk": NewLanguage("Tcl/Tk", "#", "", ""),
"TOML": NewLanguage("TOML", "#", "", ""),
"TypeScript": NewLanguage("TypeScript", "//", "/*", "*/"),
"Unity-Prefab": NewLanguage("Unity-Prefab", "", "", ""),
"MSBuild script": NewLanguage("MSBuild script", "<!--", "<!--", "-->"),
"Verilog": NewLanguage("Verilog", "//", "/*", "*/"),
"VimL": NewLanguage("VimL", "\"", "", ""),
"WiX": NewLanguage("WiX", "<!--", "<!--", "-->"),
"XML": NewLanguage("XML", "<!--", "<!--", "-->"),
"XSLT": NewLanguage("XSLT", "<!--", "<!--", "-->"),
"XSD": NewLanguage("XSD", "<!--", "<!--", "-->"),
"YAML": NewLanguage("YAML", "#", "", ""),
"Yacc": NewLanguage("Yacc", "//", "/*", "*/"),
"Zephir": NewLanguage("Zephir", "//", "/*", "*/"),
"Zsh": NewLanguage("Zsh", "#", "", ""),
"ActionScript": NewLanguage("ActionScript", []string{"//"}, "/*", "*/"),
"Ada": NewLanguage("Ada", []string{"--"}, "", ""),
"Ant": NewLanguage("Ant", []string{"<!--"}, "<!--", "-->"),
"Assembly": NewLanguage("Assembly", []string{"//", ";", "#", "@", "|", "!"}, "/*", "*/"),
"Awk": NewLanguage("Awk", []string{"#"}, "", ""),
"Batch": NewLanguage("Batch", []string{"REM", "rem"}, "", ""),
"BASH": NewLanguage("BASH", []string{"#"}, "", ""),
"C": NewLanguage("C", []string{"//"}, "/*", "*/"),
"C Header": NewLanguage("C Header", []string{"//"}, "/*", "*/"),
"C Shell": NewLanguage("C Shell", []string{"#"}, "", ""),
"Cap'n Proto": NewLanguage("Cap'n Proto", []string{"#"}, "", ""),
"Carp": NewLanguage("Carp", []string{";"}, "", ""),
"C#": NewLanguage("C#", []string{"//"}, "/*", "*/"),
"Chapel": NewLanguage("Chapel", []string{"//"}, "/*", "*/"),
"Clojure": NewLanguage("Clojure", []string{"#", "#_"}, "", ""),
"COBOL": NewLanguage("COBOL", []string{"*", "/"}, "", ""),
"CoffeeScript": NewLanguage("CoffeeScript", []string{"#"}, "###", "###"),
"Coq": NewLanguage("Coq", []string{"(*"}, "(*", "*)"),
"ColdFusion": NewLanguage("ColdFusion", []string{}, "<!---", "--->"),
"ColdFusion CFScript": NewLanguage("ColdFusion CFScript", []string{"//"}, "/*", "*/"),
"CMake": NewLanguage("CMake", []string{"#"}, "", ""),
"C++": NewLanguage("C++", []string{"//"}, "/*", "*/"),
"C++ Header": NewLanguage("C++ Header", []string{"//"}, "/*", "*/"),
"Crystal": NewLanguage("Crystal", []string{"#"}, "", ""),
"CSS": NewLanguage("CSS", []string{"//"}, "/*", "*/"),
"Cython": NewLanguage("Cython", []string{"#"}, "\"\"\"", "\"\"\""),
"CUDA": NewLanguage("CUDA", []string{"//"}, "/*", "*/"),
"D": NewLanguage("D", []string{"//"}, "/*", "*/"),
"Dart": NewLanguage("Dart", []string{"//"}, "/*", "*/"),
"DTrace": NewLanguage("DTrace", []string{}, "/*", "*/"),
"Device Tree": NewLanguage("Device Tree", []string{"//"}, "/*", "*/"),
"Elm": NewLanguage("Elm", []string{"--"}, "{-", "-}"),
"Elixir": NewLanguage("Elixir", []string{"#"}, "", ""),
"Erlang": NewLanguage("Erlang", []string{"%"}, "", ""),
"Expect": NewLanguage("Expect", []string{"#"}, "", ""),
"Frege": NewLanguage("Frege", []string{"--"}, "{-", "-}"),
"F#": NewLanguage("F#", []string{"(*"}, "(*", "*)"),
"Lean": NewLanguage("Lean", []string{"--"}, "/-", "-/"),
"Logtalk": NewLanguage("Logtalk", []string{"%"}, "", ""),
"Lua": NewLanguage("Lua", []string{"--"}, "--[[", "]]"),
"LISP": NewLanguage("LISP", []string{";;"}, "#|", "|#"),
"LiveScript": NewLanguage("LiveScript", []string{"#"}, "/*", "*/"),
"FORTRAN Legacy": NewLanguage("FORTRAN Legacy", []string{"c", "C", "!", "*"}, "", ""),
"FORTRAN Modern": NewLanguage("FORTRAN Modern", []string{"!"}, "", ""),
"GLSL": NewLanguage("GLSL", []string{"//"}, "/*", "*/"),
"Go": NewLanguage("Go", []string{"//"}, "/*", "*/"),
"Groovy": NewLanguage("Groovy", []string{"//"}, "/*", "*/"),
"Haskell": NewLanguage("Haskell", []string{"--"}, "{-", "-}"),
"Haxe": NewLanguage("Haxe", []string{"//"}, "/*", "*/"),
"HLSL": NewLanguage("HLSL", []string{"//"}, "/*", "*/"),
"HTML": NewLanguage("HTML", []string{"//", "<!--"}, "<!--", "-->"),
"Idris": NewLanguage("Idris", []string{"--"}, "{-", "-}"),
"Io": NewLanguage("Io", []string{"//", "#"}, "/*", "*/"),
"SKILL": NewLanguage("SKILL", []string{";"}, "/*", "*/"),
"JAI": NewLanguage("JAI", []string{"//"}, "/*", "*/"),
"Java": NewLanguage("Java", []string{"//"}, "/*", "*/"),
"JavaScript": NewLanguage("JavaScript", []string{"//"}, "/*", "*/"),
"Julia": NewLanguage("Julia", []string{"#"}, "#:=", ":=#"),
"Jupyter Notebook": NewLanguage("Jupyter Notebook", []string{"#"}, "", ""),
"JSON": NewLanguage("JSON", []string{}, "", ""),
"JSX": NewLanguage("JSX", []string{"//"}, "/*", "*/"),
"Kotlin": NewLanguage("Kotlin", []string{"//"}, "/*", "*/"),
"LD Script": NewLanguage("LD Script", []string{"//"}, "/*", "*/"),
"LESS": NewLanguage("LESS", []string{"//"}, "/*", "*/"),
"Objective-C": NewLanguage("Objective-C", []string{"//"}, "/*", "*/"),
"Markdown": NewLanguage("Markdown", []string{}, "", ""),
"Nix": NewLanguage("Nix", []string{"#"}, "/*", "*/"),
"NSIS": NewLanguage("NSIS", []string{"#", ";"}, "/*", "*/"),
"Nu": NewLanguage("Nu", []string{";", "#"}, "", ""),
"OCaml": NewLanguage("OCaml", []string{}, "(*", "*)"),
"Objective-C++": NewLanguage("Objective-C++", []string{"//"}, "/*", "*/"),
"Makefile": NewLanguage("Makefile", []string{"#"}, "", ""),
"MATLAB": NewLanguage("MATLAB", []string{"%"}, "%{", "}%"),
"Mercury": NewLanguage("Mercury", []string{"%"}, "/*", "*/"),
"Maven": NewLanguage("Maven", []string{"<!--"}, "<!--", "-->"),
"Mustache": NewLanguage("Mustache", []string{}, "{{!", "}}"),
"M4": NewLanguage("M4", []string{"#"}, "", ""),
"Nim": NewLanguage("Nim", []string{"#"}, "#[", "]#"),
"lex": NewLanguage("lex", []string{}, "/*", "*/"),
"PHP": NewLanguage("PHP", []string{"#", "//"}, "/*", "*/"),
"Pascal": NewLanguage("Pascal", []string{"//"}, "{", ")"),
"Perl": NewLanguage("Perl", []string{"#"}, ":=", ":=cut"),
"Plain Text": NewLanguage("Plain Text", []string{}, "", ""),
"Plan9 Shell": NewLanguage("Plan9 Shell", []string{"#"}, "", ""),
"Pony": NewLanguage("Pony", []string{"//"}, "/*", "*/"),
"PowerShell": NewLanguage("PowerShell", []string{"#"}, "<#", "#>"),
"Polly": NewLanguage("Polly", []string{"<!--"}, "<!--", "-->"),
"Protocol Buffers": NewLanguage("Protocol Buffers", []string{"//"}, "", ""),
"Python": NewLanguage("Python", []string{"#"}, "\"\"\"", "\"\"\""),
"R": NewLanguage("R", []string{"#"}, "", ""),
"Rebol": NewLanguage("Rebol", []string{";"}, "", ""),
"Red": NewLanguage("Red", []string{";"}, "", ""),
"RMarkdown": NewLanguage("RMarkdown", []string{}, "", ""),
"Racket": NewLanguage("Racket", []string{";"}, "#|", "|#"),
"Ruby": NewLanguage("Ruby", []string{"#"}, ":=begin", ":=end"),
"Ruby HTML": NewLanguage("Ruby HTML", []string{"<!--"}, "<!--", "-->"),
"Rust": NewLanguage("Rust", []string{"//", "///", "//!"}, "/*", "*/"),
"Scala": NewLanguage("Scala", []string{"//"}, "/*", "*/"),
"Sass": NewLanguage("Sass", []string{"//"}, "/*", "*/"),
"Scheme": NewLanguage("Scheme", []string{";"}, "#|", "|#"),
"sed": NewLanguage("sed", []string{"#"}, "", ""),
"Stan": NewLanguage("Stan", []string{"//"}, "/*", "*/"),
"Bourne Shell": NewLanguage("Bourne Shell", []string{"#"}, "", ""),
"Standard ML": NewLanguage("Standard ML", []string{}, "(*", "*)"),
"SQL": NewLanguage("SQL", []string{"--"}, "/*", "*/"),
"Swift": NewLanguage("Swift", []string{"//"}, "/*", "*/"),
"Terra": NewLanguage("Terra", []string{"--"}, "--[[", "]]"),
"TeX": NewLanguage("TeX", []string{"%"}, "", ""),
"Isabelle": NewLanguage("Isabelle", []string{}, "(*", "*)"),
"TLA": NewLanguage("TLA", []string{"/*"}, "(*", "*)"),
"Tcl/Tk": NewLanguage("Tcl/Tk", []string{"#"}, "", ""),
"TOML": NewLanguage("TOML", []string{"#"}, "", ""),
"TypeScript": NewLanguage("TypeScript", []string{"//"}, "/*", "*/"),
"Unity-Prefab": NewLanguage("Unity-Prefab", []string{}, "", ""),
"MSBuild script": NewLanguage("MSBuild script", []string{"<!--"}, "<!--", "-->"),
"Verilog": NewLanguage("Verilog", []string{"//"}, "/*", "*/"),
"VimL": NewLanguage("VimL", []string{`"`}, "", ""),
"WiX": NewLanguage("WiX", []string{"<!--"}, "<!--", "-->"),
"XML": NewLanguage("XML", []string{"<!--"}, "<!--", "-->"),
"XSLT": NewLanguage("XSLT", []string{"<!--"}, "<!--", "-->"),
"XSD": NewLanguage("XSD", []string{"<!--"}, "<!--", "-->"),
"YAML": NewLanguage("YAML", []string{"#"}, "", ""),
"Yacc": NewLanguage("Yacc", []string{"//"}, "/*", "*/"),
"Zephir": NewLanguage("Zephir", []string{"//"}, "/*", "*/"),
"Zsh": NewLanguage("Zsh", []string{"#"}, "", ""),
}
}
Loading

0 comments on commit 6f57424

Please sign in to comment.