llvm-project/lldb/tools/lldb-dap/Handler/CancelRequestHandler.cpp
John Harrison 1041d54bd4
[lldb-dap] Updating the 'next' request handler use well structured types (#136642)
This updates the 'next' request to use well structured types. While
working on this I also simplified the 'RequestHandler' implementation to
better handle void responses by allowing requests to return a
'llvm::Error' instead of an 'llvm::Expected<std::monostate>'. This makes
it easier to write and understand request handles that have simple ack
responses.
2025-04-23 10:18:31 -07:00

56 lines
2.1 KiB
C++

//===-- CancelRequestHandler.cpp ------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "Handler/RequestHandler.h"
#include "Protocol/ProtocolRequests.h"
#include "llvm/Support/Error.h"
using namespace llvm;
using namespace lldb_dap::protocol;
namespace lldb_dap {
/// The `cancel` request is used by the client in two situations:
///
/// - to indicate that it is no longer interested in the result produced by a
/// specific request issued earlier
/// - to cancel a progress sequence.
///
/// Clients should only call this request if the corresponding capability
/// `supportsCancelRequest` is true.
///
/// This request has a hint characteristic: a debug adapter can only be
/// expected to make a 'best effort' in honoring this request but there are no
/// guarantees.
///
/// The `cancel` request may return an error if it could not cancel
/// an operation but a client should refrain from presenting this error to end
/// users.
///
/// The request that got cancelled still needs to send a response back.
/// This can either be a normal result (`success` attribute true) or an error
/// response (`success` attribute false and the `message` set to `cancelled`).
///
/// Returning partial results from a cancelled request is possible but please
/// note that a client has no generic way for detecting that a response is
/// partial or not.
///
/// The progress that got cancelled still needs to send a `progressEnd` event
/// back.
///
/// A client cannot assume that progress just got cancelled after sending
/// the `cancel` request.
Error CancelRequestHandler::Run(const CancelArguments &arguments) const {
// Cancel support is built into the DAP::Loop handler for detecting
// cancellations of pending or inflight requests.
dap.ClearCancelRequest(arguments);
return Error::success();
}
} // namespace lldb_dap