From 73aa76f95bcdcf95656eed1c79d77a4b5026cb05 Mon Sep 17 00:00:00 2001 From: Chris Maniewski Date: Mon, 24 Mar 2025 17:25:24 +0100 Subject: [PATCH 1/8] fix: add blocks around case bodys --- .../src/code_gen/js/generateable/container/enums.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/postcard-bindgen-core/src/code_gen/js/generateable/container/enums.rs b/postcard-bindgen-core/src/code_gen/js/generateable/container/enums.rs index bd73760..85db1ea 100644 --- a/postcard-bindgen-core/src/code_gen/js/generateable/container/enums.rs +++ b/postcard-bindgen-core/src/code_gen/js/generateable/container/enums.rs @@ -91,10 +91,10 @@ pub mod ser { Case::new( variant_name, - quote! { + quote! {{ s.serialize_number(U32_BYTES, false, $index); $body - }, + }}, ) } } From d5ee6c37475e96506cd1a78233e8862ecfa68c1d Mon Sep 17 00:00:00 2001 From: teamplayer3 Date: Tue, 24 Jun 2025 12:52:19 +0200 Subject: [PATCH 2/8] add helper wrap_with_brackets_if_multi_line --- postcard-bindgen-core/src/code_gen/utils.rs | 54 +++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/postcard-bindgen-core/src/code_gen/utils.rs b/postcard-bindgen-core/src/code_gen/utils.rs index 49b334b..42f200d 100644 --- a/postcard-bindgen-core/src/code_gen/utils.rs +++ b/postcard-bindgen-core/src/code_gen/utils.rs @@ -14,6 +14,37 @@ use crate::{ type_info::ObjectMeta, }; +pub fn wrap_with_brackets_if_multi_line(tokens: impl FormatInto) -> Tokens { + let tokens = quote!($tokens); + if tokens.is_empty() { + return Tokens::new(); + } + + let mut result = Tokens::new(); + + // If the tokens include more than one line break, we assume it is a multi-line expression + // and wrap it in curly braces. + if tokens + .iter() + .map(|t| matches!(t, Item::Push)) + .filter(|v| *v) + .count() + > 1 + { + result.append("{"); + result.indent(); + result.append(tokens); + result.unindent(); + result.append("}"); + } else { + // If there are no line breaks, we can just append the tokens directly. + result.append(tokens); + return result; + } + + result +} + pub fn break_long_logical_lines(tokens: impl FormatInto) -> Tokens { let tokens = quote!($tokens); let mut result = Tokens::new(); @@ -337,4 +368,27 @@ mod test { assert_eq!(break_line.to_file_string().unwrap(), "a &&\n b &&\n c ||\n d &&\n e &&\n f &&\n g ||\n h &&\n i &&\n j &&\n k\n".to_string()); } + + #[test] + fn test_wrap_with_brackets_if_multi_line() { + let line: Tokens = quote!( + var a = 1; + ); + + let wrapped = wrap_with_brackets_if_multi_line(line); + assert_eq!( + wrapped.to_file_string().unwrap(), + "var a = 1;\n".to_string() + ); + let multi_line: Tokens = quote!( + var a = 1; + var b = 2; + var c = 3; + ); + let wrapped_multi_line = wrap_with_brackets_if_multi_line(multi_line); + assert_eq!( + wrapped_multi_line.to_file_string().unwrap(), + "{\n var a = 1;\n var b = 2;\n var c = 3;\n}\n".to_string() + ); + } } From d6545f6025baef378cf09dd069b5f61f65c89f78 Mon Sep 17 00:00:00 2001 From: teamplayer3 Date: Tue, 24 Jun 2025 12:54:25 +0200 Subject: [PATCH 3/8] wording --- postcard-bindgen-core/src/code_gen/utils.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/postcard-bindgen-core/src/code_gen/utils.rs b/postcard-bindgen-core/src/code_gen/utils.rs index 42f200d..a8e929b 100644 --- a/postcard-bindgen-core/src/code_gen/utils.rs +++ b/postcard-bindgen-core/src/code_gen/utils.rs @@ -14,7 +14,7 @@ use crate::{ type_info::ObjectMeta, }; -pub fn wrap_with_brackets_if_multi_line(tokens: impl FormatInto) -> Tokens { +pub fn wrap_with_braces_if_multi_line(tokens: impl FormatInto) -> Tokens { let tokens = quote!($tokens); if tokens.is_empty() { return Tokens::new(); @@ -370,12 +370,12 @@ mod test { } #[test] - fn test_wrap_with_brackets_if_multi_line() { + fn test_wrap_with_braces_if_multi_line() { let line: Tokens = quote!( var a = 1; ); - let wrapped = wrap_with_brackets_if_multi_line(line); + let wrapped = wrap_with_braces_if_multi_line(line); assert_eq!( wrapped.to_file_string().unwrap(), "var a = 1;\n".to_string() @@ -385,7 +385,7 @@ mod test { var b = 2; var c = 3; ); - let wrapped_multi_line = wrap_with_brackets_if_multi_line(multi_line); + let wrapped_multi_line = wrap_with_braces_if_multi_line(multi_line); assert_eq!( wrapped_multi_line.to_file_string().unwrap(), "{\n var a = 1;\n var b = 2;\n var c = 3;\n}\n".to_string() From 465bc9fbff92f1965b2bdfa047327a87eb1e0aa7 Mon Sep 17 00:00:00 2001 From: teamplayer3 Date: Tue, 24 Jun 2025 12:54:39 +0200 Subject: [PATCH 4/8] wrap case body with braces --- .../src/code_gen/js/generateable/container/enums.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/postcard-bindgen-core/src/code_gen/js/generateable/container/enums.rs b/postcard-bindgen-core/src/code_gen/js/generateable/container/enums.rs index 85db1ea..c2d48ad 100644 --- a/postcard-bindgen-core/src/code_gen/js/generateable/container/enums.rs +++ b/postcard-bindgen-core/src/code_gen/js/generateable/container/enums.rs @@ -40,6 +40,7 @@ pub mod ser { JS_ENUM_VARIANT_VALUE, }, switch_case::DefaultCase, + utils::wrap_with_braces_if_multi_line, }, registry::{EnumVariant, EnumVariantType}, }; @@ -91,10 +92,10 @@ pub mod ser { Case::new( variant_name, - quote! {{ + wrap_with_braces_if_multi_line(quote! { s.serialize_number(U32_BYTES, false, $index); $body - }}, + }), ) } } From f5267870c01642f413f0fc2a391848d8b589941e Mon Sep 17 00:00:00 2001 From: teamplayer3 Date: Tue, 24 Jun 2025 12:57:14 +0200 Subject: [PATCH 5/8] adopt tests --- .../snapshots/javascript__ser_cjf_module.snap | 37 ++++++++++++------- .../javascript__ser_with_runtime_checks.snap | 37 ++++++++++++------- ...avascript__ser_without_runtime_checks.snap | 37 ++++++++++++------- 3 files changed, 69 insertions(+), 42 deletions(-) diff --git a/postcard-bindgen-core/tests/snapshots/javascript__ser_cjf_module.snap b/postcard-bindgen-core/tests/snapshots/javascript__ser_cjf_module.snap index c043168..fc4cec8 100644 --- a/postcard-bindgen-core/tests/snapshots/javascript__ser_cjf_module.snap +++ b/postcard-bindgen-core/tests/snapshots/javascript__ser_cjf_module.snap @@ -1,6 +1,7 @@ --- source: postcard-bindgen-core/tests/javascript.rs expression: ser_file +snapshot_kind: text --- function serialize_STRUCT_TYPE(s, v) { s.serialize_number(U32_BYTES, false, v.field_1); @@ -53,15 +54,19 @@ function serialize_ENUM_TYPE(s, v) { s.serialize_number(U32_BYTES, false, 0); break; case "BVariant": - s.serialize_number(U32_BYTES, false, 1); - s.serialize_number(U32_BYTES, false, v.value[0]); - s.serialize_string(v.value[1]); + { + s.serialize_number(U32_BYTES, false, 1); + s.serialize_number(U32_BYTES, false, v.value[0]); + s.serialize_string(v.value[1]); + } break; case "CVariant": - s.serialize_number(U32_BYTES, false, 2); - s.serialize_number(U32_BYTES, false, v.value.field_1); - s.serialize_string(v.value.field_2); - serialize_STRUCT_TYPE(s, v.value.struct_type); + { + s.serialize_number(U32_BYTES, false, 2); + s.serialize_number(U32_BYTES, false, v.value.field_1); + s.serialize_string(v.value.field_2); + serialize_STRUCT_TYPE(s, v.value.struct_type); + } break; default: throw "variant not implemented" @@ -74,15 +79,19 @@ function serialize_sub_module_ENUM_TYPE(s, v) { s.serialize_number(U32_BYTES, false, 0); break; case "BVariant": - s.serialize_number(U32_BYTES, false, 1); - s.serialize_number(U32_BYTES, false, v.value[0]); - s.serialize_string(v.value[1]); + { + s.serialize_number(U32_BYTES, false, 1); + s.serialize_number(U32_BYTES, false, v.value[0]); + s.serialize_string(v.value[1]); + } break; case "CVariant": - s.serialize_number(U32_BYTES, false, 2); - s.serialize_number(U32_BYTES, false, v.value.field_1); - s.serialize_string(v.value.field_2); - serialize_STRUCT_TYPE(s, v.value.struct_type); + { + s.serialize_number(U32_BYTES, false, 2); + s.serialize_number(U32_BYTES, false, v.value.field_1); + s.serialize_string(v.value.field_2); + serialize_STRUCT_TYPE(s, v.value.struct_type); + } break; default: throw "variant not implemented" diff --git a/postcard-bindgen-core/tests/snapshots/javascript__ser_with_runtime_checks.snap b/postcard-bindgen-core/tests/snapshots/javascript__ser_with_runtime_checks.snap index e365e30..55e80ad 100644 --- a/postcard-bindgen-core/tests/snapshots/javascript__ser_with_runtime_checks.snap +++ b/postcard-bindgen-core/tests/snapshots/javascript__ser_with_runtime_checks.snap @@ -1,6 +1,7 @@ --- source: postcard-bindgen-core/tests/javascript.rs expression: ser_file +snapshot_kind: text --- function serialize_STRUCT_TYPE(s, v) { s.serialize_number(U32_BYTES, false, v.field_1); @@ -53,15 +54,19 @@ function serialize_ENUM_TYPE(s, v) { s.serialize_number(U32_BYTES, false, 0); break; case "BVariant": - s.serialize_number(U32_BYTES, false, 1); - s.serialize_number(U32_BYTES, false, v.value[0]); - s.serialize_string(v.value[1]); + { + s.serialize_number(U32_BYTES, false, 1); + s.serialize_number(U32_BYTES, false, v.value[0]); + s.serialize_string(v.value[1]); + } break; case "CVariant": - s.serialize_number(U32_BYTES, false, 2); - s.serialize_number(U32_BYTES, false, v.value.field_1); - s.serialize_string(v.value.field_2); - serialize_STRUCT_TYPE(s, v.value.struct_type); + { + s.serialize_number(U32_BYTES, false, 2); + s.serialize_number(U32_BYTES, false, v.value.field_1); + s.serialize_string(v.value.field_2); + serialize_STRUCT_TYPE(s, v.value.struct_type); + } break; default: throw "variant not implemented" @@ -74,15 +79,19 @@ function serialize_sub_module_ENUM_TYPE(s, v) { s.serialize_number(U32_BYTES, false, 0); break; case "BVariant": - s.serialize_number(U32_BYTES, false, 1); - s.serialize_number(U32_BYTES, false, v.value[0]); - s.serialize_string(v.value[1]); + { + s.serialize_number(U32_BYTES, false, 1); + s.serialize_number(U32_BYTES, false, v.value[0]); + s.serialize_string(v.value[1]); + } break; case "CVariant": - s.serialize_number(U32_BYTES, false, 2); - s.serialize_number(U32_BYTES, false, v.value.field_1); - s.serialize_string(v.value.field_2); - serialize_STRUCT_TYPE(s, v.value.struct_type); + { + s.serialize_number(U32_BYTES, false, 2); + s.serialize_number(U32_BYTES, false, v.value.field_1); + s.serialize_string(v.value.field_2); + serialize_STRUCT_TYPE(s, v.value.struct_type); + } break; default: throw "variant not implemented" diff --git a/postcard-bindgen-core/tests/snapshots/javascript__ser_without_runtime_checks.snap b/postcard-bindgen-core/tests/snapshots/javascript__ser_without_runtime_checks.snap index f54ceeb..50c6f8d 100644 --- a/postcard-bindgen-core/tests/snapshots/javascript__ser_without_runtime_checks.snap +++ b/postcard-bindgen-core/tests/snapshots/javascript__ser_without_runtime_checks.snap @@ -1,6 +1,7 @@ --- source: postcard-bindgen-core/tests/javascript.rs expression: ser_file +snapshot_kind: text --- function serialize_STRUCT_TYPE(s, v) { s.serialize_number(U32_BYTES, false, v.field_1); @@ -53,15 +54,19 @@ function serialize_ENUM_TYPE(s, v) { s.serialize_number(U32_BYTES, false, 0); break; case "BVariant": - s.serialize_number(U32_BYTES, false, 1); - s.serialize_number(U32_BYTES, false, v.value[0]); - s.serialize_string(v.value[1]); + { + s.serialize_number(U32_BYTES, false, 1); + s.serialize_number(U32_BYTES, false, v.value[0]); + s.serialize_string(v.value[1]); + } break; case "CVariant": - s.serialize_number(U32_BYTES, false, 2); - s.serialize_number(U32_BYTES, false, v.value.field_1); - s.serialize_string(v.value.field_2); - serialize_STRUCT_TYPE(s, v.value.struct_type); + { + s.serialize_number(U32_BYTES, false, 2); + s.serialize_number(U32_BYTES, false, v.value.field_1); + s.serialize_string(v.value.field_2); + serialize_STRUCT_TYPE(s, v.value.struct_type); + } break; default: throw "variant not implemented" @@ -74,15 +79,19 @@ function serialize_sub_module_ENUM_TYPE(s, v) { s.serialize_number(U32_BYTES, false, 0); break; case "BVariant": - s.serialize_number(U32_BYTES, false, 1); - s.serialize_number(U32_BYTES, false, v.value[0]); - s.serialize_string(v.value[1]); + { + s.serialize_number(U32_BYTES, false, 1); + s.serialize_number(U32_BYTES, false, v.value[0]); + s.serialize_string(v.value[1]); + } break; case "CVariant": - s.serialize_number(U32_BYTES, false, 2); - s.serialize_number(U32_BYTES, false, v.value.field_1); - s.serialize_string(v.value.field_2); - serialize_STRUCT_TYPE(s, v.value.struct_type); + { + s.serialize_number(U32_BYTES, false, 2); + s.serialize_number(U32_BYTES, false, v.value.field_1); + s.serialize_string(v.value.field_2); + serialize_STRUCT_TYPE(s, v.value.struct_type); + } break; default: throw "variant not implemented" From 7ffd5ad99ff5d0eca49209d08bc2e97086ac87fd Mon Sep 17 00:00:00 2001 From: teamplayer3 Date: Tue, 24 Jun 2025 13:19:43 +0200 Subject: [PATCH 6/8] make clippy happy --- postcard-bindgen-core/src/code_gen/variable_path.rs | 2 +- postcard-bindgen-core/src/path.rs | 2 +- postcard-bindgen-core/src/registry.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/postcard-bindgen-core/src/code_gen/variable_path.rs b/postcard-bindgen-core/src/code_gen/variable_path.rs index c4ea5f3..3dfcbf1 100644 --- a/postcard-bindgen-core/src/code_gen/variable_path.rs +++ b/postcard-bindgen-core/src/code_gen/variable_path.rs @@ -56,7 +56,7 @@ pub enum VariableAccess { impl VariableAccess { fn into_string(self) -> String { match self { - Self::Indexed(i) => format!("{}", i), + Self::Indexed(i) => format!("{i}"), Self::Field(f) => f, } } diff --git a/postcard-bindgen-core/src/path.rs b/postcard-bindgen-core/src/path.rs index d300a06..39cab18 100644 --- a/postcard-bindgen-core/src/path.rs +++ b/postcard-bindgen-core/src/path.rs @@ -217,7 +217,7 @@ impl<'a, 'b> From> for String { impl Display for Path<'_, '_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { if let Some(path) = &self.path { - write!(f, "{}", path) + write!(f, "{path}") } else { write!(f, "") } diff --git a/postcard-bindgen-core/src/registry.rs b/postcard-bindgen-core/src/registry.rs index a91763a..d53f7f5 100644 --- a/postcard-bindgen-core/src/registry.rs +++ b/postcard-bindgen-core/src/registry.rs @@ -403,7 +403,7 @@ impl Display for NodeType { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { NodeType::Container(c) => write!(f, "Container({}, {})", c.name, c.path), - NodeType::Module(m) => write!(f, "Module({})", m), + NodeType::Module(m) => write!(f, "Module({m})"), } } } From 0ff9910113de1d13163959117f98066e7410eb13 Mon Sep 17 00:00:00 2001 From: teamplayer3 Date: Tue, 24 Jun 2025 13:21:39 +0200 Subject: [PATCH 7/8] make clippy happy --- postcard-bindgen-core/src/code_gen/python/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/postcard-bindgen-core/src/code_gen/python/mod.rs b/postcard-bindgen-core/src/code_gen/python/mod.rs index ed38e31..46a36b0 100644 --- a/postcard-bindgen-core/src/code_gen/python/mod.rs +++ b/postcard-bindgen-core/src/code_gen/python/mod.rs @@ -382,7 +382,7 @@ impl FormatInto for Function { .enumerate() .map(|(i, f)| { if i > 0 { - format!(" {}", f) + format!(" {f}") } else { f.to_string() } From 858544bfc2d741358eb77dcc35c0b5f26d83295a Mon Sep 17 00:00:00 2001 From: teamplayer3 Date: Tue, 24 Jun 2025 13:23:28 +0200 Subject: [PATCH 8/8] make clippy happy --- postcard-bindgen/src/package/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/postcard-bindgen/src/package/mod.rs b/postcard-bindgen/src/package/mod.rs index e0e694b..ff1821b 100644 --- a/postcard-bindgen/src/package/mod.rs +++ b/postcard-bindgen/src/package/mod.rs @@ -59,7 +59,7 @@ impl Debug for VersionFromStrError { impl Display for VersionFromStrError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{:?}", self) + write!(f, "{self:?}") } }