windows: Improve file_finder to support match with unix style path (#12357)
Release Notes: - Improved file_finder to support match with Unix style path. Sometimes we may get the Unix style path string, for example the result of `git status`: ```bash $ git status On branch improve-file-finder-match-unix-paths Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: crates/file_finder/src/file_finder.rs ``` For example, from GitHub page: <img width="760" alt="image" src="https://github.com/zed-industries/zed/assets/5518/c6fe8d8a-839e-4eef-a162-43b1dde09593"> If we copy that path to file_finder, it will not match any files on Windows. ## Before <img width="699" alt="屏幕截图 2024-05-28 001037" src="https://github.com/zed-industries/zed/assets/5518/2d2d729e-7d27-421b-9a38-cfe4e53cc033"> ## After Use Unix style path: <img width="689" alt="屏幕截图 2024-05-28 001150" src="https://github.com/zed-industries/zed/assets/5518/e82dc8d6-bd6c-4b78-bd91-5b5210da73c4"> Use Windows style path: <img width="629" alt="屏幕截图 2024-05-28 001302" src="https://github.com/zed-industries/zed/assets/5518/4892019e-b2f4-41aa-bbf7-2f5f8af7aafa">
This commit is contained in:
parent
97abf35529
commit
d501a877a0
6 changed files with 79 additions and 38 deletions
|
@ -793,17 +793,18 @@ impl PickerDelegate for FileFinderDelegate {
|
|||
cx.notify();
|
||||
Task::ready(())
|
||||
} else {
|
||||
let query = PathLikeWithPosition::parse_str(raw_query, |path_like_str| {
|
||||
Ok::<_, std::convert::Infallible>(FileSearchQuery {
|
||||
raw_query: raw_query.to_owned(),
|
||||
file_query_end: if path_like_str == raw_query {
|
||||
None
|
||||
} else {
|
||||
Some(path_like_str.len())
|
||||
},
|
||||
let query =
|
||||
PathLikeWithPosition::parse_str(&raw_query, |normalized_query, path_like_str| {
|
||||
Ok::<_, std::convert::Infallible>(FileSearchQuery {
|
||||
raw_query: normalized_query.to_owned(),
|
||||
file_query_end: if path_like_str == raw_query {
|
||||
None
|
||||
} else {
|
||||
Some(path_like_str.len())
|
||||
},
|
||||
})
|
||||
})
|
||||
})
|
||||
.expect("infallible");
|
||||
.expect("infallible");
|
||||
|
||||
if Path::new(query.path_like.path_query()).is_absolute() {
|
||||
self.lookup_absolute_path(query, cx)
|
||||
|
|
|
@ -1855,9 +1855,9 @@ fn init_test(cx: &mut TestAppContext) -> Arc<AppState> {
|
|||
}
|
||||
|
||||
fn test_path_like(test_str: &str) -> PathLikeWithPosition<FileSearchQuery> {
|
||||
PathLikeWithPosition::parse_str(test_str, |path_like_str| {
|
||||
PathLikeWithPosition::parse_str(test_str, |normalized_query, path_like_str| {
|
||||
Ok::<_, std::convert::Infallible>(FileSearchQuery {
|
||||
raw_query: test_str.to_owned(),
|
||||
raw_query: normalized_query.to_owned(),
|
||||
file_query_end: if path_like_str == test_str {
|
||||
None
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue