mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-02-14 04:12:46 +08:00
Sort enum-like AST nodes
This commit is contained in:
parent
10dd8a8e73
commit
349f62cd7c
212
src/ast.rs
212
src/ast.rs
|
@ -2125,6 +2125,112 @@ impl ArgumentOrRedirection {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum BlockStatementHeaderVariant {
|
||||
None,
|
||||
ForHeader(ForHeader),
|
||||
WhileHeader(WhileHeader),
|
||||
FunctionHeader(FunctionHeader),
|
||||
BeginHeader(BeginHeader),
|
||||
}
|
||||
|
||||
impl Default for BlockStatementHeaderVariant {
|
||||
fn default() -> Self {
|
||||
BlockStatementHeaderVariant::None
|
||||
}
|
||||
}
|
||||
|
||||
impl Acceptor for BlockStatementHeaderVariant {
|
||||
fn accept<'a>(&'a self, visitor: &mut dyn NodeVisitor<'a>, reversed: bool) {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::None => panic!("cannot visit null block header"),
|
||||
BlockStatementHeaderVariant::ForHeader(node) => node.accept(visitor, reversed),
|
||||
BlockStatementHeaderVariant::WhileHeader(node) => node.accept(visitor, reversed),
|
||||
BlockStatementHeaderVariant::FunctionHeader(node) => node.accept(visitor, reversed),
|
||||
BlockStatementHeaderVariant::BeginHeader(node) => node.accept(visitor, reversed),
|
||||
}
|
||||
}
|
||||
}
|
||||
impl AcceptorMut for BlockStatementHeaderVariant {
|
||||
fn accept_mut(&mut self, visitor: &mut dyn NodeVisitorMut, reversed: bool) {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::None => panic!("cannot visit null block header"),
|
||||
BlockStatementHeaderVariant::ForHeader(node) => node.accept_mut(visitor, reversed),
|
||||
BlockStatementHeaderVariant::WhileHeader(node) => node.accept_mut(visitor, reversed),
|
||||
BlockStatementHeaderVariant::FunctionHeader(node) => node.accept_mut(visitor, reversed),
|
||||
BlockStatementHeaderVariant::BeginHeader(node) => node.accept_mut(visitor, reversed),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl BlockStatementHeaderVariant {
|
||||
pub fn typ(&self) -> Type {
|
||||
self.embedded_node().typ()
|
||||
}
|
||||
pub fn try_source_range(&self) -> Option<SourceRange> {
|
||||
self.embedded_node().try_source_range()
|
||||
}
|
||||
|
||||
pub fn as_for_header(&self) -> Option<&ForHeader> {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::ForHeader(node) => Some(node),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub fn as_while_header(&self) -> Option<&WhileHeader> {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::WhileHeader(node) => Some(node),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub fn as_function_header(&self) -> Option<&FunctionHeader> {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::FunctionHeader(node) => Some(node),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub fn as_begin_header(&self) -> Option<&BeginHeader> {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::BeginHeader(node) => Some(node),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn embedded_node(&self) -> &dyn NodeMut {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::None => panic!("cannot visit null block header"),
|
||||
BlockStatementHeaderVariant::ForHeader(node) => node,
|
||||
BlockStatementHeaderVariant::WhileHeader(node) => node,
|
||||
BlockStatementHeaderVariant::FunctionHeader(node) => node,
|
||||
BlockStatementHeaderVariant::BeginHeader(node) => node,
|
||||
}
|
||||
}
|
||||
fn as_mut_for_header(&mut self) -> &mut ForHeader {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::ForHeader(node) => node,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
fn as_mut_while_header(&mut self) -> &mut WhileHeader {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::WhileHeader(node) => node,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
fn as_mut_function_header(&mut self) -> &mut FunctionHeader {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::FunctionHeader(node) => node,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
fn as_mut_begin_header(&mut self) -> &mut BeginHeader {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::BeginHeader(node) => node,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum StatementVariant {
|
||||
None,
|
||||
|
@ -2247,112 +2353,6 @@ impl StatementVariant {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum BlockStatementHeaderVariant {
|
||||
None,
|
||||
ForHeader(ForHeader),
|
||||
WhileHeader(WhileHeader),
|
||||
FunctionHeader(FunctionHeader),
|
||||
BeginHeader(BeginHeader),
|
||||
}
|
||||
|
||||
impl Default for BlockStatementHeaderVariant {
|
||||
fn default() -> Self {
|
||||
BlockStatementHeaderVariant::None
|
||||
}
|
||||
}
|
||||
|
||||
impl Acceptor for BlockStatementHeaderVariant {
|
||||
fn accept<'a>(&'a self, visitor: &mut dyn NodeVisitor<'a>, reversed: bool) {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::None => panic!("cannot visit null block header"),
|
||||
BlockStatementHeaderVariant::ForHeader(node) => node.accept(visitor, reversed),
|
||||
BlockStatementHeaderVariant::WhileHeader(node) => node.accept(visitor, reversed),
|
||||
BlockStatementHeaderVariant::FunctionHeader(node) => node.accept(visitor, reversed),
|
||||
BlockStatementHeaderVariant::BeginHeader(node) => node.accept(visitor, reversed),
|
||||
}
|
||||
}
|
||||
}
|
||||
impl AcceptorMut for BlockStatementHeaderVariant {
|
||||
fn accept_mut(&mut self, visitor: &mut dyn NodeVisitorMut, reversed: bool) {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::None => panic!("cannot visit null block header"),
|
||||
BlockStatementHeaderVariant::ForHeader(node) => node.accept_mut(visitor, reversed),
|
||||
BlockStatementHeaderVariant::WhileHeader(node) => node.accept_mut(visitor, reversed),
|
||||
BlockStatementHeaderVariant::FunctionHeader(node) => node.accept_mut(visitor, reversed),
|
||||
BlockStatementHeaderVariant::BeginHeader(node) => node.accept_mut(visitor, reversed),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl BlockStatementHeaderVariant {
|
||||
pub fn typ(&self) -> Type {
|
||||
self.embedded_node().typ()
|
||||
}
|
||||
pub fn try_source_range(&self) -> Option<SourceRange> {
|
||||
self.embedded_node().try_source_range()
|
||||
}
|
||||
|
||||
pub fn as_for_header(&self) -> Option<&ForHeader> {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::ForHeader(node) => Some(node),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub fn as_while_header(&self) -> Option<&WhileHeader> {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::WhileHeader(node) => Some(node),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub fn as_function_header(&self) -> Option<&FunctionHeader> {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::FunctionHeader(node) => Some(node),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub fn as_begin_header(&self) -> Option<&BeginHeader> {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::BeginHeader(node) => Some(node),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn embedded_node(&self) -> &dyn NodeMut {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::None => panic!("cannot visit null block header"),
|
||||
BlockStatementHeaderVariant::ForHeader(node) => node,
|
||||
BlockStatementHeaderVariant::WhileHeader(node) => node,
|
||||
BlockStatementHeaderVariant::FunctionHeader(node) => node,
|
||||
BlockStatementHeaderVariant::BeginHeader(node) => node,
|
||||
}
|
||||
}
|
||||
fn as_mut_for_header(&mut self) -> &mut ForHeader {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::ForHeader(node) => node,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
fn as_mut_while_header(&mut self) -> &mut WhileHeader {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::WhileHeader(node) => node,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
fn as_mut_function_header(&mut self) -> &mut FunctionHeader {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::FunctionHeader(node) => node,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
fn as_mut_begin_header(&mut self) -> &mut BeginHeader {
|
||||
match self {
|
||||
BlockStatementHeaderVariant::BeginHeader(node) => node,
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Return a string literal name for an ast type.
|
||||
pub fn ast_type_to_string(t: Type) -> &'static wstr {
|
||||
match t {
|
||||
|
|
Loading…
Reference in New Issue
Block a user