• Hero Bird's avatar
    Implement trait support - Part 1/3 - New ink! IR (#451) · c24f0ff9
    Hero Bird authored
    
    
    * [lang/macro] move some items around
    
    * [lang/macro] rename AttributeFlag -> AttributeArg
    
    This is in order to sync naming with the syn crate.
    
    * [lang/macro] implement ink! config parameter parsing
    
    * [lang/macro] add doc comment to into_nested_meta helper function
    
    * [lang/macro] add preliminary ast module
    
    * [lang/macro] replace usage of ink_primitives::hash module
    
    * [lang/macro] slightly refactor Selector
    
    * [lang/macro] fully implement AttributeArgs definitions + tests
    
    * [lang/macro] add IntoIterator for AttributeArgs
    
    * [lang/macro] base ir2::Config on the new ast::AttributeArgs definitions
    
    * [lang/macro] apply rustfmt
    
    * [lang/macro] add some ToTokens implementations
    
    * [lang/macro] add unit tests for ir2::Config
    
    * [lang/macro] introduce general Error type
    
    * [lang/macro] remove RustItem
    
    * [lang/macro] follow-up: remove RustItem
    
    * [lang/macro] add ir2::contains_ink_attributes helper function
    
    * [lang/macro] initial skeleton for TryFrom<syn::Item> for ir2::Item impl
    
    * [lang/macro] add first_ink_attribute helper function
    
    * [lang/macro] refactor initial skeleton for ir2::Item TryFrom impl
    
    * [lang/macro] re-export first_ink_attribute to ir2 module
    
    * [lang/macro] add unit tests for contains_ink_attributes and first_ink_attribute
    
    * [lang/macro] enhance initial TryFrom skeleton for ir2::Item
    
    * [lang/macro] simplify item_attrs
    
    * [lang/macro] further simplify item_attrs
    
    * [lang/macro] minor improvement
    
    * [lang/macro] add ExtError to extend syn::Error
    
    * [lang/macro] add Attrs trait to extract attributes from syn types
    
    * [lang/macro] re-base error infrastructure on to syn::Error
    
    * [lang/macro] adjust unit tests for new error infrastructure
    
    * [lang/macro] remove old error types
    
    * [lang/macro] use syn::Error in ir2::Config
    
    * [lang/macro] adjust Config unit tests for syn::Error usage
    
    * [lang/macro] rename ensure_no_duplicates -> ensure_no_duplicate_attrs
    
    * [lang/macro] add AttributeArg::kind method
    
    * [lang/macro] use full type path
    
    * [lang/macro] implement InkAttribute::from_expanded
    
    * [lang/macro] implement ir2::Storage TryFrom
    
    * [lang/macro] minor refactor
    
    * [lang/macro] add InkAttribute::ensure_no_conflicts
    
    * [lang/macro] add some failure paths to TryFrom<_> for ink! Storage struct
    
    * [lang/macro] add unit tests for ink! storage struct conversion
    
    * [lang/macro] apply rustfmt
    
    * [lang/macro] fix some clippy warnings
    
    * [lang/macro] rename Storage::item_struct field to ast
    
    * [lang/macro] rename Event::item_struct -> ast
    
    * [lang/macro] add some method and an iterator to ink! event struct
    
    * [lang/macro] add initial implementation of ink! event's TryFrom
    
    * [lang/macro] add derives for Debug, PartialEq and Eq for ink! event
    
    * [lang/macro] add initial success path unit tests for TryFrom for ink! event
    
    * [lang/macro] fix bug with #[ink(topic)] annotated event fields
    
    * [lang/macro] apply rustfmt
    
    * [lang/macro] apply clippy suggestion
    
    * [lang/macro] add first bunch of failure event TryFrom unit tests
    
    * [lang/macro] normalize the current failure event unit tests
    
    * [lang/macro] add more event unit tests for topics on fields
    
    * [lang/macro] add Debug, PartialEq and Eq derives for some ir2 types
    
    * [lang/macro] add unit tests for ir2::Item
    
    * [lang/macro] add ir2::ImplBlock::is_ink_impl_block
    
    * [lang/macro] add doc comment note
    
    * [lang/macro] rename ImplBlockItem::Rust -> Other
    
    * [lang/macro] apply rustfmt
    
    * [lang/macro] add stub TryFrom impls for Constructor and Message
    
    * [lang/macro] add TryFrom impl for ir2::ImplBlockItem
    
    * [lang/macro] add initial skeleton for TryFrom impl for ir::ImplBlock
    
    * [lang/macro] implement ir2::sanitize_attributes
    
    * [lang/macro] split impl_block.rs into multiple files as sub modules
    
    * [lang/macro] apply rustfmt + remove unused imports
    
    * [lang/macro] split item module into multiple modules
    
    * [lang/macro] finalize move into multiple files from commit before
    
    * [lang/macro] add lots of error checks to TryFrom for Message
    
    * [lang/macro] improve TryFrom tests for ir2::ImplBlock
    
    * [lang/macro] make Event and Storage use ir2::sanitize_attributes
    
    * [lang/macro] add additional constructors for Iter{Constructors, Messages}
    
    * [lang/macro] add visibility check to Message TryFrom impl
    
    * [lang/macro] add Message::Visibility and getter
    
    * [lang/macro] implement Message::receiver getter
    
    * [lang/macro] extend ImplBlock doc comment note section
    
    * [lang/macro] add Message::Visibility getters
    
    * [lang/macro] refactor Receiver getters
    
    * [lang/macro] fix doc comment
    
    * [lang/macro] add unit test for Message::visibility getter
    
    * [lang/macro] add unit test for Message::receiver getter
    
    * [lang/macro] move Visibility from message.rs to impl_item.rs
    
    * [lang/macro] add Constructor::visibility getter
    
    * [lang/macro] implement callable.rs
    
    * [lang/macro] make use of new shared callable.rs utilities
    
    * [lang/macro] remove visibility from impl_item.rs
    
    * [lang/macro] fix some imports
    
    * [lang/macro] implement constructor check for missing return type
    
    * [lang/macro] implement constructor check for invalid self receiver
    
    * [lang/macro] add some ink! constructor try_from unit tests
    
    * [lang/macro] add ink! constructor visibility getter unit test
    
    * [lang/macro] fix unit test for ink! message visibility
    
    * [lang/macro] add many unit tests for ink! constructor TryFrom impl
    
    * [lang/macro] extend success TryFrom impl unit tests
    
    * [lang/macro] factor out sanitize_attributes for TryFrom impls
    
    * [lang/macro] remove salt from messages and constructors
    
    * [lang/macro] add salt extraction for ink! impl block
    
    * [lang/macro] add unit test for ink! impl block salt
    
    * [lang/macro] implement InkAttribute::{salt, selector} getters
    
    * [lang/macro] make use of InkAttribute::salt in TryFrom for ir2::ImplBlock
    
    * [lang/macro] apply rustfmt
    
    * [lang/macro] implement InkAttribute::is_payable
    
    * [lang/macro] make use of InkAttribute::{is_payable, selector}
    
    * [lang/macro] add module doc to callable.rs
    
    * [lang/macro] rename ImplBlock -> ItemImpl
    
    * [lang/macro] rename impl_block module to item_impl
    
    * [lang/macro] rename ImplBlockItem -> ImplItem
    
    * [lang/macro] add {Message, Constructor}::is_payable
    
    * [lang/macro] add doc note to ir2::ImplItem
    
    * [lang/macro] add implementation for InputsIter
    
    * [lang/macro] make use of InputsIter in ink! message and constructor
    
    * [lang/macro] add getter for the return type of an ink! message
    
    * [lang/macro] add unit test for ink! message is_payable
    
    * [lang/macro] add unit test for Constructor::is_payable
    
    * [lang/macro] rewrite receiver_works unit test for ink! message
    
    * [lang/macro] add unit test for ink! message inputs
    
    * [lang/macro] add unit test for ink! message output getter
    
    * [lang/macro] add identifier getter to ink! message and constructor
    
    * [lang/macro] apply rustfmt
    
    * [lang/macro] apply rustfmt
    
    * [lang/macro] implement clippy suggestions
    
    * [lang/macro] add unit test for Constructor::inputs
    
    * [lang/macro] refactor Storage::is_ink_storage
    
    * [lang/macro] add Event::is_ink_event
    
    * [lang/macro] add InkItem::is_ink_item
    
    * [lang/macro] apply rustfmt
    
    * [lang/macro] fix many non-dead-code warnings and allow dead-code for ir2
    
    * [lang/macro] implement Contract::config getter
    
    * [lang/macro] allow compile failure of some in-doc tests
    
    * [lang/macro] implement TryFrom for ir2::Module
    
    * [lang/macro] re-export ImplItem from ir2
    
    * [lang/macro] implement visibility check for ink! impl blocks
    
    * [lang/macro] fix unit test
    
    * [lang/macro] improve error message for visibility check
    
    * [lang/macro] add unit test for visibility failure
    
    * [lang/macro] apply rustfmt
    
    * [lang/macro] introduce Callable trait to unify ink! messages and constructors
    
    * [lang/macro] craft initial skeleton of compose_selector function
    
    * [lang/macro] implement ItemImpl::{self_type, trait_path, salt}
    
    * [lang/macro] extend compose_selector docs with a usage recommendation section
    
    * [lang/macro] implement initial version of compose_selector
    
    * [lang/macro] apply clippy suggestion
    
    * [lang/macro] fix some bugs in compose_selector implementation
    
    * [lang/macro] add unit tests for compose_selector
    
    * [lang/macro] rename ir2::Module -> ir2::ItemMod (syn)
    
    * [lang/macro] rename module.rs -> item_mod.rs
    
    * [lang/macro] remove some imports, use names directly
    
    * [lang/macro] rename Event::ast -> item
    
    * [lang/macro] refactor event fields iterator
    
    * rebase resolve conflict
    
    * [lang/macro] move ir2 and ast modules to new crate
    
    * [lang/ir] some general renamings after crate move
    
    * [lang/macro] no longer refer to ast and ir2 modules
    
    * [lang/macro] get rid of all bail! and bail_span! macro calls
    
    They hide significant control flow which is bad for readability.
    
    * [lang/ir] export error macros
    
    * [lang/ir] remove unused import
    
    * [lang/macro] make use of new ink_lang_ir crate
    
    * [lang/ir] improve documentation and module structure
    
    * [lang/ir] apply clippy suggestions + formatting
    
    * [lang/macro] apply clippy suggestions
    
    * [lang/ir] further improvements to the documentation
    
    * [lang/ir] fix error macro docs
    
    * [lang/ir] add missing re-export for ir::Contract
    
    * [lang/ir] improve ir::Contract docs
    
    * [lang/ir] minor refactor of ir::Contract
    
    * [lang/ir] extend docs for ir::Contract
    
    * [lang/ir] make ast::AttributeArgs::args field private
    
    * [lang/ir] apply rustfmt
    
    * [lang/ir] improve docs
    
    * [lang/ir] further documentation improvements
    
    * [lang/ir] add missing exports
    
    * [lang/ir] adjust format_err to require its expr to be T:Spanned
    
    Formerly this was T:ToTokens which is more restrictive than it should have been.
    
    * [lang/ir] refactor format_err_span and format_err macros + docs
    
    * [lang/ir] rename format_err macro -> format_err_spanned
    
    * [lang/ir] rename format_err_span macro -> format_err
    
    * [lang/ir] apply rustfmt
    
    * [lang/ir] minor improvements to format_err{_spanned}
    
    * [lang/ir] implement ToTokens for all ink! IR structures
    
    This is useful because T:ToTokens automatically implements syn::spanned::Spanned while being simpler to implement than syn::spanned::Spanned.
    
    * [lang/ir] add links to tracking issue for format_err{_spanned}
    
    * [lang/ir] minor docs improvements
    
    * [lang/ir] do not re-export everything that belongs to attributes
    
    * [lang/ir] fix compilation in test mode
    
    * [lang/ir] add ir::ItemMod checks for ink! storage, message and constructor quantities
    
    * [lang/ir] make ast module private and move ir module to root
    
    * [lang/ir] rename IterItemImpls -> IterItemImpls
    
    * [lang/ir] remove ir::EnvTypes from public API
    
    * [lang/ir] rename ir::ItemMod::impl_blocks -> item_impls
    
    * [lang/ir] rename ir::Module::item_impls -> impls
    
    * [lang/ir] make ir::Config::env_types return syn::Path
    
    * [lang/ir] move mod doc to lib doc
    
    * [lang/ir] fix event doc test
    
    * [lang/ir] make Event::is_ink_event module private
    
    * [lang/ir] apply rustfmt
    
    * [lang/ir] fix Storage doc test
    
    * [lang/ir] remove unnecessary rust annotation for doc test
    
    * [lang/ir] fix doc tests for constructor and message
    
    * [lang/ir] fix fmt todo! avoidance
    
    * [lang/ir] remove unneded let binding
    
    * [lang/ir] fix doc tests of impl_item/mod.rs
    
    * [lang/ir] make ItemImpl::is_ink_impl_block module private
    
    * [lang/ir] re-export InputsIter
    
    * [lang/ir] add getter for ir::ItemImpl::items
    
    * [lang/ir] rename salt -> namespace
    
    * add doc link in MetaNameValue doc
    Co-authored-by: Michael Müller's avatarMichael Müller <mich@elmueller.net>
    
    * [lang/ir] rename Callable::selector -> user_provided_selector
    
    This is going to avoid confusion with composed selector concept.
    
    * [lang/ir] make Storage::is_ink_storage module private
    
    * [lang/ir] fix doc link
    
    * [lang/ir] expose composed selector through messages and constructors iter
    
    * [lang/ir] apply rustfmt
    
    * [lang/ir] fix item_mod.rs doc tests
    
    * [lang/ir] ignore contract doc test for now
    
    It is hard to test because of the unknown ink::contract attribute at the top.
    
    * [lang/ir] add item getter to CallableWithSelector
    
    * [lang/ir] add Callable::statements getter
    
    * [lang/ir] add ir::ItemMod::ensure_no_overlapping_selectors + tests
    
    * [lang/ir] remove duplicate code
    
    * fix typo
    Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
    
    * fix typo
    Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
    
    * fix typo
    Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
    
    * [lang/ir] move config.rs -> attr_args.rs
    
    * [lang/ir] update doc comments
    
    * [lang/ir] some more doc polishing
    
    * [lang/ir] fix outdated doc comment
    
    * [lang/ir] remove outdated doc comment
    
    * fix typo
    Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
    
    * fix typo
    Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
    
    * [lang/ir] remove unneeded let binding in doc test
    
    * [lang/ir] fix conflicting constructor attribute closure
    Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
    
    * [lang/ir] fix doc comment
    
    * [lang/ir] remove outdated doc comment
    
    * fix doc comment
    Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
    
    * [lang/ir] rename 'outer label to 'repeat
    
    * [ci] add lang/ir to ALL_CRATES
    
    * [lang/ir] update blake2 dependency from 0.8 -> 0.9
    
    * [lang/macro] remove unneeded blake2 dependency
    
    * [lang/ir] take last segment of trait path
    
    * [lang/ir] slightly improve overlapping selector error message
    
    * [lang/ir] improve overlapping selector formatting
    
    * [lang/ir] add unit test for composed selector with relative trait path
    
    * [lang/ir] improve unit test for relative trait path composed selector
    
    * [lang/ir] fix bug that namespace was a valid attribute on ink! messages
    
    * [lang/ir] add unit test to check against conflicting attributes on ink! messages
    
    * [lang/ir] fix bug that namespace was an allowed attribute for ink! constructors
    
    * [lang/ir] add unit test to check against conflicting ink! constructor attributes
    
    * [lang/ir] add success tests for ir::ItemMod TryFrom
    
    * [lang/ir] fix out-of-line ink! module error message
    
    * [lang/ir] add a bunch of ink! module TryFrom failure unit tests
    
    * [lang/ir] add unit test for ink! event fields iterator
    
    * [lang/ir] apply rustfmt
    Co-authored-by: Michael Müller's avatarMichael Müller <mich@elmueller.net>
    Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
    c24f0ff9