mirror of
https://github.com/MaskRay/ccls.git
synced 2025-03-30 13:32:13 +00:00
Making completion_request_ ThreadedQueue from AtomicObject (#459)
This commit is contained in:
parent
be4d37dac3
commit
afdde4d59f
@ -439,7 +439,7 @@ void CompletionQueryMain(ClangCompleteManager* completion_manager) {
|
|||||||
while (true) {
|
while (true) {
|
||||||
// Fetching the completion request blocks until we have a request.
|
// Fetching the completion request blocks until we have a request.
|
||||||
std::unique_ptr<ClangCompleteManager::CompletionRequest> request =
|
std::unique_ptr<ClangCompleteManager::CompletionRequest> request =
|
||||||
completion_manager->completion_request_.Take();
|
completion_manager->completion_request_.Dequeue();
|
||||||
std::string path = request->document.uri.GetPath();
|
std::string path = request->document.uri.GetPath();
|
||||||
|
|
||||||
std::shared_ptr<CompletionSession> session =
|
std::shared_ptr<CompletionSession> session =
|
||||||
@ -625,6 +625,15 @@ CompletionSession::~CompletionSession() {}
|
|||||||
ClangCompleteManager::ParseRequest::ParseRequest(const std::string& path)
|
ClangCompleteManager::ParseRequest::ParseRequest(const std::string& path)
|
||||||
: request_time(std::chrono::high_resolution_clock::now()), path(path) {}
|
: request_time(std::chrono::high_resolution_clock::now()), path(path) {}
|
||||||
|
|
||||||
|
ClangCompleteManager::CompletionRequest::CompletionRequest(const lsTextDocumentIdentifier& document,
|
||||||
|
const bool& emit_diagnostics)
|
||||||
|
: document(document), emit_diagnostics(emit_diagnostics) {}
|
||||||
|
ClangCompleteManager::CompletionRequest::CompletionRequest(const lsTextDocumentIdentifier& document,
|
||||||
|
const lsPosition& position,
|
||||||
|
const OnComplete& on_complete,
|
||||||
|
const bool& emit_diagnostics)
|
||||||
|
: document(document), position(position), on_complete(on_complete), emit_diagnostics(emit_diagnostics) {}
|
||||||
|
|
||||||
ClangCompleteManager::ClangCompleteManager(Config* config,
|
ClangCompleteManager::ClangCompleteManager(Config* config,
|
||||||
Project* project,
|
Project* project,
|
||||||
WorkingFiles* working_files,
|
WorkingFiles* working_files,
|
||||||
@ -653,31 +662,16 @@ ClangCompleteManager::~ClangCompleteManager() {}
|
|||||||
void ClangCompleteManager::CodeComplete(
|
void ClangCompleteManager::CodeComplete(
|
||||||
const lsTextDocumentPositionParams& completion_location,
|
const lsTextDocumentPositionParams& completion_location,
|
||||||
const OnComplete& on_complete) {
|
const OnComplete& on_complete) {
|
||||||
completion_request_.WithLock(
|
completion_request_.PushBack(MakeUnique<CompletionRequest>(completion_location.textDocument,
|
||||||
[&](std::unique_ptr<CompletionRequest>& request_storage) {
|
completion_location.position,
|
||||||
// Ensure that we have a request.
|
on_complete,
|
||||||
if (!request_storage)
|
false));
|
||||||
request_storage = MakeUnique<CompletionRequest>();
|
|
||||||
|
|
||||||
// Make the request send out code completion information.
|
|
||||||
request_storage->document = completion_location.textDocument;
|
|
||||||
request_storage->position = completion_location.position;
|
|
||||||
request_storage->on_complete = on_complete;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClangCompleteManager::DiagnosticsUpdate(
|
void ClangCompleteManager::DiagnosticsUpdate(
|
||||||
const lsTextDocumentIdentifier& document) {
|
const lsTextDocumentIdentifier& document) {
|
||||||
completion_request_.WithLock(
|
completion_request_.PushBack(MakeUnique<CompletionRequest>(document,
|
||||||
[&](std::unique_ptr<CompletionRequest>& request_storage) {
|
true));
|
||||||
// Ensure that we have a request.
|
|
||||||
if (!request_storage)
|
|
||||||
request_storage = MakeUnique<CompletionRequest>();
|
|
||||||
|
|
||||||
// Make the request emit diagnostics.
|
|
||||||
request_storage->document = document;
|
|
||||||
request_storage->emit_diagnostics = true;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClangCompleteManager::NotifyView(const std::string& filename) {
|
void ClangCompleteManager::NotifyView(const std::string& filename) {
|
||||||
|
@ -55,6 +55,13 @@ struct ClangCompleteManager {
|
|||||||
std::string path;
|
std::string path;
|
||||||
};
|
};
|
||||||
struct CompletionRequest {
|
struct CompletionRequest {
|
||||||
|
CompletionRequest(const lsTextDocumentIdentifier& document,
|
||||||
|
const bool& emit_diagnostics);
|
||||||
|
CompletionRequest(const lsTextDocumentIdentifier& document,
|
||||||
|
const lsPosition& position,
|
||||||
|
const OnComplete& on_complete,
|
||||||
|
const bool& emit_diagnostics);
|
||||||
|
|
||||||
lsTextDocumentIdentifier document;
|
lsTextDocumentIdentifier document;
|
||||||
optional<lsPosition> position;
|
optional<lsPosition> position;
|
||||||
OnComplete on_complete; // May be null/empty.
|
OnComplete on_complete; // May be null/empty.
|
||||||
@ -120,7 +127,7 @@ struct ClangCompleteManager {
|
|||||||
std::mutex sessions_lock_;
|
std::mutex sessions_lock_;
|
||||||
|
|
||||||
// Request a code completion at the given location.
|
// Request a code completion at the given location.
|
||||||
AtomicObject<CompletionRequest> completion_request_;
|
ThreadedQueue<std::unique_ptr<CompletionRequest>> completion_request_;
|
||||||
// Parse requests. The path may already be parsed, in which case it should be
|
// Parse requests. The path may already be parsed, in which case it should be
|
||||||
// reparsed.
|
// reparsed.
|
||||||
ThreadedQueue<ParseRequest> parse_requests_;
|
ThreadedQueue<ParseRequest> parse_requests_;
|
||||||
|
Loading…
Reference in New Issue
Block a user