difftreelog
feat(evm-coder) hidden methods
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
.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
crates/evm-coder/procedural/src/solidity_interface.rsdiffbeforeafterboth291291292struct 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 }317318 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);549567550 syn::custom_keyword!(rename_selector);568 syn::custom_keyword!(rename_selector);569 syn::custom_keyword!(hide);551}570}552571553/// Rust methods are parsed into this structure when Solidity code is generated572/// Rust methods are parsed into this structure when Solidity code is generated558 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,crates/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(())
}
}