mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-15 14:18:04 +08:00
Collapse nested conditionals into let-chains and match guards
This commit is contained in:
@@ -492,15 +492,11 @@ mod test {
|
|||||||
if let FrontendMessage::UpdateLayout {
|
if let FrontendMessage::UpdateLayout {
|
||||||
layout_target: LayoutTarget::DialogColumn1,
|
layout_target: LayoutTarget::DialogColumn1,
|
||||||
diff,
|
diff,
|
||||||
} = response
|
} = response && let DiffUpdate::Layout(sub_layout) = &diff[0].new_value
|
||||||
|
&& let LayoutGroup::Row(WidgetRow { widgets }) = &sub_layout.0[0]
|
||||||
|
&& let Widget::TextLabel(TextLabel { value, .. }) = &*widgets[0].widget
|
||||||
{
|
{
|
||||||
if let DiffUpdate::Layout(sub_layout) = &diff[0].new_value {
|
print_problem_to_terminal_on_failure(value);
|
||||||
if let LayoutGroup::Row(WidgetRow { widgets }) = &sub_layout.0[0] {
|
|
||||||
if let Widget::TextLabel(TextLabel { value, .. }) = &*widgets[0].widget {
|
|
||||||
print_problem_to_terminal_on_failure(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4105,10 +4105,11 @@ mod document_message_handler_tests {
|
|||||||
async fn get_layer_by_bounds(editor: &mut EditorTestUtils, min_x: f64, min_y: f64) -> Option<LayerNodeIdentifier> {
|
async fn get_layer_by_bounds(editor: &mut EditorTestUtils, min_x: f64, min_y: f64) -> Option<LayerNodeIdentifier> {
|
||||||
let document = editor.active_document();
|
let document = editor.active_document();
|
||||||
for layer in document.metadata().all_layers() {
|
for layer in document.metadata().all_layers() {
|
||||||
if let Some(bbox) = document.metadata().bounding_box_viewport(layer) {
|
if let Some(bbox) = document.metadata().bounding_box_viewport(layer)
|
||||||
if (bbox[0].x - min_x).abs() < 1. && (bbox[0].y - min_y).abs() < 1. {
|
&& (bbox[0].x - min_x).abs() < 1.
|
||||||
return Some(layer);
|
&& (bbox[0].y - min_y).abs() < 1.
|
||||||
}
|
{
|
||||||
|
return Some(layer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
|
|||||||
@@ -106,12 +106,10 @@ fn overlay_bezier_handle_specific_point(
|
|||||||
let not_under_anchor = |position: DVec2, anchor: DVec2| position.distance_squared(anchor) >= HIDE_HANDLE_DISTANCE * HIDE_HANDLE_DISTANCE;
|
let not_under_anchor = |position: DVec2, anchor: DVec2| position.distance_squared(anchor) >= HIDE_HANDLE_DISTANCE * HIDE_HANDLE_DISTANCE;
|
||||||
|
|
||||||
match bezier.handles {
|
match bezier.handles {
|
||||||
BezierHandles::Quadratic { handle } => {
|
BezierHandles::Quadratic { handle } if not_under_anchor(handle, bezier.start) && not_under_anchor(handle, bezier.end) => {
|
||||||
if not_under_anchor(handle, bezier.start) && not_under_anchor(handle, bezier.end) {
|
let end = if start == point_to_render { bezier.start } else { bezier.end };
|
||||||
let end = if start == point_to_render { bezier.start } else { bezier.end };
|
overlay_context.line(handle, end, None, None);
|
||||||
overlay_context.line(handle, end, None, None);
|
overlay_context.manipulator_handle(handle, is_selected(ManipulatorPointId::PrimaryHandle(segment_id)), None);
|
||||||
overlay_context.manipulator_handle(handle, is_selected(ManipulatorPointId::PrimaryHandle(segment_id)), None);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
BezierHandles::Cubic { handle_start, handle_end } => {
|
BezierHandles::Cubic { handle_start, handle_end } => {
|
||||||
if not_under_anchor(handle_start, bezier.start) && (point_to_render == start) {
|
if not_under_anchor(handle_start, bezier.start) && (point_to_render == start) {
|
||||||
|
|||||||
@@ -29,76 +29,76 @@ pub fn message_handler_data_attr_impl(attr: TokenStream, input_item: TokenStream
|
|||||||
if segment.ident != "MessageHandler" {
|
if segment.ident != "MessageHandler" {
|
||||||
return Err(syn::Error::new(segment.ident.span(), "Expected MessageHandler trait"));
|
return Err(syn::Error::new(segment.ident.span(), "Expected MessageHandler trait"));
|
||||||
}
|
}
|
||||||
if let syn::PathArguments::AngleBracketed(args) = &segment.arguments {
|
if let syn::PathArguments::AngleBracketed(args) = &segment.arguments
|
||||||
if args.args.len() >= 2 {
|
&& args.args.len() >= 2
|
||||||
// Extract the message type (M) and context struct type (C) from the trait params
|
{
|
||||||
let message_type = &args.args[0];
|
// Extract the message type (M) and context struct type (C) from the trait params
|
||||||
let data_type = &args.args[1];
|
let message_type = &args.args[0];
|
||||||
|
let data_type = &args.args[1];
|
||||||
|
|
||||||
let impl_item = match data_type {
|
let impl_item = match data_type {
|
||||||
syn::GenericArgument::Type(t) => {
|
syn::GenericArgument::Type(t) => {
|
||||||
match t {
|
match t {
|
||||||
syn::Type::Path(type_path) if !type_path.path.segments.is_empty() => {
|
syn::Type::Path(type_path) if !type_path.path.segments.is_empty() => {
|
||||||
// Get just the base identifier (ToolMessageData) without generics
|
// Get just the base identifier (ToolMessageData) without generics
|
||||||
let type_name = &type_path.path.segments.first().unwrap().ident;
|
let type_name = &type_path.path.segments.first().unwrap().ident;
|
||||||
|
|
||||||
let handler_data_line_number = type_name.span().start().line;
|
let handler_data_line_number = type_name.span().start().line;
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
#input_item
|
|
||||||
impl #message_type {
|
|
||||||
pub fn message_handler_data_str() -> MessageData {
|
|
||||||
MessageData::new(format!("{}", stringify!(#type_name)), #type_name::field_types(), #type_name::path(), #type_name::line_number())
|
|
||||||
}
|
|
||||||
pub fn message_handler_str() -> MessageData {
|
|
||||||
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path(), #input_type::line_number())
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
syn::Type::Tuple(_) => quote! {
|
|
||||||
#input_item
|
#input_item
|
||||||
impl #message_type {
|
impl #message_type {
|
||||||
pub fn message_handler_str() -> MessageData {
|
pub fn message_handler_data_str() -> MessageData {
|
||||||
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path(), #input_type::line_number())
|
MessageData::new(format!("{}", stringify!(#type_name)), #type_name::field_types(), #type_name::path(), #type_name::line_number())
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
pub fn message_handler_str() -> MessageData {
|
||||||
syn::Type::Reference(type_reference) => {
|
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path(), #input_type::line_number())
|
||||||
let message_type = call_site_ident(format!("{input_type}Message"));
|
|
||||||
let type_ident = match &*type_reference.elem {
|
|
||||||
syn::Type::Path(type_path) => &type_path.path.segments.first().unwrap().ident,
|
|
||||||
_ => return Err(syn::Error::new(type_reference.elem.span(), "Expected type path")),
|
|
||||||
};
|
|
||||||
|
|
||||||
let type_line_number = type_ident.span().start().line;
|
|
||||||
|
|
||||||
let tr = clean_rust_type_syntax(type_reference.to_token_stream().to_string());
|
|
||||||
quote! {
|
|
||||||
#input_item
|
|
||||||
impl #message_type {
|
|
||||||
pub fn message_handler_data_str() -> MessageData {
|
|
||||||
MessageData::new(format!("{}", #tr), #type_ident::field_types(), #type_ident::path(), #type_ident::line_number())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn message_handler_str() -> MessageData {
|
|
||||||
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path(), #input_type::line_number())
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => return Err(syn::Error::new(t.span(), "Unsupported type format")),
|
|
||||||
}
|
}
|
||||||
}
|
syn::Type::Tuple(_) => quote! {
|
||||||
|
#input_item
|
||||||
|
impl #message_type {
|
||||||
|
pub fn message_handler_str() -> MessageData {
|
||||||
|
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path(), #input_type::line_number())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
syn::Type::Reference(type_reference) => {
|
||||||
|
let message_type = call_site_ident(format!("{input_type}Message"));
|
||||||
|
let type_ident = match &*type_reference.elem {
|
||||||
|
syn::Type::Path(type_path) => &type_path.path.segments.first().unwrap().ident,
|
||||||
|
_ => return Err(syn::Error::new(type_reference.elem.span(), "Expected type path")),
|
||||||
|
};
|
||||||
|
|
||||||
_ => quote! {
|
let type_line_number = type_ident.span().start().line;
|
||||||
#input_item
|
|
||||||
},
|
let tr = clean_rust_type_syntax(type_reference.to_token_stream().to_string());
|
||||||
};
|
quote! {
|
||||||
return Ok(impl_item);
|
#input_item
|
||||||
}
|
impl #message_type {
|
||||||
|
pub fn message_handler_data_str() -> MessageData {
|
||||||
|
MessageData::new(format!("{}", #tr), #type_ident::field_types(), #type_ident::path(), #type_ident::line_number())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn message_handler_str() -> MessageData {
|
||||||
|
MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path(), #input_type::line_number())
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => return Err(syn::Error::new(t.span(), "Unsupported type format")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_ => quote! {
|
||||||
|
#input_item
|
||||||
|
},
|
||||||
|
};
|
||||||
|
return Ok(impl_item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(input_item)
|
Ok(input_item)
|
||||||
|
|||||||
Reference in New Issue
Block a user