diff --git a/crates/rome_formatter/src/cst.rs b/crates/rome_formatter/src/cst.rs index d83cd0608bf..705e96de7a5 100644 --- a/crates/rome_formatter/src/cst.rs +++ b/crates/rome_formatter/src/cst.rs @@ -4,15 +4,20 @@ use rslint_parser::ast::{ JsBlockStatement, JsBooleanLiteralExpression, JsCallArguments, JsCallExpression, JsCaseClause, JsCatchClause, JsClassStatement, JsConstructorParameters, JsContinueStatement, JsDebuggerStatement, JsDefaultClause, JsDefaultImportSpecifier, JsDoWhileStatement, - JsEmptyStatement, JsExpressionStatement, JsFinallyClause, JsForInStatement, JsForStatement, - JsFunctionStatement, JsGetterClassMember, JsIdentifierBinding, JsIdentifierExpression, - JsIfStatement, JsImport, JsImportAssertion, JsImportAssertionEntry, JsImportBareClause, - JsImportCallExpression, JsImportDefaultClause, JsImportNamedClause, JsImportNamespaceClause, - JsLabeledStatement, JsLiteralExportName, JsModule, JsModuleSource, JsNamedImportSpecifier, - JsNamedImportSpecifiers, JsNamespaceImportSpecifier, JsNullLiteralExpression, - JsNumberLiteralExpression, JsObjectExpression, JsParameters, JsPropertyClassMember, - JsPropertyObjectMember, JsReturnStatement, JsScript, JsSequenceExpression, JsSetterClassMember, - JsShorthandNamedImportSpecifier, JsShorthandPropertyObjectMember, JsSpread, JsStatementList, + JsEmptyStatement, JsExport, JsExportAsClause, JsExportClassClause, JsExportDefaultClassClause, + JsExportDefaultExpressionClause, JsExportDefaultFunctionClause, JsExportFromClause, + JsExportFunctionClause, JsExportNamedClause, JsExportNamedFromClause, + JsExportNamedFromSpecifier, JsExportNamedShorthandSpecifier, JsExportNamedSpecifier, + JsExportVariableClause, JsExpressionStatement, JsFinallyClause, JsForInStatement, + JsForStatement, JsFunctionStatement, JsGetterClassMember, JsIdentifierBinding, + JsIdentifierExpression, JsIfStatement, JsImport, JsImportAssertion, JsImportAssertionEntry, + JsImportBareClause, JsImportCallExpression, JsImportDefaultClause, JsImportNamedClause, + JsImportNamespaceClause, JsLabeledStatement, JsLiteralExportName, JsModule, JsModuleSource, + JsNamedImportSpecifier, JsNamedImportSpecifiers, JsNamespaceImportSpecifier, + JsNullLiteralExpression, JsNumberLiteralExpression, JsObjectExpression, JsParameters, + JsPropertyClassMember, JsPropertyObjectMember, JsReturnStatement, JsScript, + JsSequenceExpression, JsSetterClassMember, JsShorthandNamedImportSpecifier, + JsShorthandPropertyObjectMember, JsSpread, JsStatementList, JsStaticInitializationBlockClassMember, JsStringLiteralExpression, JsSwitchStatement, JsTemplate, JsTemplateChunkElement, JsTemplateElement, JsTryStatement, JsUnknownAssignment, JsUnknownBinding, JsUnknownExpression, JsUnknownImportAssertionEntry, JsUnknownMember, @@ -277,6 +282,62 @@ impl ToFormatElement for SyntaxNode { JsSyntaxKind::IMPORT_META => ImportMeta::cast(self.clone()) .unwrap() .to_format_element(formatter), + JsSyntaxKind::JS_EXPORT => JsExport::cast(self.clone()) + .unwrap() + .to_format_element(formatter), + JsSyntaxKind::JS_EXPORT_CLASS_CLAUSE => JsExportClassClause::cast(self.clone()) + .unwrap() + .to_format_element(formatter), + JsSyntaxKind::JS_EXPORT_DEFAULT_CLASS_CLAUSE => { + JsExportDefaultClassClause::cast(self.clone()) + .unwrap() + .to_format_element(formatter) + } + JsSyntaxKind::JS_EXPORT_FUNCTION_CLAUSE => JsExportFunctionClause::cast(self.clone()) + .unwrap() + .to_format_element(formatter), + JsSyntaxKind::JS_EXPORT_DEFAULT_FUNCTION_CLAUSE => { + JsExportDefaultFunctionClause::cast(self.clone()) + .unwrap() + .to_format_element(formatter) + } + JsSyntaxKind::JS_EXPORT_VARIABLE_CLAUSE => JsExportVariableClause::cast(self.clone()) + .unwrap() + .to_format_element(formatter), + JsSyntaxKind::JS_EXPORT_DEFAULT_EXPRESSION_CLAUSE => { + JsExportDefaultExpressionClause::cast(self.clone()) + .unwrap() + .to_format_element(formatter) + } + JsSyntaxKind::JS_EXPORT_FROM_CLAUSE => JsExportFromClause::cast(self.clone()) + .unwrap() + .to_format_element(formatter), + + JsSyntaxKind::JS_EXPORT_AS_CLAUSE => JsExportAsClause::cast(self.clone()) + .unwrap() + .to_format_element(formatter), + JsSyntaxKind::JS_EXPORT_NAMED_CLAUSE => JsExportNamedClause::cast(self.clone()) + .unwrap() + .to_format_element(formatter), + JsSyntaxKind::JS_EXPORT_NAMED_SPECIFIER => JsExportNamedSpecifier::cast(self.clone()) + .unwrap() + .to_format_element(formatter), + JsSyntaxKind::JS_EXPORT_NAMED_SHORTHAND_SPECIFIER => { + JsExportNamedShorthandSpecifier::cast(self.clone()) + .unwrap() + .to_format_element(formatter) + } + JsSyntaxKind::JS_EXPORT_NAMED_FROM_CLAUSE => { + JsExportNamedFromClause::cast(self.clone()) + .unwrap() + .to_format_element(formatter) + } + JsSyntaxKind::JS_EXPORT_NAMED_FROM_SPECIFIER => { + JsExportNamedFromSpecifier::cast(self.clone()) + .unwrap() + .to_format_element(formatter) + } + _ => todo!( "Implement formatting for the {:?} syntax kind.", self.kind() diff --git a/crates/rome_formatter/src/ts/export/any_export_clause.rs b/crates/rome_formatter/src/ts/export/any_export_clause.rs new file mode 100644 index 00000000000..2fb9448fa0c --- /dev/null +++ b/crates/rome_formatter/src/ts/export/any_export_clause.rs @@ -0,0 +1,24 @@ +use crate::{FormatElement, FormatResult, Formatter, ToFormatElement}; +use rslint_parser::ast::JsAnyExportClause; + +impl ToFormatElement for JsAnyExportClause { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + match self { + JsAnyExportClause::JsExportClassClause(node) => node.to_format_element(formatter), + JsAnyExportClause::JsExportDefaultClassClause(node) => { + node.to_format_element(formatter) + } + JsAnyExportClause::JsExportDefaultExpressionClause(node) => { + node.to_format_element(formatter) + } + JsAnyExportClause::JsExportDefaultFunctionClause(node) => { + node.to_format_element(formatter) + } + JsAnyExportClause::JsExportFromClause(node) => node.to_format_element(formatter), + JsAnyExportClause::JsExportFunctionClause(node) => node.to_format_element(formatter), + JsAnyExportClause::JsExportNamedClause(node) => node.to_format_element(formatter), + JsAnyExportClause::JsExportNamedFromClause(node) => node.to_format_element(formatter), + JsAnyExportClause::JsExportVariableClause(node) => node.to_format_element(formatter), + } + } +} diff --git a/crates/rome_formatter/src/ts/export/any_export_name_specifier.rs b/crates/rome_formatter/src/ts/export/any_export_name_specifier.rs new file mode 100644 index 00000000000..7cc16f6c8cf --- /dev/null +++ b/crates/rome_formatter/src/ts/export/any_export_name_specifier.rs @@ -0,0 +1,15 @@ +use crate::{FormatElement, FormatResult, Formatter, ToFormatElement}; +use rslint_parser::ast::JsAnyExportNamedSpecifier; + +impl ToFormatElement for JsAnyExportNamedSpecifier { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + match self { + JsAnyExportNamedSpecifier::JsExportNamedShorthandSpecifier(node) => { + node.to_format_element(formatter) + } + JsAnyExportNamedSpecifier::JsExportNamedSpecifier(node) => { + node.to_format_element(formatter) + } + } + } +} diff --git a/crates/rome_formatter/src/ts/export/as_clause.rs b/crates/rome_formatter/src/ts/export/as_clause.rs new file mode 100644 index 00000000000..989eeddbfaa --- /dev/null +++ b/crates/rome_formatter/src/ts/export/as_clause.rs @@ -0,0 +1,13 @@ +use crate::{ + format_elements, space_token, FormatElement, FormatResult, Formatter, ToFormatElement, +}; +use rslint_parser::ast::JsExportAsClause; + +impl ToFormatElement for JsExportAsClause { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let as_token = formatter.format_token(&self.as_token()?)?; + let exported_name = formatter.format_node(&self.exported_name()?)?; + + Ok(format_elements![as_token, space_token(), exported_name]) + } +} diff --git a/crates/rome_formatter/src/ts/export/class_clause.rs b/crates/rome_formatter/src/ts/export/class_clause.rs new file mode 100644 index 00000000000..63824ac1c3f --- /dev/null +++ b/crates/rome_formatter/src/ts/export/class_clause.rs @@ -0,0 +1,8 @@ +use crate::{FormatElement, FormatResult, Formatter, ToFormatElement}; +use rslint_parser::ast::{JsAnyClass, JsExportClassClause}; + +impl ToFormatElement for JsExportClassClause { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + JsAnyClass::from(self.clone()).to_format_element(formatter) + } +} diff --git a/crates/rome_formatter/src/ts/export/default_class_clause.rs b/crates/rome_formatter/src/ts/export/default_class_clause.rs new file mode 100644 index 00000000000..d37a5b1f67b --- /dev/null +++ b/crates/rome_formatter/src/ts/export/default_class_clause.rs @@ -0,0 +1,13 @@ +use crate::{ + format_elements, space_token, FormatElement, FormatResult, Formatter, ToFormatElement, +}; +use rslint_parser::ast::{JsAnyClass, JsExportDefaultClassClause}; + +impl ToFormatElement for JsExportDefaultClassClause { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let default_token = formatter.format_token(&self.default_token()?)?; + let class = JsAnyClass::from(self.clone()).to_format_element(formatter)?; + + Ok(format_elements![default_token, space_token(), class]) + } +} diff --git a/crates/rome_formatter/src/ts/export/default_expression_clause.rs b/crates/rome_formatter/src/ts/export/default_expression_clause.rs new file mode 100644 index 00000000000..db1a4a6db5e --- /dev/null +++ b/crates/rome_formatter/src/ts/export/default_expression_clause.rs @@ -0,0 +1,22 @@ +use crate::{ + format_elements, space_token, token, FormatElement, FormatResult, Formatter, ToFormatElement, +}; +use rslint_parser::ast::JsExportDefaultExpressionClause; + +impl ToFormatElement for JsExportDefaultExpressionClause { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let default_token = formatter.format_token(&self.default_token()?)?; + let class = formatter.format_node(&self.expression()?)?; + let semicolon = if let Some(semicolon) = &self.semicolon_token() { + formatter.format_token(semicolon)? + } else { + token(";") + }; + Ok(format_elements![ + default_token, + space_token(), + class, + semicolon + ]) + } +} diff --git a/crates/rome_formatter/src/ts/export/default_function_clause.rs b/crates/rome_formatter/src/ts/export/default_function_clause.rs new file mode 100644 index 00000000000..ae45bd02270 --- /dev/null +++ b/crates/rome_formatter/src/ts/export/default_function_clause.rs @@ -0,0 +1,13 @@ +use crate::{ + format_elements, space_token, FormatElement, FormatResult, Formatter, ToFormatElement, +}; +use rslint_parser::ast::{JsAnyFunction, JsExportDefaultFunctionClause}; + +impl ToFormatElement for JsExportDefaultFunctionClause { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let default_token = formatter.format_token(&self.default_token()?)?; + let class = JsAnyFunction::from(self.clone()).to_format_element(formatter)?; + + Ok(format_elements![default_token, space_token(), class]) + } +} diff --git a/crates/rome_formatter/src/ts/export/from_clause.rs b/crates/rome_formatter/src/ts/export/from_clause.rs new file mode 100644 index 00000000000..29b88e0582c --- /dev/null +++ b/crates/rome_formatter/src/ts/export/from_clause.rs @@ -0,0 +1,38 @@ +use crate::{ + empty_element, format_elements, space_token, token, FormatElement, FormatResult, Formatter, + ToFormatElement, +}; +use rslint_parser::ast::JsExportFromClause; + +impl ToFormatElement for JsExportFromClause { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let star = formatter.format_token(&self.star_token()?)?; + let export_as = if let Some(export_as) = self.export_as() { + format_elements![formatter.format_node(&export_as)?, space_token()] + } else { + empty_element() + }; + let from = formatter.format_token(&self.from_token()?)?; + let source = formatter.format_node(&self.source()?)?; + let assertion = if let Some(assertion) = self.assertion() { + formatter.format_node(&assertion)? + } else { + empty_element() + }; + let semicolon = if let Some(semicolon) = self.semicolon_token() { + formatter.format_token(&semicolon)? + } else { + token(";") + }; + Ok(format_elements![ + star, + space_token(), + export_as, + from, + space_token(), + source, + assertion, + semicolon + ]) + } +} diff --git a/crates/rome_formatter/src/ts/export/function_clause.rs b/crates/rome_formatter/src/ts/export/function_clause.rs new file mode 100644 index 00000000000..69b93f2235b --- /dev/null +++ b/crates/rome_formatter/src/ts/export/function_clause.rs @@ -0,0 +1,8 @@ +use crate::{FormatElement, FormatResult, Formatter, ToFormatElement}; +use rslint_parser::ast::{JsAnyFunction, JsExportFunctionClause}; + +impl ToFormatElement for JsExportFunctionClause { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + JsAnyFunction::from(self.clone()).to_format_element(formatter) + } +} diff --git a/crates/rome_formatter/src/ts/export/mod.rs b/crates/rome_formatter/src/ts/export/mod.rs new file mode 100644 index 00000000000..6162fcb9f7b --- /dev/null +++ b/crates/rome_formatter/src/ts/export/mod.rs @@ -0,0 +1,28 @@ +mod any_export_clause; +mod any_export_name_specifier; +mod as_clause; +mod class_clause; +mod default_class_clause; +mod default_expression_clause; +mod default_function_clause; +mod from_clause; +mod function_clause; +mod named_clause; +mod named_from_clause; +mod named_from_specifier; +mod named_shorthand_specifier; +mod named_specifier; +mod variable_clause; + +use crate::{ + format_elements, space_token, FormatElement, FormatResult, Formatter, ToFormatElement, +}; +use rslint_parser::ast::JsExport; + +impl ToFormatElement for JsExport { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let export_token = formatter.format_token(&self.export_token()?)?; + let export_clause = formatter.format_node(&self.export_clause()?)?; + Ok(format_elements![export_token, space_token(), export_clause]) + } +} diff --git a/crates/rome_formatter/src/ts/export/named_clause.rs b/crates/rome_formatter/src/ts/export/named_clause.rs new file mode 100644 index 00000000000..cb96a1ec613 --- /dev/null +++ b/crates/rome_formatter/src/ts/export/named_clause.rs @@ -0,0 +1,44 @@ +use crate::{ + empty_element, format_elements, group_elements, if_group_fits_on_single_line, join_elements, + soft_block_indent, soft_line_break_or_space, space_token, token, FormatElement, FormatResult, + Formatter, ToFormatElement, +}; +use rslint_parser::ast::JsExportNamedClause; +use rslint_parser::AstSeparatedList; + +impl ToFormatElement for JsExportNamedClause { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let specifiers = self.specifiers(); + let space = if specifiers.is_empty() { + empty_element() + } else { + if_group_fits_on_single_line(space_token()) + }; + let list = group_elements(formatter.format_delimited( + &self.l_curly_token()?, + |leading, trailing| { + Ok(format_elements!( + space.clone(), + soft_block_indent(format_elements![ + leading, + join_elements( + soft_line_break_or_space(), + formatter.format_separated(specifiers, || token(","))? + ), + trailing, + ]), + space, + )) + }, + &self.r_curly_token()?, + )?); + + let semicolon = if let Some(semicolon) = self.semicolon_token() { + formatter.format_token(&semicolon)? + } else { + token(";") + }; + + Ok(format_elements![list, semicolon]) + } +} diff --git a/crates/rome_formatter/src/ts/export/named_from_clause.rs b/crates/rome_formatter/src/ts/export/named_from_clause.rs new file mode 100644 index 00000000000..e87b112b0a4 --- /dev/null +++ b/crates/rome_formatter/src/ts/export/named_from_clause.rs @@ -0,0 +1,60 @@ +use crate::{ + empty_element, format_elements, group_elements, if_group_fits_on_single_line, join_elements, + soft_block_indent, soft_line_break_or_space, space_token, token, FormatElement, FormatResult, + Formatter, ToFormatElement, +}; +use rslint_parser::ast::JsExportNamedFromClause; +use rslint_parser::AstSeparatedList; + +impl ToFormatElement for JsExportNamedFromClause { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let specifiers = self.specifiers(); + let space = if specifiers.is_empty() { + empty_element() + } else { + if_group_fits_on_single_line(space_token()) + }; + let list = group_elements(formatter.format_delimited( + &self.l_curly_token()?, + |leading, trailing| { + Ok(format_elements!( + space.clone(), + soft_block_indent(format_elements![ + leading, + join_elements( + soft_line_break_or_space(), + formatter.format_separated(specifiers, || token(","))? + ), + trailing, + ]), + space, + )) + }, + &self.r_curly_token()?, + )?); + + let from = formatter.format_token(&self.from_token()?)?; + let source = formatter.format_node(&self.source()?)?; + let assertion = if let Some(assertion) = self.assertion() { + formatter.format_node(&assertion)? + } else { + empty_element() + }; + let semicolon = if let Some(semicolon) = self.semicolon_token() { + formatter.format_token(&semicolon)? + } else { + token(";") + }; + + Ok(format_elements![ + list, + space_token(), + from, + space_token(), + source, + space_token(), + assertion, + semicolon + ]) + } +} diff --git a/crates/rome_formatter/src/ts/export/named_from_specifier.rs b/crates/rome_formatter/src/ts/export/named_from_specifier.rs new file mode 100644 index 00000000000..9e549fecb6f --- /dev/null +++ b/crates/rome_formatter/src/ts/export/named_from_specifier.rs @@ -0,0 +1,23 @@ +use crate::{ + empty_element, format_elements, space_token, FormatElement, FormatResult, Formatter, + ToFormatElement, +}; +use rslint_parser::ast::JsExportNamedFromSpecifier; + +impl ToFormatElement for JsExportNamedFromSpecifier { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let type_token = if let Some(type_token) = self.type_token() { + format_elements![formatter.format_token(&type_token)?, space_token()] + } else { + empty_element() + }; + let export_as = if let Some(export_as) = self.export_as() { + format_elements![formatter.format_node(&export_as)?, space_token()] + } else { + empty_element() + }; + let source = formatter.format_node(&self.source_name()?)?; + + Ok(format_elements![type_token, export_as, source]) + } +} diff --git a/crates/rome_formatter/src/ts/export/named_shorthand_specifier.rs b/crates/rome_formatter/src/ts/export/named_shorthand_specifier.rs new file mode 100644 index 00000000000..b22098742ef --- /dev/null +++ b/crates/rome_formatter/src/ts/export/named_shorthand_specifier.rs @@ -0,0 +1,19 @@ +use crate::{ + empty_element, format_elements, space_token, FormatElement, FormatResult, Formatter, + ToFormatElement, +}; +use rslint_parser::ast::JsExportNamedShorthandSpecifier; + +impl ToFormatElement for JsExportNamedShorthandSpecifier { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let type_token = if let Some(type_token) = self.type_token() { + format_elements![formatter.format_token(&type_token)?, space_token()] + } else { + empty_element() + }; + + let name = formatter.format_node(&self.name()?)?; + + Ok(format_elements![type_token, name]) + } +} diff --git a/crates/rome_formatter/src/ts/export/named_specifier.rs b/crates/rome_formatter/src/ts/export/named_specifier.rs new file mode 100644 index 00000000000..b3e0a83b244 --- /dev/null +++ b/crates/rome_formatter/src/ts/export/named_specifier.rs @@ -0,0 +1,28 @@ +use crate::{ + empty_element, format_elements, space_token, FormatElement, FormatResult, Formatter, + ToFormatElement, +}; +use rslint_parser::ast::JsExportNamedSpecifier; + +impl ToFormatElement for JsExportNamedSpecifier { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let type_token = if let Some(type_token) = self.type_token() { + format_elements![formatter.format_token(&type_token)?, space_token()] + } else { + empty_element() + }; + + let as_token = formatter.format_token(&self.as_token()?)?; + let local_name = formatter.format_node(&self.local_name()?)?; + let exported_name = formatter.format_node(&self.exported_name()?)?; + + Ok(format_elements![ + type_token, + local_name, + space_token(), + as_token, + space_token(), + exported_name + ]) + } +} diff --git a/crates/rome_formatter/src/ts/export/variable_clause.rs b/crates/rome_formatter/src/ts/export/variable_clause.rs new file mode 100644 index 00000000000..7b30efa4108 --- /dev/null +++ b/crates/rome_formatter/src/ts/export/variable_clause.rs @@ -0,0 +1,15 @@ +use crate::{format_elements, token, FormatElement, FormatResult, Formatter, ToFormatElement}; +use rslint_parser::ast::JsExportVariableClause; + +impl ToFormatElement for JsExportVariableClause { + fn to_format_element(&self, formatter: &Formatter) -> FormatResult { + let declarations = formatter.format_node(&self.declarations()?)?; + let semicolon = if let Some(semicolon) = self.semicolon_token() { + formatter.format_token(&semicolon)? + } else { + token(";") + }; + + Ok(format_elements![declarations, semicolon]) + } +} diff --git a/crates/rome_formatter/src/ts/mod.rs b/crates/rome_formatter/src/ts/mod.rs index 84dcf5fd011..addfa56e267 100644 --- a/crates/rome_formatter/src/ts/mod.rs +++ b/crates/rome_formatter/src/ts/mod.rs @@ -5,6 +5,7 @@ mod auxiliary; mod bindings; mod class; mod directives; +mod export; mod expressions; mod ident; mod import; diff --git a/crates/rome_formatter/src/ts/root/any_module_item.rs b/crates/rome_formatter/src/ts/root/any_module_item.rs index ca7aa412a6f..3c676f29f6c 100644 --- a/crates/rome_formatter/src/ts/root/any_module_item.rs +++ b/crates/rome_formatter/src/ts/root/any_module_item.rs @@ -5,7 +5,7 @@ impl ToFormatElement for JsAnyModuleItem { fn to_format_element(&self, formatter: &Formatter) -> FormatResult { match self { JsAnyModuleItem::JsAnyStatement(statement) => statement.to_format_element(formatter), - JsAnyModuleItem::JsExport(_) => todo!(), + JsAnyModuleItem::JsExport(e) => e.to_format_element(formatter), JsAnyModuleItem::JsImport(import) => import.to_format_element(formatter), } } diff --git a/crates/rome_formatter/tests/specs/js/import/named_import.js b/crates/rome_formatter/tests/specs/js/import/named_import.js new file mode 100644 index 00000000000..4fd5c3036f6 --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/import/named_import.js @@ -0,0 +1,2 @@ +import "very_long_import_very_long_import_very_long_import_very_long_import_very_long_import_very_long_import_very_long_import_"; + diff --git a/crates/rome_formatter/tests/specs/js/module/export/class_clause.js b/crates/rome_formatter/tests/specs/js/module/export/class_clause.js new file mode 100644 index 00000000000..1c132d82bb8 --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/class_clause.js @@ -0,0 +1,9 @@ +// another comment +export class A { // small comment + constructor() { + } +} + + +export default class +B {} diff --git a/crates/rome_formatter/tests/specs/js/module/export/class_clause.js.snap b/crates/rome_formatter/tests/specs/js/module/export/class_clause.js.snap new file mode 100644 index 00000000000..194ecdb9b6e --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/class_clause.js.snap @@ -0,0 +1,27 @@ +--- +source: crates/rome_formatter/tests/spec_test.rs +assertion_line: 57 +expression: class_clause.js + +--- +# Input +// another comment +export class A { // small comment + constructor() { + } +} + + +export default class +B {} + +--- +# Output +// another comment +export class A { + // small comment + constructor() {} +} + +export default class B {} + diff --git a/crates/rome_formatter/tests/specs/js/module/export/expression_clause.js b/crates/rome_formatter/tests/specs/js/module/export/expression_clause.js new file mode 100644 index 00000000000..6cda1a48eee --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/expression_clause.js @@ -0,0 +1 @@ +export default (1 - 43); \ No newline at end of file diff --git a/crates/rome_formatter/tests/specs/js/module/export/expression_clause.js.snap b/crates/rome_formatter/tests/specs/js/module/export/expression_clause.js.snap new file mode 100644 index 00000000000..062cd1ed057 --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/expression_clause.js.snap @@ -0,0 +1,12 @@ +--- +source: crates/rome_formatter/tests/spec_test.rs +assertion_line: 57 +expression: expression_clause.js + +--- +# Input +export default (1 - 43); +--- +# Output +export default (1 - 43); + diff --git a/crates/rome_formatter/tests/specs/js/module/export/from_clause.js b/crates/rome_formatter/tests/specs/js/module/export/from_clause.js new file mode 100644 index 00000000000..7235ae959b0 --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/from_clause.js @@ -0,0 +1,5 @@ +export * from "hey" + +export * as something_bad_will_happen from "something_bad_might_not_happen" + +export * as something_bad_will_happen from "something_bad_might_not_happen" assert { "type": "json", "type2": "json3"} \ No newline at end of file diff --git a/crates/rome_formatter/tests/specs/js/module/export/from_clause.js.snap b/crates/rome_formatter/tests/specs/js/module/export/from_clause.js.snap new file mode 100644 index 00000000000..07565ecfb4c --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/from_clause.js.snap @@ -0,0 +1,23 @@ +--- +source: crates/rome_formatter/tests/spec_test.rs +assertion_line: 57 +expression: from_clause.js + +--- +# Input +export * from "hey" + +export * as something_bad_will_happen from "something_bad_might_not_happen" + +export * as something_bad_will_happen from "something_bad_might_not_happen" assert { "type": "json", "type2": "json3"} +--- +# Output +export * from "hey"; + +export * as something_bad_will_happen from "something_bad_might_not_happen"; + +export * as something_bad_will_happen from "something_bad_might_not_happen"assert { + "type": "json", + "type2": "json3", +}; + diff --git a/crates/rome_formatter/tests/specs/js/module/export/function_clause.js b/crates/rome_formatter/tests/specs/js/module/export/function_clause.js new file mode 100644 index 00000000000..d3f42cc8905 --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/function_clause.js @@ -0,0 +1,9 @@ +export function f() { + + +} + + +export default function ff() { + +} \ No newline at end of file diff --git a/crates/rome_formatter/tests/specs/js/module/export/function_clause.js.snap b/crates/rome_formatter/tests/specs/js/module/export/function_clause.js.snap new file mode 100644 index 00000000000..340aa341c44 --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/function_clause.js.snap @@ -0,0 +1,22 @@ +--- +source: crates/rome_formatter/tests/spec_test.rs +assertion_line: 57 +expression: function_clause.js + +--- +# Input +export function f() { + + +} + + +export default function ff() { + +} +--- +# Output +export function f() {} + +export default function ff() {} + diff --git a/crates/rome_formatter/tests/specs/js/module/export/named_clause.js b/crates/rome_formatter/tests/specs/js/module/export/named_clause.js new file mode 100644 index 00000000000..bfc4318374d --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/named_clause.js @@ -0,0 +1,7 @@ +export { + // the boo api + boo, + // the buzz api is now bar!! + buzz as bar, + +} \ No newline at end of file diff --git a/crates/rome_formatter/tests/specs/js/module/export/named_clause.js.snap b/crates/rome_formatter/tests/specs/js/module/export/named_clause.js.snap new file mode 100644 index 00000000000..9d060c7922c --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/named_clause.js.snap @@ -0,0 +1,23 @@ +--- +source: crates/rome_formatter/tests/spec_test.rs +assertion_line: 57 +expression: named_clause.js + +--- +# Input +export { + // the boo api + boo, + // the buzz api is now bar!! + buzz as bar, + +} +--- +# Output +export { + // the boo api + boo, + // the buzz api is now bar!! + buzz as bar, +}; + diff --git a/crates/rome_formatter/tests/specs/js/module/export/named_from_clause.js b/crates/rome_formatter/tests/specs/js/module/export/named_from_clause.js new file mode 100644 index 00000000000..45a71590096 --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/named_from_clause.js @@ -0,0 +1,9 @@ +export {a, + b as c +} from "fancy" assert { type: "json"} + + +export { + lorem_lorem_lorem_lorem_lorem_lorem_lorem_lorem_lorem, + lorem_lorem_lorem_lorem_lorem_ as ipsum_ipsum_ipsum_ipsum_ipsum_ipsum_ +} from "fancy" assert { type: "json", "type2": "json", type23: "json", "type24": "json"} \ No newline at end of file diff --git a/crates/rome_formatter/tests/specs/js/module/export/named_from_clause.js.snap b/crates/rome_formatter/tests/specs/js/module/export/named_from_clause.js.snap new file mode 100644 index 00000000000..ab9f3a13feb --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/named_from_clause.js.snap @@ -0,0 +1,30 @@ +--- +source: crates/rome_formatter/tests/spec_test.rs +assertion_line: 57 +expression: named_from_clause.js + +--- +# Input +export {a, + b as c +} from "fancy" assert { type: "json"} + + +export { + lorem_lorem_lorem_lorem_lorem_lorem_lorem_lorem_lorem, + lorem_lorem_lorem_lorem_lorem_ as ipsum_ipsum_ipsum_ipsum_ipsum_ipsum_ +} from "fancy" assert { type: "json", "type2": "json", type23: "json", "type24": "json"} +--- +# Output +export { a, as c b } from "fancy" assert { type: "json" }; + +export { + lorem_lorem_lorem_lorem_lorem_lorem_lorem_lorem_lorem, + as ipsum_ipsum_ipsum_ipsum_ipsum_ipsum_ lorem_lorem_lorem_lorem_lorem_, +} from "fancy" assert { + type: "json", + "type2": "json", + type23: "json", + "type24": "json", +}; + diff --git a/crates/rome_formatter/tests/specs/js/module/export/variable_declaration.js b/crates/rome_formatter/tests/specs/js/module/export/variable_declaration.js new file mode 100644 index 00000000000..ed7431a26fd --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/variable_declaration.js @@ -0,0 +1,3 @@ +export let a, d, c; + +export const foofoofoofoofoofoofoo = "ahah", barbarbarbarbarbarbar = {}, loremloremloremloremlorem = [] \ No newline at end of file diff --git a/crates/rome_formatter/tests/specs/js/module/export/variable_declaration.js.snap b/crates/rome_formatter/tests/specs/js/module/export/variable_declaration.js.snap new file mode 100644 index 00000000000..086ad66e56c --- /dev/null +++ b/crates/rome_formatter/tests/specs/js/module/export/variable_declaration.js.snap @@ -0,0 +1,18 @@ +--- +source: crates/rome_formatter/tests/spec_test.rs +assertion_line: 57 +expression: variable_declaration.js + +--- +# Input +export let a, d, c; + +export const foofoofoofoofoofoofoo = "ahah", barbarbarbarbarbarbar = {}, loremloremloremloremlorem = [] +--- +# Output +export let a, d, c; + +export const foofoofoofoofoofoofoo = "ahah", + barbarbarbarbarbarbar = {}, + loremloremloremloremlorem = []; +