github.com/anchore/syft@v1.38.2/syft/pkg/language.go (about) 1 package pkg 2 3 import ( 4 "strings" 5 6 "github.com/anchore/packageurl-go" 7 ) 8 9 // Language represents a single programming language. 10 type Language string 11 12 const ( 13 // the full set of supported programming languages 14 UnknownLanguage Language = "" 15 CPP Language = "c++" 16 Dart Language = "dart" 17 Dotnet Language = "dotnet" 18 Elixir Language = "elixir" 19 Erlang Language = "erlang" 20 Go Language = "go" 21 Haskell Language = "haskell" 22 Java Language = "java" 23 JavaScript Language = "javascript" 24 Lua Language = "lua" 25 OCaml Language = "ocaml" 26 PHP Language = "php" 27 Python Language = "python" 28 R Language = "R" 29 Ruby Language = "ruby" 30 Rust Language = "rust" 31 Swift Language = "swift" 32 Swipl Language = "swipl" 33 ) 34 35 // AllLanguages is a set of all programming languages detected by syft. 36 var AllLanguages = []Language{ 37 CPP, 38 Dart, 39 Dotnet, 40 Elixir, 41 Erlang, 42 Go, 43 Haskell, 44 Java, 45 JavaScript, 46 Lua, 47 OCaml, 48 PHP, 49 Python, 50 R, 51 Ruby, 52 Rust, 53 Swift, 54 Swipl, 55 } 56 57 // String returns the string representation of the language. 58 func (l Language) String() string { 59 return string(l) 60 } 61 62 func LanguageFromPURL(p string) Language { 63 purl, err := packageurl.FromString(p) 64 if err != nil { 65 return UnknownLanguage 66 } 67 68 return LanguageByName(purl.Type) 69 } 70 71 func LanguageByName(name string) Language { 72 switch strings.ToLower(name) { 73 case packageurl.TypeMaven, string(purlGradlePkgType), string(JavaPkg), string(Java): 74 return Java 75 case packageurl.TypeComposer, string(PhpComposerPkg), string(PHP): 76 return PHP 77 case packageurl.TypeGolang, string(GoModulePkg), string(Go): 78 return Go 79 case packageurl.TypeNPM, string(JavaScript), "nodejs", "node.js": 80 return JavaScript 81 case packageurl.TypeLuaRocks, string(Lua): 82 return Lua 83 case packageurl.TypePyPi, string(Python): 84 return Python 85 case packageurl.TypeGem, string(Ruby): 86 return Ruby 87 case purlCargoPkgType, string(RustPkg), string(Rust): 88 return Rust 89 case packageurl.TypePub, string(DartPubPkg), string(Dart): 90 return Dart 91 case string(Dotnet), ".net", packageurl.TypeNuget: 92 return Dotnet 93 case packageurl.TypeCocoapods, packageurl.TypeSwift, string(CocoapodsPkg): 94 return Swift 95 case "swipl", string(SwiplPackPkg): 96 return Swipl 97 case "ocaml", string(OpamPkg): 98 return OCaml 99 case packageurl.TypeConan, string(CPP): 100 return CPP 101 case packageurl.TypeHackage, string(Haskell): 102 return Haskell 103 case packageurl.TypeHex, packageurl.TypeOTP, "beam", "elixir", "erlang": 104 // should we support returning multiple languages to support this case? 105 // answer: no. We want this to definitively answer "which language does this package represent?" 106 // which might not be possible in all cases. See for more context: https://github.com/package-url/purl-spec/pull/178 107 return UnknownLanguage 108 case packageurl.TypeCran, "r": 109 return R 110 default: 111 return UnknownLanguage 112 } 113 }