module; export module lsp.protocol.text_document.formatting; import std; import lsp.protocol.common.basic_types; import lsp.protocol.text_document.document_sync; import lsp.protocol.window.progress; export namespace lsp::protocol { // Document Formatting struct DocumentFormattingClientCapabilities { std::optional dynamicRegistration; }; struct DocumentFormattingOptions : WorkDoneProgressOptions { }; struct DocumentFormattingRegistrationOptions : TextDocumentRegistrationOptions, DocumentFormattingOptions { }; struct FormattingOptions { uinteger tabSize; boolean insertSpaces; std::optional trimTrailingWhitespace; std::optional insertFinalNewline; std::optional trimFinalNewlines; std::map> key; }; struct DocumentFormattingParams : WorkDoneProgressParams { TextDocumentIdentifier textDocument; FormattingOptions options; }; // Document Range Formatting struct DocumentRangeFormattingClientCapabilities { std::optional dynamicRegistration; std::optional rangesSupport; }; struct DocumentRangeFormattingOptions : WorkDoneProgressOptions { std::optional rangesSupport; }; struct DocumentRangeFormattingRegistrationOptions : TextDocumentRegistrationOptions, DocumentRangeFormattingOptions { }; struct DocumentRangeFormattingParams : WorkDoneProgressParams { TextDocumentIdentifier textDocument; Range range; FormattingOptions options; }; // Document On Type Formatting struct DocumentOnTypeFormattingClientCapabilities { std::optional dynamicRegistration; }; struct DocumentOnTypeFormattingOptions : WorkDoneProgressOptions { string firstTriggerCharacter; std::optional> moreTriggerCharacter; }; struct DocumentOnTypeFormattingRegistrationOptions : TextDocumentRegistrationOptions, DocumentOnTypeFormattingOptions { }; struct DocumentOnTypeFormattingParams { TextDocumentIdentifier textDocument; Position position; string ch; FormattingOptions options; }; }