Unverified Commit c24f0ff9 authored by Hero Bird's avatar Hero Bird Committed by GitHub
Browse files

Implement trait support - Part 1/3 - New ink! IR (#451)



* [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>
parent 2456fdd2
Pipeline #99151 failed with stages
in 10 minutes and 8 seconds