testlint_sdk/common/
mod.rs

1//! Common types shared across the testlint-sdk
2
3/// Supported programming languages for profiling and coverage
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum Language {
6    Python,
7    Java,
8    JavaScript,
9    TypeScript,
10    Go,
11    Rust,
12    CSharp,
13    Ruby,
14    Php,
15    Cpp,
16}
17
18impl std::fmt::Display for Language {
19    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
20        match self {
21            Language::Python => write!(f, "Python"),
22            Language::Java => write!(f, "Java"),
23            Language::JavaScript => write!(f, "JavaScript"),
24            Language::TypeScript => write!(f, "TypeScript"),
25            Language::Go => write!(f, "Go"),
26            Language::Rust => write!(f, "Rust"),
27            Language::CSharp => write!(f, "C#"),
28            Language::Ruby => write!(f, "Ruby"),
29            Language::Php => write!(f, "PHP"),
30            Language::Cpp => write!(f, "C++"),
31        }
32    }
33}
34
35impl Language {
36    /// Returns the canonical name for the language
37    pub fn name(&self) -> &'static str {
38        match self {
39            Language::Python => "python",
40            Language::Java => "java",
41            Language::JavaScript => "javascript",
42            Language::TypeScript => "typescript",
43            Language::Go => "go",
44            Language::Rust => "rust",
45            Language::CSharp => "csharp",
46            Language::Ruby => "ruby",
47            Language::Php => "php",
48            Language::Cpp => "cpp",
49        }
50    }
51
52    /// Parses a language from a string identifier
53    #[allow(clippy::should_implement_trait)]
54    pub fn from_str(s: &str) -> Option<Self> {
55        match s.to_lowercase().as_str() {
56            "python" | "py" => Some(Language::Python),
57            "java" | "jvm" | "kotlin" | "kt" | "scala" => Some(Language::Java),
58            "javascript" | "js" | "node" => Some(Language::JavaScript),
59            "typescript" | "ts" => Some(Language::TypeScript),
60            "go" | "golang" => Some(Language::Go),
61            "rust" | "rs" | "cargo" => Some(Language::Rust),
62            "csharp" | "c#" | "cs" | "dotnet" => Some(Language::CSharp),
63            "ruby" | "rb" => Some(Language::Ruby),
64            "php" => Some(Language::Php),
65            "cpp" | "c++" | "cxx" => Some(Language::Cpp),
66            _ => None,
67        }
68    }
69}