1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
// nightly sometimes removes/renames lints
#![cfg_attr(allow_unknown_lints, allow(unknown_lints, renamed_and_removed_lints))]
// allow some things in tests
#![cfg_attr(
test,
allow(
clippy::cast_possible_truncation,
clippy::cognitive_complexity,
clippy::let_underscore_must_use,
clippy::let_underscore_untyped,
clippy::missing_const_for_fn,
clippy::missing_errors_doc,
clippy::multiple_inherent_impl,
clippy::needless_pass_by_value,
clippy::panic,
clippy::shadow_reuse,
clippy::shadow_unrelated,
clippy::struct_field_names,
clippy::undocumented_unsafe_blocks,
clippy::unimplemented,
clippy::unreachable,
clippy::unused_self,
let_underscore_drop,
missing_docs
)
)]
// allowable upcoming nightly lints
#![cfg_attr(include_nightly_lints, allow(clippy::arc_with_non_send_sync))]
mod application;
mod arguments;
mod components;
mod config;
mod display;
mod editor;
mod exit;
mod git;
mod help;
mod input;
mod license;
mod module;
mod modules;
mod process;
mod runtime;
mod search;
#[cfg(test)]
mod test_helpers;
#[cfg(test)]
mod tests;
mod todo_file;
mod util;
mod version;
mod view;
use std::{env, ffi::OsString};
use crate::{
arguments::{Args, Mode},
exit::Exit,
};
#[must_use]
pub fn run(os_args: Vec<OsString>) -> Exit {
match Args::try_from(os_args) {
Err(err) => err,
Ok(args) => {
match *args.mode() {
Mode::Help => help::run(),
Mode::Version => version::run(),
Mode::License => license::run(),
Mode::Editor => editor::run(&args),
}
},
}
}
// TODO use the termination trait once rust-lang/rust#43301 is stable
#[allow(clippy::exit, clippy::print_stderr)]
#[cfg(not(tarpaulin_include))]
fn main() {
let exit = run(env::args_os().skip(1).collect());
if let Some(message) = exit.get_message().as_ref() {
eprintln!("{message}");
}
std::process::exit(exit.get_status().to_code());
}
|