Skip to content

Commit 3c4f976

Browse files
committed
inject BMS into codegen :D
1 parent 300f11d commit 3c4f976

File tree

14 files changed

+38
-52
lines changed

14 files changed

+38
-52
lines changed

crates/bevy_api_gen/src/bin/main.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use log::{debug, error, info};
1515
use strum::VariantNames;
1616
use tera::Context;
1717

18-
const BOOTSTRAP_DEPS: [&str; 2] = ["mlua", "bevy_reflect"];
18+
const BOOTSTRAP_DEPS: [&str; 3] = ["mlua", "bevy_reflect", "bevy_mod_scripting_core"];
1919

2020
fn main() {
2121
// parse this here to early exit on wrong args
@@ -186,6 +186,9 @@ fn main() {
186186

187187
debug!("RUSTFLAGS={}", env::var("RUSTFLAGS").unwrap_or_default());
188188

189+
// disable incremental compilation
190+
env::set_var("CARGO_INCREMENTAL", "0");
191+
189192
rustc_plugin::cli_main(BevyAnalyzer);
190193

191194
// just making sure the temp dir lives until everything is done

crates/bevy_api_gen/src/context.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,15 @@ impl ReflectType<'_> {
8181
}
8282
}
8383

84+
pub(crate) const DEF_PATHS_BMS_FROM_SCRIPT: [&str; 2] = [
85+
"bevy_mod_scripting_core::bindings::function::from::FromScript",
86+
"bindings::function::from::FromScript",
87+
];
88+
pub(crate) const DEF_PATHS_BMS_INTO_SCRIPT: [&str; 2] = [
89+
"bevy_mod_scripting_core::bindings::function::into::IntoScript",
90+
"bindings::function::into::IntoScript",
91+
];
92+
8493
pub(crate) const DEF_PATHS_FROM_LUA: [&str; 2] = ["value::FromLuaMulti", "mlua::FromLuaMulti"];
8594
pub(crate) const DEF_PATHS_INTO_LUA: [&str; 2] = ["value::IntoLuaMulti", "mlua::IntoLuaMulti"];
8695
pub(crate) const DEF_PATHS_REFLECT: [&str; 2] =
@@ -117,6 +126,8 @@ pub(crate) const STD_SOURCE_TRAITS: [&str; 14] = [
117126
pub(crate) struct CachedTraits {
118127
pub(crate) mlua_from_lua_multi: Option<DefId>,
119128
pub(crate) mlua_into_lua_multi: Option<DefId>,
129+
pub(crate) bms_into_script: Option<DefId>,
130+
pub(crate) bms_from_script: Option<DefId>,
120131
pub(crate) bevy_reflect_reflect: Option<DefId>,
121132
pub(crate) bevy_reflect_get_type_registration: Option<DefId>,
122133
/// Map from def_path_str to DefId of common std traits we work with
@@ -125,6 +136,10 @@ pub(crate) struct CachedTraits {
125136
}
126137

127138
impl CachedTraits {
139+
pub(crate) fn has_all_bms_traits(&self) -> bool {
140+
self.bms_into_script.is_some() && self.bms_from_script.is_some()
141+
}
142+
128143
pub(crate) fn has_all_mlua_traits(&self) -> bool {
129144
self.mlua_from_lua_multi.is_some() && self.mlua_into_lua_multi.is_some()
130145
}

crates/bevy_api_gen/src/modifying_file_loader.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ impl FileLoader for ModifyingFileLoader {
2828
RealFileLoader.read_file(path).map(|mut f| {
2929
// we make it pub so in case we are re-exporting this crate we won't run into private re-export issues
3030

31-
for crate_ in &["bevy_reflect", "mlua"] {
31+
for crate_ in &["bevy_reflect", "mlua", "bevy_mod_scripting_core"] {
3232
if !f.contains(&format!("extern crate {crate_}")) {
3333
if f.contains(&format!("pub use {crate_}")) {
3434
f.push_str(&format!(

crates/bevy_api_gen/src/passes/cache_traits.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ use rustc_hir::def_id::LOCAL_CRATE;
33
use rustc_span::Symbol;
44

55
use crate::{
6-
Args, BevyCtxt, DEF_PATHS_FROM_LUA, DEF_PATHS_GET_TYPE_REGISTRATION, DEF_PATHS_INTO_LUA,
7-
DEF_PATHS_REFLECT, STD_SOURCE_TRAITS,
6+
Args, BevyCtxt, DEF_PATHS_BMS_FROM_SCRIPT, DEF_PATHS_BMS_INTO_SCRIPT, DEF_PATHS_FROM_LUA,
7+
DEF_PATHS_GET_TYPE_REGISTRATION, DEF_PATHS_INTO_LUA, DEF_PATHS_REFLECT, STD_SOURCE_TRAITS,
88
};
99

1010
/// Finds and caches relevant traits, if they cannot be found throws an ICE
@@ -13,7 +13,6 @@ pub(crate) fn cache_traits(ctxt: &mut BevyCtxt<'_>, _args: &Args) -> bool {
1313

1414
for trait_did in tcx.all_traits() {
1515
let def_path_str = tcx.def_path_str(trait_did);
16-
1716
if DEF_PATHS_FROM_LUA.contains(&def_path_str.as_str()) {
1817
trace!("found FromLuaMulti trait def id: {trait_did:?}");
1918
ctxt.cached_traits.mlua_from_lua_multi = Some(trait_did);
@@ -31,9 +30,22 @@ pub(crate) fn cache_traits(ctxt: &mut BevyCtxt<'_>, _args: &Args) -> bool {
3130
ctxt.cached_traits
3231
.std_source_traits
3332
.insert(def_path_str.to_string(), trait_did);
33+
} else if DEF_PATHS_BMS_INTO_SCRIPT.contains(&def_path_str.as_str()) {
34+
trace!("found IntoScript trait def id: {trait_did:?}");
35+
ctxt.cached_traits.bms_into_script = Some(trait_did);
36+
} else if DEF_PATHS_BMS_FROM_SCRIPT.contains(&def_path_str.as_str()) {
37+
trace!("found FromScript trait def id: {trait_did:?}");
38+
ctxt.cached_traits.bms_from_script = Some(trait_did);
3439
}
3540
}
3641

42+
if !ctxt.cached_traits.has_all_bms_traits() {
43+
panic!(
44+
"Could not find all bms traits in crate: {}",
45+
tcx.crate_name(LOCAL_CRATE)
46+
)
47+
}
48+
3749
if !ctxt.cached_traits.has_all_mlua_traits() {
3850
panic!(
3951
"Could not find all mlua traits in crate: {}, did bootstrapping go wrong?",

crates/bevy_api_gen/src/passes/populate_template_data.rs

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -82,35 +82,10 @@ pub(crate) fn populate_template_data(ctxt: &mut BevyCtxt<'_>, args: &Args) -> bo
8282
}
8383

8484
let crate_name = tcx.crate_name(LOCAL_CRATE).to_string();
85-
let dep_names = tcx
86-
.crates(())
87-
.iter()
88-
.map(|d| tcx.crate_name(*d).to_ident_string())
89-
.collect::<Vec<_>>();
90-
91-
let dependencies = ctxt
92-
.meta_loader
93-
.workspace_meta
94-
.crates
95-
.iter()
96-
.filter(|c| {
97-
dep_names.contains(c)
98-
&& ctxt
99-
.meta_loader
100-
.meta_for(c)
101-
.unwrap_or_else(|| panic!("Expected meta for dependency: {c}"))
102-
.will_generate
103-
})
104-
.cloned()
105-
.collect();
10685

10786
ctxt.clear();
10887

109-
ctxt.template_context = Some(TemplateContext {
110-
crate_name,
111-
items,
112-
dependencies,
113-
});
88+
ctxt.template_context = Some(TemplateContext { crate_name, items });
11489

11590
if let crate::Command::Generate {
11691
template_data_only, ..

crates/bevy_api_gen/src/template.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ impl ValueEnum for TemplateKind {
5959

6060
#[derive(Serialize)]
6161
pub(crate) struct TemplateContext {
62-
pub(crate) dependencies: Vec<String>,
6362
pub(crate) crate_name: String,
6463
pub(crate) items: Vec<Item>,
6564
}

crates/bevy_mod_scripting_functions/src/bevy_bindings/bevy_core.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
#![allow(clippy::all)]
33
#![allow(unused, deprecated, dead_code)]
44
#![cfg_attr(rustfmt, rustfmt_skip)]
5-
use super::bevy_ecs::*;
6-
use super::bevy_reflect::*;
75
use bevy_mod_scripting_core::bindings::{
86
ReflectReference,
97
function::{

crates/bevy_mod_scripting_functions/src/bevy_bindings/bevy_ecs.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#![allow(clippy::all)]
33
#![allow(unused, deprecated, dead_code)]
44
#![cfg_attr(rustfmt, rustfmt_skip)]
5-
use super::bevy_reflect::*;
65
use bevy_mod_scripting_core::bindings::{
76
ReflectReference,
87
function::{

crates/bevy_mod_scripting_functions/src/bevy_bindings/bevy_hierarchy.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
#![allow(clippy::all)]
33
#![allow(unused, deprecated, dead_code)]
44
#![cfg_attr(rustfmt, rustfmt_skip)]
5-
use super::bevy_ecs::*;
6-
use super::bevy_reflect::*;
7-
use super::bevy_core::*;
85
use bevy_mod_scripting_core::bindings::{
96
ReflectReference,
107
function::{

crates/bevy_mod_scripting_functions/src/bevy_bindings/bevy_input.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22
#![allow(clippy::all)]
33
#![allow(unused, deprecated, dead_code)]
44
#![cfg_attr(rustfmt, rustfmt_skip)]
5-
use super::bevy_ecs::*;
6-
use super::bevy_reflect::*;
7-
use super::bevy_core::*;
8-
use super::bevy_math::*;
95
use bevy_mod_scripting_core::bindings::{
106
ReflectReference,
117
function::{

crates/bevy_mod_scripting_functions/src/bevy_bindings/bevy_math.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#![allow(clippy::all)]
33
#![allow(unused, deprecated, dead_code)]
44
#![cfg_attr(rustfmt, rustfmt_skip)]
5-
use super::bevy_reflect::*;
65
use bevy_mod_scripting_core::bindings::{
76
ReflectReference,
87
function::{

crates/bevy_mod_scripting_functions/src/bevy_bindings/bevy_time.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
#![allow(clippy::all)]
33
#![allow(unused, deprecated, dead_code)]
44
#![cfg_attr(rustfmt, rustfmt_skip)]
5-
use super::bevy_ecs::*;
6-
use super::bevy_reflect::*;
75
use bevy_mod_scripting_core::bindings::{
86
ReflectReference,
97
function::{

crates/bevy_mod_scripting_functions/src/bevy_bindings/bevy_transform.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,6 @@
22
#![allow(clippy::all)]
33
#![allow(unused, deprecated, dead_code)]
44
#![cfg_attr(rustfmt, rustfmt_skip)]
5-
use super::bevy_ecs::*;
6-
use super::bevy_reflect::*;
7-
use super::bevy_core::*;
8-
use super::bevy_math::*;
9-
use super::bevy_hierarchy::*;
105
use bevy_mod_scripting_core::bindings::{
116
ReflectReference,
127
function::{

crates/xtask/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -995,7 +995,7 @@ impl Xtasks {
995995
template_args.as_str(),
996996
"--features",
997997
bevy_features.join(",").as_str(),
998-
"-vv",
998+
"-v",
999999
],
10001000
Some(&bevy_dir),
10011001
)?;
@@ -1013,7 +1013,7 @@ impl Xtasks {
10131013
output_dir.to_str().unwrap(),
10141014
"--template-args",
10151015
template_args.as_str(),
1016-
"-vv",
1016+
"-v",
10171017
],
10181018
Some(&bevy_dir),
10191019
)?;

0 commit comments

Comments
 (0)