mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-25 17:11:59 +00:00
textDocument/didOpen: index related files when a header is opened
Fix #180 index.initialBlacklist: ["."] can inhibit initial indexing (useful for larger code bases). Opened files are still indexed, though. This heuristic allows related files (a/foo.c a/b/foo.cc) to be indexed when a header (foo.h) is opened.
This commit is contained in:
parent
8835a555f8
commit
f99cf50456
@ -41,10 +41,12 @@ void MessageHandler::textDocument_didOpen(DidOpenTextDocumentParam ¶m) {
|
||||
|
||||
// Submit new index request if it is not a header file or there is no
|
||||
// pending index request.
|
||||
std::pair<LanguageId, bool> lang = lookupExtension(path);
|
||||
if ((lang.first != LanguageId::Unknown && !lang.second) ||
|
||||
auto [lang, header] = lookupExtension(path);
|
||||
if ((lang != LanguageId::Unknown && !header) ||
|
||||
!pipeline::pending_index_requests)
|
||||
pipeline::Index(path, {}, IndexMode::Normal, false);
|
||||
if (header)
|
||||
project->IndexRelated(path);
|
||||
|
||||
manager->OnView(path);
|
||||
}
|
||||
|
@ -535,4 +535,22 @@ void Project::Index(WorkingFiles *wfiles, RequestId id) {
|
||||
// trigger refreshing semantic highlight for all working files.
|
||||
pipeline::Index("", {}, IndexMode::NonInteractive, false);
|
||||
}
|
||||
|
||||
void Project::IndexRelated(const std::string &path) {
|
||||
auto &gi = g_config->index;
|
||||
GroupMatch match(gi.whitelist, gi.blacklist);
|
||||
std::string stem = sys::path::stem(path);
|
||||
std::lock_guard lock(mtx);
|
||||
for (auto &[root, folder] : root2folder)
|
||||
if (StringRef(path).startswith(root)) {
|
||||
for (const Project::Entry &entry : folder.entries) {
|
||||
std::string reason;
|
||||
if (sys::path::stem(entry.filename) == stem && entry.filename != path &&
|
||||
match.Matches(entry.filename, &reason))
|
||||
pipeline::Index(entry.filename, entry.args, IndexMode::NonInteractive,
|
||||
true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} // namespace ccls
|
||||
|
@ -65,5 +65,6 @@ struct Project {
|
||||
const std::string &path);
|
||||
|
||||
void Index(WorkingFiles *wfiles, RequestId id);
|
||||
void IndexRelated(const std::string &path);
|
||||
};
|
||||
} // namespace ccls
|
||||
|
Loading…
Reference in New Issue
Block a user