#pragma once #include "./basic_types.hpp" #include "./document_sync.hpp" #include "./diagnostics.hpp" namespace lsp::protocol { struct CreateFileOptions { boolean overwrite; boolean ignoreIfExists; }; struct CreateFile { string kind = "create"; DocumentUri uri; std::optional options; std::optional annotationId; }; struct RenameFileOptions { boolean overwrite; boolean ignoreIfExists; }; struct RenameFile { string kind = "rename"; DocumentUri oldUri; DocumentUri newUri; std::optional options; std::optional annotationId; }; struct DeleteFileOptions { boolean recursive; boolean ignoreIfNotExists; }; struct DeleteFile { string kind = "delete"; DocumentUri uri; std::optional options; std::optional annotationId; }; struct WorkspaceEdit { std::map> changes; std::variant, std::vector, std::vector, std::vector> documentChanges; std::optional> changeAnnotations; }; using ResourceOperationKind = std::string_view; namespace ResourceOperationKindLiterals { inline constexpr ResourceOperationKind Create = "create"; inline constexpr ResourceOperationKind Rename = "rename"; inline constexpr ResourceOperationKind Delete = "delete"; } using FailureHandlingKind = std::string_view; namespace FailureHandlingKindLiterals { inline constexpr FailureHandlingKind Abort = "abort"; inline constexpr FailureHandlingKind Transactional = "transactional"; inline constexpr FailureHandlingKind TextOnlyTransactional = "textOnlyTransactional"; inline constexpr FailureHandlingKind Undo = "undo"; inline constexpr FailureHandlingKind Commit = "commit"; } struct WorkspaceEditClientCapabilities { struct ChangeAnnotationSupport { std::optional groupsOnLabel; }; boolean documentChanges; std::optional> resourceOperations; std::optional failureHandling; std::optional normalizesLineEndings; ChangeAnnotationSupport changeAnnotationSupport; }; struct WorkspaceFolder { URI uri; string name; }; struct WorkspaceFolderServerCapabilities { std::optional supported; std::optional> changeNotifications; }; struct WorkspaceFoldersChangeEvent { std::vector added; std::vector removed; }; struct ApplyWorkspaceEditParams { std::optional label; WorkspaceEdit edit; }; struct ApplyWorkspaceEditResult { boolean applied; std::optional failureReason; std::optional> failedChanges; }; }