| 1 | // SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. |
| 2 | // |
| 3 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 4 | |
| 5 | #ifndef CLIENT_H |
| 6 | #define CLIENT_H |
| 7 | |
| 8 | #include "common/lsp/protocol/protocol.h" |
| 9 | #include "common/lsp/protocol/newprotocol.h" |
| 10 | |
| 11 | #include <QThread> |
| 12 | |
| 13 | namespace newlsp { |
| 14 | |
| 15 | class ClientPrivate; |
| 16 | class Client : public QProcess |
| 17 | { |
| 18 | Q_OBJECT |
| 19 | ClientPrivate *const d; |
| 20 | public: |
| 21 | explicit Client(); |
| 22 | virtual ~Client(); |
| 23 | |
| 24 | lsp::SemanticTokensProvider initSecTokensProvider(); |
| 25 | |
| 26 | public slots: |
| 27 | // textDocument/semanticTokens/full/delta |
| 28 | void delta(const newlsp::SemanticTokensDeltaParams ¶ms); |
| 29 | // textDocument/semanticTokens/full |
| 30 | void full(const newlsp::SemanticTokensParams ¶ms); |
| 31 | // textDocument/semanticTokens/range |
| 32 | void range(const newlsp::SemanticTokensRangeParams ¶ms); |
| 33 | |
| 34 | // Notifications send to server |
| 35 | // textDocument/didOpen |
| 36 | void didOpen(const newlsp::DidOpenTextDocumentParams ¶ms); |
| 37 | // textDocument/didChange |
| 38 | void didChange(const newlsp::DidChangeTextDocumentParams ¶ms); |
| 39 | // textDocument/willSave |
| 40 | void willSave(const newlsp::WillSaveTextDocumentParams ¶ms); |
| 41 | // textDocument/willSaveWaitUntil |
| 42 | void willSaveWaitUntil(const newlsp::WillSaveTextDocumentParams ¶ms); |
| 43 | // textDocument/didSave |
| 44 | void didSave(const newlsp::DidSaveTextDocumentParams ¶ms); |
| 45 | // textDocument/didClose |
| 46 | void didClose(const newlsp::DidCloseTextDocumentParams ¶ms); |
| 47 | |
| 48 | // Requests |
| 49 | // textDocument/declaration |
| 50 | void declaration(const newlsp::DeclarationParams ¶ms); |
| 51 | // textDocument/definition |
| 52 | void definition(const newlsp::DefinitionParams ¶ms); |
| 53 | // textDocument/typeDefinition |
| 54 | void typeDefinition(const newlsp::TypeDefinitionParams ¶ms); |
| 55 | // textDocument/implementation |
| 56 | void implementation(const newlsp::ImplementationParams ¶ms); |
| 57 | // textDocument/references |
| 58 | void references(const newlsp::ReferenceParams ¶ms); |
| 59 | // textDocument/prepareCallHierarchy |
| 60 | void prepareCallHierarchy(const newlsp::CallHierarchyPrepareParams ¶ms); |
| 61 | // textDocument/prepareTypeHierarchy |
| 62 | void prepareTypeHierarchy(const newlsp::TypeHierarchyPrepareParams ¶ms); |
| 63 | // textDocument/documentHighlight |
| 64 | void documentHighlight(const newlsp::DocumentHighlightParams ¶ms); |
| 65 | // textDocument/documentLink |
| 66 | void documentLink(const newlsp::DocumentLinkParams ¶ms); |
| 67 | // textDocument/hover |
| 68 | void hover(const newlsp::HoverParams ¶ms); |
| 69 | // textDocument/codeLens |
| 70 | void codeLens(const newlsp::CodeLensParams ¶ms); |
| 71 | // textDocument/foldingRange |
| 72 | void foldingRange(const newlsp::FoldingRangeParams ¶ms); |
| 73 | // textDocument/selectionRange |
| 74 | void selectionRange(const newlsp::SelectionRangeParams ¶ms); |
| 75 | // textDocument/documentSymbol |
| 76 | void documentSymbol(const newlsp::DocumentSymbolParams ¶ms); |
| 77 | // textDocument/inlayHint |
| 78 | void inlayHint(const newlsp::InlayHintParams ¶ms); |
| 79 | // textDocument/inlineValue |
| 80 | void inlineValue(const newlsp::InlineValueParams ¶ms); |
| 81 | // textDocument/moniker |
| 82 | void moniker(const newlsp::MonikerParams ¶ms); |
| 83 | // textDocument/completion |
| 84 | void completion(const newlsp::CompletionParams ¶ms); |
| 85 | // textDocument/diagnostic is request |
| 86 | void diagnostic(const newlsp::DocumentDiagnosticParams ¶ms); |
| 87 | // textDocument/signatureHelp |
| 88 | void signatureHelp(const newlsp::SignatureHelpParams ¶ms); |
| 89 | // textDocument/codeAction |
| 90 | void codeAction(const newlsp::CodeActionParams ¶ms); |
| 91 | // textDocument/documentColor |
| 92 | void documentColor(const newlsp::DocumentColorParams ¶ms); |
| 93 | // textDocument/colorPresentation |
| 94 | void colorPresentation(const newlsp::ColorPresentationParams ¶ms); |
| 95 | // textDocument/formatting |
| 96 | void formatting(const newlsp::DocumentFormattingParams ¶ms); |
| 97 | // textDocument/rangeFormatting |
| 98 | void rangeFormatting(const newlsp::DocumentRangeFormattingParams ¶ms); |
| 99 | // textDocument/onTypeFormatting |
| 100 | void onTypeFormatting(const newlsp::DocumentOnTypeFormattingParams ¶ms); |
| 101 | // textDocument/rename |
| 102 | void rename(const newlsp::RenameParams ¶ms); |
| 103 | // textDocument/prepareRename |
| 104 | void prepareRename(const newlsp::PrepareRenameParams ¶ms); |
| 105 | // textDocument/linkedEditingRange |
| 106 | void linkedEditingRange(const newlsp::LinkedEditingRangeParams ¶ms); |
| 107 | |
| 108 | // codeAction/resolve |
| 109 | void resolve(const newlsp::CodeAction &codeAction); |
| 110 | // completionItem/resolve |
| 111 | void resolve(const newlsp::CompletionItem ¶ms); |
| 112 | // inlayHint/resolve |
| 113 | void resolve(); |
| 114 | // codeLens/resolve |
| 115 | void resolve(const newlsp::CodeLens &codeLens); |
| 116 | |
| 117 | // typeHierarchy/supertypes |
| 118 | void supertypes(const newlsp::TypeHierarchySupertypesParams ¶ms); |
| 119 | // typeHierarchy/subtypes |
| 120 | void subtypes(const newlsp::TypeHierarchySubtypesParams ¶ms); |
| 121 | |
| 122 | // callHierarchy/incomingCalls |
| 123 | void incomingCalls(const newlsp::CallHierarchyIncomingCallsParams ¶ms); |
| 124 | // callHierarchy/outgoingCalls |
| 125 | void outgoingCalls(const newlsp::CallHierarchyOutgoingCallsParams ¶ms); |
| 126 | |
| 127 | // workspace/codelens/refresh |
| 128 | void refresh(); |
| 129 | |
| 130 | // workspace/semanticTokens/refresh |
| 131 | void workspace_semanticTokens_refresh(); |
| 132 | |
| 133 | // workspace/inlayHint/refresh |
| 134 | void workspace_inlayHint_refresh(); |
| 135 | |
| 136 | // workspace/inlineValue/refresh |
| 137 | void workspace_inlineValue_refresh(); |
| 138 | |
| 139 | // workspace/diagnostic/refresh |
| 140 | void workspace_diagnostic_refresh(); |
| 141 | |
| 142 | // workspace/diagnostic |
| 143 | void diagnostic(const newlsp::WorkspaceDiagnosticParams ¶ms); |
| 144 | |
| 145 | void selectLspServer(const newlsp::ProjectKey &key); |
| 146 | void initRequest(const QString &compile); // yes |
| 147 | void shutdownRequest(); |
| 148 | void exitRequest(); |
| 149 | void openRequest(const QString &filePath); // yes |
| 150 | void closeRequest(const QString &filePath); // yes |
| 151 | void changeRequest(const QString &filePath, const QByteArray &text); // yes |
| 152 | void symbolRequest(const QString &filePath); // yes |
| 153 | void renameRequest(const QString &filePath, const lsp::Position &pos, const QString &newName); //yes |
| 154 | void definitionRequest(const QString &filePath, const lsp::Position &pos); // yes |
| 155 | void completionRequest(const QString &filePath, const lsp::Position &pos); // yes |
| 156 | void signatureHelpRequest(const QString &filePath, const lsp::Position &pos); // yes |
| 157 | void referencesRequest(const QString &filePath, const lsp::Position &pos); |
| 158 | void docHighlightRequest(const QString &filePath, const lsp::Position &pos); |
| 159 | void docSemanticTokensFull(const QString &filePath); //yes |
| 160 | void docHoverRequest(const QString &filePath, const lsp::Position &pos); // yes |
| 161 | |
| 162 | signals: |
| 163 | void request(); |
| 164 | void notification(const QString &jsonStr); |
| 165 | void requestResult(const lsp::SemanticTokensProvider &tokensProvider); |
| 166 | void requestResult(const lsp::Symbols &symbols); |
| 167 | void requestResult(const lsp::Locations &locations); |
| 168 | void requestResult(const lsp::CompletionProvider &completionProvider); |
| 169 | void requestResult(const lsp::SignatureHelps &signatureHelps); |
| 170 | void requestResult(const lsp::Highlights &highlights); |
| 171 | void requestResult(const QList<lsp::Data> &tokensResult); |
| 172 | void requestResult(const lsp::References &refs); |
| 173 | void renameRes(const newlsp::WorkspaceEdit &changes); |
| 174 | void hoverRes(const newlsp::Hover &hover); |
| 175 | void definitionRes(const newlsp::Location &location); |
| 176 | void definitionRes(const std::vector<newlsp::Location> &locations); |
| 177 | void definitionRes(const std::vector<newlsp::LocationLink> &locations); |
| 178 | void rangeFormattingRes(const std::vector<TextEdit> &edits); |
| 179 | |
| 180 | /* server request */ |
| 181 | void publishDiagnostics(const newlsp::PublishDiagnosticsParams &diagnostics); // textDocument/publishDiagnostics |
| 182 | }; |
| 183 | } // namespace newlsp |
| 184 | |
| 185 | #endif // CLIENT_H |
| 186 | |