brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · a5e688d Raw
59 lines · c
1//===--- TestWorkspace.h - Utility for writing multi-file tests --*- C++-*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// TestWorkspace builds on TestTU to provide a way to write tests involving10// several related files with inclusion relationships between them.11//12// The tests can exercise both index and AST based operations.13//14//===---------------------------------------------------------------------===//15 16#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_TESTWORKSPACE_H17#define LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_TESTWORKSPACE_H18 19#include "TestTU.h"20#include "index/Index.h"21#include "llvm/ADT/StringRef.h"22#include <optional>23#include <string>24#include <vector>25 26namespace clang {27namespace clangd {28 29class TestWorkspace {30public:31  // The difference between addSource() and addMainFile() is that only main32  // files will be indexed.33  void addSource(llvm::StringRef Filename, llvm::StringRef Code) {34    addInput(Filename.str(), {Code.str(), /*IsMainFile=*/false});35  }36  void addMainFile(llvm::StringRef Filename, llvm::StringRef Code) {37    addInput(Filename.str(), {Code.str(), /*IsMainFile=*/true});38  }39 40  std::unique_ptr<SymbolIndex> index();41 42  std::optional<ParsedAST> openFile(llvm::StringRef Filename);43 44private:45  struct SourceFile {46    std::string Code;47    bool IsMainFile = false;48  };49  llvm::StringMap<SourceFile> Inputs;50  TestTU TU;51 52  void addInput(llvm::StringRef Filename, const SourceFile &Input);53};54 55} // namespace clangd56} // namespace clang57 58#endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_TESTWORKSPACE_H59