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

Commit

Permalink
feat(rome_js_formatter): Implement the decorator formatting #4608
Browse files Browse the repository at this point in the history
  • Loading branch information
denbezrukov committed Jun 30, 2023
1 parent b3b6cb8 commit eb02dc2
Showing 1 changed file with 74 additions and 0 deletions.
74 changes: 74 additions & 0 deletions crates/rome_js_syntax/src/parameter_ext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,80 @@ impl AnyJsParameterList {
}
})
}

///
/// This method checks if any parameters in the given list are decorated.
///
/// # Examples
///
/// ```
/// use rome_js_factory::make;
/// use rome_js_syntax::parameter_ext::{AnyJsParameterList, AnyParameter};
/// use rome_js_syntax::{
/// AnyJsBinding, AnyJsBindingPattern, AnyJsConstructorParameter, AnyJsDecorator,
/// AnyJsFormalParameter, AnyJsParameter, T,
/// };
/// use rome_rowan::SyntaxResult;
///
/// let parameter_list = make::js_parameter_list(
/// Some(AnyJsParameter::AnyJsFormalParameter(
/// AnyJsFormalParameter::JsFormalParameter(
/// make::js_formal_parameter(
/// make::js_decorator_list(std::iter::empty()),
/// AnyJsBindingPattern::AnyJsBinding(AnyJsBinding::JsIdentifierBinding(
/// make::js_identifier_binding(make::ident("param1")),
/// )),
/// )
/// .build(),
/// ),
/// )),
/// None,
/// );
///
/// let params = AnyJsParameterList::JsParameterList(parameter_list);
/// let has_any_decorated_parameter = params.has_any_decorated_parameter();
/// assert_eq!(has_any_decorated_parameter, false);
///
/// let decorator = make::js_decorator(
/// make::token(T![@]),
/// AnyJsDecorator::JsIdentifierExpression(make::js_identifier_expression(
/// make::js_reference_identifier(make::ident("decorator")),
/// )),
/// );
/// let parameter_list = make::js_parameter_list(
/// Some(AnyJsParameter::AnyJsFormalParameter(
/// AnyJsFormalParameter::JsFormalParameter(
/// make::js_formal_parameter(
/// make::js_decorator_list(Some(decorator)),
/// AnyJsBindingPattern::AnyJsBinding(AnyJsBinding::JsIdentifierBinding(
/// make::js_identifier_binding(make::ident("param1")),
/// )),
/// )
/// .build(),
/// ),
/// )),
/// None,
/// );
///
/// let params = AnyJsParameterList::JsParameterList(parameter_list);
/// let has_any_decorated_parameter = params.has_any_decorated_parameter();
/// assert_eq!(has_any_decorated_parameter, true);
/// ```
///
/// # Returns
///
/// Returns `true` if the list contains any decorated parameters.
///
pub fn has_any_decorated_parameter(&self) -> bool {
self.iter().any(|parameter| {
parameter.map_or(false, |parameter| match parameter {
AnyParameter::AnyJsConstructorParameter(parameter) => {
parameter.has_any_decorated_parameter()
}
AnyParameter::AnyJsParameter(parameter) => parameter.has_any_decorated_parameter(),
})
})
}
}

/// An iterator over the parameters in an `AnyJsParameterList`.
Expand Down

0 comments on commit eb02dc2

Please sign in to comment.