brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 3e94356 Raw
47 lines · c
1//===----------------------------------------------------------------------===//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#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_USINGINSERTER_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_USINGINSERTER_H11 12#include "clang/AST/Decl.h"13#include "clang/AST/Stmt.h"14#include "clang/Basic/Diagnostic.h"15#include "clang/Basic/SourceManager.h"16#include <optional>17#include <set>18 19namespace clang::tidy::utils {20 21// UsingInserter adds using declarations for |QualifiedName| to the surrounding22// function.23// This allows using a shorter name without clobbering other scopes.24class UsingInserter {25public:26  UsingInserter(const SourceManager &SourceMgr);27 28  // Creates a \p using declaration fixit. Returns ``std::nullopt`` on error29  // or if the using declaration already exists.30  std::optional<FixItHint>31  createUsingDeclaration(ASTContext &Context, const Stmt &Statement,32                         llvm::StringRef QualifiedName);33 34  // Returns the unqualified version of the name if there is an35  // appropriate using declaration and the qualified name otherwise.36  llvm::StringRef getShortName(ASTContext &Context, const Stmt &Statement,37                               llvm::StringRef QualifiedName);38 39private:40  using NameInFunction = std::pair<const FunctionDecl *, std::string>;41  const SourceManager &SourceMgr;42  std::set<NameInFunction> AddedUsing;43};44 45} // namespace clang::tidy::utils46#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_USINGINSERTER_H47