mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-25 09:05:10 +00:00
A bit more work on making a faster compile_commands.json loader
This commit is contained in:
parent
1d6477c3e9
commit
cf45c91bcd
@ -171,8 +171,12 @@ std::vector<Project::Entry> LoadFromCompileCommandsJson(const std::vector<std::s
|
||||
|
||||
std::vector<Project::Entry> result;
|
||||
result.reserve(entries.size());
|
||||
for (const auto& entry : entries)
|
||||
for (auto& entry : entries) {
|
||||
if (entry.args.empty() && !entry.command.empty())
|
||||
entry.args = SplitString(entry.command, " ");
|
||||
|
||||
result.push_back(GetCompilationEntryFromCompileCommandEntry(extra_flags, entry));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -211,7 +215,7 @@ std::vector<Project::Entry> LoadFromDirectoryListing(const std::vector<std::stri
|
||||
|
||||
std::vector<Project::Entry> LoadCompilationEntriesFromDirectory(const std::vector<std::string>& extra_flags, const std::string& project_directory) {
|
||||
// TODO: Figure out if this function or the clang one is faster.
|
||||
//return LoadFromCompileCommandsJson(project_directory);
|
||||
//return LoadFromCompileCommandsJson(extra_flags, project_directory);
|
||||
|
||||
std::cerr << "Trying to load compile_commands.json" << std::endl;
|
||||
CXCompilationDatabase_Error cx_db_load_error;
|
||||
|
17
src/utils.cc
17
src/utils.cc
@ -66,6 +66,23 @@ std::string ReplaceAll(const std::string& source, const std::string& from, const
|
||||
return result;
|
||||
}
|
||||
|
||||
std::vector<std::string> SplitString(const std::string& str, const std::string& delimiter) {
|
||||
// http://stackoverflow.com/a/13172514
|
||||
std::vector<std::string> strings;
|
||||
|
||||
std::string::size_type pos = 0;
|
||||
std::string::size_type prev = 0;
|
||||
while ((pos = str.find(delimiter, prev)) != std::string::npos) {
|
||||
strings.push_back(str.substr(prev, pos - prev));
|
||||
prev = pos + 1;
|
||||
}
|
||||
|
||||
// To get the last substring (or only, if delimiter is not found)
|
||||
strings.push_back(str.substr(prev));
|
||||
|
||||
return strings;
|
||||
}
|
||||
|
||||
static std::vector<std::string> GetFilesInFolderHelper(std::string folder, bool recursive, std::string output_prefix) {
|
||||
std::vector<std::string> result;
|
||||
|
||||
|
@ -18,6 +18,8 @@ bool StartsWith(const std::string& value, const std::string& start);
|
||||
bool EndsWith(const std::string& value, const std::string& ending);
|
||||
std::string ReplaceAll(const std::string& source, const std::string& from, const std::string& to);
|
||||
|
||||
std::vector<std::string> SplitString(const std::string& str, const std::string& delimiter);
|
||||
|
||||
inline bool StartsWithAny(const std::vector<std::string>& values, const std::string& start) {
|
||||
return std::any_of(std::begin(values), std::end(values), [&start](const std::string& value) {
|
||||
return StartsWith(value, start);
|
||||
|
Loading…
Reference in New Issue
Block a user