xref: /llvm-project/clang-tools-extra/clangd/unittests/Annotations.cpp (revision 3cf14a7bdce08f8fe03d987a2d99c6ea47c58c03)
1b804eef0SSam McCall //===--- Annotations.cpp - Annotated source code for unit tests --*- C++-*-===//
2b804eef0SSam McCall //
3b804eef0SSam McCall // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4b804eef0SSam McCall // See https://llvm.org/LICENSE.txt for license information.
5b804eef0SSam McCall // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6b804eef0SSam McCall //
7b804eef0SSam McCall //===----------------------------------------------------------------------===//
8b804eef0SSam McCall 
9b804eef0SSam McCall #include "Annotations.h"
10b804eef0SSam McCall #include "SourceCode.h"
11b804eef0SSam McCall 
12b804eef0SSam McCall namespace clang {
13b804eef0SSam McCall namespace clangd {
14b804eef0SSam McCall 
point(llvm::StringRef Name) const15b804eef0SSam McCall Position Annotations::point(llvm::StringRef Name) const {
16*3cf14a7bSTom Praschan   return pointWithPayload(Name).first;
17*3cf14a7bSTom Praschan }
18*3cf14a7bSTom Praschan 
19*3cf14a7bSTom Praschan std::pair<Position, llvm::StringRef>
pointWithPayload(llvm::StringRef Name) const20*3cf14a7bSTom Praschan Annotations::pointWithPayload(llvm::StringRef Name) const {
21*3cf14a7bSTom Praschan   auto [BasePoint, Payload] = Base::pointWithPayload(Name);
22*3cf14a7bSTom Praschan   return {offsetToPosition(code(), BasePoint), Payload};
23b804eef0SSam McCall }
24b804eef0SSam McCall 
points(llvm::StringRef Name) const25b804eef0SSam McCall std::vector<Position> Annotations::points(llvm::StringRef Name) const {
26*3cf14a7bSTom Praschan   auto BasePoints = Base::points(Name);
27b804eef0SSam McCall 
28b804eef0SSam McCall   std::vector<Position> Ps;
29*3cf14a7bSTom Praschan   Ps.reserve(BasePoints.size());
30*3cf14a7bSTom Praschan   for (const auto Point : BasePoints)
31*3cf14a7bSTom Praschan     Ps.push_back(offsetToPosition(code(), Point));
32b804eef0SSam McCall 
33b804eef0SSam McCall   return Ps;
34b804eef0SSam McCall }
35b804eef0SSam McCall 
36*3cf14a7bSTom Praschan std::vector<std::pair<Position, llvm::StringRef>>
pointsWithPayload(llvm::StringRef Name) const37*3cf14a7bSTom Praschan Annotations::pointsWithPayload(llvm::StringRef Name) const {
38*3cf14a7bSTom Praschan   auto BasePoints = Base::pointsWithPayload(Name);
39*3cf14a7bSTom Praschan 
40*3cf14a7bSTom Praschan   std::vector<std::pair<Position, llvm::StringRef>> Ps;
41*3cf14a7bSTom Praschan   Ps.reserve(BasePoints.size());
42*3cf14a7bSTom Praschan   for (const auto &[Point, Payload] : BasePoints)
43*3cf14a7bSTom Praschan     Ps.push_back({offsetToPosition(code(), Point), Payload});
44*3cf14a7bSTom Praschan 
45*3cf14a7bSTom Praschan   return Ps;
46*3cf14a7bSTom Praschan }
47*3cf14a7bSTom Praschan 
toLSPRange(llvm::StringRef Code,llvm::Annotations::Range R)48*3cf14a7bSTom Praschan static clangd::Range toLSPRange(llvm::StringRef Code,
49*3cf14a7bSTom Praschan                                 llvm::Annotations::Range R) {
50b804eef0SSam McCall   clangd::Range LSPRange;
51b804eef0SSam McCall   LSPRange.start = offsetToPosition(Code, R.Begin);
52b804eef0SSam McCall   LSPRange.end = offsetToPosition(Code, R.End);
53b804eef0SSam McCall   return LSPRange;
54b804eef0SSam McCall }
55b804eef0SSam McCall 
range(llvm::StringRef Name) const56*3cf14a7bSTom Praschan Range Annotations::range(llvm::StringRef Name) const {
57*3cf14a7bSTom Praschan   return rangeWithPayload(Name).first;
58b804eef0SSam McCall }
59b804eef0SSam McCall 
60*3cf14a7bSTom Praschan std::pair<clangd::Range, llvm::StringRef>
rangeWithPayload(llvm::StringRef Name) const61*3cf14a7bSTom Praschan Annotations::rangeWithPayload(llvm::StringRef Name) const {
62*3cf14a7bSTom Praschan   auto [BaseRange, Payload] = Base::rangeWithPayload(Name);
63*3cf14a7bSTom Praschan   return {toLSPRange(code(), BaseRange), Payload};
64*3cf14a7bSTom Praschan }
65*3cf14a7bSTom Praschan 
ranges(llvm::StringRef Name) const66*3cf14a7bSTom Praschan std::vector<Range> Annotations::ranges(llvm::StringRef Name) const {
67b804eef0SSam McCall   auto OffsetRanges = Base::ranges(Name);
68b804eef0SSam McCall 
69b804eef0SSam McCall   std::vector<clangd::Range> Rs;
70b804eef0SSam McCall   Rs.reserve(OffsetRanges.size());
71*3cf14a7bSTom Praschan   for (const auto &R : OffsetRanges)
72b804eef0SSam McCall     Rs.push_back(toLSPRange(code(), R));
73b804eef0SSam McCall 
74b804eef0SSam McCall   return Rs;
75b804eef0SSam McCall }
76b804eef0SSam McCall 
77*3cf14a7bSTom Praschan std::vector<std::pair<clangd::Range, llvm::StringRef>>
rangesWithPayload(llvm::StringRef Name) const78*3cf14a7bSTom Praschan Annotations::rangesWithPayload(llvm::StringRef Name) const {
79*3cf14a7bSTom Praschan   auto OffsetRanges = Base::rangesWithPayload(Name);
80*3cf14a7bSTom Praschan 
81*3cf14a7bSTom Praschan   std::vector<std::pair<clangd::Range, llvm::StringRef>> Rs;
82*3cf14a7bSTom Praschan   Rs.reserve(OffsetRanges.size());
83*3cf14a7bSTom Praschan   for (const auto &[R, Payload] : OffsetRanges)
84*3cf14a7bSTom Praschan     Rs.push_back({toLSPRange(code(), R), Payload});
85*3cf14a7bSTom Praschan 
86*3cf14a7bSTom Praschan   return Rs;
87*3cf14a7bSTom Praschan }
88*3cf14a7bSTom Praschan 
89b804eef0SSam McCall } // namespace clangd
90b804eef0SSam McCall } // namespace clang
91