File tree Expand file tree Collapse file tree 2 files changed +63
-1
lines changed
src/tools/rust-analyzer/crates/syntax/src/ast Expand file tree Collapse file tree 2 files changed +63
-1
lines changed Original file line number Diff line number Diff line change @@ -895,7 +895,29 @@ pub fn item_const(
895
895
None => String :: new ( ) ,
896
896
Some ( it) => format ! ( "{it} " ) ,
897
897
} ;
898
- ast_from_text ( & format ! ( "{visibility} const {name}: {ty} = {expr};" ) )
898
+ ast_from_text ( & format ! ( "{visibility}const {name}: {ty} = {expr};" ) )
899
+ }
900
+
901
+ pub fn item_static (
902
+ visibility : Option < ast:: Visibility > ,
903
+ is_unsafe : bool ,
904
+ is_mut : bool ,
905
+ name : ast:: Name ,
906
+ ty : ast:: Type ,
907
+ expr : Option < ast:: Expr > ,
908
+ ) -> ast:: Static {
909
+ let visibility = match visibility {
910
+ None => String :: new ( ) ,
911
+ Some ( it) => format ! ( "{it} " ) ,
912
+ } ;
913
+ let is_unsafe = if is_unsafe { "unsafe " } else { "" } ;
914
+ let is_mut = if is_mut { "mut " } else { "" } ;
915
+ let expr = match expr {
916
+ Some ( it) => & format ! ( " = {it}" ) ,
917
+ None => "" ,
918
+ } ;
919
+
920
+ ast_from_text ( & format ! ( "{visibility}{is_unsafe}static {is_mut}{name}: {ty}{expr};" ) )
899
921
}
900
922
901
923
pub fn unnamed_param ( ty : ast:: Type ) -> ast:: Param {
Original file line number Diff line number Diff line change @@ -215,6 +215,46 @@ impl SyntaxFactory {
215
215
ast
216
216
}
217
217
218
+ pub fn item_static (
219
+ & self ,
220
+ visibility : Option < ast:: Visibility > ,
221
+ is_unsafe : bool ,
222
+ is_mut : bool ,
223
+ name : ast:: Name ,
224
+ ty : ast:: Type ,
225
+ expr : Option < ast:: Expr > ,
226
+ ) -> ast:: Static {
227
+ let ast = make:: item_static (
228
+ visibility. clone ( ) ,
229
+ is_unsafe,
230
+ is_mut,
231
+ name. clone ( ) ,
232
+ ty. clone ( ) ,
233
+ expr. clone ( ) ,
234
+ )
235
+ . clone_for_update ( ) ;
236
+
237
+ if let Some ( mut mapping) = self . mappings ( ) {
238
+ let mut builder = SyntaxMappingBuilder :: new ( ast. syntax ( ) . clone ( ) ) ;
239
+ if let Some ( visibility) = visibility {
240
+ builder. map_node (
241
+ visibility. syntax ( ) . clone ( ) ,
242
+ ast. visibility ( ) . unwrap ( ) . syntax ( ) . clone ( ) ,
243
+ ) ;
244
+ }
245
+
246
+ builder. map_node ( name. syntax ( ) . clone ( ) , ast. name ( ) . unwrap ( ) . syntax ( ) . clone ( ) ) ;
247
+ builder. map_node ( ty. syntax ( ) . clone ( ) , ast. ty ( ) . unwrap ( ) . syntax ( ) . clone ( ) ) ;
248
+
249
+ if let Some ( expr) = expr {
250
+ builder. map_node ( expr. syntax ( ) . clone ( ) , ast. body ( ) . unwrap ( ) . syntax ( ) . clone ( ) ) ;
251
+ }
252
+ builder. finish ( & mut mapping) ;
253
+ }
254
+
255
+ ast
256
+ }
257
+
218
258
pub fn turbofish_generic_arg_list (
219
259
& self ,
220
260
args : impl IntoIterator < Item = ast:: GenericArg > + Clone ,
You can’t perform that action at this time.
0 commit comments