Skip to content

Commit dde0dc9

Browse files
authored
Use to_rust_ident to generate identifiers in Rust code. (#441)
This handles keywords which collide with identifiers.
1 parent 40f9a05 commit dde0dc9

3 files changed

Lines changed: 20 additions & 10 deletions

File tree

crates/gen-guest-rust/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ use wit_bindgen_core::{
1010
WorldGenerator,
1111
};
1212
use wit_bindgen_gen_rust_lib::{
13-
int_repr, wasm_type, FnSig, RustFlagsRepr, RustFunctionGenerator, RustGenerator, TypeMode,
13+
int_repr, to_rust_ident, wasm_type, FnSig, RustFlagsRepr, RustFunctionGenerator, RustGenerator,
14+
TypeMode,
1415
};
1516

1617
#[derive(Default)]
@@ -1333,7 +1334,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
13331334
self.let_results(func.results.len(), results);
13341335
match &func.kind {
13351336
FunctionKind::Freestanding => {
1336-
self.push_str(&format!("T::{}", func.name.to_snake_case()));
1337+
self.push_str(&format!("T::{}", to_rust_ident(&func.name)));
13371338
}
13381339
}
13391340
self.push_str("(");

crates/gen-host-wasmtime-rust/src/lib.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use wit_bindgen_core::{
88
uwrite, uwriteln, wit_parser::*, Files, InterfaceGenerator as _, Source, TypeInfo, Types,
99
WorldGenerator,
1010
};
11-
use wit_bindgen_gen_rust_lib::{FnSig, RustGenerator, TypeMode};
11+
use wit_bindgen_gen_rust_lib::{to_rust_ident, FnSig, RustGenerator, TypeMode};
1212

1313
#[derive(Default)]
1414
struct Wasmtime {
@@ -55,7 +55,7 @@ impl WorldGenerator for Wasmtime {
5555
gen.generate_from_error_impls();
5656
gen.generate_add_to_linker(name);
5757

58-
let snake = name.to_snake_case();
58+
let snake = to_rust_ident(name);
5959
let module = &gen.src[..];
6060

6161
uwriteln!(
@@ -85,7 +85,7 @@ impl WorldGenerator for Wasmtime {
8585
uwriteln!(
8686
gen.src,
8787
"{}: wasmtime::component::Func,",
88-
func.name.to_snake_case()
88+
to_rust_ident(&func.name)
8989
);
9090
}
9191
uwriteln!(gen.src, "}}");
@@ -114,7 +114,7 @@ impl WorldGenerator for Wasmtime {
114114
}
115115
uwriteln!(gen.src, "}}");
116116

117-
let snake = name.to_snake_case();
117+
let snake = to_rust_ident(name);
118118
let module = &gen.src[..];
119119

120120
uwriteln!(
@@ -455,7 +455,7 @@ impl<'a> InterfaceGenerator<'a> {
455455

456456
self.src.push_str("let host = get(caller.data_mut());\n");
457457

458-
uwrite!(self.src, "let r = host.{}(", func.name.to_snake_case());
458+
uwrite!(self.src, "let r = host.{}(", to_rust_ident(&func.name));
459459
for (i, _) in func.params.iter().enumerate() {
460460
uwrite!(self.src, "arg{},", i);
461461
}
@@ -494,7 +494,7 @@ impl<'a> InterfaceGenerator<'a> {
494494
let prev = mem::take(&mut self.src);
495495
let mut ret = Vec::new();
496496
for func in self.iface.functions.iter() {
497-
let snake = func.name.to_snake_case();
497+
let snake = to_rust_ident(&func.name);
498498
uwrite!(self.src, "*__exports.typed_func::<(");
499499
for (_, ty) in func.params.iter() {
500500
self.print_ty(ty, TypeMode::AllBorrowed("'_"));
@@ -526,7 +526,7 @@ impl<'a> InterfaceGenerator<'a> {
526526
uwrite!(
527527
self.src,
528528
"pub {async_} fn {}<S: wasmtime::AsContextMut>(&self, mut store: S, ",
529-
func.name.to_snake_case(),
529+
to_rust_ident(&func.name),
530530
);
531531
for (i, param) in func.params.iter().enumerate() {
532532
uwrite!(self.src, "arg{}: ", i);
@@ -573,7 +573,7 @@ impl<'a> InterfaceGenerator<'a> {
573573
uwriteln!(
574574
self.src,
575575
")>::new_unchecked(self.{})",
576-
func.name.to_snake_case()
576+
to_rust_ident(&func.name)
577577
);
578578
self.src.push_str("};\n");
579579
self.src.push_str("let (");

tests/codegen/keywords.wit

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
interface keywords {
2+
%type: func(%type: u32) -> (%type: u32, %flags: s32)
3+
}
4+
5+
world the-world {
6+
import imports: keywords
7+
export exports: keywords
8+
default export keywords
9+
}

0 commit comments

Comments
 (0)