[clang] ae59131 - [clang][Tooling] Make the filename behaviour consistent
Kadir Cetinkaya via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 15 01:52:51 PST 2022
Author: Kadir Cetinkaya
Date: 2022-11-15T10:47:52+01:00
New Revision: ae59131d3ef311fb4b1e50627c6457be00e60dc9
URL: https://github.com/llvm/llvm-project/commit/ae59131d3ef311fb4b1e50627c6457be00e60dc9
DIFF: https://github.com/llvm/llvm-project/commit/ae59131d3ef311fb4b1e50627c6457be00e60dc9.diff
LOG: [clang][Tooling] Make the filename behaviour consistent
Dotdots were removed only when converting a relative path to absolute
one. This patch makes the behaviour consistent for absolute file paths by
removing them in that case as well. Also updates the documentation to mention
the behaviour.
Fixes https://github.com/clangd/clangd/issues/1317
Differential Revision: https://reviews.llvm.org/D137962
Added:
Modified:
clang/lib/Tooling/JSONCompilationDatabase.cpp
clang/unittests/Tooling/CompilationDatabaseTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Tooling/JSONCompilationDatabase.cpp b/clang/lib/Tooling/JSONCompilationDatabase.cpp
index 5e18d7a576c08..158b9a5473eac 100644
--- a/clang/lib/Tooling/JSONCompilationDatabase.cpp
+++ b/clang/lib/Tooling/JSONCompilationDatabase.cpp
@@ -419,14 +419,13 @@ bool JSONCompilationDatabase::parse(std::string &ErrorMessage) {
SmallString<128> NativeFilePath;
if (llvm::sys::path::is_relative(FileName)) {
SmallString<8> DirectoryStorage;
- SmallString<128> AbsolutePath(
- Directory->getValue(DirectoryStorage));
+ SmallString<128> AbsolutePath(Directory->getValue(DirectoryStorage));
llvm::sys::path::append(AbsolutePath, FileName);
- llvm::sys::path::remove_dots(AbsolutePath, /*remove_dot_dot=*/ true);
llvm::sys::path::native(AbsolutePath, NativeFilePath);
} else {
llvm::sys::path::native(FileName, NativeFilePath);
}
+ llvm::sys::path::remove_dots(NativeFilePath, /*remove_dot_dot=*/true);
auto Cmd = CompileCommandRef(Directory, File, *Command, Output);
IndexByFile[NativeFilePath].push_back(Cmd);
AllCommands.push_back(Cmd);
diff --git a/clang/unittests/Tooling/CompilationDatabaseTest.cpp b/clang/unittests/Tooling/CompilationDatabaseTest.cpp
index 3314ecd36c193..89763f9f8d52c 100644
--- a/clang/unittests/Tooling/CompilationDatabaseTest.cpp
+++ b/clang/unittests/Tooling/CompilationDatabaseTest.cpp
@@ -92,16 +92,32 @@ TEST(JSONCompilationDatabase, GetAllFiles) {
expected_files.push_back(std::string(PathStorage.str()));
llvm::sys::path::native("//net/file1", PathStorage);
expected_files.push_back(std::string(PathStorage.str()));
+ llvm::sys::path::native("//net/dir/file3", PathStorage);
+ expected_files.push_back(std::string(PathStorage.str()));
EXPECT_EQ(expected_files,
- getAllFiles("[{\"directory\":\"//net/dir\","
- "\"command\":\"command\","
- "\"file\":\"file1\"},"
- " {\"directory\":\"//net/dir\","
- "\"command\":\"command\","
- "\"file\":\"../file1\"},"
- " {\"directory\":\"//net/dir\","
- "\"command\":\"command\","
- "\"file\":\"file2\"}]",
+ getAllFiles(R"json(
+ [
+ {
+ "directory": "//net/dir",
+ "command": "command",
+ "file": "file1"
+ },
+ {
+ "directory": "//net/dir",
+ "command": "command",
+ "file": "../file1"
+ },
+ {
+ "directory": "//net/dir",
+ "command": "command",
+ "file": "file2"
+ },
+ {
+ "directory": "//net/dir",
+ "command": "command",
+ "file": "//net/dir/foo/../file3"
+ }
+ ])json",
ErrorMessage, JSONCommandLineSyntax::Gnu))
<< ErrorMessage;
}
More information about the cfe-commits
mailing list