Skip to content

Commit d40be62

Browse files
committed
make required parsing strict. only true/false
1 parent 45917e4 commit d40be62

File tree

2 files changed

+17
-30
lines changed

2 files changed

+17
-30
lines changed

contrib/tools/config-docs-generator/README.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,16 +139,15 @@ Provides TOML configuration examples.
139139

140140
#### `@required: <boolean>`
141141
Indicates whether the field is mandatory.
142-
- **Value Type**: Boolean (flexible parsing)
143-
- **Default**: `false` if annotation is omitted
142+
- **Value Type**: Boolean
143+
- **Default**: If annotation is omitted, the field is considered *not required*.
144144
- **Supported Values**:
145-
- `true`, `True`, `TRUE`, `yes`, `Yes`, `YES`, `1``true`
146-
- `false`, `False`, `FALSE`, `no`, `No`, `NO`, `0``false`
145+
- ``true`
146+
- `false`
147147
- Invalid values default to `false`
148148
- **Examples**:
149149
```rust
150150
/// @required: true
151-
/// @required: yes
152151
/// @required: false
153152
```
154153

contrib/tools/config-docs-generator/src/extract_docs.rs

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -460,19 +460,15 @@ fn parse_field_documentation(
460460

461461
// Parse @required: annotations
462462
if let Some(required_text) = extract_annotation(metadata_section, "required") {
463-
// Parse boolean value, handling common representations
464-
let required_bool = match required_text.trim().to_lowercase().as_str() {
463+
let required_bool = match required_text.trim() {
465464
"" => false, // Empty string defaults to false
466-
"true" | "yes" | "1" => true,
467-
"false" | "no" | "0" => false,
468-
_ => {
469-
// Default to false for invalid values, but could log a warning in the future
465+
text => text.parse::<bool>().unwrap_or_else(|_| {
470466
eprintln!(
471467
"Warning: Invalid @required value '{}' for field '{}', defaulting to false",
472-
required_text, field_name
468+
text, field_name
473469
);
474470
false
475-
}
471+
}),
476472
};
477473
required = Some(required_bool);
478474
}
@@ -2177,17 +2173,17 @@ and includes various formatting.
21772173
let result2 = parse_field_documentation(doc_text2, "field2").unwrap();
21782174
assert_eq!(result2.0.required, Some(false));
21792175

2180-
// Test "yes" variant
2176+
// Test "TRUE" variant
21812177
let doc_text3 = r#"Required field.
21822178
---
2183-
@required: yes"#;
2179+
@required: TRUE"#; // Needs to be lowercase, will default to false, but will log a warning
21842180
let result3 = parse_field_documentation(doc_text3, "field3").unwrap();
2185-
assert_eq!(result3.0.required, Some(true));
2181+
assert_eq!(result3.0.required, Some(false));
21862182

2187-
// Test "no" variant
2183+
// Test "FALSE" variant
21882184
let doc_text4 = r#"Optional field.
21892185
---
2190-
@required: no"#;
2186+
@required: FALSE"#; // Needs to be lowercase, will default to false, but will log a warning
21912187
let result4 = parse_field_documentation(doc_text4, "field4").unwrap();
21922188
assert_eq!(result4.0.required, Some(false));
21932189

@@ -2383,19 +2379,11 @@ and includes various formatting.
23832379
// Test all supported boolean representations for @required
23842380
let test_cases = vec![
23852381
("true", Some(true)),
2386-
("True", Some(true)),
2387-
("TRUE", Some(true)),
2388-
("yes", Some(true)),
2389-
("Yes", Some(true)),
2390-
("YES", Some(true)),
2391-
("1", Some(true)),
2382+
("True", Some(false)), // Need to be lowercase
2383+
("TRUE", Some(false)), // Need to be lowercase
23922384
("false", Some(false)),
2393-
("False", Some(false)),
2394-
("FALSE", Some(false)),
2395-
("no", Some(false)),
2396-
("No", Some(false)),
2397-
("NO", Some(false)),
2398-
("0", Some(false)),
2385+
("False", Some(false)), // Will default to false, but will log a warning
2386+
("FALSE", Some(false)), // Will default to false, but will log a warning
23992387
("maybe", Some(false)), // Invalid defaults to false
24002388
("invalid", Some(false)),
24012389
];

0 commit comments

Comments
 (0)