载入中...
搜索中...
未找到
LanguageServer.hpp
浏览该文件的文档.
1#pragma once
2
3#include "common/Export.h"
7
8#include <cstdint>
9#include <iosfwd>
10#include <memory>
11#include <optional>
12#include <ostream>
13#include <string>
14#include <string_view>
15#include <vector>
16
17namespace eve::dev {
18
20enum class LspDispatch : uint8_t { Continue = 0, Exit };
21
22inline std::ostream& operator<<(std::ostream& os, LspDispatch value) {
23 switch (value) {
25 return os << "Continue";
27 return os << "Exit";
28 }
29 return os << "LspDispatch(" << static_cast<int>(value) << ")";
30}
31
34 std::string label;
35 std::string documentation;
36};
37
40 std::string label;
41 std::string documentation;
42 std::vector<LanguageSignatureParameter> parameters;
44};
45
52public:
53 explicit LanguageServer(std::string projectRoot);
55
58
60 const std::string& projectRoot() const noexcept;
61
63 static std::string fileUriFromPath(std::string_view path);
64
65 void openDocument(std::string uri, std::string text);
67 void changeDocument(std::string uri, std::string text);
69 void changeDocument(std::string uri, lsp::Range range, std::string text);
70 void closeDocument(std::string uri);
71
72 std::vector<script::ScriptDiagnostic> diagnosticsFor(std::string_view uri) const;
73 std::vector<script::ScriptCompletion> complete(std::string_view uri, lsp::Position position) const;
74 std::optional<script::ScriptHover> hover(std::string_view uri, lsp::Position position) const;
75 std::optional<lsp::Location> definition(std::string_view uri, lsp::Position position) const;
76 std::vector<lsp::Location> references(std::string_view uri, lsp::Position position,
77 bool includeDeclaration) const;
78 std::optional<std::vector<lsp::TextEdit>> rename(std::string_view uri, lsp::Position position,
79 std::string_view newName) const;
80 std::vector<script::ScriptSymbolMetadata> documentSymbols(std::string_view uri) const;
81 std::optional<LanguageSignatureHelp> signatureHelp(std::string_view uri, lsp::Position position) const;
88 std::vector<lsp::TextEdit> formatDocument(std::string_view uri, lsp::FormatOptions options = {},
89 const lsp::Range* range = nullptr) const;
91 std::vector<lsp::FoldingRange> foldingRanges(std::string_view uri) const;
93 std::vector<lsp::SemanticToken> semanticTokens(std::string_view uri) const;
94
99 [[nodiscard]] LspDispatch handleMessage(std::string_view jsonBody, std::ostream& output);
100
102 int runStdio(std::istream& input, std::ostream& output);
103
104private:
105 struct Impl;
106 std::unique_ptr<Impl> impl_;
107};
108
109} // namespace eve::dev
double value
std::string output
EvpackChunkInput input
Definition Evpack.cpp:170
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
std::string text
Range range
std::array< float, 3 > position
std::string script
Definition PlayHost.cpp:116
std::string path
Definition PlayHost.cpp:110
std::string uri
const SquirrelValueOptions & options
LogicalId definition
In-process EveScript language service used by eve language-server and by unit tests....
LanguageServer & operator=(const LanguageServer &)=delete
LanguageServer(const LanguageServer &)=delete
std::ostream & operator<<(std::ostream &os, LspDispatch value)
LspDispatch
Whether the stdio/JSON-RPC host should keep reading after one dispatch.
Binding-contract signature shown while typing a call.
std::vector< LanguageSignatureParameter > parameters
One parameter in an LSP signature-help result.
Range public API.