clang-tools 19.0.0git
Public Member Functions | List of all members
clang::clangd::IncludeInserter Class Reference

#include <Headers.h>

Public Member Functions

 IncludeInserter (StringRef FileName, StringRef Code, const format::FormatStyle &Style, StringRef BuildDir, HeaderSearch *HeaderSearchInfo)
 
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 207 of file Headers.h.

Constructor & Destructor Documentation

◆ IncludeInserter()

clang::clangd::IncludeInserter::IncludeInserter ( StringRef  FileName,
StringRef  Code,
const format::FormatStyle &  Style,
StringRef  BuildDir,
HeaderSearch *  HeaderSearchInfo 
)
inline

Definition at line 212 of file Headers.h.

References BuildDir, Code, and FileName.

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::HeaderFile::File, IsAngled, 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 315 of file Headers.cpp.

References Directive, and 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: