]> granicus.if.org Git - clang/commitdiff
[Testing] Move clangd::Annotations to llvm testing support
authorIlya Biryukov <ibiryukov@google.com>
Thu, 25 Apr 2019 10:08:31 +0000 (10:08 +0000)
committerIlya Biryukov <ibiryukov@google.com>
Thu, 25 Apr 2019 10:08:31 +0000 (10:08 +0000)
Summary:
Annotations allow writing nice-looking unit test code when one needs
access to locations from the source code, e.g. running code completion
at particular offsets in a file. See comments in Annotations.cpp for
more details on the API.

Also got rid of a duplicate annotations parsing code in clang's code
complete tests.

Reviewers: gribozavr, sammccall

Reviewed By: gribozavr

Subscribers: mgorny, hiraditya, ioeric, MaskRay, jkorous, arphaman, kadircet, jdoerfert, cfe-commits, llvm-commits

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D59814

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@359179 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/Sema/CMakeLists.txt
unittests/Sema/CodeCompleteTest.cpp

index 78601046dcd44606833d37bfed0e2a8ab8176ec0..00ffa65864ee66e8e2112414c2af57d13a13a37e 100644 (file)
@@ -16,4 +16,5 @@ target_link_libraries(SemaTests
   clangSema
   clangSerialization
   clangTooling
+  LLVMTestingSupport
   )
index a6368550986d9ae8dc4d64c75c1da981b76b42e4..4e1068f4a3945d9809d89eaf8a529cd9891b75ae 100644 (file)
@@ -13,6 +13,7 @@
 #include "clang/Sema/Sema.h"
 #include "clang/Sema/SemaDiagnostic.h"
 #include "clang/Tooling/Tooling.h"
+#include "llvm/Testing/Support/Annotations.h"
 #include "gmock/gmock.h"
 #include "gtest/gtest.h"
 #include <cstddef>
@@ -107,41 +108,18 @@ CompletionContext runCompletion(StringRef Code, size_t Offset) {
   return ResultCtx;
 }
 
-struct ParsedAnnotations {
-  std::vector<size_t> Points;
-  std::string Code;
-};
-
-ParsedAnnotations parseAnnotations(StringRef AnnotatedCode) {
-  ParsedAnnotations R;
-  while (!AnnotatedCode.empty()) {
-    size_t NextPoint = AnnotatedCode.find('^');
-    if (NextPoint == StringRef::npos) {
-      R.Code += AnnotatedCode;
-      AnnotatedCode = "";
-      break;
-    }
-    R.Code += AnnotatedCode.substr(0, NextPoint);
-    R.Points.push_back(R.Code.size());
-
-    AnnotatedCode = AnnotatedCode.substr(NextPoint + 1);
-  }
-  return R;
-}
-
 CompletionContext runCodeCompleteOnCode(StringRef AnnotatedCode) {
-  ParsedAnnotations P = parseAnnotations(AnnotatedCode);
-  assert(P.Points.size() == 1 && "expected exactly one annotation point");
-  return runCompletion(P.Code, P.Points.front());
+  llvm::Annotations A(AnnotatedCode);
+  return runCompletion(A.code(), A.point());
 }
 
 std::vector<std::string>
 collectPreferredTypes(StringRef AnnotatedCode,
                       std::string *PtrDiffType = nullptr) {
-  ParsedAnnotations P = parseAnnotations(AnnotatedCode);
+  llvm::Annotations A(AnnotatedCode);
   std::vector<std::string> Types;
-  for (size_t Point : P.Points) {
-    auto Results = runCompletion(P.Code, Point);
+  for (size_t Point : A.points()) {
+    auto Results = runCompletion(A.code(), Point);
     if (PtrDiffType) {
       assert(PtrDiffType->empty() || *PtrDiffType == Results.PtrDiffType);
       *PtrDiffType = Results.PtrDiffType;