diff --git a/codegen/src/function.rs b/codegen/src/function.rs index 2f80fb03..b96180d2 100644 --- a/codegen/src/function.rs +++ b/codegen/src/function.rs @@ -87,6 +87,10 @@ impl ExportedParams for ExportedFnParams { format!("use attribute 'setter = \"{}\"' instead", &s.value()["set$".len()..]))) }, + ("name", Some(s)) if s.value().contains('$') => { + return Err(syn::Error::new(s.span(), + "Rhai function names may not contain dollar sign")) + }, ("name", Some(s)) if s.value().contains('.') => { return Err(syn::Error::new(s.span(), "Rhai function names may not contain dot")) diff --git a/codegen/ui_tests/rhai_fn_rename_dollar_sign.rs b/codegen/ui_tests/rhai_fn_rename_dollar_sign.rs new file mode 100644 index 00000000..69af645c --- /dev/null +++ b/codegen/ui_tests/rhai_fn_rename_dollar_sign.rs @@ -0,0 +1,28 @@ +use rhai::plugin::*; + +#[derive(Clone)] +pub struct Point { + x: f32, + y: f32, +} + +#[export_module] +pub mod test_module { + pub use super::Point; + #[rhai_fn(name = "big$caching")] + pub fn test_fn(input: Point) -> bool { + input.x > input.y + } +} + +fn main() { + let n = Point { + x: 0.0, + y: 10.0, + }; + if test_module::test_fn(n) { + println!("yes"); + } else { + println!("no"); + } +} diff --git a/codegen/ui_tests/rhai_fn_rename_dollar_sign.stderr b/codegen/ui_tests/rhai_fn_rename_dollar_sign.stderr new file mode 100644 index 00000000..96f4c4de --- /dev/null +++ b/codegen/ui_tests/rhai_fn_rename_dollar_sign.stderr @@ -0,0 +1,11 @@ +error: Rhai function names may not contain dollar sign + --> $DIR/rhai_fn_rename_dollar_sign.rs:12:22 + | +12 | #[rhai_fn(name = "big$caching")] + | ^^^^^^^^^^^^^ + +error[E0433]: failed to resolve: use of undeclared type or module `test_module` + --> $DIR/rhai_fn_rename_dollar_sign.rs:23:8 + | +23 | if test_module::test_fn(n) { + | ^^^^^^^^^^^ use of undeclared type or module `test_module`