| // Copyright 2021 The Verible Authors. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #ifndef VERILOG_TOOLS_LS_VERIBLE_LSP_ADAPTER_H |
| #define VERILOG_TOOLS_LS_VERIBLE_LSP_ADAPTER_H |
| |
| #include <vector> |
| |
| #include "common/lsp/lsp-protocol.h" |
| #include "nlohmann/json.hpp" |
| #include "verilog/tools/ls/lsp-parse-buffer.h" |
| |
| // Adapter functions converting verible state into lsp objects. |
| |
| namespace verilog { |
| |
| // Given the output of the parser and a lint status, create a diagnostic |
| // output to be sent in textDocument/publishDiagnostics notification. |
| std::vector<verible::lsp::Diagnostic> CreateDiagnostics(const BufferTracker &, |
| int message_limit); |
| |
| // Generate code actions from autofixes provided by the linter. |
| std::vector<verible::lsp::CodeAction> GenerateLinterCodeActions( |
| const BufferTracker *tracker, const verible::lsp::CodeActionParams &p); |
| |
| verible::lsp::FullDocumentDiagnosticReport GenerateDiagnosticReport( |
| const BufferTracker *tracker, |
| const verible::lsp::DocumentDiagnosticParams &p); |
| |
| // Given a parse tree, generate a document symbol outline |
| // textDocument/documentSymbol request |
| // There is a workaround for the kate editor currently. Goal is to actually |
| // fix this upstream in the kate editor, but for now let's have an explicit |
| // boolean to make it visible what is needed. |
| nlohmann::json CreateDocumentSymbolOutline( |
| const BufferTracker *tracker, const verible::lsp::DocumentSymbolParams &p, |
| bool kate_compatible_tags = true); |
| |
| // Given a position in a document, return ranges in the buffer that should |
| // be highlighted. |
| // Current implementation: if cursor is over a symbol, highlight all symbols |
| // with the same name (NB: Does _not_ take scoping into account yet). |
| std::vector<verible::lsp::DocumentHighlight> CreateHighlightRanges( |
| const BufferTracker *tracker, |
| const verible::lsp::DocumentHighlightParams &p); |
| |
| // Format given range (or whole document) and emit an edit. |
| std::vector<verible::lsp::TextEdit> FormatRange( |
| const BufferTracker *tracker, |
| const verible::lsp::DocumentFormattingParams &p); |
| |
| } // namespace verilog |
| #endif // VERILOG_TOOLS_LS_VERIBLE_LSP_ADAPTER_H |