@@ -25,19 +25,10 @@ pub mod runners {
25
25
( "override" , Some ( sub_m) ) => Delimiters :: override_delims ( sub_m) ,
26
26
_ => Delimiters :: get_delims ( ) ,
27
27
} ;
28
- let all_em = if matches. is_present ( "directory" ) {
29
- start (
30
- matches. value_of ( "INPUT" ) . expect ( "directory glob not found" ) ,
31
- true ,
32
- delims,
33
- )
34
- } else {
35
- start (
36
- matches. value_of ( "INPUT" ) . expect ( "no file found." ) ,
37
- false ,
38
- delims,
39
- )
40
- } ;
28
+ let all_em = start (
29
+ & Path :: new ( matches. value_of ( "INPUT" ) . expect ( "directory glob not found" ) ) ,
30
+ delims,
31
+ ) ;
41
32
if matches. is_present ( "json" ) {
42
33
write_json ( & all_em, matches. value_of ( "json" ) . unwrap ( ) ) ;
43
34
} else if matches. is_present ( "location" ) {
@@ -218,12 +209,22 @@ mod doc {
218
209
impl Doc {
219
210
/// Build a `Doc` from an array of strings
220
211
/// Parse `Doc` fields.
221
- pub fn make_doc ( vector : & Extracted , delims : Delimiters ) -> Doc {
212
+ pub fn make_doc (
213
+ vector : & Extracted ,
214
+ delims : Delimiters ,
215
+ fname : & str ,
216
+ ) -> Result < Doc , nom:: ErrorKind > {
222
217
// println!("{:#?}", vector);
223
218
let parsed = parse_doc ( & vector. content , delims) ;
224
- let mut result = parsed. expect ( "Parsing error." ) . 1 ;
219
+ let mut result = match parsed {
220
+ Ok ( e) => e. 1 ,
221
+ Err ( _) => {
222
+ println ! ( "{} did not contain any docstrings." , fname) ;
223
+ exit ( 1 ) ;
224
+ }
225
+ } ;
225
226
result. position = vector. position . line + 1 ;
226
- result
227
+ Ok ( result)
227
228
}
228
229
}
229
230
}
@@ -284,7 +285,13 @@ mod docfile {
284
285
///
285
286
/// A final `Vec` of the collected comment strings is returned.
286
287
pub fn get_strings_from_file < ' a > ( p : & Path , delims : Delimiters ) -> Vec < Extracted < ' a > > {
287
- let mut f = File :: open ( & p) . expect ( "file not found." ) ;
288
+ let mut f = match File :: open ( & p) {
289
+ Ok ( m) => m,
290
+ Err ( _) => {
291
+ println ! ( "Provided path is invalid" ) ;
292
+ exit ( 1 ) ;
293
+ }
294
+ } ;
288
295
let mut buffer = String :: new ( ) ;
289
296
f. read_to_string ( & mut buffer) . unwrap ( ) ;
290
297
let used = Box :: leak ( buffer. into_boxed_str ( ) ) ;
@@ -303,53 +310,39 @@ mod docfile {
303
310
/// Given a `Vec<str>` make a `DocFile`
304
311
pub fn generate_doc_file (
305
312
docs : & [ Extracted < ' static > ] ,
306
- fname : String ,
313
+ fname : & Path ,
307
314
delims : Delimiters ,
308
315
) -> DocFile {
309
316
let mut all_docs: DocFile = Default :: default ( ) ;
310
- all_docs. filename = fname;
317
+ all_docs. filename = String :: from ( fname. file_stem ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) ) ;
311
318
let collected: Vec < Doc > = docs
312
319
. par_iter ( )
313
320
. filter ( |x| !x. content . is_empty ( ) )
314
- . map ( |x| Doc :: make_doc ( x, delims) )
321
+ . map ( |x| Doc :: make_doc ( x, delims, & all_docs . filename ) . unwrap ( ) )
315
322
. collect ( ) ;
316
323
all_docs. thedocs = collected;
317
324
all_docs
318
325
}
319
326
320
327
/// Given a file path and delimiters, generate a DocFile for all files requested.
321
- pub fn start ( p : & str , is_directory : bool , delims : Delimiters ) -> Vec < DocFile > {
322
- let dir = if cfg ! ( windows) {
323
- String :: from ( p)
324
- } else {
325
- p. replace ( "~" , home_dir ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) )
326
- } ;
327
- if is_directory {
328
- let files: Vec < _ > = glob ( & dir) . unwrap ( ) . filter_map ( |x| x. ok ( ) ) . collect ( ) ;
328
+ pub fn start ( p : & Path , delims : Delimiters ) -> Vec < DocFile > {
329
+ if p. is_dir ( ) || p. to_str ( ) . unwrap ( ) . contains ( "*" ) {
330
+ let pth = home_dir ( ) . unwrap ( ) . join ( p. strip_prefix ( "~" ) . unwrap ( ) ) ;
331
+ let files: Vec < _ > = glob ( pth. to_str ( ) . unwrap ( ) )
332
+ . unwrap ( )
333
+ . filter_map ( |x| x. ok ( ) )
334
+ . collect ( ) ;
329
335
let every_doc: Vec < DocFile > = files
330
336
. par_iter ( )
331
337
. map ( |entry| {
332
338
let docs = get_strings_from_file ( & entry, delims) ;
333
- generate_doc_file (
334
- & docs,
335
- entry. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) . to_string ( ) ,
336
- delims,
337
- )
339
+ generate_doc_file ( & docs, & entry, delims)
338
340
} )
339
341
. collect ( ) ;
340
342
every_doc
341
343
} else {
342
- let docs = get_strings_from_file ( & Path :: new ( & p) , delims) ;
343
- let all_docs = generate_doc_file (
344
- & docs,
345
- Path :: new ( & dir)
346
- . file_name ( )
347
- . unwrap ( )
348
- . to_str ( )
349
- . unwrap ( )
350
- . to_string ( ) ,
351
- delims,
352
- ) ;
344
+ let docs = get_strings_from_file ( & p. canonicalize ( ) . unwrap ( ) , delims) ;
345
+ let all_docs = generate_doc_file ( & docs, & p, delims) ;
353
346
let result = vec ! [ all_docs] ;
354
347
result
355
348
}
0 commit comments