diff --git a/crates/emmylua_doc_cli/README.md b/crates/emmylua_doc_cli/README.md index 11b710ac4..687bb8b26 100644 --- a/crates/emmylua_doc_cli/README.md +++ b/crates/emmylua_doc_cli/README.md @@ -109,7 +109,9 @@ Arguments: Options: -c, --config Configuration file paths. If not provided, both ".emmyrc.json" and ".luarc.json" will be searched in the workspace directory - --ignore Comma separated list of ignore patterns. Patterns must follow glob syntax + --include Comma separated list of include patterns. Patterns must follow glob syntax. It will override the default include patterns. + --ignore Comma separated list of exclude patterns. Patterns must follow glob syntax(deprecated, use --exclude instead) + --exclude Comma separated list of exclude patterns. Patterns must follow glob syntax. Exclude patterns take precedence over include patterns -f, --output-format Specify output format [default: markdown] [possible values: json, markdown] -o, --output Specify output destination (can be stdout when output_format is json) [default: ./output] --override-template The path of the override template diff --git a/crates/emmylua_doc_cli/src/cmd_args.rs b/crates/emmylua_doc_cli/src/cmd_args.rs index 86d03920b..8a03a9fda 100644 --- a/crates/emmylua_doc_cli/src/cmd_args.rs +++ b/crates/emmylua_doc_cli/src/cmd_args.rs @@ -18,10 +18,16 @@ pub struct CmdArgs { #[arg(num_args = 1..)] pub workspace: Vec, - /// Comma separated list of ignore patterns. + /// Comma separated list of exclude patterns /// Patterns must follow glob syntax - #[arg(long, value_delimiter = ',')] - pub ignore: Option>, + /// Exclude patterns take precedence over include patterns + #[arg(long = "exclude", alias = "ignore", value_delimiter = ',')] + pub exclude_pattern: Option>, + + /// Comma separated list of include patterns + /// Patterns must follow glob syntax + #[arg(long = "include", value_delimiter = ',')] + pub include_pattern: Option>, /// Specify output format #[arg( diff --git a/crates/emmylua_doc_cli/src/init.rs b/crates/emmylua_doc_cli/src/init.rs index e4074b919..f3609dfe1 100644 --- a/crates/emmylua_doc_cli/src/init.rs +++ b/crates/emmylua_doc_cli/src/init.rs @@ -66,7 +66,8 @@ pub fn load_workspace( main_path: PathBuf, mut workspace_folders: Vec, config_paths: Option>, - ignore: Option>, + exclude_pattern: Option>, + include_pattern: Option>, ) -> Option { let (config_files, config_root): (Vec, PathBuf) = if let Some(config_paths) = config_paths { @@ -111,7 +112,12 @@ pub fn load_workspace( analysis.update_config(Arc::new(emmyrc)); analysis.init_std_lib(None); - let file_infos = collect_files(&workspace_folders, &analysis.emmyrc, ignore); + let file_infos = collect_files( + &workspace_folders, + &analysis.emmyrc, + exclude_pattern, + include_pattern, + ); let files = file_infos .into_iter() .filter_map(|file| { @@ -140,10 +146,12 @@ pub fn load_workspace( pub fn collect_files( workspaces: &Vec, emmyrc: &Emmyrc, - ignore: Option>, + exclude_pattern: Option>, + include_pattern: Option>, ) -> Vec { let mut files = Vec::new(); - let (match_pattern, exclude, exclude_dir) = calculate_include_and_exclude(emmyrc, ignore); + let (match_pattern, exclude, exclude_dir) = + calculate_include_and_exclude(emmyrc, exclude_pattern, include_pattern); let encoding = &emmyrc.workspace.encoding; @@ -167,21 +175,32 @@ pub fn collect_files( /// File patterns for workspace scanning: (include_patterns, exclude_patterns, exclude_dirs) type FilePatterns = (Vec, Vec, Vec); -pub fn calculate_include_and_exclude(emmyrc: &Emmyrc, ignore: Option>) -> FilePatterns { - let mut include = vec!["**/*.lua".to_string(), "**/.editorconfig".to_string()]; +pub fn calculate_include_and_exclude( + emmyrc: &Emmyrc, + exclude_pattern: Option>, + include_pattern: Option>, +) -> FilePatterns { + let mut include = Vec::new(); let mut exclude = Vec::new(); let mut exclude_dirs = Vec::new(); - for extension in &emmyrc.runtime.extensions { - if extension.starts_with(".") { - log::info!("Adding extension: **/*{}", extension); - include.push(format!("**/*{}", extension)); - } else if extension.starts_with("*.") { - log::info!("Adding extension: **/{}", extension); - include.push(format!("**/{}", extension)); - } else { - log::info!("Adding extension: {}", extension); - include.push(extension.clone()); + if let Some(p) = include_pattern { + include.extend(p); + } else { + include.push("**/*.lua".to_string()); + include.push("**/.editorconfig".to_string()); + + for extension in &emmyrc.runtime.extensions { + if extension.starts_with(".") { + log::info!("Adding extension: **/*{}", extension); + include.push(format!("**/*{}", extension)); + } else if extension.starts_with("*.") { + log::info!("Adding extension: **/{}", extension); + include.push(format!("**/{}", extension)); + } else { + log::info!("Adding extension: {}", extension); + include.push(extension.clone()); + } } } @@ -190,9 +209,9 @@ pub fn calculate_include_and_exclude(emmyrc: &Emmyrc, ignore: Option exclude.push(ignore_glob.clone()); } - if let Some(ignore) = ignore { - log::info!("Adding ignores from \"--ignore\": {:?}", ignore); - exclude.extend(ignore); + if let Some(p) = exclude_pattern { + log::info!("Adding excludes from \"--exclude(or --ignore)\": {:?}", p); + exclude.extend(p); } for dir in &emmyrc.workspace.ignore_dir { diff --git a/crates/emmylua_doc_cli/src/lib.rs b/crates/emmylua_doc_cli/src/lib.rs index 9273dfeb3..57691e91e 100644 --- a/crates/emmylua_doc_cli/src/lib.rs +++ b/crates/emmylua_doc_cli/src/lib.rs @@ -44,7 +44,8 @@ pub fn run_doc_cli(mut cmd_args: CmdArgs) -> Result<(), Box analysis, None => {