loom

Форк
0
36 строк · 1.5 Кб
1
#include "script/ScriptDocumentOperation.h"
2

3
using namespace simodo;
4

5

6
variable::Value makeGotoDefinitionResponse(const std::u16string & uri, const lsp::Range & range) {
7
    return variable::Object {{
8
        { u"uri", uri },
9
        { u"range", lsp::DocumentContext::makeRange(range) },
10
    }};
11
}
12

13
/// \see https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_declaration
14
variable::Value ScriptDocumentOperation::produceGotoDeclarationResponse(const lsp::Position & pos) const
15
{
16
    return produceGotoDefinitionResponse(pos);
17
}
18

19
/// \see https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_definition
20
variable::Value ScriptDocumentOperation::produceGotoDefinitionResponse(const lsp::Position & pos) const {
21
    for (const auto & [v, loc] : _semantic_data.used())
22
        if (isOnToken(loc, pos) and v.location().range() != inout::Range {{0,0},{0,0}}) {
23
            std::u16string uri = v.location().uri_index() < _files.size()
24
                                 ? inout::toU16(_files[v.location().uri_index()])
25
                                 : inout::toU16(_doc.file_name());
26
            return makeGotoDefinitionResponse(uri, v.location().range());
27
        }
28

29
    for (const auto & [t, ref] : _semantic_data.refs())
30
        if (isOnToken(t.location(), pos)) {
31
            return makeGotoDefinitionResponse(ref, {{ 0, 0 },
32
                                                    { 0, 0 }});
33
        }
34

35
    return { };
36
}
37

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

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

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

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