
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.
56 lines
2.1 KiB
C++
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
|