diff --git a/.ignore b/.ignore new file mode 100644 index 0000000..d88084b --- /dev/null +++ b/.ignore @@ -0,0 +1 @@ +mnn-sys/vendor diff --git a/.rules/no-println.yaml b/.rules/no-println.yaml deleted file mode 100644 index 80d2ee1..0000000 --- a/.rules/no-println.yaml +++ /dev/null @@ -1,11 +0,0 @@ -id: no_println -message: Do not use println! use `tracing::info`/`tracing::trace`/`tracing::debug` instead -severity: warning -language: Rust -rule: - all: - - kind: macro_invocation - - pattern: println!($$$ITEMS) -fix: tracing::info!($$$ITEMS) -ignores: - - ./*build.rs diff --git a/.rules/no-unwrap.yml b/.rules/no-unwrap.yml deleted file mode 100644 index 048d613..0000000 --- a/.rules/no-unwrap.yml +++ /dev/null @@ -1,8 +0,0 @@ -id: no_unwrap -message: Do not use unwrap -description: Do not use unwrap -severity: warning -language: Rust -rule: - pattern: $ITEM.unwrap() -exclude: ./*build.rs diff --git a/flake.nix b/flake.nix index 71e2289..8f0540e 100644 --- a/flake.nix +++ b/flake.nix @@ -158,7 +158,7 @@ partitionType = "count"; cargoExtraArgs = "-p mnn-sys"; }); - # mnn-lints = sgLib.scan ./.; + mnn-lints = sgLib.scan ./.; # mnn-asan = let # rustPlatform = pkgs.makeRustPlatform { # cargo = nightlyToolchain; diff --git a/sgconfig.yml b/sgconfig.yml index f98224b..57747fa 100644 --- a/sgconfig.yml +++ b/sgconfig.yml @@ -1,2 +1,6 @@ ruleDirs: -- ./.rules +- ./tools/sg-lints/lints +utilDirs: +- ./tools/sg-lints/utils +ignores: + - mnn-sys/vendor diff --git a/src/interpreter.rs b/src/interpreter.rs index 4fc5408..8cd1569 100644 --- a/src/interpreter.rs +++ b/src/interpreter.rs @@ -292,7 +292,7 @@ impl Interpreter { let path = path.as_ref(); crate::ensure!(path.exists(), ErrorKind::IOError); let path = path.to_str().ok_or_else(|| error!(ErrorKind::AsciiError))?; - let c_path = std::ffi::CString::new(path).unwrap(); + let c_path = std::ffi::CString::new(path).change_context(ErrorKind::AsciiError)?; unsafe { mnn_sys::modelPrintIO(c_path.as_ptr()) } Ok(()) } @@ -384,7 +384,7 @@ impl Interpreter { name: impl AsRef, ) -> Tensor>> { let name = name.as_ref(); - let c_name = std::ffi::CString::new(name).unwrap(); + let c_name = std::ffi::CString::new(name).change_context(ErrorKind::AsciiError)?; let input = mnn_sys::Interpreter_getSessionInput(self.inner, session.inner, c_name.as_ptr()); Tensor::from_ptr(input) @@ -866,7 +866,7 @@ fn check_whether_sync_actually_works() { } #[test] -#[ignore = "This test doesn't work in CI"] +#[ignore = "Fails on CI"] fn try_to_drop_interpreter_before_session() { let file = Path::new("tests/assets/realesr.mnn") .canonicalize() diff --git a/tools/sg-lints/lints/no-println.yaml b/tools/sg-lints/lints/no-println.yaml new file mode 100644 index 0000000..b053ef3 --- /dev/null +++ b/tools/sg-lints/lints/no-println.yaml @@ -0,0 +1,22 @@ +id: no-println +message: Do not use println! use `tracing::info`/`tracing::trace`/`tracing::debug` instead +severity: warning +language: Rust +rule: + kind: macro_invocation + pattern: println!($$$ITEMS) + not: + inside: + stopBy: end + matches: is-test + +fix: tracing::info!($$$ITEMS) +files: + - src/**/*.rs + - mnn-sync/src/*.rs + - mnn-sys/src/*.rs + - mnn-bridge/src/**/*.rs +ignores: + - build.rs + - mnn-sys/build.rs + - mnn-sys/vendor/**/*.rs diff --git a/tools/sg-lints/lints/no-unwrap.yml b/tools/sg-lints/lints/no-unwrap.yml new file mode 100644 index 0000000..39d395a --- /dev/null +++ b/tools/sg-lints/lints/no-unwrap.yml @@ -0,0 +1,19 @@ +id: no-unwrap +message: Do not use unwrap +severity: error +language: Rust +rule: + pattern: $ITEM.unwrap() + not: + inside: + stopBy: end + matches: is-test +files: + - src/**/*.rs + - mnn-sync/src/*.rs + - mnn-sys/src/*.rs + - mnn-bridge/src/**/*.rs +ignores: + - build.rs + - mnn-sys/vendor/**/*.rs + diff --git a/tools/sg-lints/utils/is-test.yml b/tools/sg-lints/utils/is-test.yml new file mode 100644 index 0000000..23df265 --- /dev/null +++ b/tools/sg-lints/utils/is-test.yml @@ -0,0 +1,23 @@ +id: is-test +language: Rust + +rule: + all: + - kind: function_item + - follows: + stopBy: + kind: function_item + matches: test-token + +utils: + test-token: + kind: attribute_item + has: + kind: attribute + has: + any: + - pattern: test + - pattern: tokio::test + +ignores: + - mnn-sys/vendor/**/*.rs