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