//===--- ProtocolHandlers.h - LSP callbacks ---------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// ProtocolHandlers translates incoming JSON requests from JSONRPCDispatcher
// into method calls on ClangLSPServer.
//
// Currently it parses requests into objects, but the ClangLSPServer is
// responsible for producing JSON responses. We should move that here, too.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_PROTOCOLHANDLERS_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANGD_PROTOCOLHANDLERS_H

#include "JSONRPCDispatcher.h"
#include "Protocol.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Support/raw_ostream.h"

namespace clang {
namespace clangd {

// The interface implemented by ClangLSPServer to handle incoming requests.
class ProtocolCallbacks {
public:
  virtual ~ProtocolCallbacks() = default;

  virtual void onInitialize(InitializeParams &Params) = 0;
  virtual void onShutdown(ShutdownParams &Params) = 0;
  virtual void onExit(ExitParams &Params) = 0;
  virtual void onDocumentDidOpen(DidOpenTextDocumentParams &Params) = 0;
  virtual void onDocumentDidChange(DidChangeTextDocumentParams &Params) = 0;
  virtual void onDocumentDidClose(DidCloseTextDocumentParams &Params) = 0;
  virtual void onDocumentFormatting(DocumentFormattingParams &Params) = 0;
  virtual void
  onDocumentOnTypeFormatting(DocumentOnTypeFormattingParams &Params) = 0;
  virtual void
  onDocumentRangeFormatting(DocumentRangeFormattingParams &Params) = 0;
  virtual void onCodeAction(CodeActionParams &Params) = 0;
  virtual void onCompletion(TextDocumentPositionParams &Params) = 0;
  virtual void onSignatureHelp(TextDocumentPositionParams &Params) = 0;
  virtual void onGoToDefinition(TextDocumentPositionParams &Params) = 0;
  virtual void onSwitchSourceHeader(TextDocumentIdentifier &Params) = 0;
  virtual void onFileEvent(DidChangeWatchedFilesParams &Params) = 0;
  virtual void onCommand(ExecuteCommandParams &Params) = 0;
  virtual void onWorkspaceSymbol(WorkspaceSymbolParams &Params) = 0;
  virtual void onRename(RenameParams &Parames) = 0;
  virtual void onDocumentHighlight(TextDocumentPositionParams &Params) = 0;
  virtual void onHover(TextDocumentPositionParams &Params) = 0;
  virtual void onChangeConfiguration(DidChangeConfigurationParams &Params) = 0;
};

void registerCallbackHandlers(JSONRPCDispatcher &Dispatcher,
                              ProtocolCallbacks &Callbacks);

} // namespace clangd
} // namespace clang

#endif
