Struct syntax::parse::parser::Parser [] [src]

pub struct Parser<'a> {
    pub sess: &'a ParseSess,
    pub token: Token,
    pub span: Span,
    pub prev_span: Span,
    pub restrictions: Restrictions,
    pub obsolete_set: HashSet<ObsoleteSyntax>,
    pub directory: Directory,
    pub root_module_name: Option<String>,
    pub expected_tokens: Vec<TokenType>,
    pub desugar_doc_comments: bool,
    pub cfg_mods: bool,
    // some fields omitted
}
🔬 This is a nightly-only experimental API. (rustc_private)

Fields

🔬 This is a nightly-only experimental API. (rustc_private)
🔬 This is a nightly-only experimental API. (rustc_private)

the current token:

🔬 This is a nightly-only experimental API. (rustc_private)

the span of the current token:

🔬 This is a nightly-only experimental API. (rustc_private)

the span of the previous token:

🔬 This is a nightly-only experimental API. (rustc_private)
🔬 This is a nightly-only experimental API. (rustc_private)

The set of seen errors about obsolete syntax. Used to suppress extra detail when the same error is seen twice

🔬 This is a nightly-only experimental API. (rustc_private)

Used to determine the path to externally loaded source files

🔬 This is a nightly-only experimental API. (rustc_private)

Name of the root module this parser originated from. If None, then the name is not known. This does not change while the parser is descending into modules, and sub-parsers have new values for this name.

🔬 This is a nightly-only experimental API. (rustc_private)
🔬 This is a nightly-only experimental API. (rustc_private)
🔬 This is a nightly-only experimental API. (rustc_private)

Whether we should configure out of line modules as we parse.

Methods

impl<'a> Parser<'a>
[src]

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Convert a token to a string using self's reader

🔬 This is a nightly-only experimental API. (rustc_private)

Convert the current token to a string using self's reader

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Expect and consume the token t. Signal an error if the next token is not t.

🔬 This is a nightly-only experimental API. (rustc_private)

Expect next token to be edible or inedible token. If edible, then consume it; if inedible, then return without consuming anything. Signal a fatal error if next token is unexpected.

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Check if the next token is tok, and return true if so.

This method will automatically add tok to expected_tokens if tok is not encountered.

🔬 This is a nightly-only experimental API. (rustc_private)

Consume token 'tok' if it exists. Returns true if the given token was present, false otherwise.

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

If the next token is the given keyword, eat it and return true. Otherwise, return false.

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

If the given word is not a keyword, signal an error. If the next token is not the given word, signal an error. Otherwise, eat it.

🔬 This is a nightly-only experimental API. (rustc_private)

Signal an error if the given string is a strict keyword

🔬 This is a nightly-only experimental API. (rustc_private)

Signal an error if the current token is a reserved keyword

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Expect and consume a GT. if a >> is seen, replace it with a single > and continue. If a GT is not seen, signal an error.

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a sequence bracketed by '<' and '>', stopping before the '>'.

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Eat and discard tokens until one of kets is encountered. Respects token trees, passes through any errors encountered. Used for error recovery.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a sequence, including the closing delimiter. The function f must consume tokens until reaching the next separator or closing bracket.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a sequence, not including the closing delimiter. The function f must consume tokens until reaching the next separator or closing bracket.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a sequence, including the closing delimiter. The function f must consume tokens until reaching the next separator or closing bracket.

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Advance the parser by one token

🔬 This is a nightly-only experimental API. (rustc_private)

Advance the parser using provided token as a next one. Use this when consuming a part of a token. For example a single < from <<.

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Is the current token one of the keywords that signals a bare function type?

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

parse a TyKind::BareFn type:

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Parse the items in a trait declaration

🔬 This is a nightly-only experimental API. (rustc_private)

Parse the items in a trait declaration

🔬 This is a nightly-only experimental API. (rustc_private)

Parse optional return type [ -> TY ] in function decl

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a type.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a type in restricted contexts where + is not permitted. Example 1: &'a TYPE + is prohibited to maintain operator priority (P(+) < P(&)). Example 2: value1 as TYPE + value2 + is prohibited to avoid interactions with expression grammar.

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

This version of parse arg doesn't necessarily require identifier names.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a single function argument

🔬 This is a nightly-only experimental API. (rustc_private)

Parse an argument in a lambda header e.g. |arg, arg|

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Matches token_lit = LIT_INTEGER | ...

🔬 This is a nightly-only experimental API. (rustc_private)

Matches lit = true | false | token_lit

🔬 This is a nightly-only experimental API. (rustc_private)

matches '-' lit | lit

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Parses qualified path.

Assumes that the leading < has been parsed already.

Qualifed paths are a part of the universal function call syntax (UFCS).

qualified_path = <type [as trait_ref]>::path

See parse_path for mode meaning.

Examples:

<T as U>::a <T as U>::F::a::<S>

🔬 This is a nightly-only experimental API. (rustc_private)

Parses a path and optional type parameter bounds, depending on the mode. The mode parameter determines whether lifetimes, types, and/or bounds are permitted and whether :: must precede type parameter groups.

🔬 This is a nightly-only experimental API. (rustc_private)

Examples: - a::b<T,U>::c<V,W> - a::b<T,U>::c(V) -> W - a::b<T,U>::c(V)

🔬 This is a nightly-only experimental API. (rustc_private)

Examples: - a::b::<T,U>::c

🔬 This is a nightly-only experimental API. (rustc_private)

Examples: - a::b::c

🔬 This is a nightly-only experimental API. (rustc_private)

Parse single lifetime 'a or nothing.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse mutability (mut or nothing).

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Parse ident (COLON expr)?

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a block or unsafe block

🔬 This is a nightly-only experimental API. (rustc_private)

parse a.b or a(13) or a[4] or just a

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

parse a single token tree from the input.

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a prefix-unary-operator expr

🔬 This is a nightly-only experimental API. (rustc_private)

Parse an associative expression

This parses an expression accounting for associativity and precedence of the operators in the expression.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse an associative expression with operators of at least min_prec precedence

🔬 This is a nightly-only experimental API. (rustc_private)

Parse an 'if' or 'if let' expression ('if' token already eaten)

🔬 This is a nightly-only experimental API. (rustc_private)

Parse an 'if let' expression ('if' token already eaten)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a 'for' .. 'in' expression ('for' token already eaten)

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a 'while' or 'while let' expression ('while' token already eaten)

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a 'while let' expression ('while' token already eaten)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Parse an expression

🔬 This is a nightly-only experimental API. (rustc_private)

Evaluate the closure with restrictions in place.

After the closure is evaluated, restrictions are reset.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse an expression, subject to the given restrictions

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a pattern.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a statement. This stops just before trailing semicolons on everything but items. e.g. a StmtKind::Semi parses to a StmtKind::Expr, leaving the trailing ; unconsumed.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a block. No inner attrs are allowed.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a statement, including the trailing semicolon.

🔬 This is a nightly-only experimental API. (rustc_private)

Parses (possibly empty) list of lifetime and type parameters, possibly including trailing comma and erroneous trailing attributes.

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a set of optional generic type parameter declarations. Where clauses are not parsed here, and must be added later via parse_where_clause().

matches generics = ( ) | ( < > ) | ( < typaramseq ( , )? > ) | ( < lifetimes ( , )? > ) | ( < lifetimes , typaramseq ( , )? > ) where typaramseq = ( typaram ) | ( typaram , typaramseq )

🔬 This is a nightly-only experimental API. (rustc_private)

Parses an optional where clause and places it in generics.

where T : Trait<U, V> + 'b, 'a : 'b

🔬 This is a nightly-only experimental API. (rustc_private)

Parse the argument list and result type of a function declaration

🔬 This is a nightly-only experimental API. (rustc_private)

true if we are looking at const ID, false for things like const fn etc

🔬 This is a nightly-only experimental API. (rustc_private)

parses all the "front matter" for a fn declaration, up to and including the fn keyword:

  • const fn
  • unsafe fn
  • const unsafe fn
  • extern fn
  • etc

🔬 This is a nightly-only experimental API. (rustc_private)

Parse an impl item.

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Parse a structure field declaration

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Returns either a path to a module, or .

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Parses a source module as a crate. This is the main entry point for the parser.

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

impl<'a> Parser<'a>
[src]

🔬 This is a nightly-only experimental API. (rustc_private)

Parse attributes that appear before an item

🔬 This is a nightly-only experimental API. (rustc_private)

Matches attribute = # ! [ meta_item ]

If permit_inner is true, then a leading ! indicates an inner attribute

🔬 This is a nightly-only experimental API. (rustc_private)

Parse attributes that appear after the opening of an item. These should be preceded by an exclamation mark, but we accept and warn about one terminated by a semicolon. matches inner_attrs*

🔬 This is a nightly-only experimental API. (rustc_private)

Per RFC#1559, matches the following grammar:

meta_item : IDENT ( '=' UNSUFFIXED_LIT | '(' meta_item_inner? ')' )? ; meta_item_inner : (meta_item | UNSUFFIXED_LIT) (',' meta_item_inner)? ;

impl<'a> Parser<'a>
[src]

🔬 This is a nightly-only experimental API. (rustc_private)

🔬 This is a nightly-only experimental API. (rustc_private)

Trait Implementations

impl<'a> ParserObsoleteMethods for Parser<'a>
[src]

🔬 This is a nightly-only experimental API. (rustc_private)

Reports an obsolete syntax non-fatal error.

🔬 This is a nightly-only experimental API. (rustc_private)