[clangd] Set correct CWD when using compile_flags.txt

This fixes a bug where clangd would attempt to set CWD to the
compile_flags.txt file itself.

Differential Revision: https://reviews.llvm.org/D94699
This commit is contained in:
Adam Czachorowski 2021-01-14 18:21:23 +01:00
parent aeaeb9e6bd
commit c77c3d1d18
2 changed files with 13 additions and 1 deletions

View File

@ -271,7 +271,8 @@ parseJSON(PathRef Path, llvm::StringRef Data, std::string &Error) {
}
static std::unique_ptr<tooling::CompilationDatabase>
parseFixed(PathRef Path, llvm::StringRef Data, std::string &Error) {
return tooling::FixedCompilationDatabase::loadFromBuffer(Path, Data, Error);
return tooling::FixedCompilationDatabase::loadFromBuffer(
llvm::sys::path::parent_path(Path), Data, Error);
}
bool DirectoryBasedGlobalCompilationDatabase::DirectoryCache::load(

View File

@ -279,6 +279,17 @@ TEST(GlobalCompilationDatabaseTest, BuildDir) {
<< "x/build/compile_flags.json only applicable to x/";
}
TEST(GlobalCompilationDatabaseTest, CompileFlagsDirectory) {
MockFS FS;
FS.Files[testPath("x/compile_flags.txt")] = "-DFOO";
DirectoryBasedGlobalCompilationDatabase CDB(FS);
auto Commands = CDB.getCompileCommand(testPath("x/y.cpp"));
ASSERT_TRUE(Commands.hasValue());
EXPECT_THAT(Commands.getValue().CommandLine, Contains("-DFOO"));
// Make sure we pick the right working directory.
EXPECT_EQ(testPath("x"), Commands.getValue().Directory);
}
TEST(GlobalCompilationDatabaseTest, NonCanonicalFilenames) {
OverlayCDB DB(nullptr);
std::vector<std::string> DiscoveredFiles;