diff --git a/.changes/unreleased/Fixes-20250713-042047.yaml b/.changes/unreleased/Fixes-20250713-042047.yaml new file mode 100644 index 00000000..c8e44706 --- /dev/null +++ b/.changes/unreleased/Fixes-20250713-042047.yaml @@ -0,0 +1,3 @@ +kind: Fixes +body: Fix misleading warning when evaluating Jinja in dbt_project.yml fails +time: 2025-07-13T04:20:47.898266+02:00 diff --git a/crates/dbt-parser/src/dbt_project_config.rs b/crates/dbt-parser/src/dbt_project_config.rs index d9beb047..bac80a97 100644 --- a/crates/dbt-parser/src/dbt_project_config.rs +++ b/crates/dbt-parser/src/dbt_project_config.rs @@ -7,15 +7,13 @@ use std::{ path::{Path, PathBuf}, }; -use dbt_common::{ - ErrorCode, FsResult, fs_err, io_args::IoArgs, show_error, show_warning_soon_to_be_error, -}; +use dbt_common::{ErrorCode, FsResult, fs_err, io_args::IoArgs, show_error}; use dbt_schemas::schemas::project::{ DataTestConfig, DefaultTo, ExposureConfig, IterChildren, ModelConfig, SeedConfig, SnapshotConfig, SourceConfig, UnitTestConfig, }; use dbt_schemas::schemas::{common::DbtQuoting, project::DbtProject}; -use dbt_serde_yaml::ShouldBe; +use dbt_serde_yaml::{ShouldBe, WhyNot}; /// Used to deserialize the top-level `dbt_project.yml` configuration /// for `models`, `data_tests`, `seeds` etc.. @@ -149,23 +147,17 @@ pub fn recur_build_dbt_project_config, S: Into + IterChildren }; let child_config_variant = match maybe_child_config_variant { ShouldBe::AndIs(config) => config, - ShouldBe::ButIsnt { raw, .. } => { - let trimmed_key = key.trim(); - let suggestion = if !trimmed_key.starts_with("+") { - format!(" Try '+{trimmed_key}' instead.") - } else { - "".to_string() + ShouldBe::ButIsnt { raw, why_not } => { + let error_msg = match why_not { + WhyNot::Custom(message) => message, + WhyNot::Original(error) => &error.display_no_mark().to_string(), }; let err = fs_err!( - code => ErrorCode::UnusedConfigKey, + code => ErrorCode::SerializationError, loc => raw.as_ref().map(|r| r.span()).unwrap_or_default(), - "Ignored unexpected key '{trimmed_key}'.{suggestion} YAML path: '{key_path}'." + "Failed to parse `{key_path}`: {error_msg}" ); - if std::env::var("_DBT_FUSION_STRICT_MODE").is_ok() { - show_error!(io, err); - } else { - show_warning_soon_to_be_error!(io, err); - } + show_error!(io, err); continue; } };