Skip to content

Commit b2976c1

Browse files
authored
Update Java root markers (#1091)
Update root markers for Java
1 parent a802ef2 commit b2976c1

File tree

1 file changed

+26
-20
lines changed

1 file changed

+26
-20
lines changed

src/utils.rs

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -47,31 +47,33 @@ pub fn get_root_path<'a>(
4747
}
4848

4949
match language_id {
50-
"rust" => traverse_up(path, |dir| dir.join("Cargo.toml").exists()),
51-
"php" => traverse_up(path, |dir| dir.join("composer.json").exists()),
50+
"rust" => traverse_up(path, dir_has_one(&["Cargo.toml"])),
51+
"php" => traverse_up(path, dir_has_one(&["composer.json"])),
5252
"javascript" | "typescript" | "javascript.jsx" | "typescript.tsx" => {
53-
traverse_up(path, |dir| dir.join("package.json").exists())
53+
traverse_up(path, dir_has_one(&["package.json"]))
5454
}
55-
"python" => traverse_up(path, |dir| {
56-
dir.join("setup.py").exists()
57-
|| dir.join("Pipfile").exists()
58-
|| dir.join("requirements.txt").exists()
59-
|| dir.join("pyproject.toml").exists()
60-
}),
61-
"c" | "cpp" => traverse_up(path, |dir| dir.join("compile_commands.json").exists()),
55+
"python" => traverse_up(
56+
path,
57+
dir_has_one(&["setup.py", "Pipfile", "requirements.txt", "pyproject.toml"]),
58+
),
59+
"c" | "cpp" => traverse_up(path, dir_has_one(&["compile_commands.json"])),
6260
"cs" => traverse_up(path, is_dotnet_root),
63-
"java" => traverse_up(path, |dir| {
64-
dir.join(".project").exists()
65-
|| dir.join("pom.xml").exists()
66-
|| dir.join("build.gradle").exists()
67-
}),
68-
"scala" => traverse_up(path, |dir| dir.join("build.sbt").exists()),
69-
"haskell" => traverse_up(path, |dir| dir.join("stack.yaml").exists()).or_else(|_| {
61+
"java" => traverse_up(
62+
path,
63+
dir_has_one(&[
64+
"pom.xml",
65+
"settings.gradle",
66+
"settings.gradle.kts",
67+
"WORKSPACE",
68+
]),
69+
),
70+
"scala" => traverse_up(path, dir_has_one(&["build.sbt"])),
71+
"haskell" => traverse_up(path, dir_has_one(&["stack.yaml"])).or_else(|_| {
7072
traverse_up(path, |dir| {
7173
dir_contains_file(dir, |f| has_extension(f, "cabal"))
7274
})
7375
}),
74-
"go" => traverse_up(path, |dir| dir.join("go.mod").exists()),
76+
"go" => traverse_up(path, dir_has_one(&["go.mod"])),
7577
_ => Err(anyhow!("Unknown languageId: {}", language_id)),
7678
}
7779
.or_else(|_| {
@@ -91,6 +93,10 @@ pub fn get_root_path<'a>(
9193
})
9294
}
9395

96+
fn dir_has_one<'a>(files: &'a [&str]) -> impl Fn(&'a Path) -> bool {
97+
move |dir| files.iter().any(|file| dir.join(file).exists())
98+
}
99+
94100
/// If iterating the directory fails (e.g. because it is not a directory), returns false; if a
95101
/// file cannot be inspected, that file is considered nonexistent.
96102
fn dir_contains_file<F>(path: &Path, predicate: F) -> bool
@@ -117,9 +123,9 @@ fn has_extension(path: &Path, ext: &str) -> bool {
117123
}
118124
}
119125

120-
fn traverse_up<F>(path: &Path, predicate: F) -> Result<&Path>
126+
fn traverse_up<'a, F>(path: &'a Path, predicate: F) -> Result<&'a Path>
121127
where
122-
F: Fn(&Path) -> bool,
128+
F: Fn(&'a Path) -> bool,
123129
{
124130
if predicate(path) {
125131
return Ok(path);

0 commit comments

Comments
 (0)