v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
server-data.h
Go to the documentation of this file.
1// Copyright 2019 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_TORQUE_SERVER_DATA_H_
6#define V8_TORQUE_SERVER_DATA_H_
7
8#include <map>
9#include <memory>
10#include <optional>
11#include <vector>
12
13#include "src/base/macros.h"
18
19namespace v8::internal::torque {
20
21// The definition of the token in the first element, can be found at the second.
22using DefinitionMapping = std::pair<SourcePosition, SourcePosition>;
23// TODO(szuend): Support overlapping source positions when we start adding them.
24using Definitions = std::vector<DefinitionMapping>;
25using DefinitionsMap = std::map<SourceId, Definitions>;
26
27// Symbols are used to answer search queries (either workspace or document
28// scope). For now, declarables are stored directly without converting them
29// into a custom format. Symbols are grouped by sourceId to implement document
30// scoped searches.
31using Symbols = std::vector<Declarable*>;
32using SymbolsMap = std::map<SourceId, Symbols>;
33
34// This contextual class holds all the necessary data to answer incoming
35// LSP requests. It is reset for each compilation step and all information
36// is calculated eagerly during compilation.
37class LanguageServerData : public base::ContextualClass<LanguageServerData> {
38 public:
39 LanguageServerData() = default;
40
42 SourcePosition definition);
43
44 V8_EXPORT_PRIVATE static std::optional<SourcePosition> FindDefinition(
45 SourceId source, LineAndColumn pos);
46
47 static void SetGlobalContext(GlobalContext global_context) {
48 Get().global_context_ =
49 std::make_unique<GlobalContext>(std::move(global_context));
50 Get().PrepareAllDeclarableSymbols();
51 }
52
53 static void SetTypeOracle(TypeOracle type_oracle) {
54 Get().type_oracle_ = std::make_unique<TypeOracle>(std::move(type_oracle));
55 }
56
58 return Get().symbols_map_[id];
59 }
60
61 private:
62 // Splits all declarables up by SourceId and filters out auto-generated ones.
64
67 std::unique_ptr<GlobalContext> global_context_;
68 std::unique_ptr<TypeOracle> type_oracle_;
69};
70
71} // namespace v8::internal::torque
72
73#endif // V8_TORQUE_SERVER_DATA_H_
SourcePosition pos
static VarType & Get()
Definition contextual.h:64
static V8_EXPORT_PRIVATE std::optional< SourcePosition > FindDefinition(SourceId source, LineAndColumn pos)
static const Symbols & SymbolsForSourceId(SourceId id)
Definition server-data.h:57
static void SetGlobalContext(GlobalContext global_context)
Definition server-data.h:47
static V8_EXPORT_PRIVATE void AddDefinition(SourcePosition token, SourcePosition definition)
std::unique_ptr< TypeOracle > type_oracle_
Definition server-data.h:68
static void SetTypeOracle(TypeOracle type_oracle)
Definition server-data.h:53
std::unique_ptr< GlobalContext > global_context_
Definition server-data.h:67
std::vector< DefinitionMapping > Definitions
Definition server-data.h:24
std::vector< Declarable * > Symbols
Definition server-data.h:31
std::map< SourceId, Symbols > SymbolsMap
Definition server-data.h:32
std::pair< SourcePosition, SourcePosition > DefinitionMapping
Definition server-data.h:22
std::map< SourceId, Definitions > DefinitionsMap
Definition server-data.h:25
#define V8_EXPORT_PRIVATE
Definition macros.h:460