-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlanguage.go
More file actions
114 lines (108 loc) · 3.63 KB
/
Copy pathlanguage.go
File metadata and controls
114 lines (108 loc) · 3.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package sdk
import "strings"
// Language identifies the programming language used by a package or analyzed
// by a code analyzer. Languages are coarse-grained and ecosystem-agnostic;
// one PackageManager can carry multiple languages (e.g. Maven covers Java,
// Kotlin, Scala, and Groovy).
type Language string
const (
LanguageUnknown Language = ""
LanguageGo Language = "go"
LanguageJavaScript Language = "javascript"
LanguageTypeScript Language = "typescript"
LanguagePython Language = "python"
LanguageJava Language = "java"
LanguageKotlin Language = "kotlin"
LanguageScala Language = "scala"
LanguageGroovy Language = "groovy"
LanguageRuby Language = "ruby"
LanguagePHP Language = "php"
LanguageRust Language = "rust"
LanguageCSharp Language = "csharp"
LanguageFSharp Language = "fsharp"
LanguageVB Language = "vb"
LanguageSwift Language = "swift"
LanguageObjC Language = "objective-c"
LanguageDart Language = "dart"
LanguageElixir Language = "elixir"
LanguageErlang Language = "erlang"
LanguageHaskell Language = "haskell"
LanguageOCaml Language = "ocaml"
LanguageLua Language = "lua"
LanguageR Language = "r"
LanguageC Language = "c"
LanguageCPP Language = "cpp"
)
var languageAliases = map[string]Language{
"": LanguageUnknown,
"go": LanguageGo,
"golang": LanguageGo,
"js": LanguageJavaScript,
"javascript": LanguageJavaScript,
"node": LanguageJavaScript,
"nodejs": LanguageJavaScript,
"ts": LanguageTypeScript,
"typescript": LanguageTypeScript,
"py": LanguagePython,
"python": LanguagePython,
"python3": LanguagePython,
"java": LanguageJava,
"kotlin": LanguageKotlin,
"kt": LanguageKotlin,
"scala": LanguageScala,
"groovy": LanguageGroovy,
"ruby": LanguageRuby,
"rb": LanguageRuby,
"php": LanguagePHP,
"rust": LanguageRust,
"rs": LanguageRust,
"csharp": LanguageCSharp,
"c#": LanguageCSharp,
"cs": LanguageCSharp,
"fsharp": LanguageFSharp,
"f#": LanguageFSharp,
"vb": LanguageVB,
"vbnet": LanguageVB,
"vb.net": LanguageVB,
"swift": LanguageSwift,
"objective-c": LanguageObjC,
"objectivec": LanguageObjC,
"objc": LanguageObjC,
"dart": LanguageDart,
"elixir": LanguageElixir,
"erlang": LanguageErlang,
"haskell": LanguageHaskell,
"hs": LanguageHaskell,
"ocaml": LanguageOCaml,
"lua": LanguageLua,
"r": LanguageR,
"c": LanguageC,
"cpp": LanguageCPP,
"c++": LanguageCPP,
}
// ParseLanguage normalizes a string into a Language. Returns LanguageUnknown
// for unrecognized values; callers that need strict validation should compare
// the result against LanguageUnknown for non-empty input.
func ParseLanguage(value string) Language {
normalized := strings.ToLower(strings.TrimSpace(value))
if l, ok := languageAliases[normalized]; ok {
return l
}
return LanguageUnknown
}
// LanguageFromPackage returns the most specific language for a package. It
// prefers the package's own Language field, then falls back to the primary
// language declared by the package's PackageManager (if recognizable), and
// finally returns LanguageUnknown.
func LanguageFromPackage(p Package) Language {
if p.Language != LanguageUnknown {
return p.Language
}
if p.PackageManager != PackageManagerUnknown {
langs := p.PackageManager.Languages()
if len(langs) > 0 {
return langs[0]
}
}
return LanguageUnknown
}