Author: Med Ismail Bennani Date: 2023-06-06T10:58:34-07:00 New Revision: e8966125e2812f08bf0f548bf576981025d44cbd
URL: https://github.com/llvm/llvm-project/commit/e8966125e2812f08bf0f548bf576981025d44cbd DIFF: https://github.com/llvm/llvm-project/commit/e8966125e2812f08bf0f548bf576981025d44cbd.diff LOG: [lldb/Commands] Fix disk completion from root directory This patch should fix path completion starting from the root directory. To do so, this patch adds a special case when setting the search directory when the completion buffer points to the root directory. Differential Revision: https://reviews.llvm.org/D152013 Signed-off-by: Med Ismail Bennani <ism...@bennani.ma> Added: Modified: lldb/source/Commands/CommandCompletions.cpp lldb/test/API/functionalities/completion/TestCompletion.py Removed: ################################################################################ diff --git a/lldb/source/Commands/CommandCompletions.cpp b/lldb/source/Commands/CommandCompletions.cpp index 1fe25d9655dc9..35237d419d469 100644 --- a/lldb/source/Commands/CommandCompletions.cpp +++ b/lldb/source/Commands/CommandCompletions.cpp @@ -381,6 +381,8 @@ static void DiskFilesOrDirectories(const llvm::Twine &partial_name, Storage.append(RemainderDir); } SearchDir = Storage; + } else if (CompletionBuffer == path::root_directory(CompletionBuffer)) { + SearchDir = CompletionBuffer; } else { SearchDir = path::parent_path(CompletionBuffer); } @@ -390,9 +392,11 @@ static void DiskFilesOrDirectories(const llvm::Twine &partial_name, PartialItem = path::filename(CompletionBuffer); // path::filename() will return "." when the passed path ends with a - // directory separator. We have to filter those out, but only when the - // "." doesn't come from the completion request itself. - if (PartialItem == "." && path::is_separator(CompletionBuffer.back())) + // directory separator or the separator when passed the disk root directory. + // We have to filter those out, but only when the "." doesn't come from the + // completion request itself. + if ((PartialItem == "." || PartialItem == path::get_separator()) && + path::is_separator(CompletionBuffer.back())) PartialItem = llvm::StringRef(); if (SearchDir.empty()) { diff --git a/lldb/test/API/functionalities/completion/TestCompletion.py b/lldb/test/API/functionalities/completion/TestCompletion.py index f25e1b408bbce..0cfd213177d6a 100644 --- a/lldb/test/API/functionalities/completion/TestCompletion.py +++ b/lldb/test/API/functionalities/completion/TestCompletion.py @@ -477,6 +477,19 @@ def test_custom_command_completion(self): self.complete_from_to("my_test_cmd main.cp", ["main.cpp"]) self.expect("my_test_cmd main.cpp", substrs=["main.cpp"]) + def test_completion_target_create_from_root_dir(self): + """Tests source file completion by completing .""" + root_dir = os.path.abspath(os.sep) + self.completions_contain( + "target create " + root_dir, + list( + filter( + lambda x: os.path.exists(x), + map(lambda x: root_dir + x + os.sep, os.listdir(root_dir)), + ) + ), + ) + def test_target_modules_load_aout(self): """Tests modules completion by completing the target modules load argument.""" self.build() _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits