@@ -15,6 +15,15 @@ struct DiagnosticJson {
15 message: String,
15 message: String,
18+fn severity_label(s: htmlang::parser::Severity) -> &'static str {
20+ htmlang::parser::Severity::Error => "error",
21+ htmlang::parser::Severity::Warning => "warning",
22+ htmlang::parser::Severity::Info => "info",
23+ htmlang::parser::Severity::Help => "help",
18#[derive(Default)]
27#[derive(Default)]
19struct CompileConfig<'a> {
28struct CompileConfig<'a> {
20 dev: bool,
29 dev: bool,
@@ -56,28 +65,17 @@ fn compile(input_path: &str, cfg: &CompileConfig) -> (bool, Vec<PathBuf>) {
56 if let Some(collector) = cfg.json_collector {
65 if let Some(collector) = cfg.json_collector {
57 let mut collected = collector.lock().unwrap();
66 let mut collected = collector.lock().unwrap();
58 for d in &result.diagnostics {
67 for d in &result.diagnostics {
59− let severity = match d.severity {
60− htmlang::parser::Severity::Error => "error",
61− htmlang::parser::Severity::Warning => "warning",
62− htmlang::parser::Severity::Info => "info",
63− htmlang::parser::Severity::Help => "help",
65 collected.push(DiagnosticJson {
68 collected.push(DiagnosticJson {
66 file: input_path.to_string(),
69 file: input_path.to_string(),
67 line: d.line,
70 line: d.line,
68− severity: severity.to_string(),
71+ severity: severity_label(d.severity).to_string(),
69 message: d.message.clone(),
72 message: d.message.clone(),
74 for d in &result.diagnostics {
77 for d in &result.diagnostics {
75− let prefix = match d.severity {
78+ let prefix = severity_label(d.severity);
76− htmlang::parser::Severity::Error => "error",
77− htmlang::parser::Severity::Warning => "warning",
78− htmlang::parser::Severity::Info => "info",
79− htmlang::parser::Severity::Help => "help",
81 if let Some(col) = d.column {
79 if let Some(col) = d.column {
82 eprintln!("{}: line {}:{}: {}", prefix, d.line, col, d.message);
80 eprintln!("{}: line {}:{}: {}", prefix, d.line, col, d.message);
@@ -313,12 +311,7 @@ fn copy_non_hl_recursive(base: &Path, dir: &Path, out_dir: &Path) {
313fn generate_error_overlay(diagnostics: &[htmlang::parser::Diagnostic], file: &str) -> String {
311fn generate_error_overlay(diagnostics: &[htmlang::parser::Diagnostic], file: &str) -> String {
314 let mut errors = String::new();
312 let mut errors = String::new();
315 for d in diagnostics {
313 for d in diagnostics {
316− let prefix = match d.severity {
314+ let prefix = severity_label(d.severity);
317− htmlang::parser::Severity::Error => "error",
318− htmlang::parser::Severity::Warning => "warning",
319− htmlang::parser::Severity::Info => "info",
320− htmlang::parser::Severity::Help => "help",
322 let escaped = d.message
315 let escaped = d.message
323 .replace('&', "&")
316 .replace('&', "&")
324 .replace('<', "<")
317 .replace('<', "<")
@@ -616,12 +609,7 @@ fn lint_file(path: &str) -> Vec<String> {
617 // Report parser diagnostics
610 // Report parser diagnostics
618 for d in &result.diagnostics {
611 for d in &result.diagnostics {
619− let prefix = match d.severity {
612+ let prefix = severity_label(d.severity);
620− htmlang::parser::Severity::Error => "error",
621− htmlang::parser::Severity::Warning => "warning",
622− htmlang::parser::Severity::Info => "info",
623− htmlang::parser::Severity::Help => "help",
625 warnings.push(format!("{}:{}:{}: {}", path, d.line, prefix, d.message));
613 warnings.push(format!("{}:{}:{}: {}", path, d.line, prefix, d.message));
@@ -1818,12 +1806,7 @@ fn main() {
1819 let result = htmlang::parser::parse(&buffer);
1807 let result = htmlang::parser::parse(&buffer);
1820 for d in &result.diagnostics {
1808 for d in &result.diagnostics {
1821− let prefix = match d.severity {
1809+ let prefix = severity_label(d.severity);
1822− htmlang::parser::Severity::Error => "error",
1823− htmlang::parser::Severity::Warning => "warning",
1824− htmlang::parser::Severity::Info => "info",
1825− htmlang::parser::Severity::Help => "help",
1827 eprintln!("{}: line {}: {}", prefix, d.line, d.message);
1810 eprintln!("{}: line {}: {}", prefix, d.line, d.message);
1829 if !result.diagnostics.iter().any(|d| d.severity == htmlang::parser::Severity::Error) {
1812 if !result.diagnostics.iter().any(|d| d.severity == htmlang::parser::Severity::Error) {
@@ -2244,11 +2227,14 @@ fn main() {
2246 // Deploy via gh-pages push
2229 // Deploy via gh-pages push
2230+ let init_ok = matches!(
2247− let status = process::Command::new("git")
2231+ process::Command::new("git")
2248− .args(&["init"])
2232+ .args(&["init"])
2249− .current_dir(&deploy_dir)
2233+ .current_dir(&deploy_dir)
2250− .status();
2234+ .status(),
2251− if status.is_err() || !status.unwrap().success() {
2235+ Ok(s) if s.success()
2252 eprintln!("error: git init failed in deploy directory");
2238 eprintln!("error: git init failed in deploy directory");
2253 process::exit(1);
2239 process::exit(1);
@@ -2260,11 +2246,14 @@ fn main() {
2260 .args(&["add", "."])
2246 .args(&["add", "."])
2261 .current_dir(&deploy_dir)
2247 .current_dir(&deploy_dir)
2262 .status();
2248 .status();
2249+ let commit_ok = matches!(
2263− let status = process::Command::new("git")
2250+ process::Command::new("git")
2264− .args(&["commit", "-m", "deploy"])
2251+ .args(&["commit", "-m", "deploy"])
2265− .current_dir(&deploy_dir)
2252+ .current_dir(&deploy_dir)
2266− .status();
2253+ .status(),
2267− if status.is_err() || !status.unwrap().success() {
2254+ Ok(s) if s.success()
2268 eprintln!("error: git commit failed");
2257 eprintln!("error: git commit failed");
2269 process::exit(1);
2258 process::exit(1);
@@ -2280,11 +2269,14 @@ fn main() {
2280 .current_dir(&deploy_dir)
2269 .current_dir(&deploy_dir)
2281 .status();
2270 .status();
2282 eprintln!("pushing to gh-pages branch at {}...", remote_url);
2271 eprintln!("pushing to gh-pages branch at {}...", remote_url);
2272+ let push_ok = matches!(
2283− let push_status = process::Command::new("git")
2273+ process::Command::new("git")
2284− .args(&["push", "-f", "origin", "gh-pages"])
2274+ .args(&["push", "-f", "origin", "gh-pages"])
2285− .current_dir(&deploy_dir)
2275+ .current_dir(&deploy_dir)
2286− .status();
2276+ .status(),
2287− if push_status.is_err() || !push_status.unwrap().success() {
2277+ Ok(s) if s.success()
2288 eprintln!("error: push failed — run 'git push -f origin gh-pages' manually from {}", deploy_dir.display());
2280 eprintln!("error: push failed — run 'git push -f origin gh-pages' manually from {}", deploy_dir.display());
2289 process::exit(1);
2281 process::exit(1);
@@ -2825,12 +2817,7 @@ compile();
2825 let base = Path::new(file).parent();
2817 let base = Path::new(file).parent();
2826 let result = htmlang::parser::parse_with_base(&input, base);
2818 let result = htmlang::parser::parse_with_base(&input, base);
2827 for d in &result.diagnostics {
2819 for d in &result.diagnostics {
2828− let prefix = match d.severity {
2820+ let prefix = severity_label(d.severity);
2829− htmlang::parser::Severity::Error => "error",
2830− htmlang::parser::Severity::Warning => "warning",
2831− htmlang::parser::Severity::Info => "info",
2832− htmlang::parser::Severity::Help => "help",
2834 eprintln!("{}: line {}: {}", prefix, d.line, d.message);
2821 eprintln!("{}: line {}: {}", prefix, d.line, d.message);
2836 if result.diagnostics.iter().any(|d| d.severity == htmlang::parser::Severity::Error) {
2823 if result.diagnostics.iter().any(|d| d.severity == htmlang::parser::Severity::Error) {