Skip to content

Commit c092acd

Browse files
authored
ci: add clippy (#7675)
* ci: add clippy * fix: warning to show ci failure * fix: run `cargo clippy --fix` * fix: rogue comment * fix: redundant match * fix: too many args by introducing a wrapper struct * chore: run cargo fmt * refactor: get_source_files split match * refactor: get_source_files use `PackageSource.is_type_dev()` * refactor: simplify get_source_files * chore: CHANGELOG * fix: warnings after rebase
1 parent b64e2d8 commit c092acd

File tree

16 files changed

+204
-215
lines changed

16 files changed

+204
-215
lines changed

.github/workflows/ci.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ jobs:
8080
OPAM_VERSION: 2.3.0
8181
DUNE_PROFILE: release
8282
RUST_BACKTRACE: "1"
83+
RUSTFLAGS: "-Dwarnings"
8384

8485
steps:
8586
- name: "Windows: Set git config"
@@ -131,6 +132,11 @@ jobs:
131132
run: |
132133
cargo build --manifest-path rewatch/Cargo.toml --target ${{ matrix.rust-target }} --release
133134
135+
- name: Lint rewatch
136+
if: steps.rewatch-build-cache.outputs.cache-hit != 'true'
137+
run: |
138+
cargo clippy --manifest-path rewatch/Cargo.toml --all-targets --all-features
139+
134140
- name: Run rewatch unit tests
135141
if: steps.rewatch-build-cache.outputs.cache-hit != 'true'
136142
run: |

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424

2525
- Configuration fields `bs-dependencies`, `bs-dev-dependencies` and `bsc-flags` are now deprecated in favor of `dependencies`, `dev-dependencies` and `compiler-flags`. https://github.com/rescript-lang/rescript/pull/7658
2626

27+
#### :house: Internal
28+
29+
- Add rust linting to CI with `clippy`. https://github.com/rescript-lang/rescript/pull/7675
30+
2731
# 12.0.0-beta.2
2832

2933
#### :boom: Breaking Change

rewatch/src/build.rs

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ pub struct CompilerArgs {
5858
pub fn get_compiler_args(path: &Path) -> Result<String> {
5959
let filename = &helpers::get_abs_path(path);
6060
let package_root =
61-
helpers::get_abs_path(&helpers::get_nearest_config(&path).expect("Couldn't find package root"));
61+
helpers::get_abs_path(&helpers::get_nearest_config(path).expect("Couldn't find package root"));
6262
let workspace_root = get_workspace_root(&package_root).map(|p| helpers::get_abs_path(&p));
6363
let root_rescript_config =
6464
packages::read_config(&workspace_root.to_owned().unwrap_or(package_root.to_owned()))?;
@@ -77,7 +77,7 @@ pub fn get_compiler_args(path: &Path) -> Result<String> {
7777
let (ast_path, parser_args) = parser_args(
7878
&rescript_config,
7979
&root_rescript_config,
80-
&relative_filename,
80+
relative_filename,
8181
&workspace_root,
8282
workspace_root.as_ref().unwrap_or(&package_root),
8383
&contents,
@@ -94,7 +94,7 @@ pub fn get_compiler_args(path: &Path) -> Result<String> {
9494
&rescript_config,
9595
&root_rescript_config,
9696
&ast_path,
97-
&relative_filename,
97+
relative_filename,
9898
is_interface,
9999
has_interface,
100100
&package_root,
@@ -216,7 +216,7 @@ pub fn initialize_build(
216216

217217
if show_progress {
218218
if snapshot_output {
219-
println!("Cleaned {}/{}", diff_cleanup, total_cleanup)
219+
println!("Cleaned {diff_cleanup}/{total_cleanup}")
220220
} else {
221221
println!(
222222
"{}{} {}Cleaned {}/{} {:.2}s",
@@ -234,7 +234,7 @@ pub fn initialize_build(
234234
}
235235

236236
fn format_step(current: usize, total: usize) -> console::StyledObject<String> {
237-
style(format!("[{}/{}]", current, total)).bold().dim()
237+
style(format!("[{current}/{total}]")).bold().dim()
238238
}
239239

240240
#[derive(Debug, Clone)]
@@ -254,23 +254,23 @@ impl fmt::Display for IncrementalBuildError {
254254
match &self.kind {
255255
IncrementalBuildErrorKind::SourceFileParseError => {
256256
if self.snapshot_output {
257-
write!(f, "{} Could not parse Source Files", LINE_CLEAR,)
257+
write!(f, "{LINE_CLEAR} Could not parse Source Files",)
258258
} else {
259-
write!(f, "{} {}Could not parse Source Files", LINE_CLEAR, CROSS,)
259+
write!(f, "{LINE_CLEAR} {CROSS}Could not parse Source Files",)
260260
}
261261
}
262262
IncrementalBuildErrorKind::CompileError(Some(e)) => {
263263
if self.snapshot_output {
264-
write!(f, "{} Failed to Compile. Error: {e}", LINE_CLEAR,)
264+
write!(f, "{LINE_CLEAR} Failed to Compile. Error: {e}",)
265265
} else {
266-
write!(f, "{} {}Failed to Compile. Error: {e}", LINE_CLEAR, CROSS,)
266+
write!(f, "{LINE_CLEAR} {CROSS}Failed to Compile. Error: {e}",)
267267
}
268268
}
269269
IncrementalBuildErrorKind::CompileError(None) => {
270270
if self.snapshot_output {
271-
write!(f, "{} Failed to Compile. See Errors Above", LINE_CLEAR,)
271+
write!(f, "{LINE_CLEAR} Failed to Compile. See Errors Above",)
272272
} else {
273-
write!(f, "{} {}Failed to Compile. See Errors Above", LINE_CLEAR, CROSS,)
273+
write!(f, "{LINE_CLEAR} {CROSS}Failed to Compile. See Errors Above",)
274274
}
275275
}
276276
}
@@ -312,7 +312,7 @@ pub fn incremental_build(
312312
Ok(_ast) => {
313313
if show_progress {
314314
if snapshot_output {
315-
println!("Parsed {} source files", num_dirty_modules)
315+
println!("Parsed {num_dirty_modules} source files")
316316
} else {
317317
println!(
318318
"{}{} {}Parsed {} source files in {:.2}s",
@@ -370,7 +370,7 @@ pub fn incremental_build(
370370
if log_enabled!(log::Level::Trace) {
371371
for (module_name, module) in build_state.modules.iter() {
372372
if module.compile_dirty {
373-
println!("compile dirty: {}", module_name);
373+
println!("compile dirty: {module_name}");
374374
}
375375
}
376376
};
@@ -411,7 +411,7 @@ pub fn incremental_build(
411411
if !compile_errors.is_empty() {
412412
if show_progress {
413413
if snapshot_output {
414-
println!("Compiled {} modules", num_compiled_modules)
414+
println!("Compiled {num_compiled_modules} modules")
415415
} else {
416416
println!(
417417
"{}{} {}Compiled {} modules in {:.2}s",
@@ -439,7 +439,7 @@ pub fn incremental_build(
439439
} else {
440440
if show_progress {
441441
if snapshot_output {
442-
println!("Compiled {} modules", num_compiled_modules)
442+
println!("Compiled {num_compiled_modules} modules")
443443
} else {
444444
println!(
445445
"{}{} {}Compiled {} modules in {:.2}s",
@@ -485,9 +485,8 @@ fn log_deprecations(build_state: &BuildState) {
485485

486486
fn log_deprecated_config_field(package_name: &str, field_name: &str, new_field_name: &str) {
487487
let warning = format!(
488-
"The field '{}' found in the package config of '{}' is deprecated and will be removed in a future version.\n\
489-
Use '{}' instead.",
490-
field_name, package_name, new_field_name
488+
"The field '{field_name}' found in the package config of '{package_name}' is deprecated and will be removed in a future version.\n\
489+
Use '{new_field_name}' instead."
491490
);
492491
println!("\n{}", style(warning).yellow());
493492
}

rewatch/src/build/compile.rs

Lines changed: 72 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -417,8 +417,8 @@ pub fn compiler_args(
417417

418418
specs
419419
.iter()
420-
.map(|spec| {
421-
return vec![
420+
.flat_map(|spec| {
421+
vec![
422422
"-bs-package-output".to_string(),
423423
format!(
424424
"{}:{}:{}",
@@ -437,9 +437,8 @@ pub fn compiler_args(
437437
},
438438
root_config.get_suffix(spec),
439439
),
440-
];
440+
]
441441
})
442-
.flatten()
443442
.collect()
444443
};
445444

@@ -614,8 +613,7 @@ fn compile_file(
614613
Err(stderr.to_string() + &stdout)
615614
}
616615
Err(e) => Err(format!(
617-
"Could not compile file. Error: {}. Path to AST: {:?}",
618-
e, ast_path
616+
"Could not compile file. Error: {e}. Path to AST: {ast_path:?}"
619617
)),
620618
Ok(x) => {
621619
let err = std::str::from_utf8(&x.stderr)
@@ -633,15 +631,15 @@ fn compile_file(
633631
// because editor tooling doesn't support namespace entries yet
634632
// we just remove the @ for now. This makes sure the editor support
635633
// doesn't break
636-
.join(format!("{}.cmi", module_name)),
637-
ocaml_build_path_abs.join(format!("{}.cmi", module_name)),
634+
.join(format!("{module_name}.cmi")),
635+
ocaml_build_path_abs.join(format!("{module_name}.cmi")),
638636
);
639637
let _ = std::fs::copy(
640638
package
641639
.get_build_path()
642640
.join(dir)
643-
.join(format!("{}.cmj", module_name)),
644-
ocaml_build_path_abs.join(format!("{}.cmj", module_name)),
641+
.join(format!("{module_name}.cmj")),
642+
ocaml_build_path_abs.join(format!("{module_name}.cmj")),
645643
);
646644
let _ = std::fs::copy(
647645
package
@@ -650,98 +648,91 @@ fn compile_file(
650648
// because editor tooling doesn't support namespace entries yet
651649
// we just remove the @ for now. This makes sure the editor support
652650
// doesn't break
653-
.join(format!("{}.cmt", module_name)),
654-
ocaml_build_path_abs.join(format!("{}.cmt", module_name)),
651+
.join(format!("{module_name}.cmt")),
652+
ocaml_build_path_abs.join(format!("{module_name}.cmt")),
655653
);
656654
} else {
657655
let _ = std::fs::copy(
658656
package
659657
.get_build_path()
660658
.join(dir)
661-
.join(format!("{}.cmti", module_name)),
662-
ocaml_build_path_abs.join(format!("{}.cmti", module_name)),
659+
.join(format!("{module_name}.cmti")),
660+
ocaml_build_path_abs.join(format!("{module_name}.cmti")),
663661
);
664662
let _ = std::fs::copy(
665663
package
666664
.get_build_path()
667665
.join(dir)
668-
.join(format!("{}.cmi", module_name)),
669-
ocaml_build_path_abs.join(format!("{}.cmi", module_name)),
666+
.join(format!("{module_name}.cmi")),
667+
ocaml_build_path_abs.join(format!("{module_name}.cmi")),
670668
);
671669
}
672670

673-
match &module.source_type {
674-
SourceType::SourceFile(SourceFile {
675-
interface: Some(Interface { path, .. }),
676-
..
677-
}) => {
678-
// we need to copy the source file to the build directory.
679-
// editor tools expects the source file in lib/bs for finding the current package
680-
// and in lib/ocaml when referencing modules in other packages
681-
let _ = std::fs::copy(
682-
Path::new(&package.path).join(path),
683-
package.get_build_path().join(path),
684-
)
685-
.expect("copying source file failed");
686-
687-
let _ = std::fs::copy(
688-
Path::new(&package.path).join(path),
689-
package
690-
.get_ocaml_build_path()
691-
.join(std::path::Path::new(path).file_name().unwrap()),
692-
)
693-
.expect("copying source file failed");
694-
}
695-
_ => (),
671+
if let SourceType::SourceFile(SourceFile {
672+
interface: Some(Interface { path, .. }),
673+
..
674+
}) = &module.source_type
675+
{
676+
// we need to copy the source file to the build directory.
677+
// editor tools expects the source file in lib/bs for finding the current package
678+
// and in lib/ocaml when referencing modules in other packages
679+
let _ = std::fs::copy(
680+
Path::new(&package.path).join(path),
681+
package.get_build_path().join(path),
682+
)
683+
.expect("copying source file failed");
684+
685+
let _ = std::fs::copy(
686+
Path::new(&package.path).join(path),
687+
package
688+
.get_ocaml_build_path()
689+
.join(std::path::Path::new(path).file_name().unwrap()),
690+
)
691+
.expect("copying source file failed");
696692
}
697-
match &module.source_type {
698-
SourceType::SourceFile(SourceFile {
699-
implementation: Implementation { path, .. },
700-
..
701-
}) => {
702-
// we need to copy the source file to the build directory.
703-
// editor tools expects the source file in lib/bs for finding the current package
704-
// and in lib/ocaml when referencing modules in other packages
705-
let _ = std::fs::copy(
706-
Path::new(&package.path).join(path),
707-
package.get_build_path().join(path),
708-
)
709-
.expect("copying source file failed");
710-
711-
let _ = std::fs::copy(
712-
Path::new(&package.path).join(path),
713-
package
714-
.get_ocaml_build_path()
715-
.join(std::path::Path::new(path).file_name().unwrap()),
716-
)
717-
.expect("copying source file failed");
718-
}
719-
_ => (),
693+
if let SourceType::SourceFile(SourceFile {
694+
implementation: Implementation { path, .. },
695+
..
696+
}) = &module.source_type
697+
{
698+
// we need to copy the source file to the build directory.
699+
// editor tools expects the source file in lib/bs for finding the current package
700+
// and in lib/ocaml when referencing modules in other packages
701+
let _ = std::fs::copy(
702+
Path::new(&package.path).join(path),
703+
package.get_build_path().join(path),
704+
)
705+
.expect("copying source file failed");
706+
707+
let _ = std::fs::copy(
708+
Path::new(&package.path).join(path),
709+
package
710+
.get_ocaml_build_path()
711+
.join(std::path::Path::new(path).file_name().unwrap()),
712+
)
713+
.expect("copying source file failed");
720714
}
721715

722716
// copy js file
723717
root_package.config.get_package_specs().iter().for_each(|spec| {
724718
if spec.in_source {
725-
match &module.source_type {
726-
SourceType::SourceFile(SourceFile {
727-
implementation: Implementation { path, .. },
728-
..
729-
}) => {
730-
let source = helpers::get_source_file_from_rescript_file(
731-
&Path::new(&package.path).join(path),
732-
&root_package.config.get_suffix(spec),
733-
);
734-
let destination = helpers::get_source_file_from_rescript_file(
735-
&package.get_build_path().join(path),
736-
&root_package.config.get_suffix(spec),
737-
);
738-
739-
if source.exists() {
740-
let _ =
741-
std::fs::copy(&source, &destination).expect("copying source file failed");
742-
}
719+
if let SourceType::SourceFile(SourceFile {
720+
implementation: Implementation { path, .. },
721+
..
722+
}) = &module.source_type
723+
{
724+
let source = helpers::get_source_file_from_rescript_file(
725+
&Path::new(&package.path).join(path),
726+
&root_package.config.get_suffix(spec),
727+
);
728+
let destination = helpers::get_source_file_from_rescript_file(
729+
&package.get_build_path().join(path),
730+
&root_package.config.get_suffix(spec),
731+
);
732+
733+
if source.exists() {
734+
let _ = std::fs::copy(&source, &destination).expect("copying source file failed");
743735
}
744-
_ => (),
745736
}
746737
}
747738
});

rewatch/src/build/compile/dependency_cycle.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,12 @@ fn find_shortest_cycle(modules: &Vec<(&String, &Module)>) -> Vec<String> {
6060
}
6161

6262
// Skip nodes with no incoming edges
63-
if in_degrees.get(&start_node).map_or(true, |&d| d == 0) {
63+
if in_degrees.get(&start_node).is_none_or(|&d| d == 0) {
6464
no_cycle_cache.insert(start_node.clone());
6565
continue;
6666
}
6767

68-
if let Some(cycle) = find_cycle_bfs(&start_node, &graph, current_shortest_length) {
68+
if let Some(cycle) = find_cycle_bfs(start_node, &graph, current_shortest_length) {
6969
if shortest_cycle.is_empty() || cycle.len() < shortest_cycle.len() {
7070
shortest_cycle = cycle.clone();
7171
current_shortest_length = cycle.len();

0 commit comments

Comments
 (0)