mirror of
https://github.com/MaskRay/ccls.git
synced 2025-04-23 17:13:02 +00:00
Fix inactive region publishing when editing a file.
This commit is contained in:
parent
235987bb58
commit
b9f72377dd
@ -128,13 +128,20 @@ bool FindFileOrFail(QueryDatabase* db,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PublishInactiveLines(WorkingFile* working_file,
|
void PublishInactiveLines(WorkingFile* working_file,
|
||||||
const std::vector<Range>& inactive) {
|
const std::vector<Range>& inactive,
|
||||||
|
bool remap_index_lines) {
|
||||||
Out_CquerySetInactiveRegion out;
|
Out_CquerySetInactiveRegion out;
|
||||||
out.params.uri = lsDocumentUri::FromPath(working_file->filename);
|
out.params.uri = lsDocumentUri::FromPath(working_file->filename);
|
||||||
for (Range skipped : inactive) {
|
for (Range skipped : inactive) {
|
||||||
optional<lsRange> ls_skipped = GetLsRange(working_file, skipped);
|
if (remap_index_lines) {
|
||||||
if (ls_skipped)
|
optional<lsRange> ls_skipped = GetLsRange(working_file, skipped);
|
||||||
out.params.inactiveRegions.push_back(*ls_skipped);
|
if (ls_skipped)
|
||||||
|
out.params.inactiveRegions.push_back(*ls_skipped);
|
||||||
|
} else {
|
||||||
|
out.params.inactiveRegions.push_back(
|
||||||
|
lsRange(lsPosition(skipped.start.line - 1, skipped.start.column),
|
||||||
|
lsPosition(skipped.end.line - 1, skipped.end.column)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
IpcManager::instance()->SendOutMessageToClient(
|
IpcManager::instance()->SendOutMessageToClient(
|
||||||
IpcId::CqueryPublishInactiveRegions, out);
|
IpcId::CqueryPublishInactiveRegions, out);
|
||||||
@ -930,7 +937,20 @@ std::vector<Index_DoIdMap> DoParseFile(
|
|||||||
// handled by code completion.
|
// handled by code completion.
|
||||||
if (!is_interactive)
|
if (!is_interactive)
|
||||||
EmitDiagnostics(working_files, new_index->path, new_index->diagnostics_);
|
EmitDiagnostics(working_files, new_index->path, new_index->diagnostics_);
|
||||||
|
// Emit regions disabled by the preprocessor. Checking |is_interactive| is
|
||||||
|
// an optimization so we can avoid locking as much in WorkingFiles, but it
|
||||||
|
// will likely generate invalid results if the index request was created
|
||||||
|
// and then the user opened the file.
|
||||||
|
if (is_interactive) {
|
||||||
|
// Since |is_interactive| is true |working_file| should ideally never be
|
||||||
|
// null, but the user may have closed the document after the index
|
||||||
|
// request was generated.
|
||||||
|
WorkingFile* working_file =
|
||||||
|
working_files->GetFileByFilename(new_index->path);
|
||||||
|
if (working_file)
|
||||||
|
PublishInactiveLines(working_file, new_index->skipped_by_preprocessor,
|
||||||
|
false /*remap_index_lines*/);
|
||||||
|
}
|
||||||
// When main thread does IdMap request it will request the previous index if
|
// When main thread does IdMap request it will request the previous index if
|
||||||
// needed.
|
// needed.
|
||||||
LOG_S(INFO) << "Emitting index result for " << new_index->path;
|
LOG_S(INFO) << "Emitting index result for " << new_index->path;
|
||||||
@ -1768,7 +1788,8 @@ bool QueryDbMainLoop(Config* config,
|
|||||||
|
|
||||||
std::unique_ptr<IndexFile> cache = LoadCachedIndex(config, path);
|
std::unique_ptr<IndexFile> cache = LoadCachedIndex(config, path);
|
||||||
if (cache && !cache->skipped_by_preprocessor.empty())
|
if (cache && !cache->skipped_by_preprocessor.empty())
|
||||||
PublishInactiveLines(working_file, cache->skipped_by_preprocessor);
|
PublishInactiveLines(working_file, cache->skipped_by_preprocessor,
|
||||||
|
true /*remap_index_lines*/);
|
||||||
|
|
||||||
time.ResetAndPrint(
|
time.ResetAndPrint(
|
||||||
"[querydb] Loading cached index file for DidOpen (blocks "
|
"[querydb] Loading cached index file for DidOpen (blocks "
|
||||||
@ -3078,7 +3099,7 @@ int main(int argc, char** argv) {
|
|||||||
loguru::init(argc, argv);
|
loguru::init(argc, argv);
|
||||||
loguru::add_file("cquery.log", loguru::Truncate, loguru::Verbosity_MAX);
|
loguru::add_file("cquery.log", loguru::Truncate, loguru::Verbosity_MAX);
|
||||||
loguru::g_flush_interval_ms = 0;
|
loguru::g_flush_interval_ms = 0;
|
||||||
// loguru::g_stderr_verbosity = 1;
|
loguru::g_stderr_verbosity = 1;
|
||||||
|
|
||||||
MultiQueueWaiter waiter;
|
MultiQueueWaiter waiter;
|
||||||
IpcManager::CreateInstance(&waiter);
|
IpcManager::CreateInstance(&waiter);
|
||||||
|
Loading…
Reference in New Issue
Block a user