1use clap::{Parser, ValueEnum};
2use std::path::PathBuf;
3
4use crate::config::ModuleResolutionKind;
5use tsz::emitter::{ModuleKind, ScriptTarget};
6
7#[derive(Parser, Debug)]
9#[command(
10 name = "tsz",
11 version,
12 about = "Codename Zang (Persian for rust) - TypeScript in Rust"
13)]
14pub struct CliArgs {
15 #[arg(long)]
18 pub all: bool,
19
20 #[arg(short = 'b', long)]
22 pub build: bool,
23
24 #[arg(long)]
26 pub init: bool,
27
28 #[arg(long = "listFilesOnly", alias = "list-files-only")]
30 pub list_files_only: bool,
31
32 #[arg(long)]
34 pub locale: Option<String>,
35
36 #[arg(long = "showConfig", alias = "show-config")]
38 pub show_config: bool,
39
40 #[arg(short = 'w', long)]
42 pub watch: bool,
43
44 #[arg(short = 'p', long = "project")]
46 pub project: Option<PathBuf>,
47
48 #[arg(short = 't', long, value_enum, ignore_case = true)]
51 pub target: Option<Target>,
52
53 #[arg(short = 'm', long, value_enum, ignore_case = true)]
55 pub module: Option<Module>,
56
57 #[arg(long, value_delimiter = ',')]
59 pub lib: Option<Vec<String>>,
60
61 #[arg(long, value_enum)]
63 pub jsx: Option<JsxEmit>,
64
65 #[arg(long = "jsxFactory", alias = "jsx-factory")]
67 pub jsx_factory: Option<String>,
68
69 #[arg(long = "jsxFragmentFactory", alias = "jsx-fragment-factory")]
71 pub jsx_fragment_factory: Option<String>,
72
73 #[arg(long = "jsxImportSource", alias = "jsx-import-source")]
75 pub jsx_import_source: Option<String>,
76
77 #[arg(long = "noLib", alias = "no-lib")]
79 pub no_lib: bool,
80
81 #[arg(
83 long = "useDefineForClassFields",
84 alias = "use-define-for-class-fields"
85 )]
86 pub use_define_for_class_fields: Option<bool>,
87
88 #[arg(long = "moduleDetection", alias = "module-detection", value_enum)]
90 pub module_detection: Option<ModuleDetection>,
91
92 #[arg(long = "experimentalDecorators", alias = "experimental-decorators")]
94 pub experimental_decorators: bool,
95
96 #[arg(long = "emitDecoratorMetadata", alias = "emit-decorator-metadata")]
98 pub emit_decorator_metadata: bool,
99
100 #[arg(long = "moduleResolution", alias = "module-resolution", value_enum)]
103 pub module_resolution: Option<ModuleResolution>,
104
105 #[arg(long = "baseUrl", alias = "base-url")]
107 pub base_url: Option<PathBuf>,
108
109 #[arg(long = "typeRoots", alias = "type-roots", value_delimiter = ',')]
111 pub type_roots: Option<Vec<PathBuf>>,
112
113 #[arg(long, value_delimiter = ',')]
115 pub types: Option<Vec<String>>,
116
117 #[arg(long = "rootDirs", alias = "root-dirs", value_delimiter = ',')]
119 pub root_dirs: Option<Vec<PathBuf>>,
120
121 #[arg(long, value_delimiter = ',', hide = true)]
124 pub paths: Option<Vec<String>>,
125
126 #[arg(long, value_delimiter = ',', hide = true)]
129 pub plugins: Option<Vec<String>>,
130
131 #[arg(long = "resolveJsonModule", alias = "resolve-json-module")]
133 pub resolve_json_module: bool,
134
135 #[arg(
137 long = "resolvePackageJsonExports",
138 alias = "resolve-package-json-exports"
139 )]
140 pub resolve_package_json_exports: Option<bool>,
141
142 #[arg(
144 long = "resolvePackageJsonImports",
145 alias = "resolve-package-json-imports"
146 )]
147 pub resolve_package_json_imports: Option<bool>,
148
149 #[arg(
151 long = "moduleSuffixes",
152 alias = "module-suffixes",
153 value_delimiter = ','
154 )]
155 pub module_suffixes: Option<Vec<String>>,
156
157 #[arg(
159 long = "allowArbitraryExtensions",
160 alias = "allow-arbitrary-extensions"
161 )]
162 pub allow_arbitrary_extensions: bool,
163
164 #[arg(
166 long = "allowImportingTsExtensions",
167 alias = "allow-importing-ts-extensions"
168 )]
169 pub allow_importing_ts_extensions: bool,
170
171 #[arg(
173 long = "rewriteRelativeImportExtensions",
174 alias = "rewrite-relative-import-extensions"
175 )]
176 pub rewrite_relative_import_extensions: bool,
177
178 #[arg(
180 long = "customConditions",
181 alias = "custom-conditions",
182 value_delimiter = ','
183 )]
184 pub custom_conditions: Option<Vec<String>>,
185
186 #[arg(long = "noResolve", alias = "no-resolve")]
188 pub no_resolve: bool,
189
190 #[arg(long = "allowUmdGlobalAccess", alias = "allow-umd-global-access")]
192 pub allow_umd_global_access: bool,
193
194 #[arg(
196 long = "noUncheckedSideEffectImports",
197 alias = "no-unchecked-side-effect-imports"
198 )]
199 pub no_unchecked_side_effect_imports: bool,
200
201 #[arg(long = "allowJs", alias = "allow-js")]
204 pub allow_js: bool,
205
206 #[arg(long = "checkJs", alias = "check-js")]
208 pub check_js: bool,
209
210 #[arg(long = "maxNodeModuleJsDepth", alias = "max-node-module-js-depth")]
212 pub max_node_module_js_depth: Option<u32>,
213
214 #[arg(long = "declaration", short = 'd')]
217 pub declaration: bool,
218
219 #[arg(long = "declarationDir", alias = "declaration-dir")]
221 pub declaration_dir: Option<PathBuf>,
222
223 #[arg(long = "declarationMap", alias = "declaration-map")]
225 pub declaration_map: bool,
226
227 #[arg(long = "emitDeclarationOnly", alias = "emit-declaration-only")]
229 pub emit_declaration_only: bool,
230
231 #[arg(long = "sourceMap", alias = "source-map")]
233 pub source_map: bool,
234
235 #[arg(long = "inlineSourceMap", alias = "inline-source-map")]
237 pub inline_source_map: bool,
238
239 #[arg(long = "inlineSources", alias = "inline-sources")]
241 pub inline_sources: bool,
242
243 #[arg(long = "outDir", alias = "out-dir")]
245 pub out_dir: Option<PathBuf>,
246
247 #[arg(long = "rootDir", alias = "root-dir")]
249 pub root_dir: Option<PathBuf>,
250
251 #[arg(long = "outFile", alias = "out-file")]
253 pub out_file: Option<PathBuf>,
254
255 #[arg(long = "noEmit", alias = "no-emit")]
257 pub no_emit: bool,
258
259 #[arg(long = "noEmitOnError", alias = "no-emit-on-error")]
261 pub no_emit_on_error: bool,
262
263 #[arg(long = "noEmitHelpers", alias = "no-emit-helpers")]
265 pub no_emit_helpers: bool,
266
267 #[arg(long = "importHelpers", alias = "import-helpers")]
269 pub import_helpers: bool,
270
271 #[arg(long = "downlevelIteration", alias = "downlevel-iteration")]
273 pub downlevel_iteration: bool,
274
275 #[arg(long = "mapRoot", alias = "map-root")]
277 pub map_root: Option<String>,
278
279 #[arg(long = "sourceRoot", alias = "source-root")]
281 pub source_root: Option<String>,
282
283 #[arg(long = "newLine", alias = "new-line", value_enum)]
285 pub new_line: Option<NewLine>,
286
287 #[arg(long = "removeComments", alias = "remove-comments")]
289 pub remove_comments: bool,
290
291 #[arg(long = "preserveConstEnums", alias = "preserve-const-enums")]
293 pub preserve_const_enums: bool,
294
295 #[arg(long = "stripInternal", alias = "strip-internal")]
297 pub strip_internal: bool,
298
299 #[arg(long = "emitBOM", alias = "emit-bom")]
301 pub emit_bom: bool,
302
303 #[arg(long = "esModuleInterop", alias = "es-module-interop")]
306 pub es_module_interop: bool,
307
308 #[arg(
310 long = "allowSyntheticDefaultImports",
311 alias = "allow-synthetic-default-imports"
312 )]
313 pub allow_synthetic_default_imports: Option<bool>,
314
315 #[arg(long = "isolatedModules", alias = "isolated-modules")]
317 pub isolated_modules: bool,
318
319 #[arg(long = "isolatedDeclarations", alias = "isolated-declarations")]
321 pub isolated_declarations: bool,
322
323 #[arg(long = "verbatimModuleSyntax", alias = "verbatim-module-syntax")]
325 pub verbatim_module_syntax: bool,
326
327 #[arg(
329 long = "forceConsistentCasingInFileNames",
330 alias = "force-consistent-casing-in-file-names"
331 )]
332 pub force_consistent_casing_in_file_names: Option<bool>,
333
334 #[arg(long = "preserveSymlinks", alias = "preserve-symlinks")]
336 pub preserve_symlinks: bool,
337
338 #[arg(long = "erasableSyntaxOnly", alias = "erasable-syntax-only")]
340 pub erasable_syntax_only: bool,
341
342 #[arg(long)]
345 pub strict: bool,
346
347 #[arg(long = "noImplicitAny", alias = "no-implicit-any")]
349 pub no_implicit_any: Option<bool>,
350
351 #[arg(long = "strictNullChecks", alias = "strict-null-checks")]
353 pub strict_null_checks: Option<bool>,
354
355 #[arg(long = "strictFunctionTypes", alias = "strict-function-types")]
357 pub strict_function_types: Option<bool>,
358
359 #[arg(long = "strictBindCallApply", alias = "strict-bind-call-apply")]
361 pub strict_bind_call_apply: Option<bool>,
362
363 #[arg(
365 long = "strictPropertyInitialization",
366 alias = "strict-property-initialization"
367 )]
368 pub strict_property_initialization: Option<bool>,
369
370 #[arg(
372 long = "strictBuiltinIteratorReturn",
373 alias = "strict-builtin-iterator-return"
374 )]
375 pub strict_builtin_iterator_return: Option<bool>,
376
377 #[arg(long = "noImplicitThis", alias = "no-implicit-this")]
379 pub no_implicit_this: Option<bool>,
380
381 #[arg(
383 long = "useUnknownInCatchVariables",
384 alias = "use-unknown-in-catch-variables"
385 )]
386 pub use_unknown_in_catch_variables: Option<bool>,
387
388 #[arg(long = "alwaysStrict", alias = "always-strict")]
390 pub always_strict: Option<bool>,
391
392 #[arg(long = "noUnusedLocals", alias = "no-unused-locals")]
394 pub no_unused_locals: bool,
395
396 #[arg(long = "noUnusedParameters", alias = "no-unused-parameters")]
398 pub no_unused_parameters: bool,
399
400 #[arg(
402 long = "exactOptionalPropertyTypes",
403 alias = "exact-optional-property-types"
404 )]
405 pub exact_optional_property_types: bool,
406
407 #[arg(long = "noImplicitReturns", alias = "no-implicit-returns")]
409 pub no_implicit_returns: bool,
410
411 #[arg(
413 long = "noFallthroughCasesInSwitch",
414 alias = "no-fallthrough-cases-in-switch"
415 )]
416 pub no_fallthrough_cases_in_switch: bool,
417
418 #[arg(long)]
423 pub sound: bool,
424
425 #[arg(
427 long = "noUncheckedIndexedAccess",
428 alias = "no-unchecked-indexed-access"
429 )]
430 pub no_unchecked_indexed_access: bool,
431
432 #[arg(long = "noImplicitOverride", alias = "no-implicit-override")]
434 pub no_implicit_override: bool,
435
436 #[arg(
438 long = "noPropertyAccessFromIndexSignature",
439 alias = "no-property-access-from-index-signature"
440 )]
441 pub no_property_access_from_index_signature: bool,
442
443 #[arg(long = "allowUnreachableCode", alias = "allow-unreachable-code")]
445 pub allow_unreachable_code: Option<bool>,
446
447 #[arg(long = "allowUnusedLabels", alias = "allow-unused-labels")]
449 pub allow_unused_labels: Option<bool>,
450
451 #[arg(long = "skipDefaultLibCheck", alias = "skip-default-lib-check")]
454 pub skip_default_lib_check: bool,
455
456 #[arg(long = "skipLibCheck", alias = "skip-lib-check")]
458 pub skip_lib_check: bool,
459
460 #[arg(long)]
463 pub composite: bool,
464
465 #[arg(short = 'i', long)]
467 pub incremental: bool,
468
469 #[arg(long = "tsBuildInfoFile", alias = "ts-build-info-file")]
471 pub ts_build_info_file: Option<PathBuf>,
472
473 #[arg(
475 long = "disableReferencedProjectLoad",
476 alias = "disable-referenced-project-load"
477 )]
478 pub disable_referenced_project_load: bool,
479
480 #[arg(
482 long = "disableSolutionSearching",
483 alias = "disable-solution-searching"
484 )]
485 pub disable_solution_searching: bool,
486
487 #[arg(
489 long = "disableSourceOfProjectReferenceRedirect",
490 alias = "disable-source-of-project-reference-redirect"
491 )]
492 pub disable_source_of_project_reference_redirect: bool,
493
494 #[arg(long)]
497 pub diagnostics: bool,
498
499 #[arg(long = "extendedDiagnostics", alias = "extended-diagnostics")]
501 pub extended_diagnostics: bool,
502
503 #[arg(long = "explainFiles", alias = "explain-files")]
505 pub explain_files: bool,
506
507 #[arg(long = "listFiles", alias = "list-files")]
509 pub list_files: bool,
510
511 #[arg(long = "listEmittedFiles", alias = "list-emitted-files")]
513 pub list_emitted_files: bool,
514
515 #[arg(long = "traceResolution", alias = "trace-resolution")]
517 pub trace_resolution: bool,
518
519 #[arg(long = "traceDependencies", alias = "trace-dependencies")]
521 pub trace_dependencies: bool,
522
523 #[arg(long = "generateTrace", alias = "generate-trace")]
525 pub generate_trace: Option<PathBuf>,
526
527 #[arg(long = "generateCpuProfile", alias = "generate-cpu-profile")]
529 pub generate_cpu_profile: Option<PathBuf>,
530
531 #[arg(long = "noCheck", alias = "no-check")]
533 pub no_check: bool,
534
535 #[arg(long)]
538 pub pretty: Option<bool>,
539
540 #[arg(long = "noErrorTruncation", alias = "no-error-truncation")]
542 pub no_error_truncation: bool,
543
544 #[arg(long = "preserveWatchOutput", alias = "preserve-watch-output")]
546 pub preserve_watch_output: bool,
547
548 #[arg(long = "watchFile", alias = "watch-file", value_enum)]
551 pub watch_file: Option<WatchFileKind>,
552
553 #[arg(long = "watchDirectory", alias = "watch-directory", value_enum)]
555 pub watch_directory: Option<WatchDirectoryKind>,
556
557 #[arg(long = "fallbackPolling", alias = "fallback-polling", value_enum)]
559 pub fallback_polling: Option<PollingWatchKind>,
560
561 #[arg(
563 long = "synchronousWatchDirectory",
564 alias = "synchronous-watch-directory"
565 )]
566 pub synchronous_watch_directory: bool,
567
568 #[arg(
570 long = "excludeDirectories",
571 alias = "exclude-directories",
572 value_delimiter = ','
573 )]
574 pub exclude_directories: Option<Vec<PathBuf>>,
575
576 #[arg(long = "excludeFiles", alias = "exclude-files", value_delimiter = ',')]
578 pub exclude_files: Option<Vec<PathBuf>>,
579
580 #[arg(long, visible_alias = "verbose")]
583 pub build_verbose: bool,
584
585 #[arg(long)]
587 pub dry: bool,
588
589 #[arg(short = 'f', long)]
591 pub force: bool,
592
593 #[arg(long)]
595 pub clean: bool,
596
597 #[arg(long = "stopBuildOnErrors", alias = "stop-build-on-errors")]
599 pub stop_build_on_errors: bool,
600
601 #[arg(
604 long = "assumeChangesOnlyAffectDirectDependencies",
605 alias = "assume-changes-only-affect-direct-dependencies"
606 )]
607 pub assume_changes_only_affect_direct_dependencies: bool,
608
609 #[arg(long = "reactNamespace", alias = "react-namespace", hide = true)]
612 pub react_namespace: Option<String>,
613
614 #[arg(long, hide = true)]
616 pub charset: Option<String>,
617
618 #[arg(
620 long = "importsNotUsedAsValues",
621 alias = "imports-not-used-as-values",
622 value_enum,
623 hide = true
624 )]
625 pub imports_not_used_as_values: Option<ImportsNotUsedAsValues>,
626
627 #[arg(long = "keyofStringsOnly", alias = "keyof-strings-only", hide = true)]
629 pub keyof_strings_only: bool,
630
631 #[arg(
633 long = "noImplicitUseStrict",
634 alias = "no-implicit-use-strict",
635 hide = true
636 )]
637 pub no_implicit_use_strict: bool,
638
639 #[arg(
641 long = "noStrictGenericChecks",
642 alias = "no-strict-generic-checks",
643 hide = true
644 )]
645 pub no_strict_generic_checks: bool,
646
647 #[arg(long, hide = true)]
649 pub out: Option<PathBuf>,
650
651 #[arg(
653 long = "preserveValueImports",
654 alias = "preserve-value-imports",
655 hide = true
656 )]
657 pub preserve_value_imports: bool,
658
659 #[arg(
661 long = "suppressExcessPropertyErrors",
662 alias = "suppress-excess-property-errors",
663 hide = true
664 )]
665 pub suppress_excess_property_errors: bool,
666
667 #[arg(
669 long = "suppressImplicitAnyIndexErrors",
670 alias = "suppress-implicit-any-index-errors",
671 hide = true
672 )]
673 pub suppress_implicit_any_index_errors: bool,
674
675 #[arg(long = "disableSizeLimit", alias = "disable-size-limit")]
678 pub disable_size_limit: bool,
679
680 #[arg(
684 long = "typesVersions",
685 alias = "types-versions",
686 value_name = "VERSION"
687 )]
688 pub types_versions_compiler_version: Option<String>,
689
690 #[arg(long, hide = true)]
695 pub batch: bool,
696
697 #[arg(value_name = "FILE")]
700 pub files: Vec<PathBuf>,
701}
702
703#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
704pub enum Target {
705 Es3,
706 Es5,
707 #[value(alias = "es6")]
708 Es2015,
709 Es2016,
710 Es2017,
711 Es2018,
712 Es2019,
713 Es2020,
714 Es2021,
715 Es2022,
716 Es2023,
717 Es2024,
718 Es2025,
719 #[value(name = "esnext", alias = "es-next")]
720 EsNext,
721}
722
723impl Target {
724 pub const fn to_script_target(self) -> ScriptTarget {
725 match self {
726 Self::Es3 => ScriptTarget::ES3,
727 Self::Es5 => ScriptTarget::ES5,
728 Self::Es2015 => ScriptTarget::ES2015,
729 Self::Es2016 => ScriptTarget::ES2016,
730 Self::Es2017 => ScriptTarget::ES2017,
731 Self::Es2018 => ScriptTarget::ES2018,
732 Self::Es2019 => ScriptTarget::ES2019,
733 Self::Es2020 => ScriptTarget::ES2020,
734 Self::Es2021 => ScriptTarget::ES2021,
735 Self::Es2022 => ScriptTarget::ES2022,
736 Self::Es2023 => ScriptTarget::ES2023,
737 Self::Es2024 => ScriptTarget::ES2024,
738 Self::Es2025 => ScriptTarget::ES2025,
739 Self::EsNext => ScriptTarget::ESNext,
740 }
741 }
742}
743
744#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
745pub enum Module {
746 None,
747 #[value(name = "commonjs", alias = "common-js")]
748 CommonJs,
749 Amd,
750 Umd,
751 System,
752 #[value(alias = "es6")]
753 Es2015,
754 Es2020,
755 Es2022,
756 #[value(name = "esnext", alias = "es-next")]
757 EsNext,
758 #[value(name = "node16", alias = "node-16")]
759 Node16,
760 #[value(name = "node18", alias = "node-18")]
761 Node18,
762 #[value(name = "node20", alias = "node-20")]
763 Node20,
764 #[value(name = "nodenext", alias = "node-next")]
765 NodeNext,
766 Preserve,
768}
769
770impl Module {
771 pub const fn to_module_kind(self) -> ModuleKind {
772 match self {
773 Self::None => ModuleKind::None,
774 Self::CommonJs => ModuleKind::CommonJS,
775 Self::Amd => ModuleKind::AMD,
776 Self::Umd => ModuleKind::UMD,
777 Self::System => ModuleKind::System,
778 Self::Es2015 => ModuleKind::ES2015,
779 Self::Es2020 => ModuleKind::ES2020,
780 Self::Es2022 => ModuleKind::ES2022,
781 Self::EsNext => ModuleKind::ESNext,
782 Self::Preserve => ModuleKind::Preserve,
783 Self::Node16 | Self::Node18 | Self::Node20 => ModuleKind::Node16,
784 Self::NodeNext => ModuleKind::NodeNext,
785 }
786 }
787}
788
789#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
790pub enum JsxEmit {
791 Preserve,
793 React,
795 #[value(name = "react-jsx")]
797 ReactJsx,
798 #[value(name = "react-jsxdev")]
800 ReactJsxDev,
801 #[value(name = "react-native")]
803 ReactNative,
804}
805
806#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
807pub enum ModuleResolution {
808 Classic,
810 #[value(alias = "node")]
812 Node10,
813 Node16,
815 #[value(name = "nodenext", alias = "node-next")]
817 NodeNext,
818 Bundler,
820}
821
822impl ModuleResolution {
823 pub const fn to_module_resolution_kind(self) -> ModuleResolutionKind {
824 match self {
825 Self::Classic => ModuleResolutionKind::Classic,
826 Self::Node10 => ModuleResolutionKind::Node,
827 Self::Node16 => ModuleResolutionKind::Node16,
828 Self::NodeNext => ModuleResolutionKind::NodeNext,
829 Self::Bundler => ModuleResolutionKind::Bundler,
830 }
831 }
832}
833
834#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
835pub enum ModuleDetection {
836 Auto,
838 Force,
840 Legacy,
842}
843
844#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
845pub enum NewLine {
846 Crlf,
848 Lf,
850}
851
852#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
853pub enum WatchFileKind {
854 #[value(name = "fixedpollinginterval", alias = "fixed-polling-interval")]
856 FixedPollingInterval,
857 #[value(name = "prioritypollinginterval", alias = "priority-polling-interval")]
859 PriorityPollingInterval,
860 #[value(name = "dynamicprioritypolling", alias = "dynamic-priority-polling")]
862 DynamicPriorityPolling,
863 #[value(name = "fixedchunksizepolling", alias = "fixed-chunk-size-polling")]
865 FixedChunkSizePolling,
866 #[value(name = "usefsevents", alias = "use-fs-events")]
868 UseFsEvents,
869 #[value(
871 name = "usefseventsonparentdirectory",
872 alias = "use-fs-events-on-parent-directory"
873 )]
874 UseFsEventsOnParentDirectory,
875}
876
877#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
878pub enum WatchDirectoryKind {
879 #[value(name = "usefsevents", alias = "use-fs-events")]
881 UseFsEvents,
882 #[value(name = "fixedpollinginterval", alias = "fixed-polling-interval")]
884 FixedPollingInterval,
885 #[value(name = "dynamicprioritypolling", alias = "dynamic-priority-polling")]
887 DynamicPriorityPolling,
888 #[value(name = "fixedchunksizepolling", alias = "fixed-chunk-size-polling")]
890 FixedChunkSizePolling,
891}
892
893#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
894pub enum PollingWatchKind {
895 #[value(name = "fixedinterval", alias = "fixed-interval")]
897 FixedInterval,
898 #[value(name = "priorityinterval", alias = "priority-interval")]
900 PriorityInterval,
901 #[value(name = "dynamicpriority", alias = "dynamic-priority")]
903 DynamicPriority,
904 #[value(name = "fixedchunksize", alias = "fixed-chunk-size")]
906 FixedChunkSize,
907}
908
909#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
910pub enum ImportsNotUsedAsValues {
911 Remove,
913 Preserve,
915 Error,
917}