11use std:: io:: { BufWriter , Write } ;
2+ use std:: path:: { Path , PathBuf } ;
23
34use anyhow:: { bail, Result } ;
45use clap:: Parser ;
@@ -25,7 +26,7 @@ enum ErrorKind {
2526
2627#[ derive( Debug , Serialize ) ]
2728struct JsonOutput {
28- path : String ,
29+ path : PathBuf ,
2930 errors : Vec < Error > ,
3031}
3132
@@ -45,6 +46,12 @@ struct Cli {
4546fn main ( ) -> Result < ( ) > {
4647 let Cli { path, verbose, json_output } = Cli :: parse ( ) ;
4748
49+ // We convert `-` into `_` for the file name to be sure the JSON path will always be correct.
50+ let path = Path :: new ( & path) ;
51+ let filename = path. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) . replace ( '-' , "_" ) ;
52+ let parent = path. parent ( ) . unwrap ( ) ;
53+ let path = parent. join ( & filename) ;
54+
4855 let contents = fs:: read_to_string ( & path) ?;
4956 let krate: Crate = serde_json:: from_str ( & contents) ?;
5057 assert_eq ! ( krate. format_version, FORMAT_VERSION ) ;
@@ -101,7 +108,7 @@ fn main() -> Result<()> {
101108 ErrorKind :: Custom ( msg) => eprintln ! ( "{}: {}" , err. id. 0 , msg) ,
102109 }
103110 }
104- bail ! ( "Errors validating json {path}" ) ;
111+ bail ! ( "Errors validating json {}" , path . display ( ) ) ;
105112 }
106113
107114 Ok ( ( ) )
0 commit comments