loom

Форк
0
/
GotoDefinition.cpp 
44 строки · 1.8 Кб
1
#include "GotoDefinition.h"
2
#include "simodo/lsp-server/ServerContext.h"
3
#include "simodo/lsp-server/DocumentContext.h"
4

5
#include "simodo/variable/json/Rpc.h"
6
#include "simodo/variable/json/Serialization.h"
7
#include "simodo/inout/convert/functions.h"
8

9
namespace simodo::lsp
10
{
11

12
void GotoDefinition::work()
13
{
14
    if (_jsonrpc.is_valid()) {
15
        lsp::TextDocumentPositionParams doc_position;
16
        if (lsp::parseTextDocumentPositionParams(_jsonrpc.params(), doc_position)) {
17
            DocumentContext * doc = _server.findDocument(doc_position.textDocument.uri);
18
            if (doc) {
19
                variable::Value result = doc->produceGotoDefinitionResponse(doc_position.position);
20
                _server.sending().push(variable::JsonRpc(result, _jsonrpc.id()));
21
                return;
22
            }
23

24
            _server.log().error("'textDocument/definition' command: uri '" 
25
                                + doc_position.textDocument.uri + "' don't loaded yet",
26
                                variable::toJson(_jsonrpc.value()));
27
            _server.sending().push(
28
                /// @todo Скорректировать коды (и тексты) ошибок
29
                variable::JsonRpc(-1,
30
                    u"'textDocument/definition' command: uri '" 
31
                    + inout::toU16(doc_position.textDocument.uri) + u"' don't loaded yet",
32
                    _jsonrpc.id()));
33
            return;
34
        }
35
    }
36
    _server.log().error("There are wrong parameter structure of 'textDocument/definition' command", 
37
                        variable::toJson(_jsonrpc.value()));
38
    _server.sending().push(
39
        /// @todo Скорректировать коды (и тексты) ошибок
40
        variable::JsonRpc(-1,u"There are wrong parameter structure of 'textDocument/definition' command",
41
                            _jsonrpc.id()));
42
}
43

44
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.