mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Clarify the meaning of the span within mbe::TokenTree::MetaVar
.
This commit is contained in:
parent
39e02f1bd1
commit
c8844dfdc0
@ -73,7 +73,8 @@ enum TokenTree {
|
|||||||
Delimited(DelimSpan, DelimSpacing, Delimited),
|
Delimited(DelimSpan, DelimSpacing, Delimited),
|
||||||
/// A kleene-style repetition sequence, e.g. `$($e:expr)*` (RHS) or `$($e),*` (LHS).
|
/// A kleene-style repetition sequence, e.g. `$($e:expr)*` (RHS) or `$($e),*` (LHS).
|
||||||
Sequence(DelimSpan, SequenceRepetition),
|
Sequence(DelimSpan, SequenceRepetition),
|
||||||
/// e.g., `$var`.
|
/// e.g., `$var`. The span covers the leading dollar and the ident. (The span within the ident
|
||||||
|
/// only covers the ident, e.g. `var`.)
|
||||||
MetaVar(Span, Ident),
|
MetaVar(Span, Ident),
|
||||||
/// e.g., `$var:expr`. Only appears on the LHS.
|
/// e.g., `$var:expr`. Only appears on the LHS.
|
||||||
MetaVarDecl(Span, Ident /* name to bind */, Option<NonterminalKind>),
|
MetaVarDecl(Span, Ident /* name to bind */, Option<NonterminalKind>),
|
||||||
|
@ -176,7 +176,7 @@ fn parse_tree<'a>(
|
|||||||
// Depending on what `tree` is, we could be parsing different parts of a macro
|
// Depending on what `tree` is, we could be parsing different parts of a macro
|
||||||
match tree {
|
match tree {
|
||||||
// `tree` is a `$` token. Look at the next token in `trees`
|
// `tree` is a `$` token. Look at the next token in `trees`
|
||||||
&tokenstream::TokenTree::Token(Token { kind: token::Dollar, span }, _) => {
|
&tokenstream::TokenTree::Token(Token { kind: token::Dollar, span: dollar_span }, _) => {
|
||||||
// FIXME: Handle `Invisible`-delimited groups in a more systematic way
|
// FIXME: Handle `Invisible`-delimited groups in a more systematic way
|
||||||
// during parsing.
|
// during parsing.
|
||||||
let mut next = outer_trees.next();
|
let mut next = outer_trees.next();
|
||||||
@ -209,7 +209,7 @@ fn parse_tree<'a>(
|
|||||||
err.emit();
|
err.emit();
|
||||||
// Returns early the same read `$` to avoid spanning
|
// Returns early the same read `$` to avoid spanning
|
||||||
// unrelated diagnostics that could be performed afterwards
|
// unrelated diagnostics that could be performed afterwards
|
||||||
return TokenTree::token(token::Dollar, span);
|
return TokenTree::token(token::Dollar, dollar_span);
|
||||||
}
|
}
|
||||||
Ok(elem) => {
|
Ok(elem) => {
|
||||||
maybe_emit_macro_metavar_expr_feature(
|
maybe_emit_macro_metavar_expr_feature(
|
||||||
@ -251,7 +251,7 @@ fn parse_tree<'a>(
|
|||||||
// special metavariable that names the crate of the invocation.
|
// special metavariable that names the crate of the invocation.
|
||||||
Some(tokenstream::TokenTree::Token(token, _)) if token.is_ident() => {
|
Some(tokenstream::TokenTree::Token(token, _)) if token.is_ident() => {
|
||||||
let (ident, is_raw) = token.ident().unwrap();
|
let (ident, is_raw) = token.ident().unwrap();
|
||||||
let span = ident.span.with_lo(span.lo());
|
let span = ident.span.with_lo(dollar_span.lo());
|
||||||
if ident.name == kw::Crate && matches!(is_raw, IdentIsRaw::No) {
|
if ident.name == kw::Crate && matches!(is_raw, IdentIsRaw::No) {
|
||||||
TokenTree::token(token::Ident(kw::DollarCrate, is_raw), span)
|
TokenTree::token(token::Ident(kw::DollarCrate, is_raw), span)
|
||||||
} else {
|
} else {
|
||||||
@ -260,16 +260,19 @@ fn parse_tree<'a>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// `tree` is followed by another `$`. This is an escaped `$`.
|
// `tree` is followed by another `$`. This is an escaped `$`.
|
||||||
Some(&tokenstream::TokenTree::Token(Token { kind: token::Dollar, span }, _)) => {
|
Some(&tokenstream::TokenTree::Token(
|
||||||
|
Token { kind: token::Dollar, span: dollar_span2 },
|
||||||
|
_,
|
||||||
|
)) => {
|
||||||
if parsing_patterns {
|
if parsing_patterns {
|
||||||
span_dollar_dollar_or_metavar_in_the_lhs_err(
|
span_dollar_dollar_or_metavar_in_the_lhs_err(
|
||||||
sess,
|
sess,
|
||||||
&Token { kind: token::Dollar, span },
|
&Token { kind: token::Dollar, span: dollar_span2 },
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
maybe_emit_macro_metavar_expr_feature(features, sess, span);
|
maybe_emit_macro_metavar_expr_feature(features, sess, dollar_span2);
|
||||||
}
|
}
|
||||||
TokenTree::token(token::Dollar, span)
|
TokenTree::token(token::Dollar, dollar_span2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// `tree` is followed by some other token. This is an error.
|
// `tree` is followed by some other token. This is an error.
|
||||||
@ -281,7 +284,7 @@ fn parse_tree<'a>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// There are no more tokens. Just return the `$` we already have.
|
// There are no more tokens. Just return the `$` we already have.
|
||||||
None => TokenTree::token(token::Dollar, span),
|
None => TokenTree::token(token::Dollar, dollar_span),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user