#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum LintProfile {
#[default]
Standard,
Coursera,
DevContainer,
}
impl std::str::FromStr for LintProfile {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_lowercase().as_str() {
"standard" | "default" => Ok(LintProfile::Standard),
"coursera" | "coursera-labs" => Ok(LintProfile::Coursera),
"devcontainer" | "dev-container" => Ok(LintProfile::DevContainer),
_ => Err(format!(
"Unknown profile: {}. Valid profiles: standard, coursera, devcontainer",
s
)),
}
}
}
impl std::fmt::Display for LintProfile {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
LintProfile::Standard => write!(f, "standard"),
LintProfile::Coursera => write!(f, "coursera"),
LintProfile::DevContainer => write!(f, "devcontainer"),
}
}
}
pub fn lint_dockerfile(source: &str) -> LintResult {
lint_dockerfile_with_profile(source, LintProfile::Standard)
}
pub fn lint_dockerfile_with_profile(source: &str, profile: LintProfile) -> LintResult {
let mut result = LintResult::new();
result.merge(docker001::check(source)); result.merge(docker002::check(source)); result.merge(docker003::check(source)); result.merge(docker004::check(source)); result.merge(docker005::check(source)); result.merge(docker006::check(source));
match profile {
LintProfile::Standard => {
}
LintProfile::Coursera => {
result.merge(coursera::lint_dockerfile_coursera(source));
}
LintProfile::DevContainer => {
}
}
result
}
pub fn lint_makefile(source: &str) -> LintResult {
let mut result = LintResult::new();
use crate::linter::make_preprocess::preprocess_for_linting;
let preprocessed = preprocess_for_linting(source);
result.merge(make001::check(source));
result.merge(make002::check(source));
result.merge(make003::check(source));
result.merge(make004::check(source));
result.merge(make005::check(source));
result.merge(make006::check(source));
result.merge(make007::check(source));
result.merge(make008::check(source)); result.merge(make009::check(source));
result.merge(make010::check(source));
result.merge(make011::check(source));
result.merge(make012::check(source));
result.merge(make013::check(source));
result.merge(make014::check(source));
result.merge(make015::check(source));
result.merge(make016::check(source));
result.merge(make017::check(source));
result.merge(make018::check(source));
result.merge(make019::check(source));
result.merge(make020::check(source));
result.merge(sc2133::check(&preprocessed));
result.merge(sc2168::check(&preprocessed));
result.merge(sc2299::check(&preprocessed));
result
}
#[cfg(test)]
#[path = "docker003_tests.rs"]
mod docker003_tests;
#[cfg(test)]
#[path = "docker004_tests.rs"]
mod docker004_tests;
#[cfg(test)]
#[path = "mod_tests_lint_profile.rs"]
mod tests_extracted;