Skip to content

Commit fc96d5a

Browse files
committed
from review
1 parent f5a1438 commit fc96d5a

3 files changed

Lines changed: 25 additions & 19 deletions

File tree

crates/biome_json_analyze/src/lint/nursery/no_duplicate_dependencies.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ use biome_rowan::{AstNode, AstSeparatedList};
77
use biome_rule_options::no_duplicate_dependencies::NoDuplicateDependenciesOptions;
88
use rustc_hash::FxHashMap;
99

10+
use crate::utils::is_package_json;
11+
1012
declare_lint_rule! {
1113
/// Prevent the listing of duplicate dependencies.
1214
/// The rule supports the following dependency groups: "bundledDependencies", "bundleDependencies", "dependencies", "devDependencies", "overrides", "optionalDependencies", and "peerDependencies".
@@ -89,8 +91,6 @@ declare_lint_rule! {
8991
}
9092
}
9193

92-
const PACKAGE_JSON: &str = "package.json";
93-
9494
// dependencies <-> devDependencies / optionalDependencies / peerDependencies
9595
// peerDependencies <-> optionalDependencies
9696
const UNIQUE_PROPERTY_KEYS: [(&str, &[&str]); 2] = [
@@ -133,7 +133,7 @@ impl Rule for NoDuplicateDependencies {
133133
let value = query.value().ok()?;
134134
let object_value = value.as_json_object_value()?;
135135

136-
if !path.ends_with(PACKAGE_JSON) {
136+
if !is_package_json(path) {
137137
return None;
138138
}
139139

crates/biome_json_analyze/src/lint/nursery/use_required_scripts.rs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ use biome_json_syntax::JsonRoot;
44
use biome_rowan::{AstNode, AstSeparatedList};
55
use biome_rule_options::use_required_scripts::UseRequiredScriptsOptions;
66

7+
use crate::utils::is_package_json;
8+
79
declare_lint_rule! {
810
/// Enforce the presence of required scripts in package.json.
911
///
@@ -56,8 +58,6 @@ declare_lint_rule! {
5658
}
5759
}
5860

59-
const PACKAGE_JSON: &str = "package.json";
60-
6161
impl Rule for UseRequiredScripts {
6262
type Query = Ast<JsonRoot>;
6363
type State = Vec<String>;
@@ -69,7 +69,7 @@ impl Rule for UseRequiredScripts {
6969
let path = ctx.file_path();
7070
let options = ctx.options();
7171

72-
if !path.ends_with(PACKAGE_JSON) {
72+
if !is_package_json(path) {
7373
return None;
7474
}
7575
if options.required_scripts.is_empty() {
@@ -79,18 +79,15 @@ impl Rule for UseRequiredScripts {
7979
let value = query.value().ok()?;
8080
let object_value = value.as_json_object_value()?;
8181

82-
let scripts_member = object_value
83-
.json_member_list()
84-
.iter()
85-
.flatten()
86-
.find(|member| {
87-
if let Ok(name) = member.name()
88-
&& let Ok(text) = name.inner_string_text()
89-
{
90-
return text.text() == "scripts";
91-
}
92-
false
93-
})?;
82+
let scripts_member =
83+
object_value
84+
.json_member_list()
85+
.iter()
86+
.flatten()
87+
.find_map(|member| {
88+
(member.name().ok()?.inner_string_text().ok()?.text() == "scripts")
89+
.then_some(member)
90+
})?;
9491

9592
let scripts_value = scripts_member.value().ok()?;
9693
let scripts_object = scripts_value.as_json_object_value()?;
@@ -136,7 +133,7 @@ impl Rule for UseRequiredScripts {
136133

137134
Some(
138135
RuleDiagnostic::new(rule_category!(), ctx.query().range(), message).note(markup! {
139-
"Add the missing script"{{if missing_count > 1 { "s" } else { "" }}}" to your package.json."
136+
"Consistent scripts across packages ensure that each can be ran reliably from the root of our project. Add the missing script"{{if missing_count > 1 { "s" } else { "" }}}" to your package.json."
140137
}),
141138
)
142139
}

crates/biome_json_analyze/src/utils.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use biome_json_syntax::JsonMember;
22
use biome_rowan::AstNode;
3+
use std::path::Path;
34

45
/// Finds the first ancestor [JsonMember], and returns [true] if it's name matches the given input
56
pub(crate) fn matches_parent_object(node: &JsonMember, name: &str) -> bool {
@@ -11,3 +12,11 @@ pub(crate) fn matches_parent_object(node: &JsonMember, name: &str) -> bool {
1112
.and_then(|member| member.inner_string_text().ok())
1213
.is_some_and(|text| text.text() == name)
1314
}
15+
16+
/// Returns `true` if the given path has a filename of `package.json`.
17+
pub(crate) fn is_package_json(path: &Path) -> bool {
18+
match path.file_name() {
19+
Some(name) => name == "package.json",
20+
None => false,
21+
}
22+
}

0 commit comments

Comments
 (0)