Skip to content

Commit

Permalink
textDocument/didOpen: index related files when a header is opened
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
MaskRay committed Nov 10, 2019
1 parent 8835a55 commit f99cf50
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/messages/textDocument_did.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,12 @@ void MessageHandler::textDocument_didOpen(DidOpenTextDocumentParam &param) {

// 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);
}
Expand Down
18 changes: 18 additions & 0 deletions src/project.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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
1 change: 1 addition & 0 deletions src/project.hh
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,6 @@ struct Project {
const std::string &path);

void Index(WorkingFiles *wfiles, RequestId id);
void IndexRelated(const std::string &path);
};
} // namespace ccls

0 comments on commit f99cf50

Please sign in to comment.