Skip to content

Commit 6ff655d

Browse files
authored
Refactor export attribute errors (#83)
errors from the `export` attribute are not emitted correctly.
1 parent 5590e51 commit 6ff655d

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

derive/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "godot-rust-script-derive"
3-
version = "0.1.0"
4-
edition = "2021"
3+
version.workspace = true
4+
edition.workspace = true
55

66
[lib]
77
proc-macro = true

derive/src/lib.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ pub fn derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
4040
let fields = opts.data.take_struct().unwrap().fields;
4141

4242
let (
43-
field_metadata,
43+
(field_metadata, field_errors),
4444
signal_metadata,
4545
get_fields_dispatch,
4646
set_fields_dispatch,
4747
export_field_state,
4848
): (
49-
TokenStream,
49+
(TokenStream, TokenStream),
5050
(TokenStream, TokenStream),
5151
TokenStream,
5252
TokenStream,
@@ -69,19 +69,21 @@ pub fn derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
6969
let is_signal = signal_attr.is_some();
7070

7171
let field_metadata = match (is_public, is_exported, is_signal) {
72-
(false, false, _) | (true, false, true) => TokenStream::default(),
72+
(false, false, _) | (true, false, true) => {
73+
(TokenStream::default(), TokenStream::default())
74+
}
7375
(false, true, _) => {
7476
let err = compile_error("Only public fields can be exported!", export_attr);
7577

76-
quote! {#err,}
77-
}
78-
(true, _, false) => {
79-
derive_field_metadata(field, is_exported).unwrap_or_else(|err| err)
78+
(TokenStream::default(), err)
8079
}
80+
(true, _, false) => derive_field_metadata(field, is_exported)
81+
.map(|tokens| (tokens, TokenStream::default()))
82+
.unwrap_or_else(|err| (TokenStream::default(), err)),
8183
(true, true, true) => {
8284
let err = compile_error("Signals can not be exported!", export_attr);
8385

84-
quote! {#err,}
86+
(TokenStream::default(), err)
8587
}
8688
};
8789

@@ -97,7 +99,7 @@ pub fn derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
9799
(false, true) => {
98100
let err = compile_error("Signals must be public!", signal_attr);
99101

100-
(quote! {#err,}, TokenStream::default())
102+
(err, TokenStream::default())
101103
}
102104
};
103105

@@ -159,6 +161,7 @@ pub fn derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
159161
}
160162

161163
#signal_const_assert
164+
#field_errors
162165

163166
::godot_rust_script::register_script_class!(
164167
#script_type_ident,

0 commit comments

Comments
 (0)