git.delta.rocks / unique-network / refs/commits / 9695a43c6e69

difftreelog

feat(evm-coder) hidden methods

Yaroslav Bolyukin2022-10-13parent: #3e10430.patch.diff
in: master
Hidden methods appear in selector, and callable from outside,
but do not appear in newly generated interfaces/stubs/abi files.

3 files changed

modified.maintain/scripts/generate_sol.shdiffbeforeafterboth
--- a/.maintain/scripts/generate_sol.sh
+++ b/.maintain/scripts/generate_sol.sh
@@ -11,4 +11,6 @@
 formatted=$(mktemp)
 prettier --config $PRETTIER_CONFIG $raw > $formatted
 
+sed -i -E -e "s/.+\/\/ FORMATTING: FORCE NEWLINE//g" $formatted
+
 mv $formatted $OUTPUT
modifiedcrates/evm-coder/procedural/src/solidity_interface.rsdiffbeforeafterboth
291291
292struct MethodInfo {292struct MethodInfo {
293 rename_selector: Option<String>,293 rename_selector: Option<String>,
294 hide: bool,
294}295}
295impl Parse for MethodInfo {296impl Parse for MethodInfo {
296 fn parse(input: ParseStream) -> syn::Result<Self> {297 fn parse(input: ParseStream) -> syn::Result<Self> {
297 let mut rename_selector = None;298 let mut rename_selector = None;
299 let mut hide = false;
300 while !input.is_empty() {
298 let lookahead = input.lookahead1();301 let lookahead = input.lookahead1();
299 if lookahead.peek(kw::rename_selector) {302 if lookahead.peek(kw::rename_selector) {
300 let k = input.parse::<kw::rename_selector>()?;303 let k = input.parse::<kw::rename_selector>()?;
305 {308 {
306 return Err(syn::Error::new(k.span(), "rename_selector is already set"));309 return Err(syn::Error::new(k.span(), "rename_selector is already set"));
307 }310 }
308 }311 } else if lookahead.peek(kw::hide) {
312 input.parse::<kw::hide>()?;
313 hide = true;
314 } else {
315 return Err(lookahead.error());
316 }
317
318 if input.peek(Token![,]) {
319 input.parse::<Token![,]>()?;
320 } else if !input.is_empty() {
321 return Err(syn::Error::new(input.span(), "expected end"));
322 }
323 }
309 Ok(Self { rename_selector })324 Ok(Self {
325 rename_selector,
326 hide,
327 })
310 }328 }
311}329}
548 syn::custom_keyword!(expect_selector);566 syn::custom_keyword!(expect_selector);
549567
550 syn::custom_keyword!(rename_selector);568 syn::custom_keyword!(rename_selector);
569 syn::custom_keyword!(hide);
551}570}
552571
553/// Rust methods are parsed into this structure when Solidity code is generated572/// Rust methods are parsed into this structure when Solidity code is generated
558 screaming_name: Ident,577 screaming_name: Ident,
559 selector_str: String,578 selector_str: String,
560 selector: u32,579 selector: u32,
580 hide: bool,
561 args: Vec<MethodArg>,581 args: Vec<MethodArg>,
562 has_normal_args: bool,582 has_normal_args: bool,
563 has_value_args: bool,583 has_value_args: bool,
570 fn try_from(value: &ImplItemMethod) -> syn::Result<Self> {590 fn try_from(value: &ImplItemMethod) -> syn::Result<Self> {
571 let mut info = MethodInfo {591 let mut info = MethodInfo {
572 rename_selector: None,592 rename_selector: None,
593 hide: false,
573 };594 };
574 let mut docs = Vec::new();595 let mut docs = Vec::new();
575 let mut weight = None;596 let mut weight = None;
667 screaming_name: snake_ident_to_screaming(ident),688 screaming_name: snake_ident_to_screaming(ident),
668 selector_str,689 selector_str,
669 selector,690 selector,
691 hide: info.hide,
670 args,692 args,
671 has_normal_args,693 has_normal_args,
672 has_value_args,694 has_value_args,
826 let docs = &self.docs;848 let docs = &self.docs;
827 let selector_str = &self.selector_str;849 let selector_str = &self.selector_str;
828 let selector = self.selector;850 let selector = self.selector;
851 let hide = self.hide;
829 let is_payable = self.has_value_args;852 let is_payable = self.has_value_args;
830 quote! {853 quote! {
831 SolidityFunction {854 SolidityFunction {
832 docs: &[#(#docs),*],855 docs: &[#(#docs),*],
833 selector_str: #selector_str,856 selector_str: #selector_str,
834 selector: #selector,857 selector: #selector,
858 hide: #hide,
835 name: #camel_name,859 name: #camel_name,
836 mutability: #mutability,860 mutability: #mutability,
837 is_payable: #is_payable,861 is_payable: #is_payable,
modifiedcrates/evm-coder/src/solidity.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/solidity.rs
+++ b/crates/evm-coder/src/solidity.rs
@@ -418,6 +418,7 @@
 	pub docs: &'static [&'static str],
 	pub selector_str: &'static str,
 	pub selector: u32,
+	pub hide: bool,
 	pub name: &'static str,
 	pub args: A,
 	pub result: R,
@@ -431,16 +432,21 @@
 		writer: &mut impl fmt::Write,
 		tc: &TypeCollector,
 	) -> fmt::Result {
+		let hide_comment = self.hide.then(|| "// ").unwrap_or("");
 		for doc in self.docs {
-			writeln!(writer, "\t///{}", doc)?;
+			writeln!(writer, "\t{hide_comment}///{}", doc)?;
 		}
 		writeln!(
 			writer,
-			"\t/// @dev EVM selector for this function is: 0x{:0>8x},",
+			"\t{hide_comment}/// @dev EVM selector for this function is: 0x{:0>8x},",
 			self.selector
 		)?;
-		writeln!(writer, "\t///  or in textual repr: {}", self.selector_str)?;
-		write!(writer, "\tfunction {}(", self.name)?;
+		writeln!(
+			writer,
+			"\t{hide_comment}///  or in textual repr: {}",
+			self.selector_str
+		)?;
+		write!(writer, "\t{hide_comment}function {}(", self.name)?;
 		self.args.solidity_name(writer, tc)?;
 		write!(writer, ")")?;
 		if is_impl {
@@ -463,22 +469,25 @@
 		}
 		if is_impl {
 			writeln!(writer, " {{")?;
-			writeln!(writer, "\t\trequire(false, stub_error);")?;
+			writeln!(writer, "\t{hide_comment}\trequire(false, stub_error);")?;
 			self.args.solidity_get(writer)?;
 			match &self.mutability {
 				SolidityMutability::Pure => {}
-				SolidityMutability::View => writeln!(writer, "\t\tdummy;")?,
-				SolidityMutability::Mutable => writeln!(writer, "\t\tdummy = 0;")?,
+				SolidityMutability::View => writeln!(writer, "\t{hide_comment}\tdummy;")?,
+				SolidityMutability::Mutable => writeln!(writer, "\t{hide_comment}\tdummy = 0;")?,
 			}
 			if !self.result.is_empty() {
-				write!(writer, "\t\treturn ")?;
+				write!(writer, "\t{hide_comment}\treturn ")?;
 				self.result.solidity_default(writer, tc)?;
 				writeln!(writer, ";")?;
 			}
-			writeln!(writer, "\t}}")?;
+			writeln!(writer, "\t{hide_comment}}}")?;
 		} else {
 			writeln!(writer, ";")?;
 		}
+		if self.hide {
+			writeln!(writer, "// FORMATTING: FORCE NEWLINE")?;
+		}
 		Ok(())
 	}
 }