Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
6e2f529
syn 2.0
ascjones Mar 20, 2023
a5ab273
TraitItemMethod -> TraitItemFn
ascjones Mar 20, 2023
bb7ef57
Token bang
ascjones Mar 20, 2023
4fb7de5
ImplItemMethod -> ImplItemFn
ascjones Mar 20, 2023
97732bc
Token![pub]
ascjones Mar 20, 2023
ce957fa
Remove ItemMacro2
ascjones Mar 20, 2023
f91f702
WIP fix Attribute Span
ascjones Mar 20, 2023
4126aa3
WIP updates
ascjones Mar 20, 2023
88834aa
WIP updates
ascjones Mar 20, 2023
6ab7117
Method to Fn
ascjones Mar 20, 2023
49c0049
Handle remaining attributes
ascjones Mar 20, 2023
604047e
Temp fix for extracting cfg attrs
ascjones Mar 20, 2023
d54370c
Fix some other errors
ascjones Mar 20, 2023
8b2349e
Add test for wildcard selector (doesn't work :()
ascjones Mar 21, 2023
5b15e77
Merge branch 'master' into aj/update-syn
ascjones Mar 21, 2023
b7d5d3f
WIP impl parse for AttributeFrag
ascjones Mar 22, 2023
e814c83
Merge branch 'master' into aj/update-syn
ascjones Mar 22, 2023
849064e
Fmt
ascjones Mar 22, 2023
cd51f8a
Import skeleton parse impl
ascjones Mar 22, 2023
a678649
WIP
ascjones Mar 22, 2023
95da414
Copy across parse impl
ascjones Mar 22, 2023
d8e59fa
Parse terminated
ascjones Mar 22, 2023
d702fa6
WIP fix attr parsing
ascjones Mar 23, 2023
8191cbb
WIP fix attr parsing
ascjones Mar 23, 2023
f12afa5
Remove attr property
ascjones Mar 24, 2023
a91459c
Merge branch 'master' into aj/update-syn
ascjones Mar 24, 2023
e1cadd3
Utilize attr_args meta for parsing
ascjones Mar 24, 2023
1cb115b
Format error messages
ascjones Mar 24, 2023
c57b023
Extract selector parsing to TryFrom
ascjones Mar 24, 2023
35515c0
Handle parsing wildcard selector
ascjones Mar 24, 2023
7b3b2cf
Factor out namesapce parsing
ascjones Mar 24, 2023
39b4eb0
Introduce helper methods
ascjones Mar 24, 2023
efcd942
suggestions
SkymanOne Mar 27, 2023
05533fa
fix parsing of cfg attrs
SkymanOne Mar 27, 2023
11284da
remove expand.rs
SkymanOne Mar 27, 2023
97e79d6
add error message
SkymanOne Mar 27, 2023
b9a4e0c
start working on more detailed errors
SkymanOne Mar 27, 2023
ecc2bc6
fix tests
SkymanOne Mar 27, 2023
431b5e0
rework docs parsing
SkymanOne Mar 27, 2023
06a3171
changelog entry
SkymanOne Mar 28, 2023
d82693d
some refactoring
SkymanOne Mar 28, 2023
e042ade
fmt
SkymanOne Mar 28, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix some other errors
  • Loading branch information
ascjones committed Mar 20, 2023
commit d54370c2d944a10eded894a6af7645b9def51cf8
73 changes: 4 additions & 69 deletions crates/ink/ir/src/ir/attrs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,8 @@ use crate::{
};
use core::result::Result;
use proc_macro2::{
Group as Group2,
Span,
TokenStream as TokenStream2,
TokenTree as TokenTree2,
};
use quote::ToTokens;
use std::collections::HashMap;
Expand All @@ -50,7 +48,7 @@ impl IsDocAttribute for syn::Attribute {
return None
}
let mut docs = None;
self.parse_nested_meta(|meta| {
let _ = self.parse_nested_meta(|meta| {
let lit: syn::LitStr = meta.input.parse()?;
docs = Some(lit.value());
Ok(())
Expand Down Expand Up @@ -139,23 +137,12 @@ pub struct InkAttribute {

impl ToTokens for InkAttribute {
fn to_tokens(&self, tokens: &mut TokenStream2) {
for arg in self.args {
for arg in &self.args {
arg.to_tokens(tokens)
}
}
}

// impl Spanned for InkAttribute {
// fn span(&self) -> Span {
// self.args
// .iter()
// .map(|arg| arg.span())
// .fold(self.first().span(), |fst, snd| {
// fst.join(snd).unwrap_or_else(|| self.first().span())
// })
// }
// }

impl InkAttribute {
/// Ensure that the first ink! attribute argument is of expected kind.
///
Expand Down Expand Up @@ -747,72 +734,20 @@ impl From<InkAttribute> for Attribute {
}
}

/// This function replaces occurrences of a `TokenTree::Ident` of the sequence
/// `selector = _` with the sequence `selector = "_"`.
///
/// This is done because `syn::Attribute::parse_meta` does not support parsing a
/// verbatim like `_`. For this we would need to switch to `syn::Attribute::parse_args`,
/// which requires a more in-depth rewrite of our IR parsing.
fn transform_wildcard_selector_to_string(group: Group2) -> TokenTree2 {
let mut found_selector = false;
let mut found_equal = false;

let new_group: TokenStream2 = group
.stream()
.into_iter()
.map(|tt| {
match tt {
TokenTree2::Group(grp) => transform_wildcard_selector_to_string(grp),
TokenTree2::Ident(ident)
if found_selector && found_equal && ident == "_" =>
{
let mut lit = proc_macro2::Literal::string("_");
lit.set_span(ident.span());
found_selector = false;
found_equal = false;
TokenTree2::Literal(lit)
}
TokenTree2::Ident(ident) if ident == "selector" => {
found_selector = true;
TokenTree2::Ident(ident)
}
TokenTree2::Punct(punct) if punct.as_char() == '=' => {
found_equal = true;
TokenTree2::Punct(punct)
}
_ => tt,
}
})
.collect();
TokenTree2::Group(Group2::new(group.delimiter(), new_group))
}

impl TryFrom<syn::Attribute> for InkAttribute {
type Error = syn::Error;

fn try_from(mut attr: syn::Attribute) -> Result<Self, Self::Error> {
fn try_from(attr: syn::Attribute) -> Result<Self, Self::Error> {
if !attr.path().is_ident("ink") {
return Err(format_err_spanned!(attr, "unexpected non-ink! attribute"))
}

// let ts: TokenStream2 = attr
// .tokens
// .into_iter()
// .map(|tt| {
// match tt {
// TokenTree2::Group(grp) => transform_wildcard_selector_to_string(grp),
// _ => tt,
// }
// })
// .collect();
// attr.tokens = ts;

let mut args = Vec::new();
attr.parse_nested_meta(|meta| {
let frag = <AttributeFrag as TryFrom<_>>::try_from(meta)?;
args.push(frag);
Ok(())
});
})?;

Self::ensure_no_duplicate_args(&args)?;
if args.is_empty() {
Expand Down