blob: 1377fae3d963529e9b05788cb2867528cb380ccc [file] [log] [blame]
// Copyright 2019 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_TORQUE_SERVER_DATA_H_
#define V8_TORQUE_SERVER_DATA_H_
#include <map>
#include <vector>
#include "src/base/macros.h"
#include "src/base/optional.h"
#include "src/torque/source-positions.h"
namespace v8 {
namespace internal {
namespace torque {
// The definition of the token in the first element, can be found at the second.
using DefinitionMapping = std::pair<SourcePosition, SourcePosition>;
// TODO(szuend): Support overlapping source positions when we start adding them.
using Definitions = std::vector<DefinitionMapping>;
using DefinitionsMap = std::map<SourceId, Definitions>;
// This contextual class holds all the necessary data to answer incoming
// LSP requests. It is reset for each compilation step and all information
// is calculated eagerly during compilation.
class LanguageServerData : public ContextualClass<LanguageServerData> {
public:
LanguageServerData() = default;
V8_EXPORT_PRIVATE static void AddDefinition(SourcePosition token,
SourcePosition definition);
V8_EXPORT_PRIVATE static base::Optional<SourcePosition> FindDefinition(
SourceId source, LineAndColumn pos);
private:
DefinitionsMap definitions_map_;
};
} // namespace torque
} // namespace internal
} // namespace v8
#endif // V8_TORQUE_SERVER_DATA_H_