mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
more intuitive order
This commit is contained in:
parent
d846afdeef
commit
c72908a201
2 changed files with 43 additions and 43 deletions
|
@ -41,48 +41,6 @@ pub use crate::{
|
||||||
syntax_kind::SyntaxKind,
|
syntax_kind::SyntaxKind,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Parse a prefix of the input as a given syntactic construct.
|
|
||||||
///
|
|
||||||
/// This is used by macro-by-example parser to implement things like `$i:item`
|
|
||||||
/// and the naming of variants follows the naming of macro fragments.
|
|
||||||
///
|
|
||||||
/// Note that this is generally non-optional -- the result is intentionally not
|
|
||||||
/// `Option<Output>`. The way MBE work, by the time we *try* to parse `$e:expr`
|
|
||||||
/// we already commit to expression. In other words, this API by design can't be
|
|
||||||
/// used to implement "rollback and try another alternative" logic.
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub enum PrefixEntryPoint {
|
|
||||||
Vis,
|
|
||||||
Block,
|
|
||||||
Stmt,
|
|
||||||
Pat,
|
|
||||||
Ty,
|
|
||||||
Expr,
|
|
||||||
Path,
|
|
||||||
Item,
|
|
||||||
MetaItem,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PrefixEntryPoint {
|
|
||||||
pub fn parse(&self, input: &Input) -> Output {
|
|
||||||
let entry_point: fn(&'_ mut parser::Parser) = match self {
|
|
||||||
PrefixEntryPoint::Vis => grammar::entry::prefix::vis,
|
|
||||||
PrefixEntryPoint::Block => grammar::entry::prefix::block,
|
|
||||||
PrefixEntryPoint::Stmt => grammar::entry::prefix::stmt,
|
|
||||||
PrefixEntryPoint::Pat => grammar::entry::prefix::pat,
|
|
||||||
PrefixEntryPoint::Ty => grammar::entry::prefix::ty,
|
|
||||||
PrefixEntryPoint::Expr => grammar::entry::prefix::expr,
|
|
||||||
PrefixEntryPoint::Path => grammar::entry::prefix::path,
|
|
||||||
PrefixEntryPoint::Item => grammar::entry::prefix::item,
|
|
||||||
PrefixEntryPoint::MetaItem => grammar::entry::prefix::meta_item,
|
|
||||||
};
|
|
||||||
let mut p = parser::Parser::new(input);
|
|
||||||
entry_point(&mut p);
|
|
||||||
let events = p.finish();
|
|
||||||
event::process(events)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Parse the whole of the input as a given syntactic construct.
|
/// Parse the whole of the input as a given syntactic construct.
|
||||||
///
|
///
|
||||||
/// This covers two main use-cases:
|
/// This covers two main use-cases:
|
||||||
|
@ -152,6 +110,48 @@ impl TopEntryPoint {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Parse a prefix of the input as a given syntactic construct.
|
||||||
|
///
|
||||||
|
/// This is used by macro-by-example parser to implement things like `$i:item`
|
||||||
|
/// and the naming of variants follows the naming of macro fragments.
|
||||||
|
///
|
||||||
|
/// Note that this is generally non-optional -- the result is intentionally not
|
||||||
|
/// `Option<Output>`. The way MBE work, by the time we *try* to parse `$e:expr`
|
||||||
|
/// we already commit to expression. In other words, this API by design can't be
|
||||||
|
/// used to implement "rollback and try another alternative" logic.
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum PrefixEntryPoint {
|
||||||
|
Vis,
|
||||||
|
Block,
|
||||||
|
Stmt,
|
||||||
|
Pat,
|
||||||
|
Ty,
|
||||||
|
Expr,
|
||||||
|
Path,
|
||||||
|
Item,
|
||||||
|
MetaItem,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PrefixEntryPoint {
|
||||||
|
pub fn parse(&self, input: &Input) -> Output {
|
||||||
|
let entry_point: fn(&'_ mut parser::Parser) = match self {
|
||||||
|
PrefixEntryPoint::Vis => grammar::entry::prefix::vis,
|
||||||
|
PrefixEntryPoint::Block => grammar::entry::prefix::block,
|
||||||
|
PrefixEntryPoint::Stmt => grammar::entry::prefix::stmt,
|
||||||
|
PrefixEntryPoint::Pat => grammar::entry::prefix::pat,
|
||||||
|
PrefixEntryPoint::Ty => grammar::entry::prefix::ty,
|
||||||
|
PrefixEntryPoint::Expr => grammar::entry::prefix::expr,
|
||||||
|
PrefixEntryPoint::Path => grammar::entry::prefix::path,
|
||||||
|
PrefixEntryPoint::Item => grammar::entry::prefix::item,
|
||||||
|
PrefixEntryPoint::MetaItem => grammar::entry::prefix::meta_item,
|
||||||
|
};
|
||||||
|
let mut p = parser::Parser::new(input);
|
||||||
|
entry_point(&mut p);
|
||||||
|
let events = p.finish();
|
||||||
|
event::process(events)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A parsing function for a specific braced-block.
|
/// A parsing function for a specific braced-block.
|
||||||
pub struct Reparser(fn(&mut parser::Parser));
|
pub struct Reparser(fn(&mut parser::Parser));
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
mod sourcegen_inline_tests;
|
mod sourcegen_inline_tests;
|
||||||
mod prefix_entries;
|
|
||||||
mod top_entries;
|
mod top_entries;
|
||||||
|
mod prefix_entries;
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
fmt::Write,
|
fmt::Write,
|
||||||
|
|
Loading…
Reference in a new issue