Skip to content
This repository has been archived by the owner on Aug 31, 2023. It is now read-only.

Function Expression/Declaration AST Facade #1786

Merged
merged 5 commits into from
Nov 16, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 16 additions & 13 deletions crates/rome_formatter/src/cst.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
use crate::{FormatElement, FormatResult, Formatter, ToFormatElement};
use rslint_parser::ast::{
ArgList, ArrayPattern, ArrowExpr, AssignPattern, CallExpr, ClassBody, ClassDecl, ClassProp,
Condition, ConstructorParameters, FnDecl, ForInStmt, ForStmt, ForStmtInit, ForStmtTest,
ForStmtUpdate, Getter, IdentProp, JsArrayExpression, JsBlockStatement, JsBooleanLiteral,
ArgList, ArrayPattern, AssignPattern, CallExpr, ClassBody, ClassDecl, ClassProp, Condition,
ConstructorParameters, ForInStmt, ForStmt, ForStmtInit, ForStmtTest, ForStmtUpdate, Getter,
IdentProp, JsArrayExpression, JsArrowFunctionExpression, JsBlockStatement, JsBooleanLiteral,
JsCaseClause, JsCatchClause, JsContinueStatement, JsDebuggerStatement, JsDefaultClause,
JsDoWhileStatement, JsEmptyStatement, JsExpressionStatement, JsFinallyClause, JsIfStatement,
JsLabeledStatement, JsNullLiteral, JsNumberLiteral, JsReferenceIdentifierExpression,
JsReturnStatement, JsRoot, JsSequenceExpression, JsStringLiteral, JsSwitchStatement,
JsTryStatement, JsVariableDeclarationStatement, JsVariableDeclarator, JsWhileStatement,
JsWithStatement, LiteralProp, Name, ObjectExpr, ParameterList, Setter, SinglePattern,
JsDoWhileStatement, JsEmptyStatement, JsExpressionStatement, JsFinallyClause,
JsFunctionDeclaration, JsIfStatement, JsLabeledStatement, JsNullLiteral, JsNumberLiteral,
JsParameterList, JsReferenceIdentifierExpression, JsReturnStatement, JsRoot,
JsSequenceExpression, JsStringLiteral, JsSwitchStatement, JsTryStatement,
JsVariableDeclarationStatement, JsVariableDeclarator, JsWhileStatement, JsWithStatement,
LiteralProp, Name, ObjectExpr, Setter, SinglePattern,
};
use rslint_parser::{AstNode, SyntaxKind, SyntaxNode};

Expand All @@ -18,9 +19,11 @@ impl ToFormatElement for SyntaxNode {
SyntaxKind::JS_ARRAY_EXPRESSION => JsArrayExpression::cast(self.clone())
.unwrap()
.to_format_element(formatter),
SyntaxKind::ARROW_EXPR => ArrowExpr::cast(self.clone())
.unwrap()
.to_format_element(formatter),
SyntaxKind::JS_ARROW_FUNCTION_EXPRESSION => {
JsArrowFunctionExpression::cast(self.clone())
.unwrap()
.to_format_element(formatter)
}
SyntaxKind::ASSIGN_PATTERN => AssignPattern::cast(self.clone())
.unwrap()
.to_format_element(formatter),
Expand All @@ -44,7 +47,7 @@ impl ToFormatElement for SyntaxNode {
.unwrap()
.to_format_element(formatter)
}
SyntaxKind::PARAMETER_LIST => ParameterList::cast(self.clone())
SyntaxKind::JS_PARAMETER_LIST => JsParameterList::cast(self.clone())
.unwrap()
.to_format_element(formatter),
SyntaxKind::JS_ROOT => JsRoot::cast(self.clone())
Expand All @@ -64,7 +67,7 @@ impl ToFormatElement for SyntaxNode {
SyntaxKind::JS_VARIABLE_DECLARATOR => JsVariableDeclarator::cast(self.clone())
.unwrap()
.to_format_element(formatter),
SyntaxKind::FN_DECL => FnDecl::cast(self.clone())
SyntaxKind::JS_FUNCTION_DECLARATION => JsFunctionDeclaration::cast(self.clone())
.unwrap()
.to_format_element(formatter),
SyntaxKind::JS_SEQUENCE_EXPRESSION => JsSequenceExpression::cast(self.clone())
Expand Down
8 changes: 8 additions & 0 deletions crates/rome_formatter/src/ts/bindings/identifier_binding.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
use crate::{FormatElement, FormatResult, Formatter, ToFormatElement};
use rslint_parser::ast::JsIdentifierBinding;

impl ToFormatElement for JsIdentifierBinding {
fn to_format_element(&self, formatter: &Formatter) -> FormatResult<FormatElement> {
formatter.format_token(&self.name_token()?)
}
}
1 change: 1 addition & 0 deletions crates/rome_formatter/src/ts/bindings/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
mod identifier_binding;
8 changes: 4 additions & 4 deletions crates/rome_formatter/src/ts/declarators/fn_decl.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use crate::{
concat_elements, space_token, FormatElement, FormatResult, Formatter, ToFormatElement,
};
use rslint_parser::ast::FnDecl;
use rslint_parser::ast::JsFunctionDeclaration;

impl ToFormatElement for FnDecl {
impl ToFormatElement for JsFunctionDeclaration {
fn to_format_element(&self, formatter: &Formatter) -> FormatResult<FormatElement> {
let mut tokens = vec![];

Expand All @@ -19,8 +19,8 @@ impl ToFormatElement for FnDecl {
}

tokens.push(space_token());
tokens.push(formatter.format_node(self.name()?)?);
tokens.push(formatter.format_node(self.parameters()?)?);
tokens.push(formatter.format_node(self.id()?)?);
tokens.push(formatter.format_node(self.parameter_list()?)?);
tokens.push(space_token());
tokens.push(formatter.format_node(self.body()?)?);

Expand Down
11 changes: 0 additions & 11 deletions crates/rome_formatter/src/ts/expr_or_block.rs

This file was deleted.

21 changes: 16 additions & 5 deletions crates/rome_formatter/src/ts/expressions/arrow_expr.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
use rslint_parser::ast::{ArrowExpr, ArrowExprParams};
use rslint_parser::ast::{
JsAnyArrowFunctionBody, JsAnyArrowFunctionParameters, JsArrowFunctionExpression,
};

use crate::{
concat_elements, format_elements, space_token, token, FormatElement, FormatResult, Formatter,
ToFormatElement,
};

impl ToFormatElement for ArrowExpr {
impl ToFormatElement for JsArrowFunctionExpression {
fn to_format_element(&self, formatter: &Formatter) -> FormatResult<FormatElement> {
let mut tokens: Vec<FormatElement> = vec![];

Expand All @@ -16,14 +18,14 @@ impl ToFormatElement for ArrowExpr {
));
}

if let Some(params) = self.params() {
if let Some(params) = self.parameter_list() {
match params {
ArrowExprParams::Name(name) => {
JsAnyArrowFunctionParameters::JsIdentifierBinding(name) => {
tokens.push(token("("));
tokens.push(formatter.format_node(name)?);
tokens.push(token(")"));
}
ArrowExprParams::ParameterList(params) => {
JsAnyArrowFunctionParameters::JsParameterList(params) => {
tokens.push(formatter.format_node(params)?)
}
}
Expand All @@ -39,3 +41,12 @@ impl ToFormatElement for ArrowExpr {
Ok(concat_elements(tokens))
}
}

impl ToFormatElement for JsAnyArrowFunctionBody {
fn to_format_element(&self, formatter: &Formatter) -> FormatResult<FormatElement> {
match self {
JsAnyArrowFunctionBody::JsFunctionBody(body) => body.to_format_element(formatter),
JsAnyArrowFunctionBody::JsAnyExpression(expr) => expr.to_format_element(formatter),
}
}
}
4 changes: 2 additions & 2 deletions crates/rome_formatter/src/ts/expressions/expression.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use rslint_parser::ast::JsAnyExpression;
impl ToFormatElement for JsAnyExpression {
fn to_format_element(&self, formatter: &Formatter) -> FormatResult<FormatElement> {
match self {
JsAnyExpression::ArrowExpr(arrow) => arrow.to_format_element(formatter),
JsAnyExpression::JsArrowFunctionExpression(arrow) => arrow.to_format_element(formatter),
JsAnyExpression::JsAnyLiteral(literal) => literal.to_format_element(formatter),
JsAnyExpression::Template(_) => todo!(),
JsAnyExpression::JsReferenceIdentifierExpression(name_ref) => {
Expand All @@ -29,7 +29,7 @@ impl ToFormatElement for JsAnyExpression {
JsAnyExpression::JsConditionalExpression(_) => todo!(),
JsAnyExpression::AssignExpr(_) => todo!(),
JsAnyExpression::JsSequenceExpression(expr) => expr.to_format_element(formatter),
JsAnyExpression::FnExpr(_) => todo!(),
JsAnyExpression::JsFunctionExpression(_) => todo!(),
JsAnyExpression::ClassExpr(_) => todo!(),
JsAnyExpression::NewTarget(_) => todo!(),
JsAnyExpression::ImportMeta(_) => todo!(),
Expand Down
2 changes: 1 addition & 1 deletion crates/rome_formatter/src/ts/mod.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
mod any_js_array_element;
mod arg_list;
mod auxiliary;
mod bindings;
mod class;
mod condition;
mod declarators;
mod expr_or_block;
mod expressions;
mod getter;
mod ident;
Expand Down
4 changes: 2 additions & 2 deletions crates/rome_formatter/src/ts/parameter_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ use crate::{
format_elements, group_elements, join_elements, soft_indent, soft_line_break_or_space, token,
FormatElement, FormatResult, Formatter, ToFormatElement,
};
use rslint_parser::ast::ParameterList;
use rslint_parser::ast::JsParameterList;

impl ToFormatElement for ParameterList {
impl ToFormatElement for JsParameterList {
fn to_format_element(&self, formatter: &Formatter) -> FormatResult<FormatElement> {
let param_tokens = formatter.format_nodes(self.parameters())?;

Expand Down
2 changes: 1 addition & 1 deletion crates/rome_formatter/src/ts/statements/statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ impl ToFormatElement for JsAnyStatement {
}

JsAnyStatement::ForOfStmt(_) => todo!(),
JsAnyStatement::FnDecl(decl) => decl.to_format_element(formatter),
JsAnyStatement::JsFunctionDeclaration(decl) => decl.to_format_element(formatter),
JsAnyStatement::ClassDecl(decl) => decl.to_format_element(formatter),
JsAnyStatement::JsVariableDeclarationStatement(decl) => {
decl.to_format_element(formatter)
Expand Down
6 changes: 3 additions & 3 deletions crates/rslint_parser/src/ast/expr_ext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -333,9 +333,9 @@ impl JsStringLiteral {
}
}

impl ArrowExpr {
pub fn body(&self) -> Option<ExprOrBlock> {
ExprOrBlock::cast(self.syntax().children().last()?)
impl JsArrowFunctionExpression {
pub fn body(&self) -> Option<JsAnyArrowFunctionBody> {
JsAnyArrowFunctionBody::cast(self.syntax().children().last()?)
}
}

Expand Down
Loading