From 539cd0d418c06cd5b61701a28f7058891279099a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F?= <34089907+Barocena@users.noreply.github.com> Date: Tue, 19 Sep 2023 08:56:39 +0300 Subject: [PATCH 1/6] Create .git-blame-ignore-revs & Add Stylua pr (#787) adds stylua pr to ignore so it doesn't show on git blame history --- .git-blame-ignore-revs | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000..dcba947a --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# stylua formatting +0f8e1625d572a5fe0f7b5c08653ff92cc837d346 From bb8dd1402d6f7d03c3589cd769261be50f220593 Mon Sep 17 00:00:00 2001 From: Sasial <44125644+sasial-dev@users.noreply.github.com> Date: Sun, 24 Sep 2023 06:28:09 +1000 Subject: [PATCH 2/6] Add `RunContext` support for script outputs (#765) Resolves #667 This PR: - Introduces a new field in the project file: `scriptType` which has the default value of `Class` (in parity with previous versions), but can also be `RunContext`. - This is then passed to `InstanceContext` from the `Project` struct. - This then changes the RunContext in the lua `snapshot_middleware` --------- Co-authored-by: Micah --- CHANGELOG.md | 7 + ..._end__tests__build__nested_runcontext.snap | 35 +++ ...d__tests__build__script_meta_disabled.snap | 1 + ...o_end__tests__build__server_in_folder.snap | 1 + ...end_to_end__tests__build__server_init.snap | 1 + .../nested_runcontext/default.project.json | 13 + .../nested_runcontext/folder1/test.server.lua | 0 .../folder2/default.project.json | 7 + .../folder2/folder3/test.server.lua | 0 ...d_to_end__tests__serve__scripts_all-2.snap | 2 + ...end_to_end__tests__serve__scripts_all.snap | 2 + src/project.rs | 12 +- src/serve_session.rs | 3 +- src/snapshot/metadata.rs | 30 +- ..._snapshot__tests__apply__add_property.snap | 4 +- ...s__apply__remove_property_after_patch.snap | 4 +- ...tests__apply__remove_property_initial.snap | 4 +- ...tests__apply__set_name_and_class_name.snap | 4 +- ...__snapshot__tests__compute__add_child.snap | 3 +- src/snapshot_middleware/lua.rs | 292 +++++++++++++++--- src/snapshot_middleware/mod.rs | 2 +- src/snapshot_middleware/project.rs | 10 +- ...t_middleware__csv__test__csv_from_vfs.snap | 3 +- ..._middleware__csv__test__csv_with_meta.snap | 3 +- ...t_middleware__dir__test__empty_folder.snap | 3 +- ...ddleware__dir__test__folder_in_folder.snap | 6 +- ...leware__json__test__instance_from_vfs.snap | 3 +- ...are__json_model__test__model_from_vfs.snap | 6 +- ...on_model__test__model_from_vfs_legacy.snap | 6 +- ...re__lua__test__class_client_from_vfs.snap} | 3 +- ...re__lua__test__class_module_from_vfs.snap} | 3 +- ...e__lua__test__class_module_with_meta.snap} | 3 +- ...re__lua__test__class_script_disabled.snap} | 5 +- ...e__lua__test__class_script_with_meta.snap} | 5 +- ...re__lua__test__class_server_from_vfs.snap} | 5 +- ...ware__lua__test__init_module_from_vfs.snap | 3 +- ...lua__test__runcontext_client_from_vfs.snap | 23 ++ ...lua__test__runcontext_module_from_vfs.snap | 21 ++ ...ua__test__runcontext_module_with_meta.snap | 21 ++ ...lua__test__runcontext_script_disabled.snap | 25 ++ ...ua__test__runcontext_script_with_meta.snap | 23 ++ ...lua__test__runcontext_server_from_vfs.snap | 23 ++ ...oject__test__project_from_direct_file.snap | 3 +- ...e__project__test__project_from_folder.snap | 3 +- ...test__project_path_property_overrides.snap | 3 +- ..._project__test__project_with_children.snap | 6 +- ...t__test__project_with_path_to_project.snap | 3 +- ...ct_with_path_to_project_with_children.snap | 6 +- ...oject__test__project_with_path_to_txt.snap | 3 +- ...est__project_with_resolved_properties.snap | 3 +- ...t__project_with_unresolved_properties.snap | 3 +- ...leware__toml__test__instance_from_vfs.snap | 3 +- ...dleware__txt__test__instance_from_vfs.snap | 3 +- src/snapshot_middleware/util.rs | 5 + tests/tests/build.rs | 1 + tests/tests/serve.rs | 22 +- 56 files changed, 602 insertions(+), 95 deletions(-) create mode 100644 rojo-test/build-test-snapshots/end_to_end__tests__build__nested_runcontext.snap create mode 100644 rojo-test/build-tests/nested_runcontext/default.project.json create mode 100644 rojo-test/build-tests/nested_runcontext/folder1/test.server.lua create mode 100644 rojo-test/build-tests/nested_runcontext/folder2/default.project.json create mode 100644 rojo-test/build-tests/nested_runcontext/folder2/folder3/test.server.lua rename src/snapshot_middleware/snapshots/{librojo__snapshot_middleware__lua__test__client_from_vfs.snap => librojo__snapshot_middleware__lua__test__class_client_from_vfs.snap} (90%) rename src/snapshot_middleware/snapshots/{librojo__snapshot_middleware__lua__test__module_from_vfs.snap => librojo__snapshot_middleware__lua__test__class_module_from_vfs.snap} (89%) rename src/snapshot_middleware/snapshots/{librojo__snapshot_middleware__lua__test__module_with_meta.snap => librojo__snapshot_middleware__lua__test__class_module_with_meta.snap} (89%) rename src/snapshot_middleware/snapshots/{librojo__snapshot_middleware__lua__test__script_disabled.snap => librojo__snapshot_middleware__lua__test__class_script_disabled.snap} (85%) rename src/snapshot_middleware/snapshots/{librojo__snapshot_middleware__lua__test__script_with_meta.snap => librojo__snapshot_middleware__lua__test__class_script_with_meta.snap} (84%) rename src/snapshot_middleware/snapshots/{librojo__snapshot_middleware__lua__test__server_from_vfs.snap => librojo__snapshot_middleware__lua__test__class_server_from_vfs.snap} (84%) create mode 100644 src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_client_from_vfs.snap create mode 100644 src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_module_from_vfs.snap create mode 100644 src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_module_with_meta.snap create mode 100644 src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_script_disabled.snap create mode 100644 src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_script_with_meta.snap create mode 100644 src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_server_from_vfs.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f26d92e..f6e171f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,12 @@ * Added support for `Terrain.MaterialColors` ([#770]) * Allow `Terrain` to be specified without a classname ([#771]) * Add Confirmation Behavior setting ([#774]) +* Added the `emitLegacyScripts` field to the project format ([#765]). The behavior is outlined below: + +| `emitLegacyScripts` Value | Action Taken by Rojo | +|----------------------------|--------------------------------------------------------------------------------------------------------------------| +| false | Rojo emits Scripts with the appropriate `RunContext` for `*.client.lua` and `*.server.lua` files in the project. | +| true (default) | Rojo emits LocalScripts and Scripts with legacy `RunContext` (same behavior as previously). | [#761]: https://github.com/rojo-rbx/rojo/pull/761 [#745]: https://github.com/rojo-rbx/rojo/pull/745 @@ -53,6 +59,7 @@ [#748]: https://github.com/rojo-rbx/rojo/pull/748 [#755]: https://github.com/rojo-rbx/rojo/pull/755 [#760]: https://github.com/rojo-rbx/rojo/pull/760 +[#765]: https://github.com/rojo-rbx/rojo/pull/765 [#770]: https://github.com/rojo-rbx/rojo/pull/770 [#771]: https://github.com/rojo-rbx/rojo/pull/771 [#774]: https://github.com/rojo-rbx/rojo/pull/774 diff --git a/rojo-test/build-test-snapshots/end_to_end__tests__build__nested_runcontext.snap b/rojo-test/build-test-snapshots/end_to_end__tests__build__nested_runcontext.snap new file mode 100644 index 00000000..0ddc3051 --- /dev/null +++ b/rojo-test/build-test-snapshots/end_to_end__tests__build__nested_runcontext.snap @@ -0,0 +1,35 @@ +--- +source: tests/tests/build.rs +expression: contents +--- + + + + nested_runcontext + + + + folder1 + + + + test + 1 + + + + + + + folder2 + + + + test + 0 + + + + + + diff --git a/rojo-test/build-test-snapshots/end_to_end__tests__build__script_meta_disabled.snap b/rojo-test/build-test-snapshots/end_to_end__tests__build__script_meta_disabled.snap index 0876056e..28354bd6 100644 --- a/rojo-test/build-test-snapshots/end_to_end__tests__build__script_meta_disabled.snap +++ b/rojo-test/build-test-snapshots/end_to_end__tests__build__script_meta_disabled.snap @@ -11,6 +11,7 @@ expression: contents hello true + 0 -- This script should be marked 'Disabled' diff --git a/rojo-test/build-test-snapshots/end_to_end__tests__build__server_in_folder.snap b/rojo-test/build-test-snapshots/end_to_end__tests__build__server_in_folder.snap index 282889d0..c9806d00 100644 --- a/rojo-test/build-test-snapshots/end_to_end__tests__build__server_in_folder.snap +++ b/rojo-test/build-test-snapshots/end_to_end__tests__build__server_in_folder.snap @@ -10,6 +10,7 @@ expression: contents serverScript + 0 -- This is a Lua server script diff --git a/rojo-test/build-test-snapshots/end_to_end__tests__build__server_init.snap b/rojo-test/build-test-snapshots/end_to_end__tests__build__server_init.snap index 070b7012..5858d5e0 100644 --- a/rojo-test/build-test-snapshots/end_to_end__tests__build__server_init.snap +++ b/rojo-test/build-test-snapshots/end_to_end__tests__build__server_init.snap @@ -6,6 +6,7 @@ expression: contents server_init + 0 return "From folder/init.server.lua" diff --git a/rojo-test/build-tests/nested_runcontext/default.project.json b/rojo-test/build-tests/nested_runcontext/default.project.json new file mode 100644 index 00000000..5327be9a --- /dev/null +++ b/rojo-test/build-tests/nested_runcontext/default.project.json @@ -0,0 +1,13 @@ +{ + "name": "nested_runcontext", + "emitLegacyScripts": false, + "tree": { + "$className": "Folder", + "folder1": { + "$path": "folder1" + }, + "folder2": { + "$path": "folder2" + } + } +} diff --git a/rojo-test/build-tests/nested_runcontext/folder1/test.server.lua b/rojo-test/build-tests/nested_runcontext/folder1/test.server.lua new file mode 100644 index 00000000..e69de29b diff --git a/rojo-test/build-tests/nested_runcontext/folder2/default.project.json b/rojo-test/build-tests/nested_runcontext/folder2/default.project.json new file mode 100644 index 00000000..67feff44 --- /dev/null +++ b/rojo-test/build-tests/nested_runcontext/folder2/default.project.json @@ -0,0 +1,7 @@ +{ + "name": "nested_runcontext", + "emitLegacyScripts": true, + "tree": { + "$path": "folder3" + } +} diff --git a/rojo-test/build-tests/nested_runcontext/folder2/folder3/test.server.lua b/rojo-test/build-tests/nested_runcontext/folder2/folder3/test.server.lua new file mode 100644 index 00000000..e69de29b diff --git a/rojo-test/serve-test-snapshots/end_to_end__tests__serve__scripts_all-2.snap b/rojo-test/serve-test-snapshots/end_to_end__tests__serve__scripts_all-2.snap index 78dcebea..49d8148b 100644 --- a/rojo-test/serve-test-snapshots/end_to_end__tests__serve__scripts_all-2.snap +++ b/rojo-test/serve-test-snapshots/end_to_end__tests__serve__scripts_all-2.snap @@ -24,6 +24,8 @@ instances: Name: bar Parent: id-2 Properties: + RunContext: + Enum: 0 Source: String: "-- Hello, from bar!" id-4: diff --git a/rojo-test/serve-test-snapshots/end_to_end__tests__serve__scripts_all.snap b/rojo-test/serve-test-snapshots/end_to_end__tests__serve__scripts_all.snap index 52efebac..62e5ceef 100644 --- a/rojo-test/serve-test-snapshots/end_to_end__tests__serve__scripts_all.snap +++ b/rojo-test/serve-test-snapshots/end_to_end__tests__serve__scripts_all.snap @@ -24,6 +24,8 @@ instances: Name: bar Parent: id-2 Properties: + RunContext: + Enum: 0 Source: String: "-- Hello, from bar!" id-4: diff --git a/src/project.rs b/src/project.rs index e70005d0..1a645b76 100644 --- a/src/project.rs +++ b/src/project.rs @@ -8,7 +8,9 @@ use std::{ use serde::{Deserialize, Serialize}; use thiserror::Error; -use crate::{glob::Glob, resolution::UnresolvedValue}; +use crate::{ + glob::Glob, resolution::UnresolvedValue, snapshot_middleware::emit_legacy_scripts_default, +}; static PROJECT_FILENAME: &str = "default.project.json"; @@ -73,6 +75,14 @@ pub struct Project { #[serde(skip_serializing_if = "Option::is_none")] pub serve_address: Option, + /// Determines if rojo should emit scripts with the appropriate `RunContext` for `*.client.lua` and `*.server.lua` files in the project. + /// Or, if rojo should keep the legacy behavior of emitting LocalScripts and Scripts with legacy Runcontext + #[serde( + default = "emit_legacy_scripts_default", + skip_serializing_if = "Option::is_none" + )] + pub emit_legacy_scripts: Option, + /// A list of globs, relative to the folder the project file is in, that /// match files that should be excluded if Rojo encounters them. #[serde(default, skip_serializing_if = "Vec::is_empty")] diff --git a/src/serve_session.rs b/src/serve_session.rs index 9dab5446..85ae7793 100644 --- a/src/serve_session.rs +++ b/src/serve_session.rs @@ -123,7 +123,8 @@ impl ServeSession { let root_id = tree.get_root_id(); - let instance_context = InstanceContext::default(); + let instance_context = + InstanceContext::with_emit_legacy_scripts(root_project.emit_legacy_scripts); log::trace!("Generating snapshot of instances from VFS"); let snapshot = snapshot_from_vfs(&instance_context, &vfs, start_path)?; diff --git a/src/snapshot/metadata.rs b/src/snapshot/metadata.rs index 192a0001..1a3273ed 100644 --- a/src/snapshot/metadata.rs +++ b/src/snapshot/metadata.rs @@ -6,7 +6,10 @@ use std::{ use serde::{Deserialize, Serialize}; -use crate::{glob::Glob, path_serializer, project::ProjectNode}; +use crate::{ + glob::Glob, path_serializer, project::ProjectNode, + snapshot_middleware::emit_legacy_scripts_default, +}; /// Rojo-specific metadata that can be associated with an instance or a snapshot /// of an instance. @@ -103,9 +106,26 @@ impl Default for InstanceMetadata { pub struct InstanceContext { #[serde(skip_serializing_if = "Vec::is_empty")] pub path_ignore_rules: Arc>, + pub emit_legacy_scripts: bool, } impl InstanceContext { + pub fn new() -> Self { + Self { + path_ignore_rules: Arc::new(Vec::new()), + emit_legacy_scripts: emit_legacy_scripts_default().unwrap(), + } + } + + pub fn with_emit_legacy_scripts(emit_legacy_scripts: Option) -> Self { + Self { + emit_legacy_scripts: emit_legacy_scripts + .or_else(emit_legacy_scripts_default) + .unwrap(), + ..Self::new() + } + } + /// Extend the list of ignore rules in the context with the given new rules. pub fn add_path_ignore_rules(&mut self, new_rules: I) where @@ -123,13 +143,15 @@ impl InstanceContext { let rules = Arc::make_mut(&mut self.path_ignore_rules); rules.extend(new_rules); } + + pub fn set_emit_legacy_scripts(&mut self, emit_legacy_scripts: bool) { + self.emit_legacy_scripts = emit_legacy_scripts; + } } impl Default for InstanceContext { fn default() -> Self { - InstanceContext { - path_ignore_rules: Arc::new(Vec::new()), - } + Self::new() } } diff --git a/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__add_property.snap b/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__add_property.snap index 9d5e9d77..0d594dbc 100644 --- a/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__add_property.snap +++ b/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__add_property.snap @@ -1,7 +1,6 @@ --- source: src/snapshot/tests/apply.rs expression: tree_view - --- id: id-1 name: ROOT @@ -12,6 +11,7 @@ properties: metadata: ignore_unknown_instances: false relevant_paths: [] - context: {} + context: + emit_legacy_scripts: true children: [] diff --git a/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__remove_property_after_patch.snap b/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__remove_property_after_patch.snap index f8706912..b6fcbbd0 100644 --- a/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__remove_property_after_patch.snap +++ b/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__remove_property_after_patch.snap @@ -9,5 +9,7 @@ properties: {} metadata: ignore_unknown_instances: false relevant_paths: [] - context: {} + context: + emit_legacy_scripts: true children: [] + diff --git a/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__remove_property_initial.snap b/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__remove_property_initial.snap index 936658f1..84b3c3d1 100644 --- a/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__remove_property_initial.snap +++ b/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__remove_property_initial.snap @@ -1,7 +1,6 @@ --- source: src/snapshot/tests/apply.rs expression: tree_view - --- id: id-1 name: ROOT @@ -12,6 +11,7 @@ properties: metadata: ignore_unknown_instances: false relevant_paths: [] - context: {} + context: + emit_legacy_scripts: true children: [] diff --git a/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__set_name_and_class_name.snap b/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__set_name_and_class_name.snap index 634b4d64..325c86f3 100644 --- a/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__set_name_and_class_name.snap +++ b/src/snapshot/tests/snapshots/librojo__snapshot__tests__apply__set_name_and_class_name.snap @@ -9,5 +9,7 @@ properties: {} metadata: ignore_unknown_instances: false relevant_paths: [] - context: {} + context: + emit_legacy_scripts: true children: [] + diff --git a/src/snapshot/tests/snapshots/librojo__snapshot__tests__compute__add_child.snap b/src/snapshot/tests/snapshots/librojo__snapshot__tests__compute__add_child.snap index c4695b7c..94ddf12f 100644 --- a/src/snapshot/tests/snapshots/librojo__snapshot__tests__compute__add_child.snap +++ b/src/snapshot/tests/snapshots/librojo__snapshot__tests__compute__add_child.snap @@ -10,7 +10,8 @@ added_instances: metadata: ignore_unknown_instances: false relevant_paths: [] - context: {} + context: + emit_legacy_scripts: true name: New class_name: Folder properties: {} diff --git a/src/snapshot_middleware/lua.rs b/src/snapshot_middleware/lua.rs index ba221626..1307b066 100644 --- a/src/snapshot_middleware/lua.rs +++ b/src/snapshot_middleware/lua.rs @@ -1,8 +1,8 @@ -use std::{path::Path, str}; +use std::{collections::HashMap, path::Path, str}; use anyhow::Context; -use maplit::hashmap; use memofs::{IoResultExt, Vfs}; +use rbx_dom_weak::types::Enum; use crate::snapshot::{InstanceContext, InstanceMetadata, InstanceSnapshot}; @@ -12,6 +12,13 @@ use super::{ util::match_trailing, }; +#[derive(Debug)] +enum ScriptType { + Server, + Client, + Module, +} + /// Core routine for turning Lua files into snapshots. pub fn snapshot_lua( context: &InstanceContext, @@ -20,36 +27,58 @@ pub fn snapshot_lua( ) -> anyhow::Result> { let file_name = path.file_name().unwrap().to_string_lossy(); - let (class_name, instance_name) = if let Some(name) = match_trailing(&file_name, ".server.lua") + let run_context_enums = &rbx_reflection_database::get() + .enums + .get("RunContext") + .expect("Unable to get RunContext enums!") + .items; + + let (script_type, instance_name) = if let Some(name) = match_trailing(&file_name, ".server.lua") { - ("Script", name) + (ScriptType::Server, name) } else if let Some(name) = match_trailing(&file_name, ".client.lua") { - ("LocalScript", name) + (ScriptType::Client, name) } else if let Some(name) = match_trailing(&file_name, ".lua") { - ("ModuleScript", name) + (ScriptType::Module, name) } else if let Some(name) = match_trailing(&file_name, ".server.luau") { - ("Script", name) + (ScriptType::Server, name) } else if let Some(name) = match_trailing(&file_name, ".client.luau") { - ("LocalScript", name) + (ScriptType::Client, name) } else if let Some(name) = match_trailing(&file_name, ".luau") { - ("ModuleScript", name) + (ScriptType::Module, name) } else { return Ok(None); }; + let (class_name, run_context) = match (context.emit_legacy_scripts, script_type) { + (false, ScriptType::Server) => ("Script", run_context_enums.get("Server")), + (false, ScriptType::Client) => ("Script", run_context_enums.get("Client")), + (true, ScriptType::Server) => ("Script", run_context_enums.get("Legacy")), + (true, ScriptType::Client) => ("LocalScript", None), + (_, ScriptType::Module) => ("ModuleScript", None), + }; + let contents = vfs.read(path)?; let contents_str = str::from_utf8(&contents) .with_context(|| format!("File was not valid UTF-8: {}", path.display()))? .to_owned(); + let mut properties = HashMap::with_capacity(2); + properties.insert("Source".to_owned(), contents_str.into()); + + if let Some(run_context) = run_context { + properties.insert( + "RunContext".to_owned(), + Enum::from_u32(run_context.to_owned()).into(), + ); + } + let meta_path = path.with_file_name(format!("{}.meta.json", instance_name)); let mut snapshot = InstanceSnapshot::new() .name(instance_name) .class_name(class_name) - .properties(hashmap! { - "Source".to_owned() => contents_str.into(), - }) + .properties(properties) .metadata( InstanceMetadata::new() .instigating_source(path) @@ -107,26 +136,53 @@ pub fn snapshot_lua_init( mod test { use super::*; + use maplit::hashmap; use memofs::{InMemoryFs, VfsSnapshot}; #[test] - fn module_from_vfs() { + fn class_module_from_vfs() { let mut imfs = InMemoryFs::new(); imfs.load_snapshot("/foo.lua", VfsSnapshot::file("Hello there!")) .unwrap(); let mut vfs = Vfs::new(imfs); - let instance_snapshot = - snapshot_lua(&InstanceContext::default(), &mut vfs, Path::new("/foo.lua")) - .unwrap() - .unwrap(); + let instance_snapshot = snapshot_lua( + &InstanceContext::with_emit_legacy_scripts(Some(true)), + &mut vfs, + Path::new("/foo.lua"), + ) + .unwrap() + .unwrap(); - insta::assert_yaml_snapshot!(instance_snapshot); + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); } #[test] - fn server_from_vfs() { + fn runcontext_module_from_vfs() { + let mut imfs = InMemoryFs::new(); + imfs.load_snapshot("/foo.lua", VfsSnapshot::file("Hello there!")) + .unwrap(); + + let mut vfs = Vfs::new(imfs); + + let instance_snapshot = snapshot_lua( + &InstanceContext::with_emit_legacy_scripts(Some(false)), + &mut vfs, + Path::new("/foo.lua"), + ) + .unwrap() + .unwrap(); + + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); + } + + #[test] + fn class_server_from_vfs() { let mut imfs = InMemoryFs::new(); imfs.load_snapshot("/foo.server.lua", VfsSnapshot::file("Hello there!")) .unwrap(); @@ -134,18 +190,41 @@ mod test { let mut vfs = Vfs::new(imfs); let instance_snapshot = snapshot_lua( - &InstanceContext::default(), + &InstanceContext::with_emit_legacy_scripts(Some(true)), &mut vfs, Path::new("/foo.server.lua"), ) .unwrap() .unwrap(); - insta::assert_yaml_snapshot!(instance_snapshot); + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); } #[test] - fn client_from_vfs() { + fn runcontext_server_from_vfs() { + let mut imfs = InMemoryFs::new(); + imfs.load_snapshot("/foo.server.lua", VfsSnapshot::file("Hello there!")) + .unwrap(); + + let mut vfs = Vfs::new(imfs); + + let instance_snapshot = snapshot_lua( + &InstanceContext::with_emit_legacy_scripts(Some(false)), + &mut vfs, + Path::new("/foo.server.lua"), + ) + .unwrap() + .unwrap(); + + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); + } + + #[test] + fn class_client_from_vfs() { let mut imfs = InMemoryFs::new(); imfs.load_snapshot("/foo.client.lua", VfsSnapshot::file("Hello there!")) .unwrap(); @@ -153,14 +232,37 @@ mod test { let mut vfs = Vfs::new(imfs); let instance_snapshot = snapshot_lua( - &InstanceContext::default(), + &InstanceContext::with_emit_legacy_scripts(Some(true)), &mut vfs, Path::new("/foo.client.lua"), ) .unwrap() .unwrap(); - insta::assert_yaml_snapshot!(instance_snapshot); + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); + } + + #[test] + fn runcontext_client_from_vfs() { + let mut imfs = InMemoryFs::new(); + imfs.load_snapshot("/foo.client.lua", VfsSnapshot::file("Hello there!")) + .unwrap(); + + let mut vfs = Vfs::new(imfs); + + let instance_snapshot = snapshot_lua( + &InstanceContext::with_emit_legacy_scripts(Some(false)), + &mut vfs, + Path::new("/foo.client.lua"), + ) + .unwrap() + .unwrap(); + + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); } #[ignore = "init.lua functionality has moved to the root snapshot function"] @@ -177,16 +279,21 @@ mod test { let mut vfs = Vfs::new(imfs); - let instance_snapshot = - snapshot_lua(&InstanceContext::default(), &mut vfs, Path::new("/root")) - .unwrap() - .unwrap(); + let instance_snapshot = snapshot_lua( + &InstanceContext::with_emit_legacy_scripts(Some(true)), + &mut vfs, + Path::new("/root"), + ) + .unwrap() + .unwrap(); - insta::assert_yaml_snapshot!(instance_snapshot); + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); } #[test] - fn module_with_meta() { + fn class_module_with_meta() { let mut imfs = InMemoryFs::new(); imfs.load_snapshot("/foo.lua", VfsSnapshot::file("Hello there!")) .unwrap(); @@ -204,16 +311,53 @@ mod test { let mut vfs = Vfs::new(imfs); - let instance_snapshot = - snapshot_lua(&InstanceContext::default(), &mut vfs, Path::new("/foo.lua")) - .unwrap() - .unwrap(); + let instance_snapshot = snapshot_lua( + &InstanceContext::with_emit_legacy_scripts(Some(true)), + &mut vfs, + Path::new("/foo.lua"), + ) + .unwrap() + .unwrap(); - insta::assert_yaml_snapshot!(instance_snapshot); + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); } #[test] - fn script_with_meta() { + fn runcontext_module_with_meta() { + let mut imfs = InMemoryFs::new(); + imfs.load_snapshot("/foo.lua", VfsSnapshot::file("Hello there!")) + .unwrap(); + imfs.load_snapshot( + "/foo.meta.json", + VfsSnapshot::file( + r#" + { + "ignoreUnknownInstances": true + } + "#, + ), + ) + .unwrap(); + + let mut vfs = Vfs::new(imfs); + + let instance_snapshot = snapshot_lua( + &InstanceContext::with_emit_legacy_scripts(Some(false)), + &mut vfs, + Path::new("/foo.lua"), + ) + .unwrap() + .unwrap(); + + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); + } + + #[test] + fn class_script_with_meta() { let mut imfs = InMemoryFs::new(); imfs.load_snapshot("/foo.server.lua", VfsSnapshot::file("Hello there!")) .unwrap(); @@ -232,18 +376,52 @@ mod test { let mut vfs = Vfs::new(imfs); let instance_snapshot = snapshot_lua( - &InstanceContext::default(), + &InstanceContext::with_emit_legacy_scripts(Some(true)), &mut vfs, Path::new("/foo.server.lua"), ) .unwrap() .unwrap(); - insta::assert_yaml_snapshot!(instance_snapshot); + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); } #[test] - fn script_disabled() { + fn runcontext_script_with_meta() { + let mut imfs = InMemoryFs::new(); + imfs.load_snapshot("/foo.server.lua", VfsSnapshot::file("Hello there!")) + .unwrap(); + imfs.load_snapshot( + "/foo.meta.json", + VfsSnapshot::file( + r#" + { + "ignoreUnknownInstances": true + } + "#, + ), + ) + .unwrap(); + + let mut vfs = Vfs::new(imfs); + + let instance_snapshot = snapshot_lua( + &InstanceContext::with_emit_legacy_scripts(Some(false)), + &mut vfs, + Path::new("/foo.server.lua"), + ) + .unwrap() + .unwrap(); + + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); + } + + #[test] + fn class_script_disabled() { let mut imfs = InMemoryFs::new(); imfs.load_snapshot("/bar.server.lua", VfsSnapshot::file("Hello there!")) .unwrap(); @@ -264,7 +442,41 @@ mod test { let mut vfs = Vfs::new(imfs); let instance_snapshot = snapshot_lua( - &InstanceContext::default(), + &InstanceContext::with_emit_legacy_scripts(Some(true)), + &mut vfs, + Path::new("/bar.server.lua"), + ) + .unwrap() + .unwrap(); + + insta::with_settings!({ sort_maps => true }, { + insta::assert_yaml_snapshot!(instance_snapshot); + }); + } + + #[test] + fn runcontext_script_disabled() { + let mut imfs = InMemoryFs::new(); + imfs.load_snapshot("/bar.server.lua", VfsSnapshot::file("Hello there!")) + .unwrap(); + imfs.load_snapshot( + "/bar.meta.json", + VfsSnapshot::file( + r#" + { + "properties": { + "Disabled": true + } + } + "#, + ), + ) + .unwrap(); + + let mut vfs = Vfs::new(imfs); + + let instance_snapshot = snapshot_lua( + &InstanceContext::with_emit_legacy_scripts(Some(false)), &mut vfs, Path::new("/bar.server.lua"), ) diff --git a/src/snapshot_middleware/mod.rs b/src/snapshot_middleware/mod.rs index c690a223..d8cd3940 100644 --- a/src/snapshot_middleware/mod.rs +++ b/src/snapshot_middleware/mod.rs @@ -38,7 +38,7 @@ use self::{ util::PathExt, }; -pub use self::project::snapshot_project_node; +pub use self::{project::snapshot_project_node, util::emit_legacy_scripts_default}; /// The main entrypoint to the snapshot function. This function can be pointed /// at any path and will return something if Rojo knows how to deal with it. diff --git a/src/snapshot_middleware/project.rs b/src/snapshot_middleware/project.rs index a451abc9..d1b4a2e4 100644 --- a/src/snapshot_middleware/project.rs +++ b/src/snapshot_middleware/project.rs @@ -12,7 +12,7 @@ use crate::{ }, }; -use super::snapshot_from_vfs; +use super::{emit_legacy_scripts_default, snapshot_from_vfs}; pub fn snapshot_project( context: &InstanceContext, @@ -30,6 +30,12 @@ pub fn snapshot_project( }); context.add_path_ignore_rules(rules); + context.set_emit_legacy_scripts( + project + .emit_legacy_scripts + .or_else(emit_legacy_scripts_default) + .unwrap(), + ); match snapshot_project_node(&context, path, &project.name, &project.tree, vfs, None)? { Some(found_snapshot) => { @@ -77,7 +83,7 @@ pub fn snapshot_project_node( let name = Cow::Owned(instance_name.to_owned()); let mut properties = HashMap::new(); let mut children = Vec::new(); - let mut metadata = InstanceMetadata::default(); + let mut metadata = InstanceMetadata::new().context(context); if let Some(path_node) = &node.path { let path = path_node.path(); diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__csv__test__csv_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__csv__test__csv_from_vfs.snap index 11a8d81c..50ce53c1 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__csv__test__csv_from_vfs.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__csv__test__csv_from_vfs.snap @@ -10,7 +10,8 @@ metadata: relevant_paths: - /foo.csv - /foo.meta.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: LocalizationTable properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__csv__test__csv_with_meta.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__csv__test__csv_with_meta.snap index eda82606..c91924f8 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__csv__test__csv_with_meta.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__csv__test__csv_with_meta.snap @@ -10,7 +10,8 @@ metadata: relevant_paths: - /foo.csv - /foo.meta.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: LocalizationTable properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__dir__test__empty_folder.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__dir__test__empty_folder.snap index e59da8db..4c0dcbbf 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__dir__test__empty_folder.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__dir__test__empty_folder.snap @@ -17,7 +17,8 @@ metadata: - /foo/init.client.lua - /foo/init.client.luau - /foo/init.csv - context: {} + context: + emit_legacy_scripts: true name: foo class_name: Folder properties: {} diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__dir__test__folder_in_folder.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__dir__test__folder_in_folder.snap index 8c2ee9cc..6238fe68 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__dir__test__folder_in_folder.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__dir__test__folder_in_folder.snap @@ -17,7 +17,8 @@ metadata: - /foo/init.client.lua - /foo/init.client.luau - /foo/init.csv - context: {} + context: + emit_legacy_scripts: true name: foo class_name: Folder properties: {} @@ -37,7 +38,8 @@ children: - /foo/Child/init.client.lua - /foo/Child/init.client.luau - /foo/Child/init.csv - context: {} + context: + emit_legacy_scripts: true name: Child class_name: Folder properties: {} diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json__test__instance_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json__test__instance_from_vfs.snap index b1cca7cb..9cc320eb 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json__test__instance_from_vfs.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json__test__instance_from_vfs.snap @@ -10,7 +10,8 @@ metadata: relevant_paths: - /foo.json - /foo.meta.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: ModuleScript properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json_model__test__model_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json_model__test__model_from_vfs.snap index 5d4db1fc..e3ee581e 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json_model__test__model_from_vfs.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json_model__test__model_from_vfs.snap @@ -9,7 +9,8 @@ metadata: Path: /foo.model.json relevant_paths: - /foo.model.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: IntValue properties: @@ -20,7 +21,8 @@ children: metadata: ignore_unknown_instances: false relevant_paths: [] - context: {} + context: + emit_legacy_scripts: true name: The Child class_name: StringValue properties: {} diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json_model__test__model_from_vfs_legacy.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json_model__test__model_from_vfs_legacy.snap index 5d4db1fc..e3ee581e 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json_model__test__model_from_vfs_legacy.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__json_model__test__model_from_vfs_legacy.snap @@ -9,7 +9,8 @@ metadata: Path: /foo.model.json relevant_paths: - /foo.model.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: IntValue properties: @@ -20,7 +21,8 @@ children: metadata: ignore_unknown_instances: false relevant_paths: [] - context: {} + context: + emit_legacy_scripts: true name: The Child class_name: StringValue properties: {} diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__client_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_client_from_vfs.snap similarity index 90% rename from src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__client_from_vfs.snap rename to src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_client_from_vfs.snap index 40b4bbe2..5f5f6e9a 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__client_from_vfs.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_client_from_vfs.snap @@ -10,7 +10,8 @@ metadata: relevant_paths: - /foo.client.lua - /foo.meta.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: LocalScript properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__module_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_module_from_vfs.snap similarity index 89% rename from src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__module_from_vfs.snap rename to src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_module_from_vfs.snap index 6877e9a9..de2471b9 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__module_from_vfs.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_module_from_vfs.snap @@ -10,7 +10,8 @@ metadata: relevant_paths: - /foo.lua - /foo.meta.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: ModuleScript properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__module_with_meta.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_module_with_meta.snap similarity index 89% rename from src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__module_with_meta.snap rename to src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_module_with_meta.snap index 8dcc57a9..32d70c70 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__module_with_meta.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_module_with_meta.snap @@ -10,7 +10,8 @@ metadata: relevant_paths: - /foo.lua - /foo.meta.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: ModuleScript properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__script_disabled.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_script_disabled.snap similarity index 85% rename from src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__script_disabled.snap rename to src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_script_disabled.snap index 3f040877..2c5546a5 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__script_disabled.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_script_disabled.snap @@ -10,12 +10,15 @@ metadata: relevant_paths: - /bar.server.lua - /bar.meta.json - context: {} + context: + emit_legacy_scripts: true name: bar class_name: Script properties: Disabled: Bool: true + RunContext: + Enum: 0 Source: String: Hello there! children: [] diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__script_with_meta.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_script_with_meta.snap similarity index 84% rename from src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__script_with_meta.snap rename to src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_script_with_meta.snap index 6bdd2a38..e4e31ff9 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__script_with_meta.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_script_with_meta.snap @@ -10,10 +10,13 @@ metadata: relevant_paths: - /foo.server.lua - /foo.meta.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: Script properties: + RunContext: + Enum: 0 Source: String: Hello there! children: [] diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__server_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_server_from_vfs.snap similarity index 84% rename from src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__server_from_vfs.snap rename to src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_server_from_vfs.snap index 63d33a0a..b70b9cc2 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__server_from_vfs.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__class_server_from_vfs.snap @@ -10,10 +10,13 @@ metadata: relevant_paths: - /foo.server.lua - /foo.meta.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: Script properties: + RunContext: + Enum: 0 Source: String: Hello there! children: [] diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__init_module_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__init_module_from_vfs.snap index 47340789..0077f4c0 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__init_module_from_vfs.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__init_module_from_vfs.snap @@ -13,7 +13,8 @@ metadata: - /root/init.lua - /root/init.server.lua - /root/init.client.lua - context: {} + context: + script_type: Class name: root class_name: ModuleScript properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_client_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_client_from_vfs.snap new file mode 100644 index 00000000..6ad72d08 --- /dev/null +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_client_from_vfs.snap @@ -0,0 +1,23 @@ +--- +source: src/snapshot_middleware/lua.rs +expression: instance_snapshot +--- +snapshot_id: "00000000000000000000000000000000" +metadata: + ignore_unknown_instances: false + instigating_source: + Path: /foo.client.lua + relevant_paths: + - /foo.client.lua + - /foo.meta.json + context: + emit_legacy_scripts: false +name: foo +class_name: Script +properties: + RunContext: + Enum: 2 + Source: + String: Hello there! +children: [] + diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_module_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_module_from_vfs.snap new file mode 100644 index 00000000..83be811b --- /dev/null +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_module_from_vfs.snap @@ -0,0 +1,21 @@ +--- +source: src/snapshot_middleware/lua.rs +expression: instance_snapshot +--- +snapshot_id: "00000000000000000000000000000000" +metadata: + ignore_unknown_instances: false + instigating_source: + Path: /foo.lua + relevant_paths: + - /foo.lua + - /foo.meta.json + context: + emit_legacy_scripts: false +name: foo +class_name: ModuleScript +properties: + Source: + String: Hello there! +children: [] + diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_module_with_meta.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_module_with_meta.snap new file mode 100644 index 00000000..98a88ec7 --- /dev/null +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_module_with_meta.snap @@ -0,0 +1,21 @@ +--- +source: src/snapshot_middleware/lua.rs +expression: instance_snapshot +--- +snapshot_id: "00000000000000000000000000000000" +metadata: + ignore_unknown_instances: true + instigating_source: + Path: /foo.lua + relevant_paths: + - /foo.lua + - /foo.meta.json + context: + emit_legacy_scripts: false +name: foo +class_name: ModuleScript +properties: + Source: + String: Hello there! +children: [] + diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_script_disabled.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_script_disabled.snap new file mode 100644 index 00000000..c47b83dc --- /dev/null +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_script_disabled.snap @@ -0,0 +1,25 @@ +--- +source: src/snapshot_middleware/lua.rs +expression: instance_snapshot +--- +snapshot_id: "00000000000000000000000000000000" +metadata: + ignore_unknown_instances: false + instigating_source: + Path: /bar.server.lua + relevant_paths: + - /bar.server.lua + - /bar.meta.json + context: + emit_legacy_scripts: false +name: bar +class_name: Script +properties: + Disabled: + Bool: true + RunContext: + Enum: 1 + Source: + String: Hello there! +children: [] + diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_script_with_meta.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_script_with_meta.snap new file mode 100644 index 00000000..72d24206 --- /dev/null +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_script_with_meta.snap @@ -0,0 +1,23 @@ +--- +source: src/snapshot_middleware/lua.rs +expression: instance_snapshot +--- +snapshot_id: "00000000000000000000000000000000" +metadata: + ignore_unknown_instances: true + instigating_source: + Path: /foo.server.lua + relevant_paths: + - /foo.server.lua + - /foo.meta.json + context: + emit_legacy_scripts: false +name: foo +class_name: Script +properties: + RunContext: + Enum: 1 + Source: + String: Hello there! +children: [] + diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_server_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_server_from_vfs.snap new file mode 100644 index 00000000..2b902f96 --- /dev/null +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__lua__test__runcontext_server_from_vfs.snap @@ -0,0 +1,23 @@ +--- +source: src/snapshot_middleware/lua.rs +expression: instance_snapshot +--- +snapshot_id: "00000000000000000000000000000000" +metadata: + ignore_unknown_instances: false + instigating_source: + Path: /foo.server.lua + relevant_paths: + - /foo.server.lua + - /foo.meta.json + context: + emit_legacy_scripts: false +name: foo +class_name: Script +properties: + RunContext: + Enum: 1 + Source: + String: Hello there! +children: [] + diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_from_direct_file.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_from_direct_file.snap index 795b14c1..bd5db23d 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_from_direct_file.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_from_direct_file.snap @@ -9,7 +9,8 @@ metadata: Path: /foo/hello.project.json relevant_paths: - /foo/hello.project.json - context: {} + context: + emit_legacy_scripts: true name: direct-project class_name: Model properties: {} diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_from_folder.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_from_folder.snap index d3a91f3c..87aead09 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_from_folder.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_from_folder.snap @@ -9,7 +9,8 @@ metadata: Path: /foo/default.project.json relevant_paths: - /foo/default.project.json - context: {} + context: + script_type: Class name: indirect-project class_name: Folder properties: {} diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_path_property_overrides.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_path_property_overrides.snap index 7427c9dc..77cb44c9 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_path_property_overrides.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_path_property_overrides.snap @@ -10,7 +10,8 @@ metadata: relevant_paths: - /foo/other.project.json - /foo/default.project.json - context: {} + context: + emit_legacy_scripts: true name: path-property-override class_name: StringValue properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_children.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_children.snap index b50eb1be..914a2f95 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_children.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_children.snap @@ -9,7 +9,8 @@ metadata: Path: /foo.project.json relevant_paths: - /foo.project.json - context: {} + context: + emit_legacy_scripts: true name: children class_name: Folder properties: {} @@ -24,7 +25,8 @@ children: - $className: Model - Folder relevant_paths: [] - context: {} + context: + emit_legacy_scripts: true name: Child class_name: Model properties: {} diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_project.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_project.snap index d64a46e7..02e6ee0b 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_project.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_project.snap @@ -10,7 +10,8 @@ metadata: relevant_paths: - /foo/other.project.json - /foo/default.project.json - context: {} + context: + emit_legacy_scripts: true name: path-project class_name: Model properties: {} diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_project_with_children.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_project_with_children.snap index 0ceb043a..baf64365 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_project_with_children.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_project_with_children.snap @@ -10,7 +10,8 @@ metadata: relevant_paths: - /foo/other.project.json - /foo/default.project.json - context: {} + context: + emit_legacy_scripts: true name: path-child-project class_name: Folder properties: {} @@ -25,7 +26,8 @@ children: - $className: Model - Folder relevant_paths: [] - context: {} + context: + emit_legacy_scripts: true name: SomeChild class_name: Model properties: {} diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_txt.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_txt.snap index 51a222f9..223c366c 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_txt.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_path_to_txt.snap @@ -11,7 +11,8 @@ metadata: - /foo/other.txt - /foo/other.meta.json - /foo/default.project.json - context: {} + context: + emit_legacy_scripts: true name: path-project class_name: StringValue properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_resolved_properties.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_resolved_properties.snap index 9b8e91ef..eddb4e04 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_resolved_properties.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_resolved_properties.snap @@ -9,7 +9,8 @@ metadata: Path: /foo.project.json relevant_paths: - /foo.project.json - context: {} + context: + emit_legacy_scripts: true name: resolved-properties class_name: StringValue properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_unresolved_properties.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_unresolved_properties.snap index a07300bb..8bd6e28b 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_unresolved_properties.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__project__test__project_with_unresolved_properties.snap @@ -9,7 +9,8 @@ metadata: Path: /foo.project.json relevant_paths: - /foo.project.json - context: {} + context: + emit_legacy_scripts: true name: unresolved-properties class_name: StringValue properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__toml__test__instance_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__toml__test__instance_from_vfs.snap index 3529bf89..329bdbcd 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__toml__test__instance_from_vfs.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__toml__test__instance_from_vfs.snap @@ -10,7 +10,8 @@ metadata: relevant_paths: - /foo.toml - /foo.meta.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: ModuleScript properties: diff --git a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__txt__test__instance_from_vfs.snap b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__txt__test__instance_from_vfs.snap index b8a8d4af..aa3e0f06 100644 --- a/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__txt__test__instance_from_vfs.snap +++ b/src/snapshot_middleware/snapshots/librojo__snapshot_middleware__txt__test__instance_from_vfs.snap @@ -10,7 +10,8 @@ metadata: relevant_paths: - /foo.txt - /foo.meta.json - context: {} + context: + emit_legacy_scripts: true name: foo class_name: StringValue properties: diff --git a/src/snapshot_middleware/util.rs b/src/snapshot_middleware/util.rs index 16648eae..625910b7 100644 --- a/src/snapshot_middleware/util.rs +++ b/src/snapshot_middleware/util.rs @@ -41,3 +41,8 @@ where .with_context(|| format!("Path did not end in {}: {}", suffix, path.display())) } } + +// TEMP function until rojo 8.0, when it can be replaced with bool::default (aka false) +pub fn emit_legacy_scripts_default() -> Option { + Some(true) +} diff --git a/tests/tests/build.rs b/tests/tests/build.rs index 4907449d..01e87da7 100644 --- a/tests/tests/build.rs +++ b/tests/tests/build.rs @@ -44,6 +44,7 @@ gen_build_tests! { json_model_legacy_name, module_in_folder, module_init, + nested_runcontext, optional, project_composed_default, project_composed_file, diff --git a/tests/tests/serve.rs b/tests/tests/serve.rs index 9cca9fac..d55d339b 100644 --- a/tests/tests/serve.rs +++ b/tests/tests/serve.rs @@ -1,6 +1,6 @@ use std::fs; -use insta::assert_yaml_snapshot; +use insta::{assert_yaml_snapshot, with_settings}; use tempfile::tempdir; use crate::rojo_test::{internable::InternAndRedact, serve_util::run_serve_test}; @@ -30,10 +30,12 @@ fn scripts() { assert_yaml_snapshot!("scripts_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); - assert_yaml_snapshot!( - "scripts_all", - read_response.intern_and_redact(&mut redactions, root_id) - ); + with_settings!({ sort_maps => true }, { + assert_yaml_snapshot!( + "scripts_all", + read_response.intern_and_redact(&mut redactions, root_id) + ); + }); fs::write(session.path().join("src/foo.lua"), "Updated foo!").unwrap(); @@ -44,10 +46,12 @@ fn scripts() { ); let read_response = session.get_api_read(root_id).unwrap(); - assert_yaml_snapshot!( - "scripts_all-2", - read_response.intern_and_redact(&mut redactions, root_id) - ); + with_settings!({ sort_maps => true }, { + assert_yaml_snapshot!( + "scripts_all-2", + read_response.intern_and_redact(&mut redactions, root_id) + ); + }); }); } From d7277b5a5b3e1c57709c3cdf0c920b9b84f9bd8c Mon Sep 17 00:00:00 2001 From: Kenneth Loeffler Date: Mon, 25 Sep 2023 16:13:01 -0700 Subject: [PATCH 3/6] Clean up changelog in preparation for Rojo 7.4.0 (#788) This PR aims to clean up the changelog in preparation for 7.4.0. We should focus on making changes clear to users with examples, removing any entries that they won't care about, and consolidating tightly related changes --------- Co-authored-by: boatbomber Co-authored-by: Micah <48431591+nezuo@users.noreply.github.com> --- CHANGELOG.md | 150 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 119 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6e171f1..fc90f866 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,42 +1,130 @@ # Rojo Changelog ## Unreleased Changes -* Internally for themes, we use `Color3.fromHex` now instead of custom-made solution ([#761]). -* On failing to open a file from Roblox Studio, it is now logged appropriately instead of being ignored ([#745]). -* Significantly improved performance of `rojo sourcemap`. ([#668]) +### Additions +#### Project format +* Added support for `.toml` files to `$path` ([#633]) +* Added support for `Font` and `CFrame` attributes ([rbx-dom#299], [rbx-dom#296]) +* Added the `emitLegacyScripts` field to the project format ([#765]). The behavior is outlined below: + + | `emitLegacyScripts` Value | Action Taken by Rojo | + |---------------------------|------------------------------------------------------------------------------------------------------------------| + | false | Rojo emits Scripts with the appropriate `RunContext` for `*.client.lua` and `*.server.lua` files in the project. | + | true (default) | Rojo emits LocalScripts and Scripts with legacy `RunContext` (same behavior as previously). | + + + It can be used like this: + ```json + { + "emitLegacyScripts": false, + "name": "MyCoolRunContextProject", + "tree": { + "$path": "src" + } + } + ``` + +* Added `Terrain` classname inference, similar to services ([#771]) + + `Terrain` may now be defined in projects without using `$className`: + ```json + "Workspace": { + "Terrain": { + "$path": "path/to/terrain.rbxm" + } + } + ``` + +* Added support for `Terrain.MaterialColors` ([#770]) + + `Terrain.MaterialColors` is now represented in projects in a human readable format: + ```json + "Workspace": { + "Terrain": { + "$path": "path/to/terrain.rbxm" + "$properties": { + "MaterialColors": { + "Grass": [10, 20, 30], + "Asphalt": [40, 50, 60], + "LeafyGrass": [255, 155, 55] + } + } + } + } + ``` + +* Added better support for `Font` properties ([#731]) + + `FontFace` properties may now be defined using implicit property syntax: + ```json + "TextBox": { + "$className": "TextBox", + "$properties": { + "FontFace": { + "family": "rbxasset://fonts/families/RobotoMono.json", + "weight": "Thin", + "style": "Normal" + } + } + } + ``` + +#### Patch visualizer and notifications +* Added a setting to control patch confirmation behavior ([#774]) + + This is a new setting for controlling when the Rojo plugin prompts for confirmation before syncing. It has four options: + * Initial (default): prompts only once for a project in a given Studio session + * Always: always prompts for confirmation + * Large Changes: only prompts when there are more than X changed instances. The number of instances is configurable - an additional setting for the number of instances becomes available when this option is chosen + * Unlisted PlaceId: only prompts if the place ID is not present in servePlaceIds + +* Added the ability to select Instances in patch visualizer ([#709]) + + Double-clicking an instance in the patch visualizer sets Roblox Studio's selection to the instance. + +* Added a sync reminder notification. ([#689]) + + Rojo detects if you have previously synced to a place, and displays a notification reminding you to sync again: + + ![Rojo reminds you to sync a place that you've synced previously](https://user-images.githubusercontent.com/40185666/242397435-ccdfddf2-a63f-420c-bc18-a6e3d6455bba.png) + +* Added rich Source diffs in patch visualizer ([#748]) + + A "View Diff" button for script sources is now present in the patch visualizer. Clicking it displays a side-by-side diff of the script changes: + + ![The patch visualizer contains a "view diff" button](https://user-images.githubusercontent.com/40185666/256065992-3f03558f-84b0-45a1-80eb-901f348cf067.png) + + ![The "View Diff" button opens a widget that displays a diff](https://user-images.githubusercontent.com/40185666/256066084-1d9d8fe8-7dad-4ee7-a542-b4aee35a5644.png) + +* Patch visualizer now indicates what changes failed to apply. ([#717]) + + A clickable warning label is displayed when the Rojo plugin is unable to apply changes. Clicking the label displays precise information about which changes failed: + + ![Patch visualizer displays a clickable warning label when changes fail to apply](https://user-images.githubusercontent.com/40185666/252063660-f08399ef-1e16-4f1c-bed8-552821f98cef.png) + + +#### Miscellaneous +* Added `plugin` flag to the `build` command that outputs to the local plugins folder ([#735]) + + This is a flag that builds a Rojo project into Roblox Studio's plugins directory. This allows you to build a Rojo project and load it into Studio as a plugin without having to type the full path to the plugins directory. It can be used like this: `rojo build --plugin ` + +* Added new plugin template to the `init` command ([#738]) + + This is a new template geared towards plugins. It is similar to the model template, but creates a `Script` instead of a `ModuleScript` in the `src` directory. It can be used like this: `rojo init --kind plugin` + +* Added protection against syncing non-place projects as a place. ([#691]) +* Add buttons for navigation on the Connected page ([#722]) + +### Fixes +* Significantly improved performance of `rojo sourcemap` ([#668]) * Fixed the diff visualizer of connected sessions. ([#674]) * Fixed disconnected session activity. ([#675]) * Skip confirming patches that contain only a datamodel name change. ([#688]) -* Added sync reminder notification. ([#689]) -* Added protection against syncing a model to a place. ([#691]) -* Select Instances from diff tree view ([#709]) * Fix Rojo breaking when users undo/redo in Studio ([#708]) -* Improved sync info text on Connected page. ([#692]) -* Fix patch visualizer breaking when instances are removed during sync ([#713]) -* Patch visualizer now indicates what changes failed to apply. ([#717]) -* Add buttons for navigation on the Connected page ([#722]) * Improve tooltip behavior ([#723]) * Better settings controls ([#725]) -* Rework patch visualizer with many fixes and improvements ([#726]) -* Added support for syncing in `.toml` files ([#633]) -* Add `plugin` flag to the `build` command that outputs to the local plugins folder ([#735]) -* Added better support for `Font` properties ([#731]) -* Add new plugin template to the `init` command ([#738]) -* Added rich Source diffs in patch visualizer ([#748]) -* Fix PatchTree performance issues ([#755]) -* Don't override the initial enabled state for source diffing ([#760]) -* Added support for `Terrain.MaterialColors` ([#770]) -* Allow `Terrain` to be specified without a classname ([#771]) -* Add Confirmation Behavior setting ([#774]) -* Added the `emitLegacyScripts` field to the project format ([#765]). The behavior is outlined below: +* Rework patch visualizer with many fixes and improvements ([#713], [#726], [#755]) -| `emitLegacyScripts` Value | Action Taken by Rojo | -|----------------------------|--------------------------------------------------------------------------------------------------------------------| -| false | Rojo emits Scripts with the appropriate `RunContext` for `*.client.lua` and `*.server.lua` files in the project. | -| true (default) | Rojo emits LocalScripts and Scripts with legacy `RunContext` (same behavior as previously). | - -[#761]: https://github.com/rojo-rbx/rojo/pull/761 -[#745]: https://github.com/rojo-rbx/rojo/pull/745 [#668]: https://github.com/rojo-rbx/rojo/pull/668 [#674]: https://github.com/rojo-rbx/rojo/pull/674 [#675]: https://github.com/rojo-rbx/rojo/pull/675 @@ -45,7 +133,6 @@ [#691]: https://github.com/rojo-rbx/rojo/pull/691 [#709]: https://github.com/rojo-rbx/rojo/pull/709 [#708]: https://github.com/rojo-rbx/rojo/pull/708 -[#692]: https://github.com/rojo-rbx/rojo/pull/692 [#713]: https://github.com/rojo-rbx/rojo/pull/713 [#717]: https://github.com/rojo-rbx/rojo/pull/717 [#722]: https://github.com/rojo-rbx/rojo/pull/722 @@ -58,11 +145,12 @@ [#738]: https://github.com/rojo-rbx/rojo/pull/738 [#748]: https://github.com/rojo-rbx/rojo/pull/748 [#755]: https://github.com/rojo-rbx/rojo/pull/755 -[#760]: https://github.com/rojo-rbx/rojo/pull/760 [#765]: https://github.com/rojo-rbx/rojo/pull/765 [#770]: https://github.com/rojo-rbx/rojo/pull/770 [#771]: https://github.com/rojo-rbx/rojo/pull/771 [#774]: https://github.com/rojo-rbx/rojo/pull/774 +[rbx-dom#299]: https://github.com/rojo-rbx/rbx-dom/pull/299 +[rbx-dom#296]: https://github.com/rojo-rbx/rbx-dom/pull/296 ## [7.3.0] - April 22, 2023 * Added `$attributes` to project format. ([#574]) From 3cafbf7f1ad5c4eb0f526238e71468eda4c617cb Mon Sep 17 00:00:00 2001 From: Kenneth Loeffler Date: Tue, 26 Sep 2023 15:41:33 -0700 Subject: [PATCH 4/6] Use PollWatcher in memofs StdBackend on macOS (#783) --- CHANGELOG.md | 2 ++ crates/memofs/CHANGELOG.md | 3 ++- crates/memofs/src/std_backend.rs | 17 ++++++++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc90f866..475adf57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -116,6 +116,7 @@ * Add buttons for navigation on the Connected page ([#722]) ### Fixes +* Significantly improved performance of `rojo serve` and `rojo build` on macOS. [#783] * Significantly improved performance of `rojo sourcemap` ([#668]) * Fixed the diff visualizer of connected sessions. ([#674]) * Fixed disconnected session activity. ([#675]) @@ -149,6 +150,7 @@ [#770]: https://github.com/rojo-rbx/rojo/pull/770 [#771]: https://github.com/rojo-rbx/rojo/pull/771 [#774]: https://github.com/rojo-rbx/rojo/pull/774 +[#783]: https://github.com/rojo-rbx/rojo/pull/783 [rbx-dom#299]: https://github.com/rojo-rbx/rbx-dom/pull/299 [rbx-dom#296]: https://github.com/rojo-rbx/rbx-dom/pull/296 diff --git a/crates/memofs/CHANGELOG.md b/crates/memofs/CHANGELOG.md index b49b2f0f..43516260 100644 --- a/crates/memofs/CHANGELOG.md +++ b/crates/memofs/CHANGELOG.md @@ -1,6 +1,7 @@ # memofs Changelog ## Unreleased Changes +* Changed the `StdBackend` file watcher to use `PollWatcher` on macOS. ## 0.2.0 (2021-08-23) * Updated to `crossbeam-channel` 0.5.1. @@ -15,4 +16,4 @@ * Improved error messages using the [fs-err](https://crates.io/crates/fs-err) crate. ## 0.1.0 (2020-03-10) -* Initial release \ No newline at end of file +* Initial release diff --git a/crates/memofs/src/std_backend.rs b/crates/memofs/src/std_backend.rs index c13ade0b..01a554a5 100644 --- a/crates/memofs/src/std_backend.rs +++ b/crates/memofs/src/std_backend.rs @@ -5,19 +5,34 @@ use std::thread; use std::time::Duration; use crossbeam_channel::Receiver; -use notify::{watcher, DebouncedEvent, RecommendedWatcher, RecursiveMode, Watcher}; +use notify::{DebouncedEvent, RecursiveMode, Watcher}; + +#[cfg(target_os = "macos")] +use notify::PollWatcher; +#[cfg(not(target_os = "macos"))] +use notify::{watcher, RecommendedWatcher}; use crate::{DirEntry, Metadata, ReadDir, VfsBackend, VfsEvent}; /// `VfsBackend` that uses `std::fs` and the `notify` crate. pub struct StdBackend { + // We use PollWatcher on macos because using the KQueue watcher + // can cause some gnarly performance problems. + #[cfg(target_os = "macos")] + watcher: PollWatcher, + #[cfg(not(target_os = "macos"))] watcher: RecommendedWatcher, + watcher_receiver: Receiver, } impl StdBackend { pub fn new() -> StdBackend { let (notify_tx, notify_rx) = mpsc::channel(); + + #[cfg(target_os = "macos")] + let watcher = PollWatcher::new(notify_tx, Duration::from_millis(50)).unwrap(); + #[cfg(not(target_os = "macos"))] let watcher = watcher(notify_tx, Duration::from_millis(50)).unwrap(); let (tx, rx) = crossbeam_channel::unbounded(); From eab7c607cd5f865c6c66b5e50aae85fc63479b42 Mon Sep 17 00:00:00 2001 From: Micah Date: Tue, 3 Oct 2023 07:22:47 -0700 Subject: [PATCH 5/6] Don't include package author in CLI help (#793) LPG is at the moment listed by name and email in the `help` for Rojo. We should probably remove that before cutting a new release. --- src/cli/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 36b32940..065128fb 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -25,7 +25,7 @@ pub use self::upload::UploadCommand; /// Command line options that Rojo accepts, defined using the clap crate. #[derive(Debug, Parser)] -#[clap(name = "Rojo", version, about, author)] +#[clap(name = "Rojo", version, about)] pub struct Options { #[clap(flatten)] pub global: GlobalOptions, From 010e50a25d1917f88f979af319849f0d01282c47 Mon Sep 17 00:00:00 2001 From: Micah Date: Tue, 3 Oct 2023 07:29:47 -0700 Subject: [PATCH 6/6] Add check to ensure plugin version matches cargo version (#794) This modifies Rojo's build script to throw a fit if we're building a plugin with a semver incompatible version. In the process, it moves the version of the plugin to a file named `Version.txt` that's parsed at runtime. This should be minimally invasive but it's technically worse for performance than the hardcoded table and string we had before. This feels better than a CI check or just manually verifying because it makes it physically impossible for us to forget since Rojo won't build with it being wrong. --- Cargo.lock | 5 ++-- Cargo.toml | 1 + build.rs | 15 +++++++++++ plugin/Version.txt | 1 + plugin/default.project.json | 50 +++++++++++++++++++------------------ plugin/src/Config.lua | 16 ++++++++++-- 6 files changed, 60 insertions(+), 28 deletions(-) create mode 100644 plugin/Version.txt diff --git a/Cargo.lock b/Cargo.lock index f106d61f..5f9c5b7c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1916,6 +1916,7 @@ dependencies = [ "ritz", "roblox_install", "rojo-insta-ext", + "semver", "serde", "serde_json", "serde_yaml", @@ -2034,9 +2035,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" [[package]] name = "serde" diff --git a/Cargo.toml b/Cargo.toml index 4c210934..a200ac85 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -102,6 +102,7 @@ anyhow = "1.0.44" bincode = "1.3.3" fs-err = "2.6.0" maplit = "1.0.2" +semver = "1.0.19" [dev-dependencies] rojo-insta-ext = { path = "crates/rojo-insta-ext" } diff --git a/build.rs b/build.rs index 8326fcdc..b82f9542 100644 --- a/build.rs +++ b/build.rs @@ -7,6 +7,7 @@ use fs_err as fs; use fs_err::File; use maplit::hashmap; use memofs::VfsSnapshot; +use semver::Version; fn snapshot_from_fs_path(path: &Path) -> io::Result { println!("cargo:rerun-if-changed={}", path.display()); @@ -43,6 +44,19 @@ fn main() -> Result<(), anyhow::Error> { let root_dir = env::var_os("CARGO_MANIFEST_DIR").unwrap(); let plugin_root = PathBuf::from(root_dir).join("plugin"); + let our_version = Version::parse(env::var_os("CARGO_PKG_VERSION").unwrap().to_str().unwrap())?; + let plugin_version = + Version::parse(fs::read_to_string(&plugin_root.join("Version.txt"))?.trim())?; + + assert!( + our_version.major == plugin_version.major, + "plugin version does not match Cargo version" + ); + assert!( + our_version.minor == plugin_version.minor, + "plugin version does not match Cargo version" + ); + let snapshot = VfsSnapshot::dir(hashmap! { "default.project.json" => snapshot_from_fs_path(&plugin_root.join("default.project.json"))?, "fmt" => snapshot_from_fs_path(&plugin_root.join("fmt"))?, @@ -51,6 +65,7 @@ fn main() -> Result<(), anyhow::Error> { "rbx_dom_lua" => snapshot_from_fs_path(&plugin_root.join("rbx_dom_lua"))?, "src" => snapshot_from_fs_path(&plugin_root.join("src"))?, "Packages" => snapshot_from_fs_path(&plugin_root.join("Packages"))?, + "Version.txt" => snapshot_from_fs_path(&plugin_root.join("Version.txt"))?, }); let out_path = Path::new(&out_dir).join("plugin.bincode"); diff --git a/plugin/Version.txt b/plugin/Version.txt new file mode 100644 index 00000000..8b23b8d4 --- /dev/null +++ b/plugin/Version.txt @@ -0,0 +1 @@ +7.3.0 \ No newline at end of file diff --git a/plugin/default.project.json b/plugin/default.project.json index 09234438..424f107e 100644 --- a/plugin/default.project.json +++ b/plugin/default.project.json @@ -1,25 +1,27 @@ { - "name": "Rojo", - "tree": { - "$className": "Folder", - "Plugin": { - "$path": "src" - }, - "Packages": { - "$path": "Packages", - - "Log": { - "$path": "log" - }, - "Http": { - "$path": "http" - }, - "Fmt": { - "$path": "fmt" - }, - "RbxDom": { - "$path": "rbx_dom_lua" - } - } - } -} + "name": "Rojo", + "tree": { + "$className": "Folder", + "Plugin": { + "$path": "src" + }, + "Packages": { + "$path": "Packages", + "Log": { + "$path": "log" + }, + "Http": { + "$path": "http" + }, + "Fmt": { + "$path": "fmt" + }, + "RbxDom": { + "$path": "rbx_dom_lua" + } + }, + "Version": { + "$path": "Version.txt" + } + } +} \ No newline at end of file diff --git a/plugin/src/Config.lua b/plugin/src/Config.lua index a2909f51..70eeccfa 100644 --- a/plugin/src/Config.lua +++ b/plugin/src/Config.lua @@ -2,11 +2,23 @@ local strict = require(script.Parent.strict) local isDevBuild = script.Parent.Parent:FindFirstChild("ROJO_DEV_BUILD") ~= nil +local Version = script.Parent.Parent.Version +local realVersion = Version.Value:split(".") + +for i = 1, 3 do + local num = tonumber(realVersion[i]) + if num then + realVersion[i] = num + else + error(("invalid version `%s` (field %d)"):format(realVersion[i], i)) + end +end + return strict("Config", { isDevBuild = isDevBuild, codename = "Epiphany", - version = { 7, 3, 0 }, - expectedServerVersionString = "7.2 or newer", + version = realVersion, + expectedServerVersionString = ("%d.%d or newer"):format(realVersion[1], realVersion[2]), protocolVersion = 4, defaultHost = "localhost", defaultPort = "34872",