Skip to content

Commit bc219eb

Browse files
committed
feat(config): warn on deprecated values
1 parent 6642036 commit bc219eb

3 files changed

Lines changed: 111 additions & 1 deletion

File tree

src/rcfile.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ use {
66
semver_group::{AnySemverGroup, SemverGroup},
77
version_group::{AnyVersionGroup, VersionGroup},
88
},
9+
log::warn,
910
serde::Deserialize,
11+
serde_json::Value,
1012
std::collections::HashMap,
1113
};
1214

@@ -133,6 +135,8 @@ pub struct Rcfile {
133135
pub strict: bool,
134136
#[serde(default)]
135137
pub version_groups: Vec<AnyVersionGroup>,
138+
#[serde(flatten)]
139+
pub unknown_fields: HashMap<String, Value>,
136140
}
137141

138142
impl Default for Rcfile {
@@ -142,6 +146,30 @@ impl Default for Rcfile {
142146
}
143147

144148
impl Rcfile {
149+
/// Log warnings for v13 config options that are no longer supported.
150+
pub fn warn_deprecated_v13_config(&self) {
151+
if self.unknown_fields.contains_key("dependencyTypes") {
152+
warn!("Config property 'dependencyTypes' is deprecated in v14.");
153+
warn!("Use CLI flag instead: --dependency-types prod,dev,peer");
154+
}
155+
if self.unknown_fields.contains_key("specifierTypes") {
156+
warn!("Config property 'specifierTypes' is deprecated in v14.");
157+
warn!("Use CLI flag instead: --specifier-types exact,range");
158+
}
159+
if self.unknown_fields.contains_key("lintFormatting") {
160+
warn!("Config property 'lintFormatting' is deprecated in v14.");
161+
warn!("Use 'syncpack format --check' to validate formatting.");
162+
}
163+
if self.unknown_fields.contains_key("lintSemverRanges") {
164+
warn!("Config property 'lintSemverRanges' is deprecated in v14.");
165+
warn!("Semver range checking is always enabled in 'syncpack lint'.");
166+
}
167+
if self.unknown_fields.contains_key("lintVersions") {
168+
warn!("Config property 'lintVersions' is deprecated in v14.");
169+
warn!("Version checking is always enabled in 'syncpack lint'.");
170+
}
171+
}
172+
145173
/// Create every alias defined in the rcfile.
146174
pub fn get_dependency_groups(&self, packages: &Packages, all_dependency_types: &[DependencyType]) -> Vec<GroupSelector> {
147175
self

src/rcfile/discovery.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ impl Rcfile {
3434
Rcfile::default()
3535
});
3636
debug!("Config discovery completed in {:?}", start.elapsed());
37+
rcfile.warn_deprecated_v13_config();
3738
rcfile
3839
}
3940

src/rcfile_test.rs

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::rcfile::Rcfile;
1+
use {crate::rcfile::Rcfile, serde_json::json};
22

33
#[test]
44
fn default_format_bugs_is_false() {
@@ -11,3 +11,84 @@ fn default_format_repository_is_false() {
1111
let rcfile = Rcfile::default();
1212
assert!(!rcfile.format_repository);
1313
}
14+
15+
#[test]
16+
fn detects_v13_dependency_types_in_config() {
17+
let config_json = json!({
18+
"dependencyTypes": ["prod", "dev"],
19+
"versionGroups": []
20+
});
21+
let rcfile: Rcfile = serde_json::from_value(config_json).unwrap();
22+
assert!(rcfile.unknown_fields.contains_key("dependencyTypes"));
23+
}
24+
25+
#[test]
26+
fn detects_v13_specifier_types_in_config() {
27+
let config_json = json!({
28+
"specifierTypes": ["exact", "range"],
29+
"versionGroups": []
30+
});
31+
let rcfile: Rcfile = serde_json::from_value(config_json).unwrap();
32+
assert!(rcfile.unknown_fields.contains_key("specifierTypes"));
33+
}
34+
35+
#[test]
36+
fn detects_v13_lint_formatting_in_config() {
37+
let config_json = json!({
38+
"lintFormatting": true,
39+
"versionGroups": []
40+
});
41+
let rcfile: Rcfile = serde_json::from_value(config_json).unwrap();
42+
assert!(rcfile.unknown_fields.contains_key("lintFormatting"));
43+
}
44+
45+
#[test]
46+
fn detects_v13_lint_semver_ranges_in_config() {
47+
let config_json = json!({
48+
"lintSemverRanges": true,
49+
"versionGroups": []
50+
});
51+
let rcfile: Rcfile = serde_json::from_value(config_json).unwrap();
52+
assert!(rcfile.unknown_fields.contains_key("lintSemverRanges"));
53+
}
54+
55+
#[test]
56+
fn detects_v13_lint_versions_in_config() {
57+
let config_json = json!({
58+
"lintVersions": true,
59+
"versionGroups": []
60+
});
61+
let rcfile: Rcfile = serde_json::from_value(config_json).unwrap();
62+
assert!(rcfile.unknown_fields.contains_key("lintVersions"));
63+
}
64+
65+
#[test]
66+
fn detects_multiple_v13_properties_in_config() {
67+
let config_json = json!({
68+
"dependencyTypes": ["prod", "dev"],
69+
"specifierTypes": ["exact"],
70+
"lintFormatting": true,
71+
"lintSemverRanges": false,
72+
"lintVersions": true,
73+
"versionGroups": []
74+
});
75+
let rcfile: Rcfile = serde_json::from_value(config_json).unwrap();
76+
assert_eq!(rcfile.unknown_fields.len(), 5);
77+
assert!(rcfile.unknown_fields.contains_key("dependencyTypes"));
78+
assert!(rcfile.unknown_fields.contains_key("specifierTypes"));
79+
assert!(rcfile.unknown_fields.contains_key("lintFormatting"));
80+
assert!(rcfile.unknown_fields.contains_key("lintSemverRanges"));
81+
assert!(rcfile.unknown_fields.contains_key("lintVersions"));
82+
}
83+
84+
#[test]
85+
fn valid_v14_config_has_no_unknown_fields() {
86+
let config_json = json!({
87+
"versionGroups": [],
88+
"semverGroups": [],
89+
"indent": " ",
90+
"source": ["packages/*/package.json"]
91+
});
92+
let rcfile: Rcfile = serde_json::from_value(config_json).unwrap();
93+
assert_eq!(rcfile.unknown_fields.len(), 0);
94+
}

0 commit comments

Comments
 (0)