//===---------- NamespaceAliaser.h - clang-tidy ---------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_NAMESPACEALIASER_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_NAMESPACEALIASER_H

#include "clang/AST/ASTContext.h"
#include "clang/AST/Stmt.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/SourceManager.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/StringMap.h"
#include <map>

namespace clang {
namespace tidy {
namespace utils {

// This class creates function-level namespace aliases.
class NamespaceAliaser {
public:
  explicit NamespaceAliaser(const SourceManager &SourceMgr);
  // Adds a namespace alias for \p Namespace valid near \p
  // Statement. Picks the first available name from \p Abbreviations.
  // Returns ``llvm::None`` if an alias already exists or there is an error.
  llvm::Optional<FixItHint>
  createAlias(ASTContext &Context, const Stmt &Statement,
              llvm::StringRef Namespace,
              const std::vector<std::string> &Abbreviations);

  // Get an alias name for \p Namespace valid at \p Statement. Returns \p
  // Namespace if there is no alias.
  std::string getNamespaceName(ASTContext &Context, const Stmt &Statement,
                               llvm::StringRef Namespace) const;

private:
  const SourceManager &SourceMgr;
  llvm::DenseMap<const FunctionDecl *, llvm::StringMap<std::string>>
      AddedAliases;
};

} // namespace utils
} // namespace tidy
} // namespace clang

#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_NAMESPACEALIASER_H
