]> git.lizzy.rs Git - rust.git/blob - src/tools/jsondoclint/src/main.rs
jsondocck: Better errors
[rust.git] / src / tools / jsondoclint / src / main.rs
1 use std::env;
2
3 use anyhow::{anyhow, bail, Result};
4 use fs_err as fs;
5 use rustdoc_json_types::{Crate, Id, FORMAT_VERSION};
6
7 pub(crate) mod item_kind;
8 mod validator;
9
10 #[derive(Debug)]
11 struct Error {
12     kind: ErrorKind,
13     id: Id,
14 }
15
16 #[derive(Debug)]
17 enum ErrorKind {
18     NotFound,
19     Custom(String),
20 }
21
22 fn main() -> Result<()> {
23     let path = env::args().nth(1).ok_or_else(|| anyhow!("no path given"))?;
24     let contents = fs::read_to_string(path)?;
25     let krate: Crate = serde_json::from_str(&contents)?;
26     assert_eq!(krate.format_version, FORMAT_VERSION);
27
28     let mut validator = validator::Validator::new(&krate);
29     validator.check_crate();
30
31     if !validator.errs.is_empty() {
32         for err in validator.errs {
33             match err.kind {
34                 ErrorKind::NotFound => eprintln!("{}: Not Found", err.id.0),
35                 ErrorKind::Custom(msg) => eprintln!("{}: {}", err.id.0, msg),
36             }
37         }
38         bail!("Errors validating json");
39     }
40
41     Ok(())
42 }