MCPcopy Create free account
hub / github.com/AmrDeveloper/ClangQL / parse_arguments

Function parse_arguments

src/arguments.rs:35–155  ·  view source on GitHub ↗
(args: &[String])

Source from the content-addressed store, hash-verified

33}
34
35pub fn parse_arguments(args: &[String]) -> Command {
36 let args_len = args.len();
37
38 if args.iter().any(|i| i == "--help" || i == "-h") {
39 return Command::Help;
40 }
41
42 if args.iter().any(|i| i == "--version" || i == "-v") {
43 return Command::Version;
44 }
45
46 let mut optional_query: Option<String> = None;
47 let mut arguments = Arguments::new();
48
49 let mut arg_index = 1;
50 loop {
51 if arg_index >= args_len {
52 break;
53 }
54
55 let arg = &args[arg_index];
56
57 if !arg.starts_with('-') {
58 return Command::Error(format!("Unknown argument {}", arg));
59 }
60
61 match arg.as_ref() {
62 "--files" | "-f" => {
63 arg_index += 1;
64 if arg_index >= args_len {
65 let message = format!("Argument {} must be followed by one or more path", arg);
66 return Command::Error(message);
67 }
68
69 loop {
70 if arg_index >= args_len {
71 break;
72 }
73
74 let files = &args[arg_index];
75 if !files.starts_with('-') {
76 arguments.files.push(files.to_string());
77 arg_index += 1;
78 continue;
79 }
80
81 break;
82 }
83
84 if arguments.files.is_empty() {
85 return Command::Error("Must provide one or more C/C++ files".to_string());
86 }
87 }
88 "--query" | "-q" => {
89 arg_index += 1;
90 if arg_index >= args_len {
91 let message = format!("Argument {} must be followed by the query", arg);
92 return Command::Error(message);

Callers 1

mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected