Skip to content

Commit ee8cdb5

Browse files
Add gen modifier to functions
We don't yet lower or maybe even parse them, but blocks already have `gen`, so why not.
1 parent 5c07dba commit ee8cdb5

File tree

9 files changed

+38
-4
lines changed

9 files changed

+38
-4
lines changed

crates/ide-assists/src/handlers/extract_function.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1617,6 +1617,7 @@ fn format_function(
16171617
fun.control_flow.is_async,
16181618
fun.mods.is_const,
16191619
fun.control_flow.is_unsafe,
1620+
false,
16201621
)
16211622
}
16221623

crates/ide-assists/src/handlers/generate_delegate_methods.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ pub(crate) fn generate_delegate_methods(acc: &mut Assists, ctx: &AssistContext<'
122122
let is_async = method_source.async_token().is_some();
123123
let is_const = method_source.const_token().is_some();
124124
let is_unsafe = method_source.unsafe_token().is_some();
125+
let is_gen = method_source.gen_token().is_some();
125126

126127
let fn_name = make::name(&name);
127128

@@ -154,6 +155,7 @@ pub(crate) fn generate_delegate_methods(acc: &mut Assists, ctx: &AssistContext<'
154155
is_async,
155156
is_const,
156157
is_unsafe,
158+
is_gen,
157159
)
158160
.clone_for_update();
159161

crates/ide-assists/src/handlers/generate_delegate_trait.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,7 @@ fn func_assoc_item(
740740
item.async_token().is_some(),
741741
item.const_token().is_some(),
742742
item.unsafe_token().is_some(),
743+
item.gen_token().is_some(),
743744
)
744745
.clone_for_update();
745746

crates/ide-assists/src/handlers/generate_function.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,7 @@ impl FunctionBuilder {
365365
self.is_async,
366366
false, // FIXME : const and unsafe are not handled yet.
367367
false,
368+
false,
368369
)
369370
.clone_for_update();
370371

crates/ide-assists/src/handlers/generate_getter_or_setter.rs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,19 @@ fn generate_getter_from_info(
261261
let ret_type = Some(make::ret_type(ty));
262262
let body = make::block_expr([], Some(body));
263263

264-
make::fn_(strukt.visibility(), fn_name, None, None, params, body, ret_type, false, false, false)
264+
make::fn_(
265+
strukt.visibility(),
266+
fn_name,
267+
None,
268+
None,
269+
params,
270+
body,
271+
ret_type,
272+
false,
273+
false,
274+
false,
275+
false,
276+
)
265277
}
266278

267279
fn generate_setter_from_info(info: &AssistInfo, record_field_info: &RecordFieldInfo) -> ast::Fn {
@@ -285,7 +297,19 @@ fn generate_setter_from_info(info: &AssistInfo, record_field_info: &RecordFieldI
285297
let body = make::block_expr([assign_stmt.into()], None);
286298

287299
// Make the setter fn
288-
make::fn_(strukt.visibility(), fn_name, None, None, params, body, None, false, false, false)
300+
make::fn_(
301+
strukt.visibility(),
302+
fn_name,
303+
None,
304+
None,
305+
params,
306+
body,
307+
None,
308+
false,
309+
false,
310+
false,
311+
false,
312+
)
289313
}
290314

291315
fn extract_and_parse(

crates/ide-assists/src/handlers/generate_new.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ pub(crate) fn generate_new(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option
115115
false,
116116
false,
117117
false,
118+
false,
118119
)
119120
.clone_for_update();
120121
fn_.indent(1.into());

crates/syntax/rust.ungram

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ UseTreeList =
186186

187187
Fn =
188188
Attr* Visibility?
189-
'default'? 'const'? 'async'? 'unsafe'? Abi?
189+
'default'? 'const'? 'async'? 'gen' 'unsafe'? Abi?
190190
'fn' Name GenericParamList? ParamList RetType? WhereClause?
191191
(body:BlockExpr | ';')
192192

crates/syntax/src/ast/generated/nodes.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,8 @@ impl Fn {
484484
#[inline]
485485
pub fn fn_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![fn]) }
486486
#[inline]
487+
pub fn gen_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![gen]) }
488+
#[inline]
487489
pub fn unsafe_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![unsafe]) }
488490
}
489491

crates/syntax/src/ast/make.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1035,6 +1035,7 @@ pub fn fn_(
10351035
is_async: bool,
10361036
is_const: bool,
10371037
is_unsafe: bool,
1038+
is_gen: bool,
10381039
) -> ast::Fn {
10391040
let type_params = match type_params {
10401041
Some(type_params) => format!("{type_params}"),
@@ -1056,9 +1057,10 @@ pub fn fn_(
10561057
let async_literal = if is_async { "async " } else { "" };
10571058
let const_literal = if is_const { "const " } else { "" };
10581059
let unsafe_literal = if is_unsafe { "unsafe " } else { "" };
1060+
let gen_literal = if is_gen { "gen " } else { "" };
10591061

10601062
ast_from_text(&format!(
1061-
"{visibility}{async_literal}{const_literal}{unsafe_literal}fn {fn_name}{type_params}{params} {ret_type}{where_clause}{body}",
1063+
"{visibility}{const_literal}{async_literal}{gen_literal}{unsafe_literal}fn {fn_name}{type_params}{params} {ret_type}{where_clause}{body}",
10621064
))
10631065
}
10641066
pub fn struct_(

0 commit comments

Comments
 (0)