4
4
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
*/
6
6
7
- use crate :: util:: { bail, ident, string_lit_contents , KvParser , KvValue } ;
7
+ use crate :: util:: { bail, ident, KvParser } ;
8
8
use crate :: ParseResult ;
9
9
use proc_macro2:: { Ident , Punct , TokenStream } ;
10
10
use quote:: { format_ident, quote} ;
@@ -185,45 +185,36 @@ enum GetterSetter {
185
185
Omitted ,
186
186
/// Trivial getter/setter should be autogenerated.
187
187
Generated ,
188
- /// Getter/setter is hand-written by the user, and here is its name .
189
- Custom ( String ) ,
188
+ /// Getter/setter is hand-written by the user, and here is its identifier .
189
+ Custom ( Ident ) ,
190
190
}
191
191
192
192
impl GetterSetter {
193
193
fn parse ( parser : & mut KvParser , key : & str ) -> ParseResult < Self > {
194
194
Ok ( match parser. handle_any ( key) {
195
195
// No `get` argument
196
196
None => GetterSetter :: Omitted ,
197
- // `get` without value
198
- Some ( KvValue :: None ) => GetterSetter :: Generated ,
199
- // `get = literal`
200
- Some ( KvValue :: Lit ( name_lit) ) => {
201
- let Some ( name) = string_lit_contents ( & name_lit) else {
202
- return bail ( format ! ( "argument to {key} must be a string literal, got: {name_lit}" ) , parser. span ( ) ) ;
203
- } ;
204
- GetterSetter :: Custom ( name)
205
- }
206
- Some ( KvValue :: Ident ( ident) ) => {
207
- return bail (
208
- format ! ( "argument to {key} must be a string, got: {ident}" ) ,
209
- parser. span ( ) ,
210
- ) ;
211
- }
197
+ Some ( value) => match value {
198
+ // `get` without value
199
+ None => GetterSetter :: Generated ,
200
+ // `get = expr`
201
+ Some ( value) => GetterSetter :: Custom ( value. ident ( ) ?) ,
202
+ } ,
212
203
} )
213
204
}
214
205
}
215
206
216
207
#[ derive( Clone ) ]
217
208
struct ExportHint {
218
209
hint_type : Ident ,
219
- description : String ,
210
+ description : TokenStream ,
220
211
}
221
212
222
213
impl ExportHint {
223
214
fn none ( ) -> Self {
224
215
Self {
225
216
hint_type : ident ( "PROPERTY_HINT_NONE" ) ,
226
- description : "" . to_string ( ) ,
217
+ description : quote ! ( "" ) ,
227
218
}
228
219
}
229
220
}
@@ -242,7 +233,7 @@ impl ExportedField {
242
233
. map ( |hint_type| {
243
234
Ok ( ExportHint {
244
235
hint_type,
245
- description : parser. handle_lit_required ( "hint_desc" ) ?,
236
+ description : parser. handle_expr_required ( "hint_desc" ) ?,
246
237
} )
247
238
} )
248
239
. transpose ( ) ?;
@@ -316,9 +307,6 @@ fn make_exports_impl(class_name: &Ident, fields: &Fields) -> TokenStream {
316
307
description,
317
308
} = exported_field. hint . clone ( ) . unwrap_or_else ( ExportHint :: none) ;
318
309
319
- // trims '"' and '\' from both ends of the hint description.
320
- let description = description. trim_matches ( |c| c == '\\' || c == '"' ) ;
321
-
322
310
let getter_name;
323
311
match & exported_field. getter {
324
312
GetterSetter :: Omitted => {
@@ -339,10 +327,9 @@ fn make_exports_impl(class_name: &Ident, fields: &Fields) -> TokenStream {
339
327
:: godot:: private:: gdext_register_method!( #class_name, #signature) ;
340
328
} ) ;
341
329
}
342
- GetterSetter :: Custom ( name) => {
343
- getter_name = name. clone ( ) ;
344
- let getter_ident = ident ( & getter_name) ;
345
- export_tokens. push ( make_existence_check ( & getter_ident) ) ;
330
+ GetterSetter :: Custom ( getter_ident) => {
331
+ getter_name = getter_ident. to_string ( ) ;
332
+ export_tokens. push ( make_existence_check ( getter_ident) ) ;
346
333
}
347
334
}
348
335
@@ -366,10 +353,9 @@ fn make_exports_impl(class_name: &Ident, fields: &Fields) -> TokenStream {
366
353
:: godot:: private:: gdext_register_method!( #class_name, #signature) ;
367
354
} ) ;
368
355
}
369
- GetterSetter :: Custom ( name) => {
370
- setter_name = name. clone ( ) ;
371
- let setter_ident = ident ( & setter_name) ;
372
- export_tokens. push ( make_existence_check ( & setter_ident) ) ;
356
+ GetterSetter :: Custom ( setter_ident) => {
357
+ setter_name = setter_ident. to_string ( ) ;
358
+ export_tokens. push ( make_existence_check ( setter_ident) ) ;
373
359
}
374
360
} ;
375
361
0 commit comments