Rust: Add full downgrade script for dbscheme migration

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Paolo Tranquilli
2026-05-27 09:33:18 +02:00
parent 7f2bda1066
commit 25ab2e0280
2 changed files with 205 additions and 1 deletions

View File

@@ -1,7 +1,8 @@
description: Downgrade from rust-analyzer 0.0.328 to 0.0.301
compatibility: partial
compatibility: full
block_expr_try_block_modifiers.rel: delete
block_expr_is_try.rel: run upgrade.ql new_block_expr_is_try
cfg_atoms.rel: delete
cfg_attr_meta.rel: delete
cfg_attr_meta_cfg_predicates.rel: delete
@@ -10,16 +11,44 @@ cfg_composites.rel: delete
cfg_composite_cfg_predicates.rel: delete
cfg_meta.rel: delete
cfg_meta_cfg_predicates.rel: delete
const_args.rel: run upgrade.ql new_const_args
const_arg_exprs.rel: run upgrade.ql new_const_arg_exprs
format_args_arg_arg_names.rel: delete
format_args_arg_names.rel: run upgrade.ql new_format_args_arg_names
key_value_meta.rel: delete
key_value_meta_exprs.rel: delete
key_value_meta_paths.rel: delete
locatable_locations.rel: run upgrade.ql new_locatable_locations
meta.rel: run upgrade.ql new_meta
meta_exprs.rel: run upgrade.ql new_meta_exprs
meta_is_unsafe.rel: run upgrade.ql new_meta_is_unsafe
meta_paths.rel: run upgrade.ql new_meta_paths
meta_token_trees.rel: run upgrade.ql new_meta_token_trees
names.rel: run upgrade.ql new_names
path_meta.rel: delete
path_meta_paths.rel: delete
struct_field_default_vals.rel: delete
struct_field_defaults.rel: run upgrade.ql new_struct_field_defaults
token_tree_meta.rel: delete
token_tree_meta_paths.rel: delete
token_tree_meta_token_trees.rel: delete
trait_assoc_item_lists.rel: run upgrade.ql new_trait_assoc_item_lists
trait_attrs.rel: run upgrade.ql new_trait_attrs
trait_generic_param_lists.rel: run upgrade.ql new_trait_generic_param_lists
trait_is_auto.rel: run upgrade.ql new_trait_is_auto
trait_is_unsafe.rel: run upgrade.ql new_trait_is_unsafe
trait_names.rel: run upgrade.ql new_trait_names
trait_type_bound_lists.rel: run upgrade.ql new_trait_type_bound_lists
trait_visibilities.rel: run upgrade.ql new_trait_visibilities
trait_where_clauses.rel: run upgrade.ql new_trait_where_clauses
trait_aliases.rel: run upgrade.ql new_trait_aliases
trait_alias_attrs.rel: run upgrade.ql new_trait_alias_attrs
trait_alias_generic_param_lists.rel: run upgrade.ql new_trait_alias_generic_param_lists
trait_alias_names.rel: run upgrade.ql new_trait_alias_names
trait_alias_type_bound_lists.rel: run upgrade.ql new_trait_alias_type_bound_lists
trait_alias_visibilities.rel: run upgrade.ql new_trait_alias_visibilities
trait_alias_where_clauses.rel: run upgrade.ql new_trait_alias_where_clauses
traits.rel: run upgrade.ql new_traits
try_block_modifier_is_try.rel: delete
try_block_modifiers.rel: delete
try_block_modifier_type_reprs.rel: delete
@@ -27,3 +56,4 @@ unsafe_meta.rel: delete
unsafe_meta_is_unsafe.rel: delete
unsafe_meta_meta.rel: delete
variant_const_args.rel: delete
variant_discriminants.rel: run upgrade.ql new_variant_discriminants

View File

@@ -0,0 +1,174 @@
class Element extends @element {
string toString() { none() }
}
class Location extends @location_default {
string toString() { none() }
}
private predicate wrapperConstArg(Element id) {
struct_field_default_vals(_, id) or variant_const_args(_, id)
}
private predicate traitIsAlias(Element id) {
traits(id) and trait_type_bound_lists(id, _) and not trait_assoc_item_lists(id, _)
}
private predicate sourceMeta(Element id) {
path_meta(id) or
key_value_meta(id) or
token_tree_meta(id) or
unsafe_meta(id) or
cfg_meta(id) or
cfg_attr_meta(id)
}
private predicate unsafeInnerMeta(Element id) {
unsafe_meta_meta(_, id)
}
private predicate metaPath(Element id, Element path) {
path_meta_paths(id, path) or key_value_meta_paths(id, path) or token_tree_meta_paths(id, path)
}
private predicate metaExpr(Element id, Element expr) {
key_value_meta_exprs(id, expr)
}
private predicate metaTokenTree(Element id, Element tokenTree) {
token_tree_meta_token_trees(id, tokenTree)
}
private predicate deletedElement(Element id) {
wrapperConstArg(id) or
unsafeInnerMeta(id) or
cfg_atoms(id) or
cfg_composites(id) or
try_block_modifiers(id)
}
query predicate new_block_expr_is_try(Element id) {
exists(Element modifier | block_expr_try_block_modifiers(id, modifier) and try_block_modifier_is_try(modifier))
}
query predicate new_names(Element id) {
names(id) or format_args_arg_names(id)
}
query predicate new_format_args_arg_names(Element id, Element name) {
format_args_arg_arg_names(id, name)
}
query predicate new_const_args(Element id) {
const_args(id) and not wrapperConstArg(id)
}
query predicate new_const_arg_exprs(Element id, Element expr) {
const_arg_exprs(id, expr) and not wrapperConstArg(id)
}
query predicate new_struct_field_defaults(Element id, Element expr) {
exists(Element constArg | struct_field_default_vals(id, constArg) and const_arg_exprs(constArg, expr))
}
query predicate new_variant_discriminants(Element id, Element expr) {
exists(Element constArg | variant_const_args(id, constArg) and const_arg_exprs(constArg, expr))
}
query predicate new_meta(Element id) {
sourceMeta(id) and not unsafeInnerMeta(id)
}
query predicate new_meta_paths(Element id, Element path) {
metaPath(id, path) and not unsafeInnerMeta(id)
or
exists(Element inner | unsafe_meta_meta(id, inner) and metaPath(inner, path))
}
query predicate new_meta_exprs(Element id, Element expr) {
metaExpr(id, expr) and not unsafeInnerMeta(id)
or
exists(Element inner | unsafe_meta_meta(id, inner) and metaExpr(inner, expr))
}
query predicate new_meta_token_trees(Element id, Element tokenTree) {
metaTokenTree(id, tokenTree) and not unsafeInnerMeta(id)
or
exists(Element inner | unsafe_meta_meta(id, inner) and metaTokenTree(inner, tokenTree))
}
query predicate new_meta_is_unsafe(Element id) {
unsafe_meta_is_unsafe(id)
}
query predicate new_traits(Element id) {
traits(id) and not traitIsAlias(id)
}
query predicate new_trait_assoc_item_lists(Element id, Element assocItemList) {
trait_assoc_item_lists(id, assocItemList) and not traitIsAlias(id)
}
query predicate new_trait_attrs(Element id, int index, Element attr) {
trait_attrs(id, index, attr) and not traitIsAlias(id)
}
query predicate new_trait_generic_param_lists(Element id, Element genericParamList) {
trait_generic_param_lists(id, genericParamList) and not traitIsAlias(id)
}
query predicate new_trait_is_auto(Element id) {
trait_is_auto(id) and not traitIsAlias(id)
}
query predicate new_trait_is_unsafe(Element id) {
trait_is_unsafe(id) and not traitIsAlias(id)
}
query predicate new_trait_names(Element id, Element name) {
trait_names(id, name) and not traitIsAlias(id)
}
query predicate new_trait_type_bound_lists(Element id, Element typeBoundList) {
trait_type_bound_lists(id, typeBoundList) and not traitIsAlias(id)
}
query predicate new_trait_visibilities(Element id, Element visibility) {
trait_visibilities(id, visibility) and not traitIsAlias(id)
}
query predicate new_trait_where_clauses(Element id, Element whereClause) {
trait_where_clauses(id, whereClause) and not traitIsAlias(id)
}
query predicate new_trait_aliases(Element id) {
traitIsAlias(id)
}
query predicate new_trait_alias_attrs(Element id, int index, Element attr) {
trait_attrs(id, index, attr) and traitIsAlias(id)
}
query predicate new_trait_alias_generic_param_lists(Element id, Element genericParamList) {
trait_generic_param_lists(id, genericParamList) and traitIsAlias(id)
}
query predicate new_trait_alias_names(Element id, Element name) {
trait_names(id, name) and traitIsAlias(id)
}
query predicate new_trait_alias_type_bound_lists(Element id, Element typeBoundList) {
trait_type_bound_lists(id, typeBoundList) and traitIsAlias(id)
}
query predicate new_trait_alias_visibilities(Element id, Element visibility) {
trait_visibilities(id, visibility) and traitIsAlias(id)
}
query predicate new_trait_alias_where_clauses(Element id, Element whereClause) {
trait_where_clauses(id, whereClause) and traitIsAlias(id)
}
query predicate new_locatable_locations(Element id, Location location) {
locatable_locations(id, location) and not deletedElement(id)
}