clang-tools 22.0.0git
clang::clangd::IncludeInserter Class Reference

#include <Headers.h>

Public Member Functions

 IncludeInserter (StringRef FileName, StringRef Code, const format::FormatStyle &Style, StringRef BuildDir, HeaderSearch *HeaderSearchInfo, HeaderFilter QuotedHeaders, HeaderFilter AngledHeaders)
void addExisting (const Inclusion &Inc)
bool shouldInsertInclude (PathRef DeclaringHeader, const HeaderFile &InsertedHeader) const
 Checks whether to add an #include of the header into File.
std::optional< std::string > calculateIncludePath (const HeaderFile &InsertedHeader, llvm::StringRef IncludingFile) const
 Determines the preferred way to #include a file, taking into account the search path.
std::optional< TextEditinsert (llvm::StringRef VerbatimHeader, tooling::IncludeDirective Directive) const
 Calculates an edit that inserts VerbatimHeader into code.

Detailed Description

Definition at line 209 of file Headers.h.

Constructor & Destructor Documentation

◆ IncludeInserter()

clang::tidy::utils::IncludeInserter::IncludeInserter ( StringRef FileName,
StringRef Code,
const format::FormatStyle & Style,
StringRef BuildDir,
HeaderSearch * HeaderSearchInfo,
HeaderFilter QuotedHeaders,
HeaderFilter AngledHeaders )
inline

Definition at line 214 of file Headers.h.

Member Function Documentation

◆ addExisting()

void clang::clangd::IncludeInserter::addExisting ( const Inclusion & Inc)

◆ calculateIncludePath()

std::optional< std::string > clang::clangd::IncludeInserter::calculateIncludePath ( const HeaderFile & InsertedHeader,
llvm::StringRef IncludingFile ) const

Determines the preferred way to #include a file, taking into account the search path.

Usually this will prefer a shorter representation like 'Foo/Bar.h' over a longer one like 'Baz/include/Foo/Bar.h'.

Parameters
InsertedHeaderThe preferred header to be inserted.
IncludingFileis the absolute path of the file that InsertedHeader will be inserted.
Returns
A quoted "path" or <path> to be included, or std::nullopt if it couldn't be shortened.

Definition at line 285 of file Headers.cpp.

References clang::clangd::elog(), clang::clangd::HeaderFile::File, clang::clangd::HeaderFile::valid(), and clang::clangd::HeaderFile::Verbatim.

◆ insert()

std::optional< TextEdit > clang::clangd::IncludeInserter::insert ( llvm::StringRef VerbatimHeader,
tooling::IncludeDirective Directive ) const

Calculates an edit that inserts VerbatimHeader into code.

If the header is already included, this returns std::nullopt.

Definition at line 340 of file Headers.cpp.

References clang::clangd::replacementToEdit().

◆ shouldInsertInclude()

bool clang::clangd::IncludeInserter::shouldInsertInclude ( PathRef DeclaringHeader,
const HeaderFile & InsertedHeader ) const

Checks whether to add an #include of the header into File.

FIXME(ioeric): we might not want to insert an absolute include path if the path is not shortened.

An #include will not be added if:

  • Either DeclaringHeader or InsertedHeader is already (directly) in Inclusions (including those included via different paths).
  • DeclaringHeader or InsertedHeader is the same as File.
Parameters
DeclaringHeaderis path of the original header corresponding to InsertedHeader e.g. the header that declares a symbol.
InsertedHeaderThe preferred header to be inserted. This could be the same as DeclaringHeader but must be provided.

Definition at line 271 of file Headers.cpp.

References clang::clangd::HeaderFile::File, clang::clangd::HeaderFile::valid(), and clang::clangd::HeaderFile::Verbatim.


The documentation for this class was generated from the following files: