From c1f9ae2a1aedf1f7bbe38451b2c5fcb09216c4ae Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Mon, 5 Sep 2022 13:55:23 +0100 Subject: [PATCH 1/5] remove single whitespace prefix from comments and docs --- crates/metadata/src/specs.rs | 6 +++--- crates/metadata/src/utils.rs | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/crates/metadata/src/specs.rs b/crates/metadata/src/specs.rs index 437916cd56e..8ca275a5316 100644 --- a/crates/metadata/src/specs.rs +++ b/crates/metadata/src/specs.rs @@ -14,7 +14,7 @@ #![allow(clippy::new_ret_no_self)] -use crate::serde_hex; +use crate::{serde_hex, utils::trim_extra_whitespace}; #[cfg(not(feature = "std"))] use alloc::{ format, @@ -367,7 +367,7 @@ impl ConstructorSpecBuilder { { let mut this = self; debug_assert!(this.spec.docs.is_empty()); - this.spec.docs = docs.into_iter().map(str::trim).collect::>(); + this.spec.docs = docs.into_iter().map(trim_extra_whitespace).collect::>(); this } } @@ -586,7 +586,7 @@ impl MessageSpecBuilder { { let mut this = self; debug_assert!(this.spec.docs.is_empty()); - this.spec.docs = docs.into_iter().collect::>(); + this.spec.docs = docs.into_iter().map(trim_extra_whitespace).collect::>(); this } } diff --git a/crates/metadata/src/utils.rs b/crates/metadata/src/utils.rs index e09458c3e13..401be742902 100644 --- a/crates/metadata/src/utils.rs +++ b/crates/metadata/src/utils.rs @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +use std::str; use crate::serde_hex; /// Serializes the given bytes as byte string. @@ -56,3 +57,11 @@ where deserializer.deserialize_str(Visitor) } + +pub fn trim_extra_whitespace(item: &'static str) -> &'static str { + if let Some(stripped) = item.strip_prefix(' ') { + stripped.trim_end() + } else { + item.trim_end() + } +} From 7bc882f2ee47c3e6e378b3bddfd09c7fe7589467 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Mon, 5 Sep 2022 14:14:47 +0100 Subject: [PATCH 2/5] format code to please CI --- crates/metadata/src/specs.rs | 15 ++++++++++++--- crates/metadata/src/utils.rs | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/crates/metadata/src/specs.rs b/crates/metadata/src/specs.rs index 8ca275a5316..ad599de8c47 100644 --- a/crates/metadata/src/specs.rs +++ b/crates/metadata/src/specs.rs @@ -14,7 +14,10 @@ #![allow(clippy::new_ret_no_self)] -use crate::{serde_hex, utils::trim_extra_whitespace}; +use crate::{ + serde_hex, + utils::trim_extra_whitespace, +}; #[cfg(not(feature = "std"))] use alloc::{ format, @@ -367,7 +370,10 @@ impl ConstructorSpecBuilder { { let mut this = self; debug_assert!(this.spec.docs.is_empty()); - this.spec.docs = docs.into_iter().map(trim_extra_whitespace).collect::>(); + this.spec.docs = docs + .into_iter() + .map(trim_extra_whitespace) + .collect::>(); this } } @@ -586,7 +592,10 @@ impl MessageSpecBuilder { { let mut this = self; debug_assert!(this.spec.docs.is_empty()); - this.spec.docs = docs.into_iter().map(trim_extra_whitespace).collect::>(); + this.spec.docs = docs + .into_iter() + .map(trim_extra_whitespace) + .collect::>(); this } } diff --git a/crates/metadata/src/utils.rs b/crates/metadata/src/utils.rs index 401be742902..61ef87d4eb0 100644 --- a/crates/metadata/src/utils.rs +++ b/crates/metadata/src/utils.rs @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::str; use crate::serde_hex; +use std::str; /// Serializes the given bytes as byte string. pub fn serialize_as_byte_str(bytes: &[u8], serializer: S) -> Result From 4c240d292000b898066c331fab288e47f8a2e406 Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Mon, 5 Sep 2022 16:50:15 +0100 Subject: [PATCH 3/5] elided lifetime + tests --- crates/metadata/src/tests.rs | 45 ++++++++++++++++++++++++++++++++++++ crates/metadata/src/utils.rs | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/crates/metadata/src/tests.rs b/crates/metadata/src/tests.rs index 44d5d8492de..501cfb912db 100644 --- a/crates/metadata/src/tests.rs +++ b/crates/metadata/src/tests.rs @@ -206,3 +206,48 @@ fn trim_docs() { ); assert_eq!(deserialized.docs, compact_spec.docs); } + +#[test] +fn trim_docs_with_code() { + // given + let label = "foo"; + let cs = ConstructorSpec::from_label(label) + .selector(123_456_789u32.to_be_bytes()) + .docs(vec![ + " Example ", + " ```", + " fn test() {", + " \"Hello, World\"", + " }", + " ```", + ]) + .payable(Default::default()) + .done(); + let mut registry = Registry::new(); + let compact_spec = cs.into_portable(&mut registry); + + // when + let json = serde_json::to_value(&compact_spec).unwrap(); + let deserialized: ConstructorSpec = + serde_json::from_value(json.clone()).unwrap(); + + // then + assert_eq!( + json, + json!({ + "label": "foo", + "payable": false, + "selector": "0x075bcd15", + "args": [], + "docs": [ + "Example", + "```", + "fn test() {", + " \"Hello, World\"", + "}", + "```" + ] + }) + ); + assert_eq!(deserialized.docs, compact_spec.docs); +} diff --git a/crates/metadata/src/utils.rs b/crates/metadata/src/utils.rs index 61ef87d4eb0..04da984f270 100644 --- a/crates/metadata/src/utils.rs +++ b/crates/metadata/src/utils.rs @@ -58,7 +58,7 @@ where deserializer.deserialize_str(Visitor) } -pub fn trim_extra_whitespace(item: &'static str) -> &'static str { +pub fn trim_extra_whitespace(item: &str) -> &str { if let Some(stripped) = item.strip_prefix(' ') { stripped.trim_end() } else { From 7eeb0beea567f2e4abf64d06687ade17c7f1c96f Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Mon, 5 Sep 2022 17:45:09 +0100 Subject: [PATCH 4/5] adds comments to tests --- crates/metadata/src/tests.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/metadata/src/tests.rs b/crates/metadata/src/tests.rs index 501cfb912db..6f782407261 100644 --- a/crates/metadata/src/tests.rs +++ b/crates/metadata/src/tests.rs @@ -176,6 +176,7 @@ fn spec_contract_json() { ) } +/// Tests correct trimming of a simple comment with extra spaces #[test] fn trim_docs() { // given @@ -207,6 +208,7 @@ fn trim_docs() { assert_eq!(deserialized.docs, compact_spec.docs); } +/// Tests correct trimming of a complex comment with a code snippet #[test] fn trim_docs_with_code() { // given From 17753c0594dc98410cc821a9e1bb306ae7c24f9a Mon Sep 17 00:00:00 2001 From: SkymanOne Date: Mon, 5 Sep 2022 17:50:05 +0100 Subject: [PATCH 5/5] add docs for public function --- crates/metadata/src/utils.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/metadata/src/utils.rs b/crates/metadata/src/utils.rs index 04da984f270..225d532b989 100644 --- a/crates/metadata/src/utils.rs +++ b/crates/metadata/src/utils.rs @@ -58,6 +58,7 @@ where deserializer.deserialize_str(Visitor) } +/// Strips a single whitespace at the start and removes trailing spaces pub fn trim_extra_whitespace(item: &str) -> &str { if let Some(stripped) = item.strip_prefix(' ') { stripped.trim_end()