• Robin Freyler's avatar
    Implement new trait definition codegen 🚀 (#665) · e8d47396
    Robin Freyler authored
    * fix spelling error in docs
    
    * remove commented-out code
    
    * move query_amount_{constructors,messages} utilities into own functions
    
    * implement codegen for constructor decoder enum type
    
    * slightly refactor AcceptsPayments and EnablesDynamicStorageAllocator
    
    * fix bug that spans of ink! trait messages have not been registered
    
    * add codegen for ExecuteDispatchable for constructor decoder
    
    * add codegen for expr to query if any ink! message if payable
    
    * implement preliminary codegen for new ink! dispatch entry points
    
    * add ink_lang::execute_constructor_2 utility dispatch function
    
    * demand ExecuteDispatch trait impl from generated decoder types
    
    * trait-incrementer constructor now takes and sets initial value
    
    * apply rustfmt
    
    * implement message decoder type codegen for new dispatch
    
    * enable entry point codegen for new dispatch
    
    * fix doc comment
    
    * remove old dispatch codegen
    
    * rename dispatch2 module to dispatch
    
    * apply rustfmt
    
    * generate dispatch info trait impls always
    
    They are useful generally and not only when compiled as root contract.
    
    * no longer generate unnecessary braces in new dispatch codegen
    
    * adjust UI tests for new dispatch codegen
    
    * no longer derive core::fmt::Debug for dispatch decoder types
    
    This fixes a doc test since this implied a Debug bound on all message and constructor inputs.
    
    * fix bug in dispatcher utility method
    
    * remove all no longer needed types and traits from ink_lang crate
    
    Due to the new ink! codegen many of these definitions have become deprecated or obsolete.
    
    * fix UI test
    
    * silence non-minimal bool clippy warning in expanded code
    
    * fix bug in dispatch codegen
    
    Only check for payment if message is not payable and not all messages are not payable, too.
    
    * add IsDocAttribute::extract_docs utility method for ink! IR
    
    * overhaul ink! metadata codegen
    
    This now properly takes into consideration the payable and selector properties of ink! trait messages.
    
    * silence bad clippy warning
    
    * rename execute_{message_2, constructor_2} to execute_{message, constructor}
    
    * make ink! root contract messages revert state when returning Result::Err(_)
    
    * fix some formatting issues
    
    * extend is_result_{type, err} unit tests
    
    * improve error messages for invalid ink! input and output types
    
    This checks for ink! constructor and message inputs to be scale::Decode + 'static and for ink! output types to be scale::Encode + 'static.
    Also added new UI tests to assert that this works for ink! message and constructor inputs.
    
    * add missing UI test expectation files
    
    * add UI tests for many ink! message and constructor inputs and outputs
    
    * move noop contract UI test
    
    * normalize UI test
    
    * add passing UI tests for payable and selector properties
    
    * improve passing ink! message selector UI test
    
    * add passing UI test for ink! constructor selector property
    
    * add UI tests for ink! storage structs with various fields
    
    * add passing UI tests for ink! events
    
    * add passing packed ink! storage struct UI test
    
    * improve macro hygiene in StorageLayout derive impl
    
    * add no-implicit-prelude passing UI test
    
    Currently disabled since static_assertions dependency has macro hygiene problems with respect to no_implicit_prelude.
    
    * add impl alias passing UI test
    
    * modernize passing UI test for ink! storage struct derives
    
    * modernize flipper example contract passing UI test
    
    * add new trait-flipper example passing UI test
    
    * add new passing UI test for #[ink(impl)] property
    
    * rename 03-incrementer-contract UI test
    
    * modernize example incrementer passing UI test
    
    * apply rustfmt to UI test
    
    * fix a doc test in ink_storage_derive crate
    
    * add passing UI test for trait based incrementer example ink! smart contract
    
    * apply rustfmt to UI test
    
    * add passing UI tests for #[ink::contract] configs
    
    * add passing UI test for #[ink::contract(env = ..)] config
    
    * modernize env-access passing UI test
    
    * modernize passing UI test to assert Rust items are properly expanded
    
    * add passing UI test to assert existence of aliases for all env types
    
    * rename remaining passing UI tests
    
    * move commented out UI test to top
    
    * move passing UI contract example tests to end
    
    * fix StorageLayout derive unit tests
    
    * replace vec! by plain old arrays in StorageLayout derive expansion
    
    * remove plenty of usages of vec! macro in the ink! codebase
    
    * improve macro hygiene in call_builder codegen
    
    * slightly reformat erc20 UI test
    
    * add ink! event passing UI tests
    
    * move minimal ink! smart contract UI test case to front
    
    * modernize simple definition UI test
    
    * add simple no-implicit-prelude UI test for ink::trait_definition macro
    
    The test case is disabled for now since the currently used parity-scale-codec produces macro hygiene errors.
    
    * add some #[ink::trait_definition] UI tests
    
    * rename #[ink::trait_definition] UI tests
    
    * add UI tests for #[ink::trait_definition] with async and const messages
    
    * add more UI tests for #[ink::trait_definition]
    
    * normalize #[ink::trait_definition] UI tests
    
    * normalize some UI tests
    
    * add new UI tests for #[ink::trait_definition]
    
    * add more UI tests for #[ink::trait_definition]
    
    * add more UI tests for #[ink::trait_definition]
    
    * generate guards for scale::Codec message inputs and outputs for ink! trait definitions
    
    * add UI tests for non-codec message inputs and outputs for #[ink::trait_definition]
    
    * fix spelling issue
    
    * apply rustfmt to test case
    
    * fix some spelling issues
    
    * implement ink! trait message selector and payable property guards
    
    * add UI tests for ink! trait message payable and selector property guards
    
    * add passing UI tests for payable and selector property guards
    
    * fix ERC-1155 example ink! smart contract
    
    The contract broke due to ink! now checking if selectors of ink! trait message definitions and implemented ink! trait messages match.
    
    * disallow #[ink(namespace)] property on ink! trait impl blocks
    
    * add UI tests for #[ink(namespace)] attribute
    
    * fix unit tests that make use of #[ink(namespace = ..)]
    
    * update UI test case expectations
    
    * use "diff" crate feature of trybuild crate
    
    * fix some ink! specific error messages
    
    * fix and improve some attribute error messages
    
    * modernize failing #[ink::contract] UI tests
    
    * fix some UI tests
    
    * use wildcards in UI test inclusion pattern
    
    * rename InkTraitDefinitionRegistry -> TraitDefinitionRegistry
    
    * fix some tests
    
    * apply rustfmt
    
    * rename ink_lang::type_check module to codegen and make it a folder
    
    * rename BaseEvent trait to ContractEventBase
    
    * replace static_assertions usage by custom solution
    
    This leads to fewer dependencies and also to better error messages.
    
    * remove static_assertions dependency from ink_lang
    
    * apply rustfmt
    
    * fix some examples
    
    * move TraitMessage{Payable,Selector} into codegen submodule
    
    * remove superflous True trait from ink_lang
    
    * add ExecuteMessageConfig
    
    * refactor ink_lang dispatch definitions
    
    * add show-codegen-docs crate feature to ink_lang to unhide the codegen module
    
    * fix docs and add doc example tests to IsSameType
    
    * add doc example tests to DispatchInput and DispatchOutput types
    
    * fix spelling issues
    
    * fix trait definition UI tests
    
    * rename TraitImplementer -> TraitImplementedById and move into codegen module
    
    * apply rustfmt
    
    * move ImpliesReturn to ink_lang::codegen module and improve doc comments
    
    * remove re-export of ImpliesReturn from ink_lang
    
    It is now exported from the ink_lang::codegen sub module.
    
    * fix spelling issues
    
    * fix UI tests
    
    * move ink! trait definition codegen definitions into trait_def submodule
    
    * move TraitDefinitionRegistry into new ink_lang::reflect module
    
    * unhide docs for TraitDefinitionRegistry
    
    * enable no-implicit-prelude UI test
    
    * add doc comment to reflect module
    
    * update docs of TraitDefinitionRegistry
    
    * move definitions for dispatch reflections into reflect submodule
    
    * add usage example to COntractAmountDispatchables reflect trait
    
    * add doc comment note to ContractAmountDispatchables trait
    
    * add enforced newline to docs
    
    * improve docs
    
    * update docs for ContractDispatchableMessages trait
    
    * improve doc test
    
    * update docs of ContractDispatchableConstructors trait
    
    * apply rustfmt
    
    * fix hunspell dict
    
    * remove non-existing optional UI test comments
    
    * merge UI tests into one fat one
    
    This (hopefully) fixes the flaky codecov CI for now ...
    
    * use new selector_id! macro instead of raw values in doc tests
    
    * add usage docs to DispatchableMessageInfo trait
    
    * improve doc test
    
    * add usage example to DispatchableConstructorInfo trait docs
    
    * add note and usage example for ContractMessageDecoder docs
    
    * add usage example to ContractConstructorDecoder docs
    
    * improve docs of some reflect types in ink_lang
    
    * improve docs
    
    * move TraitMessageInfo into reflect submodule
    
    * remove invalid static_assertions imports
    
    * take &mut [u8; 32] instead of &mut [u8] for blake2b output
    
    * make local_id of trait_def equal to selector of the message identifier
    
    * modernize payable_message UI trait_def passing test
    
    * add usage example to TraitMessageInfo trait
    
    * fix composed selector calculation for empty ink! trait namespaces
    
    * apply rustfmt
    
    * extend usage example for TraitMessageInfo trait docs
    
    * hopefully fix some weird spelling issues
    
    * make ink! trait definitions actually use the namespace config
    
    * extend usage example for TraitMessageInfo docs
    
    * rework some ink! trait definition passing UI tests
    
    * add new passing UI test for ink! trait definitions concerning namespaces
    
    * add fail UI tests for ink! trait definitions concerning overlapping selectors
    
    * move ContractName into reflect sub-module and add docs and usage example
    
    * move ContractEnv trait to reflect module and add extensive docs and usage examples
    
    * apply clippy suggestions
    
    * move ContractReference trait to reflect module
    
    * apply rustfmt
    
    * fix some usage doc tests
    
    * add extensive docs and usage example to ContractReference trait
    
    * improve docs
    
    * improve docs (2)
    
    * move DispatchError to the reflect submodule
    
    * add new event topic guards codegen to ink! codegen
    
    * apply rustfmt and fix PhantomData import
    
    * re-export RespectTopicLimit trait
    
    * modernize trait_erc20 example contract
    
    * move Env and StaticEnv into ink_lang::codegen module
    
    * conditionally import EmitEvent trait anonymously for ink! impl blocks
    
    * fix some UI tests
    
    * move EmitEvent trait to ink_lang::codegen module
    
    * fix UI tests
    
    * fix UI tests
    
    * add passing UI test for self.env() and Self::env() syntax
    
    * add failing UI tests for missing #[ink(impl)] annotation
    
    * move ContractEventBase trait to ink_lang::reflect submodule
    
    * apply rustfmt
    
    * add usage example to ContractEventBase docs
    
    * move TraitModulePath to ink_lang::reflect submodule
    
    * move ink! trait call builder codegen facilities to ink_lang::codegen submodule
    
    * move ContractCallBuilder to ink_lang::codegen submodule
    
    * move IsSameType and identity_type into ink_lang::codegen::utils module
    
    * rename identity_type to consume_type
    
    * apply rustfmt
    
    * add usage examples to consume_type docs (+ missing rename)
    
    * fix codegen to allow for environmental type usage in ink! trait definitions
    
    * add UI test that uses environmental types in ink! trait definition
    
    * apply rustfmt
    
    * remove unused Selector::unique_id method
    
    * remove Selector::from_bytes
    
    Users should use Selector's From<[u8;4]> implementation instead.
    
    * rename Selector::new -> Selector::compute
    
    * fix some UI tests for rename
    
    * change API: Selector::as_bytes -> Selector::to_bytes and return by value
    
    * add payability to hunspell dict
    
    * use ink! trait info object instead of uniqe trait ID for TraitCallForwarderFor trait
    
    * adjust UI tests
    
    * apply rustfmt
    
    * remove TraitUniqueId trait
    
    * remove TraitImplementedById and utilities to compute ink! trait verify hash
    
    * remove unused CannotCallTraitConstructor variant
    
    * Update to using trybuild version 1.0.49
    
    This forces most or all of the failure UI tests to be adjusted slightly.
    
    * add comment that explains why we have both result checks in execution
    
    * introduce DecodeDispatch trait
    
    This replaces the bare use of scale::Decode for ink! constructor and message decoders.
    The advantage is that it can return DispatchError instead of scale::Error.
    Also adds new UI test and docs with a usage example.
    
    * use selector_bytes! in UI test
    
    * slightly improve fail UI tests
    
    * fix warning in passing UI test
    
    * add new UI test to guard against trait message selector overlaps
    
    * move UI tests from ink_lang_macro to ink_lang crate directory
    
    * adjust UI tests after moving
    
    * remove unused dev-dependencies from ink_lang_macro after moving UI tests
    
    * fix compilation error with Wasm target
    
    * fix CI with formatting checks for UI tests
    
    * add unpayable to hunspell dictionary
    
    * fix hunspell spelling issues
    
    * move ink-experimental-engine to ink_lang crate
    
    Used by unique topics test.
    
    * update UI tests for new nightly compiler
    
    * add missing fixed UI tests
    
    * fix spelling issue in UI test
    
    * add docs explaining usage of AccumulatorRef et.al. in delegator example
    
    * extend is_result unit tests
    
    * re-add pretty assertions
    
    * normalize used version in ink-metadata crate
    
    * add skeleton for ink! 3.0-rc7 in RELEASES
    
    * add release information about this PR to RELEASES.md
    
    * use ink! 3.0-rc6 in multisig example contract
    
    * fix docs
    
    * remove commented out code
    
    * use unzip to partition input_bindings and input_types (thanks andrew!)
    
    * improve #[ink(extension)] missing parameter error message
    e8d47396