Module visit_mut

Source
Expand description

Traversal of a mutable AST.

This module provides a VisitMut trait that is like the Visit trait but operates on a mutable borrow, rather than an immutable borrow, of the syntax tree.

Each method of the VisitMut trait is a hook that can be overridden to customize the behavior when visiting the corresponding type of node. By default, every method recursively visits the substructure of the input by invoking the right visitor method of each of its fields.

pub trait VisitMut<'ast, T: AstInfo> {
    /* ... */

    fn visit_function_mut(&mut self, node: &'ast mut Function<T>) {
        visit_function_mut(self, node);
    }

    /* ... */
}

pub fn visit_function_mut<'ast, V, T: AstInfo>(visitor: &mut V, node: &'ast mut Function<T>)
where
    V: VisitMut<'ast, T> + ?Sized,
{
    visitor.visit_item_name_mut(&mut node.name);
    visitor.visit_function_args_mut(&mut node.args);
    if let Some(filter) = &mut node.filter {
        visitor.visit_expr_mut(&mut *filter);
    }
    if let Some(over) = &mut node.over {
        visitor.visit_window_spec_mut(over);
    }
}

§Examples

This visitor removes parentheses from expressions.

use std::error::Error;

use mz_sql_parser::ast::{AstInfo, Expr};
use mz_sql_parser::ast::visit_mut::{self, VisitMut};

struct RemoveParens;

impl<'a, T: AstInfo> VisitMut<'a, T> for RemoveParens {
    fn visit_expr_mut(&mut self, expr: &'a mut Expr<T>) {
        visit_mut::visit_expr_mut(self, expr);
        if let Expr::Nested(e) = expr {
            *expr = (**e).clone();
        }
    }
}

fn main() -> Result<(), Box<dyn Error>> {
    let sql = "(a + ((b))) + c";
    let mut expr = mz_sql_parser::parser::parse_expr(sql.into())?;
    RemoveParens.visit_expr_mut(&mut expr);
    let expected = mz_sql_parser::parser::parse_expr("a + b + c".into())?;
    assert_eq!(expr, expected);
    Ok(())
}

The VisitMutNode trait is implemented for every node in the AST and can be used to write generic functions that apply a VisitMut implementation to any node in the AST.

§Implementation notes

This module is automatically generated by the crate’s build script. Changes to the AST will be automatically propagated to the visitor.

This approach to AST visitors is inspired by the syn crate. These module docs are directly derived from the syn::visit_mut module docs.

Traits§

VisitMut
VisitMutNode

Functions§

visit_abbreviated_grant_or_revoke_statement_mut
visit_abbreviated_grant_statement_mut
visit_abbreviated_revoke_statement_mut
visit_alter_cluster_action_mut
visit_alter_cluster_statement_mut
visit_alter_connection_action_mut
visit_alter_connection_option_mut
visit_alter_connection_option_name_mut
visit_alter_connection_statement_mut
visit_alter_default_privileges_statement_mut
visit_alter_index_action_mut
visit_alter_index_statement_mut
visit_alter_network_policy_statement_mut
visit_alter_object_rename_statement_mut
visit_alter_object_swap_statement_mut
visit_alter_owner_statement_mut
visit_alter_retain_history_statement_mut
visit_alter_role_option_mut
visit_alter_role_statement_mut
visit_alter_secret_statement_mut
visit_alter_set_cluster_statement_mut
visit_alter_sink_action_mut
visit_alter_sink_statement_mut
visit_alter_source_action_mut
visit_alter_source_add_subsource_option_mut
visit_alter_source_add_subsource_option_name_mut
visit_alter_source_statement_mut
visit_alter_system_reset_all_statement_mut
visit_alter_system_reset_statement_mut
visit_alter_system_set_statement_mut
visit_alter_table_add_column_statement_mut
visit_as_of_mut
visit_assignment_mut
visit_avro_doc_on_mut
visit_avro_schema_mut
visit_avro_schema_option_mut
visit_avro_schema_option_name_mut
visit_catalog_name_mut
visit_close_statement_mut
visit_cluster_alter_option_mut
visit_cluster_alter_option_name_mut
visit_cluster_alter_option_value_mut
visit_cluster_alter_until_ready_option_mut
visit_cluster_alter_until_ready_option_name_mut
visit_cluster_feature_mut
visit_cluster_feature_name_mut
visit_cluster_name_mut
visit_cluster_option_mut
visit_cluster_option_name_mut
visit_cluster_schedule_option_value_mut
visit_column_def_mut
visit_column_name_mut
visit_column_option_def_mut
visit_column_option_mut
visit_column_reference_mut
visit_column_versioned_mut
visit_comment_object_type_mut
visit_comment_statement_mut
visit_commit_statement_mut
visit_connection_default_aws_privatelink_mut
visit_connection_option_mut
visit_connection_option_name_mut
visit_continual_task_option_mut
visit_continual_task_option_name_mut
visit_continual_task_stmt_mut
visit_copy_direction_mut
visit_copy_option_mut
visit_copy_option_name_mut
visit_copy_relation_mut
visit_copy_statement_mut
visit_copy_target_mut
visit_create_cluster_replica_statement_mut
visit_create_cluster_statement_mut
visit_create_connection_option_mut
visit_create_connection_option_name_mut
visit_create_connection_statement_mut
visit_create_connection_type_mut
visit_create_continual_task_statement_mut
visit_create_continual_task_sugar_mut
visit_create_database_statement_mut
visit_create_index_statement_mut
visit_create_materialized_view_statement_mut
visit_create_network_policy_statement_mut
visit_create_role_statement_mut
visit_create_schema_statement_mut
visit_create_secret_statement_mut
visit_create_sink_connection_mut
visit_create_sink_option_mut
visit_create_sink_option_name_mut
visit_create_sink_statement_mut
visit_create_source_connection_mut
visit_create_source_option_mut
visit_create_source_option_name_mut
visit_create_source_statement_mut
visit_create_subsource_option_mut
visit_create_subsource_option_name_mut
visit_create_subsource_statement_mut
visit_create_table_from_source_statement_mut
visit_create_table_statement_mut
visit_create_type_as_mut
visit_create_type_list_option_mut
visit_create_type_list_option_name_mut
visit_create_type_map_option_mut
visit_create_type_map_option_name_mut
visit_create_type_statement_mut
visit_create_view_statement_mut
visit_create_webhook_source_body_mut
visit_create_webhook_source_check_mut
visit_create_webhook_source_check_options_mut
visit_create_webhook_source_filter_header_mut
visit_create_webhook_source_header_mut
visit_create_webhook_source_include_headers_mut
visit_create_webhook_source_map_header_mut
visit_create_webhook_source_secret_mut
visit_create_webhook_source_statement_mut
visit_csr_config_option_mut
visit_csr_config_option_name_mut
visit_csr_connection_avro_mut
visit_csr_connection_mut
visit_csr_connection_protobuf_mut
visit_csr_seed_avro_mut
visit_csr_seed_protobuf_mut
visit_csr_seed_protobuf_schema_mut
visit_csv_columns_mut
visit_cte_block_mut
visit_cte_id_mut
visit_cte_mut
visit_cte_mut_rec_column_def_mut
visit_cte_mut_rec_mut
visit_data_type_mut
visit_database_name_mut
visit_date_time_field_mut
visit_deallocate_statement_mut
visit_declare_statement_mut
visit_deferred_item_name_mut
visit_delete_statement_mut
visit_discard_statement_mut
visit_discard_target_mut
visit_distinct_mut
visit_doc_on_identifier_mut
visit_doc_on_schema_mut
visit_drop_objects_statement_mut
visit_drop_owned_statement_mut
visit_execute_statement_mut
visit_explain_analyze_computation_property_mut
visit_explain_analyze_property_mut
visit_explain_analyze_statement_mut
visit_explain_format_mut
visit_explain_plan_option_mut
visit_explain_plan_option_name_mut
visit_explain_plan_statement_mut
visit_explain_pushdown_statement_mut
visit_explain_sink_schema_for_mut
visit_explain_sink_schema_statement_mut
visit_explain_stage_mut
visit_explain_timestamp_statement_mut
visit_explainee_mut
visit_expr_mut
visit_external_reference_export_mut
visit_external_references_mut
visit_fetch_direction_mut
visit_fetch_option_mut
visit_fetch_option_name_mut
visit_fetch_statement_mut
visit_format_mut
visit_format_specifier_mut
visit_function_args_mut
visit_function_mut
visit_grant_privileges_statement_mut
visit_grant_role_statement_mut
visit_grant_target_all_specification_mut
visit_grant_target_specification_inner_mut
visit_grant_target_specification_mut
visit_homogenizing_function_mut
visit_ident_error_mut
visit_ident_mut
visit_if_exists_behavior_mut
visit_index_option_mut
visit_index_option_name_mut
visit_insert_source_mut
visit_insert_statement_mut
visit_inspect_shard_statement_mut
visit_interval_value_mut
visit_is_expr_construct_mut
visit_item_name_mut
visit_join_constraint_mut
visit_join_mut
visit_join_operator_mut
visit_kafka_broker_aws_privatelink_mut
visit_kafka_broker_aws_privatelink_option_mut
visit_kafka_broker_aws_privatelink_option_name_mut
visit_kafka_broker_mut
visit_kafka_broker_tunnel_mut
visit_kafka_sink_config_option_mut
visit_kafka_sink_config_option_name_mut
visit_kafka_sink_key_mut
visit_kafka_source_config_option_mut
visit_kafka_source_config_option_name_mut
visit_key_constraint_mut
visit_limit_mut
visit_load_generator_mut
visit_load_generator_option_mut
visit_load_generator_option_name_mut
visit_map_entry_mut
visit_materialized_view_option_mut
visit_materialized_view_option_name_mut
visit_mut_rec_block_mut
visit_mut_rec_block_option_mut
visit_mut_rec_block_option_name_mut
visit_my_sql_config_option_mut
visit_my_sql_config_option_name_mut
visit_named_plan_mut
visit_nested_statement_mut
visit_network_policy_name_mut
visit_network_policy_option_mut
visit_network_policy_option_name_mut
visit_network_policy_rule_definition_mut
visit_network_policy_rule_option_mut
visit_network_policy_rule_option_name_mut
visit_notice_severity_mut
visit_object_name_mut
visit_object_type_mut
visit_op_mut
visit_order_by_expr_mut
visit_pg_config_option_mut
visit_pg_config_option_name_mut
visit_prepare_statement_mut
visit_privilege_mut
visit_privilege_specification_mut
visit_protobuf_schema_mut
visit_qualified_replica_mut
visit_query_mut
visit_raise_statement_mut
visit_reader_schema_selection_strategy_mut
visit_reassign_owned_statement_mut
visit_refresh_at_option_value_mut
visit_refresh_every_option_value_mut
visit_refresh_option_value_mut
visit_replica_definition_mut
visit_replica_option_mut
visit_replica_option_name_mut
visit_reset_variable_statement_mut
visit_revoke_privileges_statement_mut
visit_revoke_role_statement_mut
visit_role_attribute_mut
visit_role_name_mut
visit_rollback_statement_mut
visit_schema_mut
visit_schema_name_mut
visit_select_item_mut
visit_select_mut
visit_select_option_mut
visit_select_option_name_mut
visit_select_statement_mut
visit_set_expr_mut
visit_set_operator_mut
visit_set_role_var_mut
visit_set_transaction_statement_mut
visit_set_variable_statement_mut
visit_set_variable_to_mut
visit_set_variable_value_mut
visit_show_columns_statement_mut
visit_show_create_cluster_statement_mut
visit_show_create_connection_statement_mut
visit_show_create_index_statement_mut
visit_show_create_materialized_view_statement_mut
visit_show_create_sink_statement_mut
visit_show_create_source_statement_mut
visit_show_create_table_statement_mut
visit_show_create_view_statement_mut
visit_show_object_type_mut
visit_show_objects_statement_mut
visit_show_statement_filter_mut
visit_show_statement_mut
visit_show_variable_statement_mut
visit_sink_envelope_mut
visit_source_envelope_mut
visit_source_error_policy_mut
visit_source_include_metadata_mut
visit_sql_server_config_option_mut
visit_sql_server_config_option_name_mut
visit_start_transaction_statement_mut
visit_statement_mut
visit_subscribe_option_mut
visit_subscribe_option_name_mut
visit_subscribe_output_mut
visit_subscribe_relation_mut
visit_subscribe_statement_mut
visit_subscript_position_mut
visit_system_object_type_mut
visit_table_alias_mut
visit_table_constraint_mut
visit_table_factor_mut
visit_table_from_source_columns_mut
visit_table_from_source_option_mut
visit_table_from_source_option_name_mut
visit_table_option_mut
visit_table_option_name_mut
visit_table_with_joins_mut
visit_target_role_specification_mut
visit_transaction_access_mode_mut
visit_transaction_isolation_level_mut
visit_transaction_mode_mut
visit_unresolved_database_name_mut
visit_unresolved_item_name_mut
visit_unresolved_object_name_mut
visit_unresolved_schema_name_mut
visit_update_statement_mut
visit_validate_connection_statement_mut
visit_value_error_mut
visit_value_mut
visit_values_mut
visit_version_mut
visit_view_definition_mut
visit_window_frame_bound_mut
visit_window_frame_mut
visit_window_frame_units_mut
visit_window_spec_mut
visit_with_option_value_mut