From d58ed67fa467eefeeeb07302510626134293d689 Mon Sep 17 00:00:00 2001 From: Mike Date: Mon, 20 Mar 2023 12:29:54 -0700 Subject: [PATCH] add position to scene errors (#8065) # Objective - Fixes https://github.com/bevyengine/bevy/issues/6760 - adds line and position on line info to scene errors ```text Before: 2023-03-12T22:38:59.103220Z WARN bevy_asset::asset_server: encountered an error while loading an asset: Expected closing `)` After: 2023-03-12T22:38:59.103220Z WARN bevy_asset::asset_server: encountered an error while loading an asset: Expected closing `)` at scenes/test/scene.scn.ron:10:4 ``` ## Solution - use span_error to get position info. This is what the ron crate does internally to get the position info. https://github.com/ron-rs/ron/blob/562963f88733cae0e3ca2a128b590817f0346343/src/options.rs#L158 ## Changelog - added line numbers to scene errors --------- Co-authored-by: Paul Hansen --- crates/bevy_scene/src/scene_loader.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/crates/bevy_scene/src/scene_loader.rs b/crates/bevy_scene/src/scene_loader.rs index 2dea805f92..ed5c82443c 100644 --- a/crates/bevy_scene/src/scene_loader.rs +++ b/crates/bevy_scene/src/scene_loader.rs @@ -1,5 +1,5 @@ use crate::serde::SceneDeserializer; -use anyhow::Result; +use anyhow::{anyhow, Result}; use bevy_app::AppTypeRegistry; use bevy_asset::{AssetLoader, LoadContext, LoadedAsset}; use bevy_ecs::world::{FromWorld, World}; @@ -35,7 +35,17 @@ impl AssetLoader for SceneLoader { let scene_deserializer = SceneDeserializer { type_registry: &self.type_registry.read(), }; - let scene = scene_deserializer.deserialize(&mut deserializer)?; + let scene = scene_deserializer + .deserialize(&mut deserializer) + .map_err(|e| { + let span_error = deserializer.span_error(e); + anyhow!( + "{} at {}:{}", + span_error.code, + load_context.path().to_string_lossy(), + span_error.position, + ) + })?; load_context.set_default_asset(LoadedAsset::new(scene)); Ok(()) })