diff --git a/rojo-test/build-test-snapshots/end_to_end__tests__build__model_json_name_input.snap b/rojo-test/build-test-snapshots/end_to_end__tests__build__model_json_name_input.snap new file mode 100644 index 00000000..018fcd34 --- /dev/null +++ b/rojo-test/build-test-snapshots/end_to_end__tests__build__model_json_name_input.snap @@ -0,0 +1,23 @@ +--- +source: tests/tests/build.rs +assertion_line: 109 +expression: contents +--- + + + + model_json_name_input + + + + Workspace + false + + + + /Bar + + + + + diff --git a/rojo-test/build-tests/model_json_name_input/default.project.json b/rojo-test/build-tests/model_json_name_input/default.project.json new file mode 100644 index 00000000..6c01ae9e --- /dev/null +++ b/rojo-test/build-tests/model_json_name_input/default.project.json @@ -0,0 +1,11 @@ +{ + "name": "model_json_name_input", + "tree": { + "$className": "DataModel", + "Workspace": { + "$className": "Workspace", + "$path": "src" + } + } +} + diff --git a/rojo-test/build-tests/model_json_name_input/src/Bar.model.json b/rojo-test/build-tests/model_json_name_input/src/Bar.model.json new file mode 100644 index 00000000..4fef832e --- /dev/null +++ b/rojo-test/build-tests/model_json_name_input/src/Bar.model.json @@ -0,0 +1,5 @@ +{ + "name": "/Bar", + "className": "StringValue" +} + diff --git a/rojo-test/syncback-test-snapshots/end_to_end__rojo_test__syncback_util__model_json_name-stdout.snap b/rojo-test/syncback-test-snapshots/end_to_end__rojo_test__syncback_util__model_json_name-stdout.snap new file mode 100644 index 00000000..c8e32ca7 --- /dev/null +++ b/rojo-test/syncback-test-snapshots/end_to_end__rojo_test__syncback_util__model_json_name-stdout.snap @@ -0,0 +1,6 @@ +--- +source: tests/rojo_test/syncback_util.rs +assertion_line: 101 +expression: "String::from_utf8_lossy(&output.stdout)" +--- + diff --git a/rojo-test/syncback-test-snapshots/end_to_end__tests__syncback__model_json_name-src__foo.model.json.snap b/rojo-test/syncback-test-snapshots/end_to_end__tests__syncback__model_json_name-src__foo.model.json.snap new file mode 100644 index 00000000..ad4017dd --- /dev/null +++ b/rojo-test/syncback-test-snapshots/end_to_end__tests__syncback__model_json_name-src__foo.model.json.snap @@ -0,0 +1,9 @@ +--- +source: tests/tests/syncback.rs +assertion_line: 31 +expression: src/foo.model.json +--- +{ + "name": "/Bar", + "className": "StringValue" +} diff --git a/rojo-test/syncback-tests/model_json_name/input-project/default.project.json b/rojo-test/syncback-tests/model_json_name/input-project/default.project.json new file mode 100644 index 00000000..8eaa84a8 --- /dev/null +++ b/rojo-test/syncback-tests/model_json_name/input-project/default.project.json @@ -0,0 +1,11 @@ +{ + "name": "model_json_name", + "tree": { + "$className": "DataModel", + "Workspace": { + "$className": "Workspace", + "$path": "src" + } + } +} + diff --git a/rojo-test/syncback-tests/model_json_name/input-project/src/foo.model.json b/rojo-test/syncback-tests/model_json_name/input-project/src/foo.model.json new file mode 100644 index 00000000..4fef832e --- /dev/null +++ b/rojo-test/syncback-tests/model_json_name/input-project/src/foo.model.json @@ -0,0 +1,5 @@ +{ + "name": "/Bar", + "className": "StringValue" +} + diff --git a/rojo-test/syncback-tests/model_json_name/input.rbxl b/rojo-test/syncback-tests/model_json_name/input.rbxl new file mode 100644 index 00000000..9c8f1510 Binary files /dev/null and b/rojo-test/syncback-tests/model_json_name/input.rbxl differ diff --git a/src/snapshot_middleware/json_model.rs b/src/snapshot_middleware/json_model.rs index 185ab9ee..e7b929b5 100644 --- a/src/snapshot_middleware/json_model.rs +++ b/src/snapshot_middleware/json_model.rs @@ -35,19 +35,12 @@ pub fn snapshot_json_model( format!("File is not a valid JSON model: {}", path.display()) })?; - if let Some(top_level_name) = &instance.name { - let new_name = format!("{}.model.json", top_level_name); + // If the JSON has a name property, preserve it in metadata for syncback + let specified_name = instance.name.clone(); - log::warn!( - "Model at path {} had a top-level Name field. \ - This field has been ignored since Rojo 6.0.\n\ - Consider removing this field and renaming the file to {}.", - new_name, - path.display() - ); - } - - instance.name = Some(name.to_owned()); + // Use the name from JSON if present, otherwise fall back to filename-derived name + let instance_name = specified_name.clone().unwrap_or_else(|| name.to_owned()); + instance.name = Some(instance_name); let id = instance.id.take().map(RojoRef::new); let schema = instance.schema.take(); @@ -62,7 +55,8 @@ pub fn snapshot_json_model( .relevant_paths(vec![path.to_path_buf()]) .context(context) .specified_id(id) - .schema(schema); + .schema(schema) + .specified_name(specified_name); Ok(Some(snapshot)) } diff --git a/tests/tests/build.rs b/tests/tests/build.rs index db3cdcc8..8776d7ef 100644 --- a/tests/tests/build.rs +++ b/tests/tests/build.rs @@ -56,6 +56,7 @@ gen_build_tests! { server_in_folder, server_init, slugified_name_roundtrip, + model_json_name_input, txt, txt_in_folder, unresolved_values, diff --git a/tests/tests/syncback.rs b/tests/tests/syncback.rs index c21824ce..e2b1f6f5 100644 --- a/tests/tests/syncback.rs +++ b/tests/tests/syncback.rs @@ -89,4 +89,6 @@ syncback_tests! { // Ensures that instances with names containing illegal characters get slugified filenames // and preserve their original names in meta.json slugified_name => ["src/_Script/init.meta.json", "src/_Script/init.server.luau", "src/_Folder/init.meta.json"], + // Ensures that .model.json files preserve the name property + model_json_name => ["src/foo.model.json"], }