|
| 1 | +use clap::Args; |
1 | 2 | use rayon::prelude::*; |
2 | 3 | use std::fs; |
3 | 4 | use std::io::BufRead; |
4 | 5 | use std::path::{Path, PathBuf}; |
5 | 6 |
|
6 | 7 | use codeql_extractor::{diagnostics, extractor, node_types, trap}; |
7 | 8 |
|
8 | | -fn main() -> std::io::Result<()> { |
| 9 | +#[derive(Args)] |
| 10 | +pub struct Options { |
| 11 | + /// Sets a custom source achive folder |
| 12 | + #[arg(long)] |
| 13 | + source_archive_dir: PathBuf, |
| 14 | + |
| 15 | + /// Sets a custom trap folder |
| 16 | + #[arg(long)] |
| 17 | + output_dir: PathBuf, |
| 18 | + |
| 19 | + /// A text file containing the paths of the files to extract |
| 20 | + #[arg(long)] |
| 21 | + file_list: PathBuf, |
| 22 | +} |
| 23 | + |
| 24 | +pub fn run(options: Options) -> std::io::Result<()> { |
9 | 25 | tracing_subscriber::fmt() |
10 | 26 | .with_target(false) |
11 | 27 | .without_time() |
@@ -58,30 +74,9 @@ fn main() -> std::io::Result<()> { |
58 | 74 | .build_global() |
59 | 75 | .unwrap(); |
60 | 76 |
|
61 | | - let matches = clap::Command::new("QL extractor") |
62 | | - .version("1.0") |
63 | | - .author("GitHub") |
64 | | - .about("CodeQL QL extractor") |
65 | | - .args(&[ |
66 | | - clap::arg!(--"source-archive-dir" <DIR> "Sets a custom source archive folder"), |
67 | | - clap::arg!(--"output-dir" <DIR> "Sets a custom trap folder"), |
68 | | - clap::arg!(--"file-list" <FILE_LIST> "A text file containing the paths of the files to extract"), |
69 | | - ]) |
70 | | - .get_matches(); |
71 | | - let src_archive_dir = matches |
72 | | - .get_one::<String>("source-archive-dir") |
73 | | - .expect("missing --source-archive-dir"); |
74 | | - let src_archive_dir = PathBuf::from(src_archive_dir); |
75 | | - |
76 | | - let trap_dir = matches |
77 | | - .get_one::<String>("output-dir") |
78 | | - .expect("missing --output-dir"); |
79 | | - let trap_dir = PathBuf::from(trap_dir); |
80 | | - |
81 | | - let file_list = matches |
82 | | - .get_one::<String>("file-list") |
83 | | - .expect("missing --file-list"); |
84 | | - let file_list = fs::File::open(file_list)?; |
| 77 | + let trap_dir = options.output_dir; |
| 78 | + let file_list = fs::File::open(options.file_list)?; |
| 79 | + let source_archive_dir = options.source_archive_dir; |
85 | 80 |
|
86 | 81 | let language = tree_sitter_ql::language(); |
87 | 82 | let dbscheme = tree_sitter_ql_dbscheme::language(); |
@@ -114,7 +109,7 @@ fn main() -> std::io::Result<()> { |
114 | 109 | return Ok(()); |
115 | 110 | } |
116 | 111 | let path = PathBuf::from(line).canonicalize()?; |
117 | | - let src_archive_file = path_for(&src_archive_dir, &path, ""); |
| 112 | + let src_archive_file = path_for(&source_archive_dir, &path, ""); |
118 | 113 | let source = std::fs::read(&path)?; |
119 | 114 | let code_ranges = vec![]; |
120 | 115 | let mut trap_writer = trap::Writer::new(); |
|
0 commit comments