rustpython_ruff_python_ast/
relocate.rs1use ruff_text_size::TextRange;
2
3use crate::visitor::transformer::{Transformer, walk_expr, walk_keyword};
4use crate::{self as ast};
5use crate::{Expr, Keyword};
6
7pub fn relocate_expr(expr: &mut Expr, range: TextRange) {
10 Relocator { range }.visit_expr(expr);
11}
12
13#[derive(Debug)]
14struct Relocator {
15 range: TextRange,
16}
17
18impl Transformer for Relocator {
19 fn visit_expr(&self, expr: &mut Expr) {
20 match expr {
21 Expr::BoolOp(ast::ExprBoolOp { range, .. }) => {
22 *range = self.range;
23 }
24 Expr::Named(ast::ExprNamed { range, .. }) => {
25 *range = self.range;
26 }
27 Expr::BinOp(ast::ExprBinOp { range, .. }) => {
28 *range = self.range;
29 }
30 Expr::UnaryOp(ast::ExprUnaryOp { range, .. }) => {
31 *range = self.range;
32 }
33 Expr::Lambda(ast::ExprLambda { range, .. }) => {
34 *range = self.range;
35 }
36 Expr::If(ast::ExprIf { range, .. }) => {
37 *range = self.range;
38 }
39 Expr::Dict(ast::ExprDict { range, .. }) => {
40 *range = self.range;
41 }
42 Expr::Set(ast::ExprSet { range, .. }) => {
43 *range = self.range;
44 }
45 Expr::ListComp(ast::ExprListComp { range, .. }) => {
46 *range = self.range;
47 }
48 Expr::SetComp(ast::ExprSetComp { range, .. }) => {
49 *range = self.range;
50 }
51 Expr::DictComp(ast::ExprDictComp { range, .. }) => {
52 *range = self.range;
53 }
54 Expr::Generator(ast::ExprGenerator { range, .. }) => {
55 *range = self.range;
56 }
57 Expr::Await(ast::ExprAwait { range, .. }) => {
58 *range = self.range;
59 }
60 Expr::Yield(ast::ExprYield { range, .. }) => {
61 *range = self.range;
62 }
63 Expr::YieldFrom(ast::ExprYieldFrom { range, .. }) => {
64 *range = self.range;
65 }
66 Expr::Compare(ast::ExprCompare { range, .. }) => {
67 *range = self.range;
68 }
69 Expr::Call(ast::ExprCall { range, .. }) => {
70 *range = self.range;
71 }
72 Expr::FString(ast::ExprFString { range, .. }) => {
73 *range = self.range;
74 }
75 Expr::TString(ast::ExprTString { range, .. }) => {
76 *range = self.range;
77 }
78 Expr::StringLiteral(ast::ExprStringLiteral { range, .. }) => {
79 *range = self.range;
80 }
81 Expr::BytesLiteral(ast::ExprBytesLiteral { range, .. }) => {
82 *range = self.range;
83 }
84 Expr::NumberLiteral(ast::ExprNumberLiteral { range, .. }) => {
85 *range = self.range;
86 }
87 Expr::BooleanLiteral(ast::ExprBooleanLiteral { range, .. }) => {
88 *range = self.range;
89 }
90 Expr::NoneLiteral(ast::ExprNoneLiteral { range, .. }) => {
91 *range = self.range;
92 }
93 Expr::EllipsisLiteral(ast::ExprEllipsisLiteral { range, .. }) => {
94 *range = self.range;
95 }
96 Expr::Attribute(ast::ExprAttribute { range, .. }) => {
97 *range = self.range;
98 }
99 Expr::Subscript(ast::ExprSubscript { range, .. }) => {
100 *range = self.range;
101 }
102 Expr::Starred(ast::ExprStarred { range, .. }) => {
103 *range = self.range;
104 }
105 Expr::Name(ast::ExprName { range, .. }) => {
106 *range = self.range;
107 }
108 Expr::List(ast::ExprList { range, .. }) => {
109 *range = self.range;
110 }
111 Expr::Tuple(ast::ExprTuple { range, .. }) => {
112 *range = self.range;
113 }
114 Expr::Slice(ast::ExprSlice { range, .. }) => {
115 *range = self.range;
116 }
117 Expr::IpyEscapeCommand(ast::ExprIpyEscapeCommand { range, .. }) => {
118 *range = self.range;
119 }
120 }
121 walk_expr(self, expr);
122 }
123
124 fn visit_keyword(&self, keyword: &mut Keyword) {
125 keyword.range = self.range;
126 walk_keyword(self, keyword);
127 }
128}