Browse Source

lang: Change context error span and add constraint docs (#342)

Armani Ferrante 4 years ago
parent
commit
2f5a9fcc7d
2 changed files with 3 additions and 7 deletions
  1. 2 1
      lang/derive/accounts/src/lib.rs
  2. 1 6
      lang/syn/src/parser/program/mod.rs

+ 2 - 1
lang/derive/accounts/src/lib.rs

@@ -43,7 +43,8 @@ use syn::parse_macro_input;
 /// | `#[account(belongs_to = <target>)]` | On `ProgramAccount` or `CpiAccount` structs | Checks the `target` field on the account matches the `target` field in the struct deriving `Accounts`. |
 /// | `#[account(has_one = <target>)]` | On `ProgramAccount` or `CpiAccount` structs | Semantically different, but otherwise the same as `belongs_to`. |
 /// | `#[account(seeds = [<seeds>])]` | On `AccountInfo` structs | Seeds for the program derived address an `AccountInfo` struct represents. |
-/// | `#[account("<literal>")]` | On any type deriving `Accounts` | Executes the given code literal as a constraint. The literal should evaluate to a boolean. |
+/// | `#[account(constraint = <expression>)]` | On any type deriving `Accounts` | Executes the given code as a constraint. The expression should evaluate to a boolean. |
+/// | `#[account("<literal>")]` | Deprecated | Executes the given code literal as a constraint. The literal should evaluate to a boolean. |
 /// | `#[account(rent_exempt = <skip>)]` | On `AccountInfo` or `ProgramAccount` structs | Optional attribute to skip the rent exemption check. By default, all accounts marked with `#[account(init)]` will be rent exempt, and so this should rarely (if ever) be used. Similarly, omitting `= skip` will mark the account rent exempt. |
 /// | `#[account(executable)]` | On `AccountInfo` structs | Checks the given account is an executable program. |
 /// | `#[account(state = <target>)]` | On `CpiState` structs | Checks the given state is the canonical state account for the target program. |

+ 1 - 6
lang/syn/src/parser/program/mod.rs

@@ -29,12 +29,7 @@ fn ctx_accounts_ident(path_ty: &syn::PatType) -> ParseResult<proc_macro2::Ident>
 
     let generic_args = match &segment.arguments {
         syn::PathArguments::AngleBracketed(args) => args,
-        _ => {
-            return Err(ParseError::new(
-                segment.arguments.span(),
-                "expected generic arguments here",
-            ))
-        }
+        _ => return Err(ParseError::new(path_ty.span(), "missing accounts context")),
     };
     let generic_ty = generic_args
         .args