Skip to content

Commit 45def06

Browse files
juremenartdanmar
authored andcommitted
fix trailing / from CMAKE JSON file and update unittests to cover both (w and w/o cases) (danmar#1592)
* fix for CMake compile_commands.json input - director does not include trailing / which makes include directories wrong - so add it if it doesnt exist * fix the bugfix for trailing / in the directory name of CMAKE JSON file, add also new test case to see if it works in both cases (with and without trailing /) * revert adding accidental new line
1 parent 0c93e0c commit 45def06

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

lib/importproject.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,14 @@ void ImportProject::importCompileCommands(std::istream &istr)
260260

261261
for (const picojson::value &fileInfo : v.get<picojson::array>()) {
262262
picojson::object obj = fileInfo.get<picojson::object>();
263-
const std::string directory = Path::fromNativeSeparators(obj["directory"].get<std::string>());
263+
std::string dirpath = obj["directory"].get<std::string>();
264+
265+
/* CMAKE produces the directory without trailing / so add it if not
266+
* there - it is needed by setIncludePaths() */
267+
if(!endsWith(dirpath, '/'))
268+
dirpath += '/';
269+
270+
const std::string directory = Path::fromNativeSeparators(dirpath);
264271
const std::string command = obj["command"].get<std::string>();
265272
const std::string file = Path::fromNativeSeparators(obj["file"].get<std::string>());
266273

test/testimportproject.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class TestImportProject : public TestFixture {
4545
TEST_CASE(setIncludePaths3); // macro names are case insensitive
4646
TEST_CASE(importCompileCommands1);
4747
TEST_CASE(importCompileCommands2); // #8563
48+
TEST_CASE(importCompileCommands3); // check with existing trailing / in directory
4849
}
4950

5051
void setDefines() const {
@@ -113,6 +114,17 @@ class TestImportProject : public TestFixture {
113114
ASSERT_EQUALS(1, importer.fileSettings.size());
114115
ASSERT_EQUALS("/tmp/src.c", importer.fileSettings.begin()->filename);
115116
}
117+
118+
void importCompileCommands3() const {
119+
const char json[] = "[ { \"directory\": \"/tmp/\","
120+
"\"command\": \"gcc -c src.c\","
121+
"\"file\": \"src.c\" } ]";
122+
std::istringstream istr(json);
123+
TestImporter importer;
124+
importer.importCompileCommands(istr);
125+
ASSERT_EQUALS(1, importer.fileSettings.size());
126+
ASSERT_EQUALS("/tmp/src.c", importer.fileSettings.begin()->filename);
127+
}
116128
};
117129

118130
REGISTER_TEST(TestImportProject)

0 commit comments

Comments
 (0)