You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by xu...@apache.org on 2025/06/27 06:40:21 UTC

(opendal) branch main updated: chore: fix clippy warnings when using rust 1.88 (#6339)

This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new 9b1b98bbb chore: fix clippy warnings when using rust 1.88 (#6339)
9b1b98bbb is described below

commit 9b1b98bbb121389e350b6dcd3768b39e73e38738
Author: Qinxuan Chen <ko...@gmail.com>
AuthorDate: Fri Jun 27 14:40:14 2025 +0800

    chore: fix clippy warnings when using rust 1.88 (#6339)
    
    * chore: fix clippy warnings when using rust 1.88
    
    * fix clippy warnings of bindings/odev/integrations
    
    * cargo fmt
---
 bin/oay/src/services/s3/service.rs         |   2 +-
 bin/oli/src/commands/bench/suite.rs        |   2 +-
 bin/oli/src/commands/cp.rs                 |   8 +-
 bin/oli/src/commands/edit.rs               |   4 +-
 bin/oli/src/commands/ls.rs                 |   6 +-
 bin/oli/src/commands/mv.rs                 |   4 +-
 bin/oli/tests/integration/edit.rs          |   6 +-
 bin/oli/tests/integration/test_utils.rs    |   2 +-
 bindings/haskell/src/result.rs             |   2 +-
 bindings/java/src/convert.rs               |   7 +-
 bindings/java/src/lib.rs                   |   2 +-
 bindings/nodejs/src/lib.rs                 |   2 +-
 bindings/ruby/src/middlewares.rs           |   2 +-
 core/src/layers/immutable_index.rs         |   4 +-
 core/src/layers/logging.rs                 |   2 +-
 core/src/layers/oteltrace.rs               |  16 ++--
 core/src/raw/azure.rs                      |  24 ++----
 core/src/raw/http_util/multipart.rs        |   2 +-
 core/src/raw/oio/write/position_write.rs   |   6 +-
 core/src/raw/path_cache.rs                 |   2 +-
 core/src/services/aliyun_drive/backend.rs  |   2 +-
 core/src/services/aliyun_drive/core.rs     |   2 +-
 core/src/services/alluxio/lister.rs        |   2 +-
 core/src/services/azblob/backend.rs        |   2 +-
 core/src/services/azdls/backend.rs         |   2 +-
 core/src/services/azfile/backend.rs        |   2 +-
 core/src/services/cloudflare_kv/backend.rs |   7 +-
 core/src/services/cos/backend.rs           |   2 +-
 core/src/services/d1/model.rs              |   2 +-
 core/src/services/dbfs/backend.rs          |   2 +-
 core/src/services/dropbox/backend.rs       |   4 +-
 core/src/services/gcs/backend.rs           |   4 +-
 core/src/services/gcs/core.rs              |   2 +-
 core/src/services/gdrive/builder.rs        |   2 +-
 core/src/services/gdrive/core.rs           |  34 +++-----
 core/src/services/ghac/backend.rs          |  13 ++--
 core/src/services/ghac/core.rs             |   2 +-
 core/src/services/github/backend.rs        |   2 +-
 core/src/services/github/core.rs           |   6 +-
 core/src/services/github/lister.rs         |   4 +-
 core/src/services/hdfs/backend.rs          |   4 +-
 core/src/services/hdfs_native/backend.rs   |   2 +-
 core/src/services/http/backend.rs          |   2 +-
 core/src/services/huggingface/backend.rs   |   2 +-
 core/src/services/ipfs/backend.rs          |   2 +-
 core/src/services/ipmfs/builder.rs         |   2 +-
 core/src/services/koofr/lister.rs          |   2 +-
 core/src/services/lakefs/core.rs           |   6 +-
 core/src/services/memcached/binary.rs      |   2 +-
 core/src/services/mini_moka/backend.rs     |   2 +-
 core/src/services/obs/backend.rs           |   2 +-
 core/src/services/onedrive/builder.rs      |   2 +-
 core/src/services/onedrive/core.rs         |   2 +-
 core/src/services/onedrive/lister.rs       |   4 +-
 core/src/services/s3/backend.rs            |   6 +-
 core/src/services/s3/core.rs               |   4 +-
 core/src/services/seafile/lister.rs        |   2 +-
 core/src/services/sftp/backend.rs          |   4 +-
 core/src/services/swift/backend.rs         |   2 +-
 core/src/services/swift/core.rs            |   2 +-
 core/src/services/tikv/backend.rs          |   2 +-
 core/src/services/upyun/lister.rs          |   2 +-
 core/src/services/upyun/writer.rs          |   2 +-
 core/src/services/vercel_blob/core.rs      |   2 +-
 core/src/services/webdav/backend.rs        |   2 +-
 core/src/services/webdav/core.rs           |   2 +-
 core/src/services/webhdfs/backend.rs       |   4 +-
 core/src/services/webhdfs/core.rs          |   2 +-
 core/src/services/webhdfs/writer.rs        |   4 +-
 core/src/services/yandex_disk/core.rs      |   4 +-
 core/src/services/yandex_disk/lister.rs    |   2 +-
 core/src/types/buffer.rs                   |  11 +--
 core/src/types/delete/deleter.rs           |   4 +-
 core/src/types/error.rs                    |   2 +-
 core/src/types/list.rs                     |   2 +-
 core/tests/behavior/async_list.rs          |  13 ++--
 dev/src/generate/java.rs                   |   6 +-
 dev/src/release/mod.rs                     |   2 +-
 dev/src/release/package.rs                 |   2 +-
 integrations/cloud_filter/src/lib.rs       |  12 +--
 integrations/dav-server/tests/test.rs      |   2 +-
 integrations/fuse3/src/file_system.rs      | 120 ++++++-----------------------
 integrations/virtiofs/src/error.rs         |  10 +--
 integrations/virtiofs/src/filesystem.rs    |   6 +-
 84 files changed, 183 insertions(+), 296 deletions(-)

diff --git a/bin/oay/src/services/s3/service.rs b/bin/oay/src/services/s3/service.rs
index 0c40777af..00876c3a7 100644
--- a/bin/oay/src/services/s3/service.rs
+++ b/bin/oay/src/services/s3/service.rs
@@ -80,7 +80,7 @@ async fn handle_list_objects(
     state: State<S3State>,
     params: Query<ListObjectsV2Params>,
 ) -> Result<OkResponse, ErrorResponse> {
-    log::debug!("got params: {:?}", params);
+    log::debug!("got params: {params:?}");
 
     if !state.op.info().full_capability().list_with_start_after {
         return Err(ErrorResponse {
diff --git a/bin/oli/src/commands/bench/suite.rs b/bin/oli/src/commands/bench/suite.rs
index 1f43965d2..3537be136 100644
--- a/bin/oli/src/commands/bench/suite.rs
+++ b/bin/oli/src/commands/bench/suite.rs
@@ -143,7 +143,7 @@ impl BenchSuite {
             rt.block_on(async {
                 println!("Deleting object at path: {path}");
                 if let Err(err) = op.delete(&path).await {
-                    eprintln!("failed to delete object: {}", err);
+                    eprintln!("failed to delete object: {err}");
                 }
             });
         }
diff --git a/bin/oli/src/commands/cp.rs b/bin/oli/src/commands/cp.rs
index c24035b33..23a5b242c 100644
--- a/bin/oli/src/commands/cp.rs
+++ b/bin/oli/src/commands/cp.rs
@@ -163,8 +163,7 @@ impl CopyCmd {
             let entry_path = Path::new(depath);
             let relative_path = entry_path.strip_prefix(src_root_path).with_context(|| {
                 format!(
-                    "Internal error: Lister path '{}' does not start with source path '{}'",
-                    depath, src_path
+                    "Internal error: Lister path '{depath}' does not start with source path '{src_path}'"
                 )
             })?; // relative_path is a &Path
 
@@ -182,10 +181,7 @@ impl CopyCmd {
 
             // Explicitly stat the source file to get fresh metadata
             let fresh_meta = src_op.stat(depath).await.with_context(|| {
-                format!(
-                    "Failed to stat source file '{}' before recursive copy",
-                    depath
-                )
+                format!("Failed to stat source file '{depath}' before recursive copy")
             })?;
 
             // Use the Path object `current_dst_path_path` to check parent
diff --git a/bin/oli/src/commands/edit.rs b/bin/oli/src/commands/edit.rs
index a6110a5c5..cd2c4168e 100644
--- a/bin/oli/src/commands/edit.rs
+++ b/bin/oli/src/commands/edit.rs
@@ -118,12 +118,12 @@ impl EditCmd {
             // Try to upload the modified content
             match op.write(&path, new_content_vec.clone()).await {
                 Ok(_) => {
-                    println!("File uploaded successfully to {}", path);
+                    println!("File uploaded successfully to {path}");
                     // Successfully uploaded, temp_file_persister can be dropped, deleting the temp file.
                 }
                 Err(e) => {
                     // Upload failed, offer to save temp file
-                    eprintln!("Error uploading file: {}", e);
+                    eprintln!("Error uploading file: {e}");
                     let kept_path = temp_file_persister
                         .keep()
                         .context("Failed to preserve temporary file after upload error")?;
diff --git a/bin/oli/src/commands/ls.rs b/bin/oli/src/commands/ls.rs
index a2b65987f..224244a47 100644
--- a/bin/oli/src/commands/ls.rs
+++ b/bin/oli/src/commands/ls.rs
@@ -147,11 +147,11 @@ fn print_tree(node: &TreeNode, prefix: &str) {
             TREE_MIDDLE_ITEM
         };
         let display_name = if child_node.is_dir {
-            format!("{}/", name)
+            format!("{name}/")
         } else {
             name.to_string()
         };
-        println!("{}{}{}", prefix, connector, display_name);
+        println!("{prefix}{connector}{display_name}");
 
         if !child_node.children.is_empty() {
             let new_prefix = if is_last {
@@ -159,7 +159,7 @@ fn print_tree(node: &TreeNode, prefix: &str) {
             } else {
                 TREE_VERTICAL_LINE
             };
-            print_tree(child_node, &format!("{}{}", prefix, new_prefix));
+            print_tree(child_node, &format!("{prefix}{new_prefix}"));
         }
     }
 }
diff --git a/bin/oli/src/commands/mv.rs b/bin/oli/src/commands/mv.rs
index 1a72ecb90..51381f6a0 100644
--- a/bin/oli/src/commands/mv.rs
+++ b/bin/oli/src/commands/mv.rs
@@ -65,7 +65,7 @@ impl MoveCmd {
                 actual_dst_path.push_str(file_name);
             }
 
-            println!("Moving: {}", src_path);
+            println!("Moving: {src_path}");
             self.cp_file(
                 &src_op,
                 &src_path,
@@ -91,7 +91,7 @@ impl MoveCmd {
             let suffix = path.strip_prefix(prefix).expect("invalid path");
             let depath = dst_root.join(suffix);
 
-            println!("Moving: {}", path);
+            println!("Moving: {path}");
             let meta = entry.metadata();
             if meta.is_dir() {
                 dst_op.create_dir(&depath.to_string_lossy()).await?;
diff --git a/bin/oli/tests/integration/edit.rs b/bin/oli/tests/integration/edit.rs
index f968f13a2..c43671496 100644
--- a/bin/oli/tests/integration/edit.rs
+++ b/bin/oli/tests/integration/edit.rs
@@ -48,8 +48,7 @@ fn create_modifying_editor(
 ) -> Result<std::path::PathBuf> {
     let editor_path = dir.join("modifying_editor.sh");
     let script_content = format!(
-        "#!/bin/bash\n# Mock editor that adds content to the file\necho '{}' >> \"$1\"\nexit 0\n",
-        content_to_add
+        "#!/bin/bash\n# Mock editor that adds content to the file\necho '{content_to_add}' >> \"$1\"\nexit 0\n"
     );
     fs::write(&editor_path, script_content)?;
 
@@ -69,8 +68,7 @@ fn create_modifying_editor(
 fn create_replacing_editor(dir: &std::path::Path, new_content: &str) -> Result<std::path::PathBuf> {
     let editor_path = dir.join("replacing_editor.sh");
     let script_content = format!(
-        "#!/bin/bash\n# Mock editor that replaces file content\necho '{}' > \"$1\"\nexit 0\n",
-        new_content
+        "#!/bin/bash\n# Mock editor that replaces file content\necho '{new_content}' > \"$1\"\nexit 0\n"
     );
     fs::write(&editor_path, script_content)?;
 
diff --git a/bin/oli/tests/integration/test_utils.rs b/bin/oli/tests/integration/test_utils.rs
index 945e39214..49d2120a1 100644
--- a/bin/oli/tests/integration/test_utils.rs
+++ b/bin/oli/tests/integration/test_utils.rs
@@ -117,7 +117,7 @@ impl std::fmt::Display for DirectorySnapshot {
             }
             table.add_row(row);
         }
-        write!(f, "{}", table)
+        write!(f, "{table}")
     }
 }
 
diff --git a/bindings/haskell/src/result.rs b/bindings/haskell/src/result.rs
index fd770d8f5..df8aacc42 100644
--- a/bindings/haskell/src/result.rs
+++ b/bindings/haskell/src/result.rs
@@ -65,7 +65,7 @@ impl<T> FFIResult<T> {
     }
 
     pub fn err_with_source(error_message: &str, source: od::Error) -> Self {
-        let msg = format!("{}, source error: {}", error_message, source);
+        let msg = format!("{error_message}, source error: {source}");
         let c_string = CString::new(msg).unwrap();
         FFIResult {
             code: source.kind().into(),
diff --git a/bindings/java/src/convert.rs b/bindings/java/src/convert.rs
index ade4d490c..331563fdf 100644
--- a/bindings/java/src/convert.rs
+++ b/bindings/java/src/convert.rs
@@ -117,7 +117,7 @@ pub(crate) fn read_jlong_field_to_usize(
         v if v > 0 => Ok(Some(v as usize)),
         v => Err(Error::new(
             ErrorKind::Unexpected,
-            format!("{} must be positive, instead got: {}", field_name, v),
+            format!("{field_name} must be positive, instead got: {v}"),
         )
         .into()),
     }
@@ -142,10 +142,7 @@ pub(crate) fn read_instant_field_to_date_time(
         .ok_or_else(|| {
             Error::new(
                 ErrorKind::Unexpected,
-                format!(
-                    "Invalid timestamp: seconds={}, nanos={}",
-                    epoch_second, nano
-                ),
+                format!("Invalid timestamp: seconds={epoch_second}, nanos={nano}"),
             )
             .into()
         })
diff --git a/bindings/java/src/lib.rs b/bindings/java/src/lib.rs
index c927a14b2..3fe64cc4f 100644
--- a/bindings/java/src/lib.rs
+++ b/bindings/java/src/lib.rs
@@ -217,7 +217,7 @@ fn make_write_options<'a>(
         v => {
             return Err(Error::new(
                 ErrorKind::Unexpected,
-                format!("Concurrent must be positive, instead got: {}", v),
+                format!("Concurrent must be positive, instead got: {v}"),
             )
             .into())
         }
diff --git a/bindings/nodejs/src/lib.rs b/bindings/nodejs/src/lib.rs
index 5d4429416..e9e0c25ba 100644
--- a/bindings/nodejs/src/lib.rs
+++ b/bindings/nodejs/src/lib.rs
@@ -1232,5 +1232,5 @@ impl RetryLayer {
 ///
 /// FIXME: handle error correctly.
 fn format_napi_error(err: impl Display) -> Error {
-    Error::from_reason(format!("{}", err))
+    Error::from_reason(format!("{err}"))
 }
diff --git a/bindings/ruby/src/middlewares.rs b/bindings/ruby/src/middlewares.rs
index 8060c1368..4054382dd 100644
--- a/bindings/ruby/src/middlewares.rs
+++ b/bindings/ruby/src/middlewares.rs
@@ -52,7 +52,7 @@ where
     let guard = inner.lock().map_err(|_| {
         Error::new(
             ruby.exception_runtime_error(),
-            format!("poisoned {} mutex", name),
+            format!("poisoned {name} mutex"),
         )
     })?;
 
diff --git a/core/src/layers/immutable_index.rs b/core/src/layers/immutable_index.rs
index 28f67ef81..8d735c003 100644
--- a/core/src/layers/immutable_index.rs
+++ b/core/src/layers/immutable_index.rs
@@ -296,7 +296,7 @@ mod tests {
             map.insert(entry.path().to_string(), entry.metadata().mode());
         }
 
-        debug!("current files: {:?}", map);
+        debug!("current files: {map:?}");
 
         assert_eq!(map["file"], EntryMode::FILE);
         assert_eq!(map["dir/"], EntryMode::DIR);
@@ -398,7 +398,7 @@ mod tests {
             map.insert(entry.path().to_string(), entry.metadata().mode());
         }
 
-        debug!("current files: {:?}", map);
+        debug!("current files: {map:?}");
 
         assert_eq!(map["dataset/stateful/ontime_2007_200.csv"], EntryMode::FILE);
         assert_eq!(map["dataset/stateful/ontime_2008_200.csv"], EntryMode::FILE);
diff --git a/core/src/layers/logging.rs b/core/src/layers/logging.rs
index 208d19ad2..da3dd814a 100644
--- a/core/src/layers/logging.rs
+++ b/core/src/layers/logging.rs
@@ -226,7 +226,7 @@ struct LoggingContext<'a>(&'a [(&'a str, &'a str)]);
 impl Display for LoggingContext<'_> {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
         for (k, v) in self.0.iter() {
-            write!(f, " {}={}", k, v)?;
+            write!(f, " {k}={v}")?;
         }
         Ok(())
     }
diff --git a/core/src/layers/oteltrace.rs b/core/src/layers/oteltrace.rs
index 4b41ebece..6523fcaa1 100644
--- a/core/src/layers/oteltrace.rs
+++ b/core/src/layers/oteltrace.rs
@@ -84,7 +84,7 @@ impl<A: Access> LayeredAccess for OtelTraceAccessor<A> {
         let tracer = global::tracer("opendal");
         let mut span = tracer.start("create");
         span.set_attribute(KeyValue::new("path", path.to_string()));
-        span.set_attribute(KeyValue::new("args", format!("{:?}", args)));
+        span.set_attribute(KeyValue::new("args", format!("{args:?}")));
         let cx = TraceContext::current_with_span(span);
         self.inner.create_dir(path, args).with_context(cx).await
     }
@@ -93,7 +93,7 @@ impl<A: Access> LayeredAccess for OtelTraceAccessor<A> {
         let tracer = global::tracer("opendal");
         let mut span = tracer.start("read");
         span.set_attribute(KeyValue::new("path", path.to_string()));
-        span.set_attribute(KeyValue::new("args", format!("{:?}", args)));
+        span.set_attribute(KeyValue::new("args", format!("{args:?}")));
         self.inner
             .read(path, args)
             .await
@@ -104,7 +104,7 @@ impl<A: Access> LayeredAccess for OtelTraceAccessor<A> {
         let tracer = global::tracer("opendal");
         let mut span = tracer.start("write");
         span.set_attribute(KeyValue::new("path", path.to_string()));
-        span.set_attribute(KeyValue::new("args", format!("{:?}", args)));
+        span.set_attribute(KeyValue::new("args", format!("{args:?}")));
         self.inner
             .write(path, args)
             .await
@@ -116,7 +116,7 @@ impl<A: Access> LayeredAccess for OtelTraceAccessor<A> {
         let mut span = tracer.start("copy");
         span.set_attribute(KeyValue::new("from", from.to_string()));
         span.set_attribute(KeyValue::new("to", to.to_string()));
-        span.set_attribute(KeyValue::new("args", format!("{:?}", args)));
+        span.set_attribute(KeyValue::new("args", format!("{args:?}")));
         let cx = TraceContext::current_with_span(span);
         self.inner().copy(from, to, args).with_context(cx).await
     }
@@ -126,7 +126,7 @@ impl<A: Access> LayeredAccess for OtelTraceAccessor<A> {
         let mut span = tracer.start("rename");
         span.set_attribute(KeyValue::new("from", from.to_string()));
         span.set_attribute(KeyValue::new("to", to.to_string()));
-        span.set_attribute(KeyValue::new("args", format!("{:?}", args)));
+        span.set_attribute(KeyValue::new("args", format!("{args:?}")));
         let cx = TraceContext::current_with_span(span);
         self.inner().rename(from, to, args).with_context(cx).await
     }
@@ -135,7 +135,7 @@ impl<A: Access> LayeredAccess for OtelTraceAccessor<A> {
         let tracer = global::tracer("opendal");
         let mut span = tracer.start("stat");
         span.set_attribute(KeyValue::new("path", path.to_string()));
-        span.set_attribute(KeyValue::new("args", format!("{:?}", args)));
+        span.set_attribute(KeyValue::new("args", format!("{args:?}")));
         let cx = TraceContext::current_with_span(span);
         self.inner().stat(path, args).with_context(cx).await
     }
@@ -148,7 +148,7 @@ impl<A: Access> LayeredAccess for OtelTraceAccessor<A> {
         let tracer = global::tracer("opendal");
         let mut span = tracer.start("list");
         span.set_attribute(KeyValue::new("path", path.to_string()));
-        span.set_attribute(KeyValue::new("args", format!("{:?}", args)));
+        span.set_attribute(KeyValue::new("args", format!("{args:?}")));
         self.inner
             .list(path, args)
             .await
@@ -159,7 +159,7 @@ impl<A: Access> LayeredAccess for OtelTraceAccessor<A> {
         let tracer = global::tracer("opendal");
         let mut span = tracer.start("presign");
         span.set_attribute(KeyValue::new("path", path.to_string()));
-        span.set_attribute(KeyValue::new("args", format!("{:?}", args)));
+        span.set_attribute(KeyValue::new("args", format!("{args:?}")));
         let cx = TraceContext::current_with_span(span);
         self.inner().presign(path, args).with_context(cx).await
     }
diff --git a/core/src/raw/azure.rs b/core/src/raw/azure.rs
index 2d8783d7b..bfa58ee00 100644
--- a/core/src/raw/azure.rs
+++ b/core/src/raw/azure.rs
@@ -116,10 +116,7 @@ fn parse_connection_string(conn_str: &str) -> Result<HashMap<String, String>> {
         .map(|field| {
             let (key, value) = field.trim().split_once('=').ok_or(Error::new(
                 ErrorKind::ConfigInvalid,
-                format!(
-                    "Invalid connection string, expected '=' in field: {}",
-                    field
-                ),
+                format!("Invalid connection string, expected '=' in field: {field}"),
             ))?;
             Ok((key.to_string(), value.to_string()))
         })
@@ -265,7 +262,7 @@ fn collect_endpoint_from_parts(
     if protocol != "http" && protocol != "https" {
         return Err(Error::new(
             ErrorKind::ConfigInvalid,
-            format!("Invalid DefaultEndpointsProtocol: {}", protocol),
+            format!("Invalid DefaultEndpointsProtocol: {protocol}"),
         ));
     }
 
@@ -430,7 +427,7 @@ mod tests {
             if let Some(expected) = expected {
                 assert_azure_storage_config_eq(&actual.expect(name), &expected, name);
             } else {
-                assert!(actual.is_err(), "Expected error for case: {}", name);
+                assert!(actual.is_err(), "Expected error for case: {name}");
             }
         }
     }
@@ -457,8 +454,7 @@ mod tests {
             assert_eq!(
                 account_name,
                 expected_account_name.map(|s| s.to_string()),
-                "Endpoint: {}",
-                endpoint
+                "Endpoint: {endpoint}"
             );
         }
     }
@@ -471,23 +467,19 @@ mod tests {
     ) {
         assert_eq!(
             actual.account_name, expected.account_name,
-            "account_name mismatch: {}",
-            name
+            "account_name mismatch: {name}"
         );
         assert_eq!(
             actual.account_key, expected.account_key,
-            "account_key mismatch: {}",
-            name
+            "account_key mismatch: {name}"
         );
         assert_eq!(
             actual.endpoint, expected.endpoint,
-            "endpoint mismatch: {}",
-            name
+            "endpoint mismatch: {name}"
         );
         assert_eq!(
             actual.sas_token, expected.sas_token,
-            "sas_token mismatch: {}",
-            name
+            "sas_token mismatch: {name}"
         );
     }
 }
diff --git a/core/src/raw/http_util/multipart.rs b/core/src/raw/http_util/multipart.rs
index 556677c67..4d442d395 100644
--- a/core/src/raw/http_util/multipart.rs
+++ b/core/src/raw/http_util/multipart.rs
@@ -182,7 +182,7 @@ impl FormDataPart {
         let mut headers = HeaderMap::new();
         headers.insert(
             CONTENT_DISPOSITION,
-            format!("form-data; name=\"{}\"", name).parse().unwrap(),
+            format!("form-data; name=\"{name}\"").parse().unwrap(),
         );
 
         Self {
diff --git a/core/src/raw/oio/write/position_write.rs b/core/src/raw/oio/write/position_write.rs
index 6aed255ad..fc46732d5 100644
--- a/core/src/raw/oio/write/position_write.rs
+++ b/core/src/raw/oio/write/position_write.rs
@@ -254,7 +254,7 @@ mod tests {
                 match w.write(bs.clone().into()).await {
                     Ok(_) => break,
                     Err(e) => {
-                        println!("write error: {:?}", e);
+                        println!("write error: {e:?}");
                         continue;
                     }
                 }
@@ -264,11 +264,11 @@ mod tests {
         loop {
             match w.close().await {
                 Ok(n) => {
-                    println!("close: {:?}", n);
+                    println!("close: {n:?}");
                     break;
                 }
                 Err(e) => {
-                    println!("close error: {:?}", e);
+                    println!("close error: {e:?}");
                     continue;
                 }
             }
diff --git a/core/src/raw/path_cache.rs b/core/src/raw/path_cache.rs
index 72bf1c523..7aee28fd3 100644
--- a/core/src/raw/path_cache.rs
+++ b/core/src/raw/path_cache.rs
@@ -238,7 +238,7 @@ mod tests {
             let cache = PathCacher::new(TestQuery {});
 
             let actual = cache.get(input).await.unwrap();
-            assert_eq!(actual.as_deref(), expect, "{}", name)
+            assert_eq!(actual.as_deref(), expect, "{name}")
         }
     }
 }
diff --git a/core/src/services/aliyun_drive/backend.rs b/core/src/services/aliyun_drive/backend.rs
index ca0d63e3e..2a1ca4893 100644
--- a/core/src/services/aliyun_drive/backend.rs
+++ b/core/src/services/aliyun_drive/backend.rs
@@ -171,7 +171,7 @@ impl Builder for AliyunDriveBuilder {
                 ))
             }
         };
-        debug!("backend use drive_type {:?}", drive_type);
+        debug!("backend use drive_type {drive_type:?}");
 
         Ok(AliyunDriveBackend {
             core: Arc::new(AliyunDriveCore {
diff --git a/core/src/services/aliyun_drive/core.rs b/core/src/services/aliyun_drive/core.rs
index 67df76de7..1b9c08703 100644
--- a/core/src/services/aliyun_drive/core.rs
+++ b/core/src/services/aliyun_drive/core.rs
@@ -85,7 +85,7 @@ impl AliyunDriveCore {
         // AliyunDrive raise NullPointerException if you haven't set a user-agent.
         req.headers_mut().insert(
             header::USER_AGENT,
-            HeaderValue::from_str(&format!("opendal/{}", VERSION))
+            HeaderValue::from_str(&format!("opendal/{VERSION}"))
                 .expect("user agent must be valid header value"),
         );
         if req.method() == Method::POST {
diff --git a/core/src/services/alluxio/lister.rs b/core/src/services/alluxio/lister.rs
index 56463ad4f..734e74c4e 100644
--- a/core/src/services/alluxio/lister.rs
+++ b/core/src/services/alluxio/lister.rs
@@ -49,7 +49,7 @@ impl oio::PageList for AlluxioLister {
                 for file_info in file_infos {
                     let path: String = file_info.path.clone();
                     let path = if file_info.folder {
-                        format!("{}/", path)
+                        format!("{path}/")
                     } else {
                         path
                     };
diff --git a/core/src/services/azblob/backend.rs b/core/src/services/azblob/backend.rs
index e075272d7..c6b99abc4 100644
--- a/core/src/services/azblob/backend.rs
+++ b/core/src/services/azblob/backend.rs
@@ -308,7 +308,7 @@ impl Builder for AzblobBuilder {
         debug!("backend build started: {:?}", &self);
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         // Handle endpoint, region and container name.
         let container = match self.config.container.is_empty() {
diff --git a/core/src/services/azdls/backend.rs b/core/src/services/azdls/backend.rs
index 6d11a8aa2..e4916acf9 100644
--- a/core/src/services/azdls/backend.rs
+++ b/core/src/services/azdls/backend.rs
@@ -256,7 +256,7 @@ impl Builder for AzdlsBuilder {
         debug!("backend build started: {:?}", &self);
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         // Handle endpoint, region and container name.
         let filesystem = match self.config.filesystem.is_empty() {
diff --git a/core/src/services/azfile/backend.rs b/core/src/services/azfile/backend.rs
index b710d6fdd..725580a81 100644
--- a/core/src/services/azfile/backend.rs
+++ b/core/src/services/azfile/backend.rs
@@ -188,7 +188,7 @@ impl Builder for AzfileBuilder {
         debug!("backend build started: {:?}", &self);
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let endpoint = match &self.config.endpoint {
             Some(endpoint) => Ok(endpoint.clone()),
diff --git a/core/src/services/cloudflare_kv/backend.rs b/core/src/services/cloudflare_kv/backend.rs
index 5d4a65a4b..aa48cb66d 100644
--- a/core/src/services/cloudflare_kv/backend.rs
+++ b/core/src/services/cloudflare_kv/backend.rs
@@ -137,8 +137,7 @@ impl Builder for CloudflareKvBuilder {
         );
 
         let url_prefix = format!(
-            r"https://api.cloudflare.com/client/v4/accounts/{}/storage/kv/namespaces/{}",
-            account_id, namespace_id
+            r"https://api.cloudflare.com/client/v4/accounts/{account_id}/storage/kv/namespaces/{namespace_id}"
         );
 
         Ok(CloudflareKvBackend::new(Adapter {
@@ -246,7 +245,7 @@ impl kv::Adapter for Adapter {
     async fn scan(&self, path: &str) -> Result<Self::Scanner> {
         let mut url = format!("{}/keys", self.url_prefix);
         if !path.is_empty() {
-            url = format!("{}?prefix={}", url, path);
+            url = format!("{url}?prefix={path}");
         }
         let mut req = Request::get(&url);
         req = req.header(header::CONTENT_TYPE, "application/json");
@@ -261,7 +260,7 @@ impl kv::Adapter for Adapter {
                     serde_json::from_reader(body.reader()).map_err(|e| {
                         Error::new(
                             ErrorKind::Unexpected,
-                            format!("failed to parse error response: {}", e),
+                            format!("failed to parse error response: {e}"),
                         )
                     })?;
                 Ok(Box::new(kv::ScanStdIter::new(
diff --git a/core/src/services/cos/backend.rs b/core/src/services/cos/backend.rs
index 8426ef3e7..8d9212596 100644
--- a/core/src/services/cos/backend.rs
+++ b/core/src/services/cos/backend.rs
@@ -171,7 +171,7 @@ impl Builder for CosBuilder {
         debug!("backend build started: {:?}", &self);
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let bucket = match &self.config.bucket {
             Some(bucket) => Ok(bucket.to_string()),
diff --git a/core/src/services/d1/model.rs b/core/src/services/d1/model.rs
index 861ac646f..4e8f6eb59 100644
--- a/core/src/services/d1/model.rs
+++ b/core/src/services/d1/model.rs
@@ -39,7 +39,7 @@ impl D1Response {
         let response: D1Response = serde_json::from_slice(bs).map_err(|e| {
             Error::new(
                 crate::ErrorKind::Unexpected,
-                format!("failed to parse error response: {}", e),
+                format!("failed to parse error response: {e}"),
             )
         })?;
 
diff --git a/core/src/services/dbfs/backend.rs b/core/src/services/dbfs/backend.rs
index 95b232fd8..1f4bc908e 100644
--- a/core/src/services/dbfs/backend.rs
+++ b/core/src/services/dbfs/backend.rs
@@ -104,7 +104,7 @@ impl Builder for DbfsBuilder {
         debug!("backend build started: {:?}", &self);
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let endpoint = match &self.config.endpoint {
             Some(endpoint) => Ok(endpoint.clone()),
diff --git a/core/src/services/dropbox/backend.rs b/core/src/services/dropbox/backend.rs
index ccd42de88..755bd4119 100644
--- a/core/src/services/dropbox/backend.rs
+++ b/core/src/services/dropbox/backend.rs
@@ -58,7 +58,7 @@ impl Access for DropboxBackend {
             if "file" == decoded_response.tag {
                 return Err(Error::new(
                     ErrorKind::NotADirectory,
-                    format!("it's not a directory {}", path),
+                    format!("it's not a directory {path}"),
                 ));
             }
         }
@@ -95,7 +95,7 @@ impl Access for DropboxBackend {
                     } else {
                         return Err(Error::new(
                             ErrorKind::Unexpected,
-                            format!("no size found for file {}", path),
+                            format!("no size found for file {path}"),
                         ));
                     }
                 }
diff --git a/core/src/services/gcs/backend.rs b/core/src/services/gcs/backend.rs
index fffbae0d0..4cd49677f 100644
--- a/core/src/services/gcs/backend.rs
+++ b/core/src/services/gcs/backend.rs
@@ -238,10 +238,10 @@ impl Builder for GcsBuilder {
     type Config = GcsConfig;
 
     fn build(self) -> Result<impl Access> {
-        debug!("backend build started: {:?}", self);
+        debug!("backend build started: {self:?}");
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         // Handle endpoint and bucket name
         let bucket = match self.config.bucket.is_empty() {
diff --git a/core/src/services/gcs/core.rs b/core/src/services/gcs/core.rs
index 34eafda8c..237e2257a 100644
--- a/core/src/services/gcs/core.rs
+++ b/core/src/services/gcs/core.rs
@@ -293,7 +293,7 @@ impl GcsCore {
         );
 
         if let Some(acl) = &self.predefined_acl {
-            write!(&mut url, "&predefinedAcl={}", acl).unwrap();
+            write!(&mut url, "&predefinedAcl={acl}").unwrap();
         }
 
         // Makes the operation conditional on whether the object's current generation
diff --git a/core/src/services/gdrive/builder.rs b/core/src/services/gdrive/builder.rs
index 1e6ed8fa4..9e9c62b02 100644
--- a/core/src/services/gdrive/builder.rs
+++ b/core/src/services/gdrive/builder.rs
@@ -140,7 +140,7 @@ impl Builder for GdriveBuilder {
 
     fn build(self) -> Result<impl Access> {
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let info = AccessorInfo::default();
         info.set_scheme(Scheme::Gdrive)
diff --git a/core/src/services/gdrive/core.rs b/core/src/services/gdrive/core.rs
index 2f9405ad4..cf2adb503 100644
--- a/core/src/services/gdrive/core.rs
+++ b/core/src/services/gdrive/core.rs
@@ -60,14 +60,13 @@ impl GdriveCore {
         let path = build_abs_path(&self.root, path);
         let file_id = self.path_cache.get(&path).await?.ok_or(Error::new(
             ErrorKind::NotFound,
-            format!("path not found: {}", path),
+            format!("path not found: {path}"),
         ))?;
 
         // The file metadata in the Google Drive API is very complex.
         // For now, we only need the file id, name, mime type and modified time.
         let mut req = Request::get(format!(
-            "https://www.googleapis.com/drive/v3/files/{}?fields=id,name,mimeType,size,modifiedTime",
-            file_id
+            "https://www.googleapis.com/drive/v3/files/{file_id}?fields=id,name,mimeType,size,modifiedTime"
         ))
             .extension(Operation::Stat)
             .body(Buffer::new())
@@ -81,13 +80,10 @@ impl GdriveCore {
         let path = build_abs_path(&self.root, path);
         let path_id = self.path_cache.get(&path).await?.ok_or(Error::new(
             ErrorKind::NotFound,
-            format!("path not found: {}", path),
+            format!("path not found: {path}"),
         ))?;
 
-        let url: String = format!(
-            "https://www.googleapis.com/drive/v3/files/{}?alt=media",
-            path_id
-        );
+        let url: String = format!("https://www.googleapis.com/drive/v3/files/{path_id}?alt=media");
 
         let mut req = Request::get(&url)
             .extension(Operation::Read)
@@ -105,7 +101,7 @@ impl GdriveCore {
         page_size: i32,
         next_page_token: &str,
     ) -> Result<Response<Buffer>> {
-        let q = format!("'{}' in parents and trashed = false", file_id);
+        let q = format!("'{file_id}' in parents and trashed = false");
         let url = "https://www.googleapis.com/drive/v3/files";
         let mut url = QueryPairsWriter::new(url);
         url = url.push("pageSize", &page_size.to_string());
@@ -131,7 +127,7 @@ impl GdriveCore {
     ) -> Result<Response<Buffer>> {
         let source_file_id = self.path_cache.get(source).await?.ok_or(Error::new(
             ErrorKind::NotFound,
-            format!("source path not found: {}", source),
+            format!("source path not found: {source}"),
         ))?;
         let source_parent = get_parent(source);
         let source_parent_id = self
@@ -149,10 +145,7 @@ impl GdriveCore {
             "addParents": [target_parent_id],
         });
 
-        let url = format!(
-            "https://www.googleapis.com/drive/v3/files/{}",
-            source_file_id
-        );
+        let url = format!("https://www.googleapis.com/drive/v3/files/{source_file_id}");
         let mut req = Request::patch(url)
             .extension(Operation::Rename)
             .body(Buffer::from(Bytes::from(metadata.to_string())))
@@ -164,7 +157,7 @@ impl GdriveCore {
     }
 
     pub async fn gdrive_trash(&self, file_id: &str) -> Result<Response<Buffer>> {
-        let url = format!("https://www.googleapis.com/drive/v3/files/{}", file_id);
+        let url = format!("https://www.googleapis.com/drive/v3/files/{file_id}");
 
         let body = serde_json::to_vec(&json!({
             "trashed": true
@@ -240,10 +233,8 @@ impl GdriveCore {
         size: u64,
         body: Buffer,
     ) -> Result<Response<Buffer>> {
-        let url = format!(
-            "https://www.googleapis.com/upload/drive/v3/files/{}?uploadType=media",
-            file_id
-        );
+        let url =
+            format!("https://www.googleapis.com/upload/drive/v3/files/{file_id}?uploadType=media");
 
         let mut req = Request::patch(url)
             .header(header::CONTENT_TYPE, "application/octet-stream")
@@ -286,10 +277,7 @@ impl GdriveCore {
             self.path_cache.remove(&to_path).await;
         }
 
-        let url = format!(
-            "https://www.googleapis.com/drive/v3/files/{}/copy",
-            from_file_id
-        );
+        let url = format!("https://www.googleapis.com/drive/v3/files/{from_file_id}/copy");
 
         let request_body = &json!({
             "name": to_name,
diff --git a/core/src/services/ghac/backend.rs b/core/src/services/ghac/backend.rs
index b4bcf7f48..08a6f6d47 100644
--- a/core/src/services/ghac/backend.rs
+++ b/core/src/services/ghac/backend.rs
@@ -41,10 +41,7 @@ fn value_or_env(
     }
 
     env::var(env_var_name).map_err(|err| {
-        let text = format!(
-            "{} not found, maybe not in github action environment?",
-            env_var_name
-        );
+        let text = format!("{env_var_name} not found, maybe not in github action environment?");
         Error::new(ErrorKind::ConfigInvalid, text)
             .with_operation(operation)
             .set_source(err)
@@ -143,13 +140,13 @@ impl Builder for GhacBuilder {
     type Config = GhacConfig;
 
     fn build(self) -> Result<impl Access> {
-        debug!("backend build started: {:?}", self);
+        debug!("backend build started: {self:?}");
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let service_version = get_cache_service_version();
-        debug!("backend use service version {:?}", service_version);
+        debug!("backend use service version {service_version:?}");
 
         let mut version = self
             .config
@@ -160,7 +157,7 @@ impl Builder for GhacBuilder {
         // ghac requires to use hex digest of Sha256 as version.
         if matches!(service_version, GhacVersion::V2) {
             let hash = sha2::Sha256::digest(&version);
-            version = format!("{:x}", hash);
+            version = format!("{hash:x}");
         }
 
         let cache_url = self
diff --git a/core/src/services/ghac/core.rs b/core/src/services/ghac/core.rs
index 84ddebcce..95961de37 100644
--- a/core/src/services/ghac/core.rs
+++ b/core/src/services/ghac/core.rs
@@ -280,7 +280,7 @@ impl GhacCore {
                             ErrorKind::Unexpected,
                             "create cache entry returns non-ok",
                         )
-                        .with_context("parts", format!("{:?}", parts)));
+                        .with_context("parts", format!("{parts:?}")));
                     }
                     query_resp.signed_upload_url
                 } else {
diff --git a/core/src/services/github/backend.rs b/core/src/services/github/backend.rs
index 0232a2c00..6830c693c 100644
--- a/core/src/services/github/backend.rs
+++ b/core/src/services/github/backend.rs
@@ -211,7 +211,7 @@ impl Access for GithubBackend {
 
         let resp = self
             .core
-            .upload(&format!("{}.gitkeep", path), empty_bytes)
+            .upload(&format!("{path}.gitkeep"), empty_bytes)
             .await?;
 
         let status = resp.status();
diff --git a/core/src/services/github/core.rs b/core/src/services/github/core.rs
index 94f096dcb..a91122b0f 100644
--- a/core/src/services/github/core.rs
+++ b/core/src/services/github/core.rs
@@ -66,7 +66,7 @@ impl GithubCore {
 
     pub fn sign(&self, req: request::Builder) -> Result<request::Builder> {
         let mut req = req
-            .header(header::USER_AGENT, format!("opendal-{}", VERSION))
+            .header(header::USER_AGENT, format!("opendal-{VERSION}"))
             .header("X-GitHub-Api-Version", "2022-11-28");
 
         // Github access_token is optional.
@@ -195,7 +195,7 @@ impl GithubCore {
 
     pub async fn delete(&self, path: &str) -> Result<()> {
         // If path is a directory, we should delete path/.gitkeep
-        let formatted_path = format!("{}.gitkeep", path);
+        let formatted_path = format!("{path}.gitkeep");
         let p = if path.ends_with('/') {
             formatted_path.as_str()
         } else {
@@ -280,7 +280,7 @@ impl GithubCore {
 
     /// We use git_url to call github's Tree based API.
     pub async fn list_with_recursive(&self, git_url: &str) -> Result<Vec<Tree>> {
-        let url = format!("{}?recursive=true", git_url);
+        let url = format!("{git_url}?recursive=true");
 
         let req = Request::get(url);
 
diff --git a/core/src/services/github/lister.rs b/core/src/services/github/lister.rs
index fce494713..ac36bff67 100644
--- a/core/src/services/github/lister.rs
+++ b/core/src/services/github/lister.rs
@@ -53,7 +53,7 @@ impl oio::PageList for GithubLister {
             for entry in resp.entries {
                 let path = build_rel_path(&self.core.root, &entry.path);
                 let entry = if entry.type_field == "dir" {
-                    let path = format!("{}/", path);
+                    let path = format!("{path}/");
                     Entry::new(&path, Metadata::new(EntryMode::DIR))
                 } else {
                     if path.ends_with(".gitkeep") {
@@ -85,7 +85,7 @@ impl oio::PageList for GithubLister {
                 format!("{}/{}", self.path, t.path)
             };
             let entry = if t.type_field == "tree" {
-                let path = format!("{}/", path);
+                let path = format!("{path}/");
                 Entry::new(&path, Metadata::new(EntryMode::DIR))
             } else {
                 if path.ends_with(".gitkeep") {
diff --git a/core/src/services/hdfs/backend.rs b/core/src/services/hdfs/backend.rs
index b9af0f9a6..81e287228 100644
--- a/core/src/services/hdfs/backend.rs
+++ b/core/src/services/hdfs/backend.rs
@@ -140,7 +140,7 @@ impl Builder for HdfsBuilder {
         };
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let mut builder = hdrs::ClientBuilder::new(name_node);
         if let Some(ticket_cache_path) = &self.config.kerberos_ticket_cache_path {
@@ -155,7 +155,7 @@ impl Builder for HdfsBuilder {
         // Create root dir if not exist.
         if let Err(e) = client.metadata(&root) {
             if e.kind() == io::ErrorKind::NotFound {
-                debug!("root {} is not exist, creating now", root);
+                debug!("root {root} is not exist, creating now");
 
                 client.create_dir(&root).map_err(new_std_io_error)?
             }
diff --git a/core/src/services/hdfs_native/backend.rs b/core/src/services/hdfs_native/backend.rs
index fb515251b..99e485739 100644
--- a/core/src/services/hdfs_native/backend.rs
+++ b/core/src/services/hdfs_native/backend.rs
@@ -109,7 +109,7 @@ impl Builder for HdfsNativeBuilder {
         };
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let client = hdfs_native::Client::new(name_node).map_err(parse_hdfs_error)?;
 
diff --git a/core/src/services/http/backend.rs b/core/src/services/http/backend.rs
index a5e054b84..0ee448a7e 100644
--- a/core/src/services/http/backend.rs
+++ b/core/src/services/http/backend.rs
@@ -144,7 +144,7 @@ impl Builder for HttpBuilder {
         };
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let mut auth = None;
         if let Some(username) = &self.config.username {
diff --git a/core/src/services/huggingface/backend.rs b/core/src/services/huggingface/backend.rs
index fe68e4e33..43aad0156 100644
--- a/core/src/services/huggingface/backend.rs
+++ b/core/src/services/huggingface/backend.rs
@@ -142,7 +142,7 @@ impl Builder for HuggingfaceBuilder {
             )),
             Some(repo_type) => Err(Error::new(
                 ErrorKind::ConfigInvalid,
-                format!("unknown repo_type: {}", repo_type).as_str(),
+                format!("unknown repo_type: {repo_type}").as_str(),
             )
             .with_operation("Builder::build")
             .with_context("service", Scheme::Huggingface)),
diff --git a/core/src/services/ipfs/backend.rs b/core/src/services/ipfs/backend.rs
index bfa122d39..c8877c6cf 100644
--- a/core/src/services/ipfs/backend.rs
+++ b/core/src/services/ipfs/backend.rs
@@ -121,7 +121,7 @@ impl Builder for IpfsBuilder {
             .with_context("service", Scheme::Ipfs)
             .with_context("root", &root));
         }
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let endpoint = match &self.config.endpoint {
             Some(endpoint) => Ok(endpoint.clone()),
diff --git a/core/src/services/ipmfs/builder.rs b/core/src/services/ipmfs/builder.rs
index 1284de4e1..f87fa2715 100644
--- a/core/src/services/ipmfs/builder.rs
+++ b/core/src/services/ipmfs/builder.rs
@@ -129,7 +129,7 @@ impl Builder for IpmfsBuilder {
 
     fn build(self) -> Result<impl Access> {
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let endpoint = self
             .config
diff --git a/core/src/services/koofr/lister.rs b/core/src/services/koofr/lister.rs
index c7a6e5ce9..7d80991df 100644
--- a/core/src/services/koofr/lister.rs
+++ b/core/src/services/koofr/lister.rs
@@ -68,7 +68,7 @@ impl oio::PageList for KoofrLister {
             let path = build_abs_path(&normalize_root(&self.path), &file.name);
 
             let entry = if file.ty == "dir" {
-                let path = format!("{}/", path);
+                let path = format!("{path}/");
                 Entry::new(&path, Metadata::new(EntryMode::DIR))
             } else {
                 let m = Metadata::new(EntryMode::FILE)
diff --git a/core/src/services/lakefs/core.rs b/core/src/services/lakefs/core.rs
index 789d9b134..83f06e05a 100644
--- a/core/src/services/lakefs/core.rs
+++ b/core/src/services/lakefs/core.rs
@@ -127,15 +127,15 @@ impl LakefsCore {
         }
 
         if !delimiter.is_empty() {
-            url.push_str(&format!("&delimiter={}", delimiter));
+            url.push_str(&format!("&delimiter={delimiter}"));
         }
 
         if let Some(amount) = amount {
-            url.push_str(&format!("&amount={}", amount));
+            url.push_str(&format!("&amount={amount}"));
         }
 
         if let Some(after) = after {
-            url.push_str(&format!("&after={}", after));
+            url.push_str(&format!("&after={after}"));
         }
 
         let mut req = Request::get(&url);
diff --git a/core/src/services/memcached/binary.rs b/core/src/services/memcached/binary.rs
index f24db3a4d..e3db22abc 100644
--- a/core/src/services/memcached/binary.rs
+++ b/core/src/services/memcached/binary.rs
@@ -127,7 +127,7 @@ impl Connection {
             .await
             .map_err(new_std_io_error)?;
         writer
-            .write_all(format!("\x00{}\x00{}", username, password).as_bytes())
+            .write_all(format!("\x00{username}\x00{password}").as_bytes())
             .await
             .map_err(new_std_io_error)?;
         writer.flush().await.map_err(new_std_io_error)?;
diff --git a/core/src/services/mini_moka/backend.rs b/core/src/services/mini_moka/backend.rs
index 85758770a..042c627ed 100644
--- a/core/src/services/mini_moka/backend.rs
+++ b/core/src/services/mini_moka/backend.rs
@@ -131,7 +131,7 @@ impl Builder for MiniMokaBuilder {
 
         let core = Arc::new(MiniMokaCore { cache });
 
-        debug!("backend build finished: {}", root);
+        debug!("backend build finished: {root}");
         Ok(MiniMokaBackend::new(core, root))
     }
 }
diff --git a/core/src/services/obs/backend.rs b/core/src/services/obs/backend.rs
index 25404b49f..e88607f08 100644
--- a/core/src/services/obs/backend.rs
+++ b/core/src/services/obs/backend.rs
@@ -161,7 +161,7 @@ impl Builder for ObsBuilder {
         debug!("backend build started: {:?}", &self);
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let bucket = match &self.config.bucket {
             Some(bucket) => Ok(bucket.to_string()),
diff --git a/core/src/services/onedrive/builder.rs b/core/src/services/onedrive/builder.rs
index 73961b771..4d2d4c91d 100644
--- a/core/src/services/onedrive/builder.rs
+++ b/core/src/services/onedrive/builder.rs
@@ -142,7 +142,7 @@ impl Builder for OnedriveBuilder {
 
     fn build(self) -> Result<impl Access> {
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let info = AccessorInfo::default();
         info.set_scheme(Scheme::Onedrive)
diff --git a/core/src/services/onedrive/core.rs b/core/src/services/onedrive/core.rs
index 46af662a0..242c8de07 100644
--- a/core/src/services/onedrive/core.rs
+++ b/core/src/services/onedrive/core.rs
@@ -354,7 +354,7 @@ impl OneDriveCore {
     ) -> Result<Response<Buffer>> {
         let mut request = Request::put(url);
 
-        let range = format!("bytes {}-{}/{}", offset, chunk_end, total_len);
+        let range = format!("bytes {offset}-{chunk_end}/{total_len}");
         request = request.header(header::CONTENT_RANGE, range);
 
         let size = chunk_end - offset + 1;
diff --git a/core/src/services/onedrive/lister.rs b/core/src/services/onedrive/lister.rs
index 93633270b..53d4057d2 100644
--- a/core/src/services/onedrive/lister.rs
+++ b/core/src/services/onedrive/lister.rs
@@ -55,7 +55,7 @@ impl oio::PageList for OneDriveLister {
                 GENERAL_SELECT_PARAM
             );
             if let Some(limit) = self.op.limit() {
-                base + &format!("&$top={}", limit)
+                base + &format!("&$top={limit}")
             } else {
                 base
             }
@@ -111,7 +111,7 @@ impl oio::PageList for OneDriveLister {
                 .strip_prefix(Self::DRIVE_ROOT_PREFIX)
                 .unwrap_or("");
 
-            let path = format!("{}/{}", parent_path, name);
+            let path = format!("{parent_path}/{name}");
             let mut normalized_path = build_rel_path(self.core.root.as_str(), path.as_str());
             let entry_mode = match drive_item.item_type {
                 ItemType::Folder { .. } => EntryMode::DIR,
diff --git a/core/src/services/s3/backend.rs b/core/src/services/s3/backend.rs
index df921849b..a36ff1a41 100644
--- a/core/src/services/s3/backend.rs
+++ b/core/src/services/s3/backend.rs
@@ -643,7 +643,7 @@ impl S3Builder {
             endpoint.to_string()
         } else {
             // Prefix https if endpoint doesn't start with scheme.
-            format!("https://{}", endpoint)
+            format!("https://{endpoint}")
         };
 
         // Remove bucket name from endpoint.
@@ -789,7 +789,7 @@ impl Builder for S3Builder {
             v => {
                 return Err(Error::new(
                     ErrorKind::ConfigInvalid,
-                    format!("{:?} is not a supported checksum_algorithm.", v),
+                    format!("{v:?} is not a supported checksum_algorithm."),
                 ))
             }
         };
@@ -1261,7 +1261,7 @@ mod tests {
 
         for (name, endpoint, bucket, expected) in cases {
             let region = S3Builder::detect_region(endpoint, bucket).await;
-            assert_eq!(region.as_deref(), expected, "{}", name);
+            assert_eq!(region.as_deref(), expected, "{name}");
         }
     }
 }
diff --git a/core/src/services/s3/core.rs b/core/src/services/s3/core.rs
index 972f5375d..d23b8cadc 100644
--- a/core/src/services/s3/core.rs
+++ b/core/src/services/s3/core.rs
@@ -1033,11 +1033,11 @@ impl S3Core {
                 .expect("write into string must succeed");
         }
         if !delimiter.is_empty() {
-            write!(url, "&delimiter={}", delimiter).expect("write into string must succeed");
+            write!(url, "&delimiter={delimiter}").expect("write into string must succeed");
         }
 
         if let Some(limit) = limit {
-            write!(url, "&max-keys={}", limit).expect("write into string must succeed");
+            write!(url, "&max-keys={limit}").expect("write into string must succeed");
         }
         if !key_marker.is_empty() {
             write!(url, "&key-marker={}", percent_encode_path(key_marker))
diff --git a/core/src/services/seafile/lister.rs b/core/src/services/seafile/lister.rs
index 407073be9..58d948b82 100644
--- a/core/src/services/seafile/lister.rs
+++ b/core/src/services/seafile/lister.rs
@@ -61,7 +61,7 @@ impl oio::PageList for SeafileLister {
                                 .with_content_length(info.size.unwrap_or(0));
                             Entry::new(&rel_path, meta)
                         } else {
-                            let path = format!("{}/", rel_path);
+                            let path = format!("{rel_path}/");
                             Entry::new(&path, Metadata::new(EntryMode::DIR))
                         };
 
diff --git a/core/src/services/sftp/backend.rs b/core/src/services/sftp/backend.rs
index 5527dcca3..96c5fa60d 100644
--- a/core/src/services/sftp/backend.rs
+++ b/core/src/services/sftp/backend.rs
@@ -172,7 +172,7 @@ impl Builder for SftpBuilder {
                 } else {
                     return Err(Error::new(
                         ErrorKind::ConfigInvalid,
-                        format!("unknown known_hosts strategy: {}", v).as_str(),
+                        format!("unknown known_hosts strategy: {v}").as_str(),
                     ));
                 }
             }
@@ -339,7 +339,7 @@ impl Access for SftpBackend {
         let mut fs = client.fs();
         fs.set_cwd(&self.core.root);
 
-        let file_path = format!("./{}", path);
+        let file_path = format!("./{path}");
 
         let dir = match fs.open_dir(&file_path).await {
             Ok(dir) => dir,
diff --git a/core/src/services/swift/backend.rs b/core/src/services/swift/backend.rs
index f2570c9a0..d48704b84 100644
--- a/core/src/services/swift/backend.rs
+++ b/core/src/services/swift/backend.rs
@@ -121,7 +121,7 @@ impl Builder for SwiftBuilder {
         debug!("backend build started: {:?}", &self);
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let endpoint = match self.config.endpoint {
             Some(endpoint) => {
diff --git a/core/src/services/swift/core.rs b/core/src/services/swift/core.rs
index 320d989a7..59a875661 100644
--- a/core/src/services/swift/core.rs
+++ b/core/src/services/swift/core.rs
@@ -124,7 +124,7 @@ impl SwiftCore {
         // Set user metadata headers.
         if let Some(user_metadata) = args.user_metadata() {
             for (k, v) in user_metadata {
-                req = req.header(format!("X-Object-Meta-{}", k), v);
+                req = req.header(format!("X-Object-Meta-{k}"), v);
             }
         }
 
diff --git a/core/src/services/tikv/backend.rs b/core/src/services/tikv/backend.rs
index 349aad24a..799a811a7 100644
--- a/core/src/services/tikv/backend.rs
+++ b/core/src/services/tikv/backend.rs
@@ -116,7 +116,7 @@ impl Builder for TikvBuilder {
             return Err(
                 Error::new(ErrorKind::ConfigInvalid, "invalid tls configuration")
                     .with_context("service", Scheme::Tikv)
-                    .with_context("endpoints", format!("{:?}", endpoints)),
+                    .with_context("endpoints", format!("{endpoints:?}")),
             )?;
         }
 
diff --git a/core/src/services/upyun/lister.rs b/core/src/services/upyun/lister.rs
index add4f94fa..9fe2a1b6a 100644
--- a/core/src/services/upyun/lister.rs
+++ b/core/src/services/upyun/lister.rs
@@ -83,7 +83,7 @@ impl oio::PageList for UpyunLister {
             let path = build_abs_path(&normalize_root(&self.path), &file.name);
 
             let entry = if file.type_field == "folder" {
-                let path = format!("{}/", path);
+                let path = format!("{path}/");
                 Entry::new(&path, Metadata::new(EntryMode::DIR))
             } else {
                 let m = Metadata::new(EntryMode::FILE)
diff --git a/core/src/services/upyun/writer.rs b/core/src/services/upyun/writer.rs
index cfef21cca..8467aa7f6 100644
--- a/core/src/services/upyun/writer.rs
+++ b/core/src/services/upyun/writer.rs
@@ -66,7 +66,7 @@ impl oio::MultipartWrite for UpyunWriter {
                 let id =
                     parse_header_to_str(resp.headers(), X_UPYUN_MULTI_UUID)?.ok_or(Error::new(
                         ErrorKind::Unexpected,
-                        format!("{} header is missing", X_UPYUN_MULTI_UUID),
+                        format!("{X_UPYUN_MULTI_UUID} header is missing"),
                     ))?;
 
                 Ok(id.to_string())
diff --git a/core/src/services/vercel_blob/core.rs b/core/src/services/vercel_blob/core.rs
index 3eb4b6eec..1790df39f 100644
--- a/core/src/services/vercel_blob/core.rs
+++ b/core/src/services/vercel_blob/core.rs
@@ -220,7 +220,7 @@ impl VercelBlobCore {
         );
 
         if let Some(limit) = limit {
-            url.push_str(&format!("&limit={}", limit))
+            url.push_str(&format!("&limit={limit}"))
         }
 
         let req = Request::get(&url);
diff --git a/core/src/services/webdav/backend.rs b/core/src/services/webdav/backend.rs
index c5588774e..c88b711d1 100644
--- a/core/src/services/webdav/backend.rs
+++ b/core/src/services/webdav/backend.rs
@@ -160,7 +160,7 @@ impl Builder for WebdavBuilder {
             .to_string();
 
         let root = normalize_root(&self.config.root.clone().unwrap_or_default());
-        debug!("backend use root {}", root);
+        debug!("backend use root {root}");
 
         let mut authorization = None;
         if let Some(username) = &self.config.username {
diff --git a/core/src/services/webdav/core.rs b/core/src/services/webdav/core.rs
index fd673739c..4e0af1109 100644
--- a/core/src/services/webdav/core.rs
+++ b/core/src/services/webdav/core.rs
@@ -403,7 +403,7 @@ pub fn parse_propstat(propstat: &Propstat) -> Result<Metadata> {
         if code >= 400 {
             return Err(Error::new(
                 ErrorKind::Unexpected,
-                format!("propfind response is unexpected: {} {}", code, text),
+                format!("propfind response is unexpected: {code} {text}"),
             ));
         }
     }
diff --git a/core/src/services/webhdfs/backend.rs b/core/src/services/webhdfs/backend.rs
index b805ac3f5..8f8ca704f 100644
--- a/core/src/services/webhdfs/backend.rs
+++ b/core/src/services/webhdfs/backend.rs
@@ -158,7 +158,7 @@ impl Builder for WebhdfsBuilder {
     /// exits.
     /// if the directory does not exit, the directory will be automatically created
     fn build(self) -> Result<impl Access> {
-        debug!("start building backend: {:?}", self);
+        debug!("start building backend: {self:?}");
 
         let root = normalize_root(&self.config.root.unwrap_or_default());
         debug!("backend use root {root}");
@@ -174,7 +174,7 @@ impl Builder for WebhdfsBuilder {
             }
             None => WEBHDFS_DEFAULT_ENDPOINT.to_string(),
         };
-        debug!("backend use endpoint {}", endpoint);
+        debug!("backend use endpoint {endpoint}");
 
         let atomic_write_dir = self.config.atomic_write_dir;
 
diff --git a/core/src/services/webhdfs/core.rs b/core/src/services/webhdfs/core.rs
index c87d14a9d..25250f0ee 100644
--- a/core/src/services/webhdfs/core.rs
+++ b/core/src/services/webhdfs/core.rs
@@ -293,7 +293,7 @@ impl WebhdfsCore {
             percent_encode_path(&p),
         );
         if !start_after.is_empty() {
-            url += format!("&startAfter={}", start_after).as_str();
+            url += format!("&startAfter={start_after}").as_str();
         }
         if let Some(user) = &self.user_name {
             url += format!("&user.name={user}").as_str();
diff --git a/core/src/services/webhdfs/writer.rs b/core/src/services/webhdfs/writer.rs
index fa5c335cf..b64c2e7b3 100644
--- a/core/src/services/webhdfs/writer.rs
+++ b/core/src/services/webhdfs/writer.rs
@@ -67,7 +67,7 @@ impl oio::BlockWrite for WebhdfsWriter {
         let resp = self
             .core
             .webhdfs_create_object(
-                &format!("{}{}", atomic_write_dir, block_id),
+                &format!("{atomic_write_dir}{block_id}"),
                 Some(size),
                 &self.op,
                 body,
@@ -92,7 +92,7 @@ impl oio::BlockWrite for WebhdfsWriter {
         if block_ids.len() >= 2 {
             let sources: Vec<String> = block_ids[1..]
                 .iter()
-                .map(|s| format!("{}{}", atomic_write_dir, s))
+                .map(|s| format!("{atomic_write_dir}{s}"))
                 .collect();
             // concat blocks
             let resp = self.core.webhdfs_concat(&first_block_id, sources).await?;
diff --git a/core/src/services/yandex_disk/core.rs b/core/src/services/yandex_disk/core.rs
index d9b87ef2b..042c4563b 100644
--- a/core/src/services/yandex_disk/core.rs
+++ b/core/src/services/yandex_disk/core.rs
@@ -269,11 +269,11 @@ impl YandexDiskCore {
         );
 
         if let Some(limit) = limit {
-            url = format!("{}&limit={}", url, limit);
+            url = format!("{url}&limit={limit}");
         }
 
         if let Some(offset) = offset {
-            url = format!("{}&offset={}", url, offset);
+            url = format!("{url}&offset={offset}");
         }
 
         let req = Request::get(url);
diff --git a/core/src/services/yandex_disk/lister.rs b/core/src/services/yandex_disk/lister.rs
index 435c94a62..2fa360b59 100644
--- a/core/src/services/yandex_disk/lister.rs
+++ b/core/src/services/yandex_disk/lister.rs
@@ -81,7 +81,7 @@ impl oio::PageList for YandexDiskLister {
                             let md = parse_info(mf)?;
 
                             if md.mode().is_dir() {
-                                path = format!("{}/", path);
+                                path = format!("{path}/");
                             }
 
                             ctx.entries.push_back(Entry::new(&path, md));
diff --git a/core/src/types/buffer.rs b/core/src/types/buffer.rs
index 6114ad9af..36c67326d 100644
--- a/core/src/types/buffer.rs
+++ b/core/src/types/buffer.rs
@@ -263,16 +263,9 @@ impl Buffer {
 
         assert!(
             begin <= end,
-            "range start must not be greater than end: {:?} <= {:?}",
-            begin,
-            end,
-        );
-        assert!(
-            end <= len,
-            "range end out of bounds: {:?} <= {:?}",
-            end,
-            len,
+            "range start must not be greater than end: {begin:?} <= {end:?}",
         );
+        assert!(end <= len, "range end out of bounds: {end:?} <= {len:?}",);
 
         if end == begin {
             return Buffer::new();
diff --git a/core/src/types/delete/deleter.rs b/core/src/types/delete/deleter.rs
index 75ac9c526..4675b9751 100644
--- a/core/src/types/delete/deleter.rs
+++ b/core/src/types/delete/deleter.rs
@@ -162,7 +162,7 @@ impl Deleter {
     /// - [`Deleter::delete_iter`]: delete an infallible iterator of paths.
     /// - [`Deleter::delete_try_iter`]: delete a fallible iterator of paths.
     /// - [`Deleter::delete_try_stream`]: delete a fallible stream of paths.
-    pub async fn delete_stream<S, D>(&mut self, mut stream: S) -> Result<()>
+    pub async fn delete_stream<S, D>(&mut self, stream: S) -> Result<()>
     where
         S: Stream<Item = D>,
         D: IntoDeleteInput,
@@ -182,7 +182,7 @@ impl Deleter {
     /// - [`Deleter::delete_iter`]: delete an infallible iterator of paths.
     /// - [`Deleter::delete_try_iter`]: delete a fallible iterator of paths.
     /// - [`Deleter::delete_stream`]: delete an infallible stream of paths.
-    pub async fn delete_try_stream<S, D>(&mut self, mut try_stream: S) -> Result<()>
+    pub async fn delete_try_stream<S, D>(&mut self, try_stream: S) -> Result<()>
     where
         S: Stream<Item = Result<D>>,
         D: IntoDeleteInput,
diff --git a/core/src/types/error.rs b/core/src/types/error.rs
index 46bb35545..141a805a9 100644
--- a/core/src/types/error.rs
+++ b/core/src/types/error.rs
@@ -298,7 +298,7 @@ impl Debug for Error {
         if let Some(backtrace) = &self.backtrace {
             writeln!(f)?;
             writeln!(f, "Backtrace:")?;
-            writeln!(f, "{}", backtrace)?;
+            writeln!(f, "{backtrace}")?;
         }
 
         Ok(())
diff --git a/core/src/types/list.rs b/core/src/types/list.rs
index 2f81e26d6..d82bd3bd7 100644
--- a/core/src/types/list.rs
+++ b/core/src/types/list.rs
@@ -127,7 +127,7 @@ mod tests {
                 future::ready(entry.ok())
             })
             .for_each(|entry| {
-                println!("{:?}", entry);
+                println!("{entry:?}");
                 future::ready(())
             })
             .await;
diff --git a/core/tests/behavior/async_list.rs b/core/tests/behavior/async_list.rs
index 0667a914a..e156b2210 100644
--- a/core/tests/behavior/async_list.rs
+++ b/core/tests/behavior/async_list.rs
@@ -229,7 +229,7 @@ pub async fn test_list_non_exist_dir(op: Operator) -> Result<()> {
     while let Some(de) = obs.try_next().await? {
         objects.insert(de.path().to_string(), de);
     }
-    debug!("got objects: {:?}", objects);
+    debug!("got objects: {objects:?}");
 
     assert_eq!(objects.len(), 0, "dir should only return empty");
     Ok(())
@@ -256,8 +256,7 @@ pub async fn test_list_sub_dir(op: Operator) -> Result<()> {
     }
     assert!(
         found,
-        "dir should be found in list, but only got: {:?}",
-        entries
+        "dir should be found in list, but only got: {entries:?}"
     );
 
     op.delete(&path).await.expect("delete must succeed");
@@ -310,7 +309,7 @@ pub async fn test_list_nested_dir(op: Operator) -> Result<()> {
     while let Some(de) = obs.try_next().await? {
         objects.insert(de.path().to_string(), de);
     }
-    debug!("got objects: {:?}", objects);
+    debug!("got objects: {objects:?}");
 
     assert_eq!(objects.len(), 3, "dir should only got 3 objects");
 
@@ -412,7 +411,7 @@ pub async fn test_list_non_exist_dir_with_recursive(op: Operator) -> Result<()>
     while let Some(de) = obs.try_next().await? {
         objects.insert(de.path().to_string(), de);
     }
-    debug!("got objects: {:?}", objects);
+    debug!("got objects: {objects:?}");
 
     assert_eq!(objects.len(), 0, "dir should only return empty");
     Ok(())
@@ -598,7 +597,7 @@ pub async fn test_list_files_with_versions(op: Operator) -> Result<()> {
 
     let parent = TEST_FIXTURE.new_dir_path();
     let file_name = TEST_FIXTURE.new_file_path();
-    let file_path = format!("{}{}", parent, file_name);
+    let file_path = format!("{parent}{file_name}");
     op.write(file_path.as_str(), "1").await?;
     op.write(file_path.as_str(), "2").await?;
 
@@ -623,7 +622,7 @@ pub async fn test_list_files_with_deleted(op: Operator) -> Result<()> {
 
     let parent = TEST_FIXTURE.new_dir_path();
     let file_name = TEST_FIXTURE.new_file_path();
-    let file_path = format!("{}{}", parent, file_name);
+    let file_path = format!("{parent}{file_name}");
     op.write(file_path.as_str(), "1").await?;
 
     // List with deleted should include self too.
diff --git a/dev/src/generate/java.rs b/dev/src/generate/java.rs
index 58f019f46..b6ef5b3d8 100644
--- a/dev/src/generate/java.rs
+++ b/dev/src/generate/java.rs
@@ -64,7 +64,7 @@ fn make_field(field: ViaDeserialize<Config>) -> Result<String, minijinja::Error>
     let html = markdown::to_html(&field.comments);
     writeln!(w, "/**")?;
     for line in html.lines() {
-        writeln!(w, " * {}", line)?;
+        writeln!(w, " * {line}")?;
     }
     if let Some(deprecated) = &field.deprecated {
         writeln!(w, " *")?;
@@ -138,10 +138,10 @@ fn make_populate_map(field: ViaDeserialize<Config>) -> Result<String, minijinja:
 
     if field.optional {
         writeln!(w, "if ({} != null) {{", case_java_field_name(&field.name))?;
-        writeln!(w, "    {}", populate)?;
+        writeln!(w, "    {populate}")?;
         writeln!(w, "}}")?;
     } else {
-        writeln!(w, "{}", populate)?;
+        writeln!(w, "{populate}")?;
     }
 
     Ok(result)
diff --git a/dev/src/release/mod.rs b/dev/src/release/mod.rs
index 5923fb118..91749cfae 100644
--- a/dev/src/release/mod.rs
+++ b/dev/src/release/mod.rs
@@ -108,7 +108,7 @@ fn archive_and_checksum(package: &package::Package, files: &[&str]) -> anyhow::R
 
         let checksum = workspace_dir()
             .join("dist")
-            .join(format!("{}.sha512", filename));
+            .join(format!("{filename}.sha512"));
         std::fs::write(checksum, checksum_lines)?;
     }
 
diff --git a/dev/src/release/package.rs b/dev/src/release/package.rs
index 45b5f96d5..4d465e974 100644
--- a/dev/src/release/package.rs
+++ b/dev/src/release/package.rs
@@ -126,7 +126,7 @@ pub fn update_package_version(package: &Package) -> bool {
         "bindings/java" => update_maven_version(&package.path, &package.version),
         "bindings/nodejs" => update_nodejs_version(&package.path, &package.version),
 
-        name => panic!("unknown package: {}", name),
+        name => panic!("unknown package: {name}"),
     }
 }
 
diff --git a/integrations/cloud_filter/src/lib.rs b/integrations/cloud_filter/src/lib.rs
index 11a34edcc..25df01cdf 100644
--- a/integrations/cloud_filter/src/lib.rs
+++ b/integrations/cloud_filter/src/lib.rs
@@ -128,7 +128,7 @@ impl Filter for CloudFilter {
         log::debug!("fetch_data: {}", request.path().display());
 
         let _blob = bincode::deserialize::<FileBlob>(request.file_blob()).map_err(|e| {
-            log::warn!("failed to deserialize file blob: {}", e);
+            log::warn!("failed to deserialize file blob: {e}");
             CloudErrorKind::ValidationFailed
         })?;
 
@@ -143,7 +143,7 @@ impl Filter for CloudFilter {
             .reader_with(&remote_path.to_string_lossy().replace('\\', "/"))
             .await
             .map_err(|e| {
-                log::warn!("failed to open file: {}", e);
+                log::warn!("failed to open file: {e}");
                 CloudErrorKind::Unsuccessful
             })?;
 
@@ -158,7 +158,7 @@ impl Filter for CloudFilter {
                 )
                 .await
                 .map_err(|e| {
-                    log::warn!("failed to read file: {}", e);
+                    log::warn!("failed to read file: {e}");
                     CloudErrorKind::Unsuccessful
                 })?;
 
@@ -170,7 +170,7 @@ impl Filter for CloudFilter {
             ticket
                 .write_at(&buffer[..bytes_read], position)
                 .map_err(|e| {
-                    log::warn!("failed to write file: {}", e);
+                    log::warn!("failed to write file: {e}");
                     CloudErrorKind::Unsuccessful
                 })?;
             position += bytes_read as u64;
@@ -182,7 +182,7 @@ impl Filter for CloudFilter {
             buffer.clear();
 
             ticket.report_progress(range.end, position).map_err(|e| {
-                log::warn!("failed to report progress: {}", e);
+                log::warn!("failed to report progress: {e}");
                 CloudErrorKind::Unsuccessful
             })?;
         }
@@ -211,7 +211,7 @@ impl Filter for CloudFilter {
             .lister_with(&remote_path.to_string_lossy().replace('\\', "/"))
             .await
             .map_err(|e| {
-                log::warn!("failed to list files: {}", e);
+                log::warn!("failed to list files: {e}");
                 CloudErrorKind::Unsuccessful
             })?
             .filter_map(|e| async {
diff --git a/integrations/dav-server/tests/test.rs b/integrations/dav-server/tests/test.rs
index 44d03708f..d1323c7f0 100644
--- a/integrations/dav-server/tests/test.rs
+++ b/integrations/dav-server/tests/test.rs
@@ -187,7 +187,7 @@ async fn test_read_dir() {
         .iter()
         .map(|entry| String::from_utf8(entry.as_ref().unwrap().name()).unwrap())
         .collect::<Vec<_>>();
-    println!("{:?}", entries);
+    println!("{entries:?}");
     assert_eq!(entries.len(), 2);
     assert!(entries.contains(&format!("{TEST_PATH_DECODED_1}/")));
     assert!(entries.contains(&format!("{TEST_PATH_DECODED_2}/")));
diff --git a/integrations/fuse3/src/file_system.rs b/integrations/fuse3/src/file_system.rs
index d49803669..cd2471deb 100644
--- a/integrations/fuse3/src/file_system.rs
+++ b/integrations/fuse3/src/file_system.rs
@@ -129,11 +129,7 @@ impl Filesystem {
         }
 
         log::trace!(
-            "check_flags: is_read={}, is_write={}, is_trunc={}, is_append={}",
-            is_read,
-            is_write,
-            is_trunc,
-            is_append
+            "check_flags: is_read={is_read}, is_write={is_write}, is_trunc={is_trunc}, is_append={is_append}"
         );
         Ok((is_read, is_trunc, is_append))
     }
@@ -174,7 +170,7 @@ impl PathFilesystem for Filesystem {
     async fn destroy(&self, _req: Request) {}
 
     async fn lookup(&self, _req: Request, parent: &OsStr, name: &OsStr) -> Result<ReplyEntry> {
-        log::debug!("lookup(parent={:?}, name={:?})", parent, name);
+        log::debug!("lookup(parent={parent:?}, name={name:?})");
 
         let path = PathBuf::from(parent).join(name);
         let metadata = self
@@ -196,7 +192,7 @@ impl PathFilesystem for Filesystem {
         fh: Option<u64>,
         flags: u32,
     ) -> Result<ReplyAttr> {
-        log::debug!("getattr(path={:?}, fh={:?}, flags={:?})", path, fh, flags);
+        log::debug!("getattr(path={path:?}, fh={fh:?}, flags={flags:?})");
 
         let fh_path = fh.and_then(|fh| {
             self.opened_files
@@ -233,12 +229,7 @@ impl PathFilesystem for Filesystem {
         fh: Option<u64>,
         set_attr: SetAttr,
     ) -> Result<ReplyAttr> {
-        log::debug!(
-            "setattr(path={:?}, fh={:?}, set_attr={:?})",
-            path,
-            fh,
-            set_attr
-        );
+        log::debug!("setattr(path={path:?}, fh={fh:?}, set_attr={set_attr:?})");
 
         self.getattr(_req, path, fh, 0).await
     }
@@ -250,12 +241,7 @@ impl PathFilesystem for Filesystem {
         name: &OsStr,
         link_path: &OsStr,
     ) -> Result<ReplyEntry> {
-        log::debug!(
-            "symlink(parent={:?}, name={:?}, link_path={:?})",
-            parent,
-            name,
-            link_path
-        );
+        log::debug!("symlink(parent={parent:?}, name={name:?}, link_path={link_path:?})");
         Err(libc::EOPNOTSUPP.into())
     }
 
@@ -267,12 +253,7 @@ impl PathFilesystem for Filesystem {
         mode: u32,
         _rdev: u32,
     ) -> Result<ReplyEntry> {
-        log::debug!(
-            "mknod(parent={:?}, name={:?}, mode=0o{:o})",
-            parent,
-            name,
-            mode
-        );
+        log::debug!("mknod(parent={parent:?}, name={name:?}, mode=0o{mode:o})");
         Err(libc::EOPNOTSUPP.into())
     }
 
@@ -284,12 +265,7 @@ impl PathFilesystem for Filesystem {
         mode: u32,
         _umask: u32,
     ) -> Result<ReplyEntry> {
-        log::debug!(
-            "mkdir(parent={:?}, name={:?}, mode=0o{:o})",
-            parent,
-            name,
-            mode
-        );
+        log::debug!("mkdir(parent={parent:?}, name={name:?}, mode=0o{mode:o})");
 
         let mut path = PathBuf::from(parent).join(name);
         path.push(""); // ref https://users.rust-lang.org/t/trailing-in-paths/43166
@@ -305,7 +281,7 @@ impl PathFilesystem for Filesystem {
     }
 
     async fn unlink(&self, _req: Request, parent: &OsStr, name: &OsStr) -> Result<()> {
-        log::debug!("unlink(parent={:?}, name={:?})", parent, name);
+        log::debug!("unlink(parent={parent:?}, name={name:?})");
 
         let path = PathBuf::from(parent).join(name);
         self.op
@@ -317,7 +293,7 @@ impl PathFilesystem for Filesystem {
     }
 
     async fn rmdir(&self, _req: Request, parent: &OsStr, name: &OsStr) -> Result<()> {
-        log::debug!("rmdir(parent={:?}, name={:?})", parent, name);
+        log::debug!("rmdir(parent={parent:?}, name={name:?})");
 
         let path = PathBuf::from(parent).join(name);
         self.op
@@ -337,11 +313,7 @@ impl PathFilesystem for Filesystem {
         name: &OsStr,
     ) -> Result<()> {
         log::debug!(
-            "rename(p={:?}, name={:?}, newp={:?}, newname={:?})",
-            origin_parent,
-            origin_name,
-            parent,
-            name
+            "rename(p={origin_parent:?}, name={origin_name:?}, newp={parent:?}, newname={name:?})"
         );
 
         if !self.op.info().full_capability().rename {
@@ -366,22 +338,17 @@ impl PathFilesystem for Filesystem {
         new_parent: &OsStr,
         new_name: &OsStr,
     ) -> Result<ReplyEntry> {
-        log::debug!(
-            "link(path={:?}, new_parent={:?}, new_name={:?})",
-            path,
-            new_parent,
-            new_name
-        );
+        log::debug!("link(path={path:?}, new_parent={new_parent:?}, new_name={new_name:?})");
         Err(libc::EOPNOTSUPP.into())
     }
 
     async fn opendir(&self, _req: Request, path: &OsStr, flags: u32) -> Result<ReplyOpen> {
-        log::debug!("opendir(path={:?}, flags=0x{:x})", path, flags);
+        log::debug!("opendir(path={path:?}, flags=0x{flags:x})");
         Ok(ReplyOpen { fh: 0, flags })
     }
 
     async fn open(&self, _req: Request, path: &OsStr, flags: u32) -> Result<ReplyOpen> {
-        log::debug!("open(path={:?}, flags=0x{:x})", path, flags);
+        log::debug!("open(path={path:?}, flags=0x{flags:x})");
 
         let (is_read, is_trunc, is_append) = self.check_flags(flags)?;
         if flags & libc::O_CREAT as u32 != 0 {
@@ -435,13 +402,7 @@ impl PathFilesystem for Filesystem {
         offset: u64,
         size: u32,
     ) -> Result<ReplyData> {
-        log::debug!(
-            "read(path={:?}, fh={}, offset={}, size={})",
-            path,
-            fh,
-            offset,
-            size
-        );
+        log::debug!("read(path={path:?}, fh={fh}, offset={offset}, size={size})");
 
         let file_path = {
             let file = self.get_opened_file(FileKey::try_from(fh)?, path)?;
@@ -518,12 +479,7 @@ impl PathFilesystem for Filesystem {
         flush: bool,
     ) -> Result<()> {
         log::debug!(
-            "release(path={:?}, fh={}, flags=0x{:x}, lock_owner={}, flush={})",
-            path,
-            fh,
-            flags,
-            lock_owner,
-            flush
+            "release(path={path:?}, fh={fh}, flags=0x{flags:x}, lock_owner={lock_owner}, flush={flush})"
         );
 
         // Just take and forget it.
@@ -542,12 +498,7 @@ impl PathFilesystem for Filesystem {
         fh: u64,
         lock_owner: u64,
     ) -> Result<()> {
-        log::debug!(
-            "flush(path={:?}, fh={}, lock_owner={})",
-            path,
-            fh,
-            lock_owner,
-        );
+        log::debug!("flush(path={path:?}, fh={fh}, lock_owner={lock_owner})");
 
         let file = self
             .opened_files
@@ -576,7 +527,7 @@ impl PathFilesystem for Filesystem {
         fh: u64,
         offset: i64,
     ) -> Result<ReplyDirectory<Self::DirEntryStream<'a>>> {
-        log::debug!("readdir(path={:?}, fh={}, offset={})", path, fh, offset);
+        log::debug!("readdir(path={path:?}, fh={fh}, offset={offset})");
 
         let mut current_dir = PathBuf::from(path);
         current_dir.push(""); // ref https://users.rust-lang.org/t/trailing-in-paths/43166
@@ -625,7 +576,7 @@ impl PathFilesystem for Filesystem {
     }
 
     async fn access(&self, _req: Request, path: &OsStr, mask: u32) -> Result<()> {
-        log::debug!("access(path={:?}, mask=0x{:x})", path, mask);
+        log::debug!("access(path={path:?}, mask=0x{mask:x})");
 
         self.op
             .stat(&path.to_string_lossy())
@@ -643,13 +594,7 @@ impl PathFilesystem for Filesystem {
         mode: u32,
         flags: u32,
     ) -> Result<ReplyCreated> {
-        log::debug!(
-            "create(parent={:?}, name={:?}, mode=0o{:o}, flags=0x{:x})",
-            parent,
-            name,
-            mode,
-            flags
-        );
+        log::debug!("create(parent={parent:?}, name={name:?}, mode=0o{mode:o}, flags=0x{flags:x})");
 
         let (is_read, is_trunc, is_append) = self.check_flags(flags | libc::O_CREAT as u32)?;
 
@@ -699,12 +644,7 @@ impl PathFilesystem for Filesystem {
         offset: u64,
         _lock_owner: u64,
     ) -> Result<ReplyDirectoryPlus<Self::DirEntryPlusStream<'a>>> {
-        log::debug!(
-            "readdirplus(parent={:?}, fh={}, offset={})",
-            parent,
-            fh,
-            offset
-        );
+        log::debug!("readdirplus(parent={parent:?}, fh={fh}, offset={offset})");
 
         let now = SystemTime::now();
         let mut current_dir = PathBuf::from(parent);
@@ -779,11 +719,7 @@ impl PathFilesystem for Filesystem {
         _flags: u32,
     ) -> Result<()> {
         log::debug!(
-            "rename2(origin_parent={:?}, origin_name={:?}, parent={:?}, name={:?})",
-            origin_parent,
-            origin_name,
-            parent,
-            name
+            "rename2(origin_parent={origin_parent:?}, origin_name={origin_name:?}, parent={parent:?}, name={name:?})"
         );
         self.rename(req, origin_parent, origin_name, parent, name)
             .await
@@ -802,15 +738,7 @@ impl PathFilesystem for Filesystem {
         flags: u64,
     ) -> Result<ReplyCopyFileRange> {
         log::debug!(
-            "copy_file_range(from_path={:?}, fh_in={}, offset_in={}, to_path={:?}, fh_out={}, offset_out={}, length={}, flags={})",
-            from_path,
-            fh_in,
-            offset_in,
-            to_path,
-            fh_out,
-            offset_out,
-            length,
-            flags
+            "copy_file_range(from_path={from_path:?}, fh_in={fh_in}, offset_in={offset_in}, to_path={to_path:?}, fh_out={fh_out}, offset_out={offset_out}, length={length}, flags={flags})"
         );
         let data = self
             .read(req, from_path, fh_in, offset_in, length as _)
@@ -826,7 +754,7 @@ impl PathFilesystem for Filesystem {
     }
 
     async fn statfs(&self, _req: Request, path: &OsStr) -> Result<ReplyStatFs> {
-        log::debug!("statfs(path={:?})", path);
+        log::debug!("statfs(path={path:?})");
         Ok(ReplyStatFs {
             blocks: 1,
             bfree: 0,
@@ -880,7 +808,7 @@ const fn dummy_file_attr(kind: FileType, now: SystemTime, uid: u32, gid: u32) ->
 }
 
 fn opendal_error2errno(err: opendal::Error) -> fuse3::Errno {
-    log::trace!("opendal_error2errno: {:?}", err);
+    log::trace!("opendal_error2errno: {err:?}");
     match err.kind() {
         ErrorKind::Unsupported => Errno::from(libc::EOPNOTSUPP),
         ErrorKind::IsADirectory => Errno::from(libc::EISDIR),
diff --git a/integrations/virtiofs/src/error.rs b/integrations/virtiofs/src/error.rs
index 19c8d6a30..7fde4a2e0 100644
--- a/integrations/virtiofs/src/error.rs
+++ b/integrations/virtiofs/src/error.rs
@@ -43,7 +43,7 @@ impl From<libc::c_int> for Error {
     fn from(errno: libc::c_int) -> Error {
         let err_str = unsafe { libc::strerror(errno) };
         let message = if err_str.is_null() {
-            format!("errno: {}", errno)
+            format!("errno: {errno}")
         } else {
             let c_str = unsafe { CStr::from_ptr(err_str) };
             c_str.to_string_lossy().into_owned()
@@ -59,16 +59,16 @@ impl From<Error> for io::Error {
     fn from(error: Error) -> io::Error {
         match error {
             Error::VhostUserFsError { message, source } => {
-                let message = format!("Vhost user fs error: {}", message);
+                let message = format!("Vhost user fs error: {message}");
                 match source {
-                    Some(source) => io::Error::other(format!("{}, source: {:?}", message, source)),
+                    Some(source) => io::Error::other(format!("{message}, source: {source:?}")),
                     None => io::Error::other(message),
                 }
             }
             Error::Unexpected { message, source } => {
-                let message = format!("Unexpected error: {}", message);
+                let message = format!("Unexpected error: {message}");
                 match source {
-                    Some(source) => io::Error::other(format!("{}, source: {:?}", message, source)),
+                    Some(source) => io::Error::other(format!("{message}, source: {source:?}")),
                     None => io::Error::other(message),
                 }
             }
diff --git a/integrations/virtiofs/src/filesystem.rs b/integrations/virtiofs/src/filesystem.rs
index 764d03596..f1cb4a8e6 100644
--- a/integrations/virtiofs/src/filesystem.rs
+++ b/integrations/virtiofs/src/filesystem.rs
@@ -329,7 +329,7 @@ impl Filesystem {
             None => return Filesystem::reply_error(in_header.unique, w),
         };
 
-        let path = format!("{}/{}", parent_path, name);
+        let path = format!("{parent_path}/{name}");
         let metadata = match self.rt.block_on(self.do_get_metadata(&path)) {
             Ok(metadata) => metadata,
             Err(_) => return Filesystem::reply_error(in_header.unique, w),
@@ -406,7 +406,7 @@ impl Filesystem {
             None => return Filesystem::reply_error(in_header.unique, w),
         };
 
-        let path = format!("{}/{}", parent_path, name);
+        let path = format!("{parent_path}/{name}");
         let mut attr = OpenedFile::new(FileType::File, &path, self.uid, self.gid);
         let inode = self
             .opened_files
@@ -463,7 +463,7 @@ impl Filesystem {
             None => return Filesystem::reply_error(in_header.unique, w),
         };
 
-        let path = format!("{}/{}", parent_path, name);
+        let path = format!("{parent_path}/{name}");
         if self.rt.block_on(self.do_delete(&path)).is_err() {
             return Filesystem::reply_error(in_header.unique, w);
         }