|
1 | 1 | use crate::constants::{ |
2 | | - BOOLEAN_TYPE, DATE_TYPE, DECLARATION_DOMAIN_COMPONENTS, ENFORCED_CONTRACT, NEGATION_OPERATOR, |
3 | | - REFERENCE_KIND, SOURCE_REFERENCE_KIND, TIMESTAMP_TYPE, VIEW_MATERIALIZATION, |
| 2 | + DECLARATION_DOMAIN_COMPONENTS, ENFORCED_CONTRACT, NEGATION_OPERATOR, REFERENCE_KIND, |
| 3 | + SOURCE_REFERENCE_KIND, VIEW_MATERIALIZATION, |
4 | 4 | }; |
5 | 5 | use crate::models::{Declaration, EvaluateRequest, Fault, Model, RuleMetadata, RulesConfig}; |
6 | 6 | use crate::rules::_helpers::authored_literals::numeric_literal_tokens; |
7 | 7 | use crate::rules::_helpers::domain_layout::folder_layer_details; |
8 | | -use crate::rules::_helpers::{explicit_output_types, typed_contract_columns}; |
| 8 | +use crate::rules::_helpers::{contract_name_types, explicit_output_types, typed_contract_columns}; |
9 | 9 | use crate::rules::models::{ |
10 | 10 | FaultCollector, ModelEvaluationRequest, ProjectEvaluationRequest, ResolvedThresholdOverride, |
11 | 11 | }; |
@@ -182,7 +182,7 @@ fn evaluate_model_inner(request: ModelEvaluationRequest<'_>) -> Result<Vec<Fault |
182 | 182 | if let Some(rule) = metadata("SQBRCONTRACT105") { |
183 | 183 | explicit_output_types::evaluate(&parsed.query, parsed.model, rule, &faults); |
184 | 184 | } |
185 | | - evaluate_naming_rules(&parsed, selected, &faults); |
| 185 | + evaluate_naming_rules(&parsed, config, selected, &faults); |
186 | 186 | evaluate_literal_rules(&parsed, selected, &faults); |
187 | 187 | evaluate_test_rules(TestRuleEvaluation { |
188 | 188 | parsed: &parsed, |
@@ -1317,51 +1317,12 @@ fn contract_required(parsed: &ParsedModel<'_>, rule: &RuleMetadata, faults: &Fau |
1317 | 1317 |
|
1318 | 1318 | fn evaluate_naming_rules( |
1319 | 1319 | parsed: &ParsedModel<'_>, |
| 1320 | + config: &RulesConfig, |
1320 | 1321 | selected: &BTreeMap<String, &RuleMetadata>, |
1321 | 1322 | faults: &FaultCollector, |
1322 | 1323 | ) { |
1323 | 1324 | for column in &parsed.model.columns { |
1324 | | - let data_type = column.data_type.to_ascii_uppercase(); |
1325 | | - let rule_and_message = if column.name.starts_with("is_") |
1326 | | - || column.name.starts_with("has_") |
1327 | | - || column.name.starts_with("can_") |
1328 | | - { |
1329 | | - (data_type != BOOLEAN_TYPE).then(|| { |
1330 | | - ( |
1331 | | - "SQBRCONTRACT102", |
1332 | | - format!( |
1333 | | - "column {:?} implies BOOLEAN but is typed {data_type}", |
1334 | | - column.name |
1335 | | - ), |
1336 | | - ) |
1337 | | - }) |
1338 | | - } else if column.name.ends_with("_at") |
1339 | | - || column.name.ends_with("_ts") |
1340 | | - || column.name.ends_with("_timestamp") |
1341 | | - { |
1342 | | - (!data_type.contains(TIMESTAMP_TYPE)).then(|| { |
1343 | | - ( |
1344 | | - "SQBRCONTRACT103", |
1345 | | - format!( |
1346 | | - "column {:?} implies a timestamp but is typed {data_type}", |
1347 | | - column.name |
1348 | | - ), |
1349 | | - ) |
1350 | | - }) |
1351 | | - } else if column.name.ends_with("_date") { |
1352 | | - (data_type != DATE_TYPE).then(|| { |
1353 | | - ( |
1354 | | - "SQBRCONTRACT104", |
1355 | | - format!( |
1356 | | - "column {:?} implies DATE but is typed {data_type}", |
1357 | | - column.name |
1358 | | - ), |
1359 | | - ) |
1360 | | - }) |
1361 | | - } else { |
1362 | | - None |
1363 | | - }; |
1364 | | - if let Some((code, message)) = rule_and_message |
| 1325 | + if let Some((code, message)) = contract_name_types::finding(column, config) |
1365 | 1326 | && let Some(rule) = selected.get(code) |
1366 | 1327 | { |
1367 | 1328 | faults.push(custom_fault!(parsed.model, rule, None, message, None)); |
|
0 commit comments