clang-tools 19.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
clang::clangd::PreamblePatch Class Reference

Stores information required to parse a TU using a (possibly stale) Baseline preamble. More...

#include <Preamble.h>

Public Types

enum class  PatchType { MacroDirectives , All }
 

Public Member Functions

void apply (CompilerInvocation &CI) const
 Adjusts CI (which compiles the modified inputs) to be used with the baseline preamble.
 
std::vector< InclusionpreambleIncludes () const
 Returns #include directives from the Modified preamble that were resolved using the Baseline preamble.
 
PreambleBounds modifiedBounds () const
 Returns preamble bounds for the Modified.
 
llvm::StringRef text () const
 Returns textual patch contents.
 
llvm::ArrayRef< DiagpatchedDiags () const
 Returns diag locations for Modified contents.
 
llvm::ArrayRef< PragmaMarkmarks () const
 
const MainFileMacrosmainFileMacros () const
 

Static Public Member Functions

static PreamblePatch unmodified (const PreambleData &Preamble)
 Preamble is used verbatim.
 
static PreamblePatch createFullPatch (llvm::StringRef FileName, const ParseInputs &Modified, const PreambleData &Baseline)
 Builds a patch that contains new PP directives introduced to the preamble section of Modified compared to Baseline.
 
static PreamblePatch createMacroPatch (llvm::StringRef FileName, const ParseInputs &Modified, const PreambleData &Baseline)
 
static OptionalFileEntryRef getPatchEntry (llvm::StringRef MainFilePath, const SourceManager &SM)
 Returns the FileEntry for the preamble patch of MainFilePath in SM, if any.
 

Static Public Attributes

static constexpr llvm::StringLiteral HeaderName = "__preamble_patch__.h"
 

Detailed Description

Stores information required to parse a TU using a (possibly stale) Baseline preamble.

Later on this information can be injected into the main file by updating compiler invocation with apply. This injected section approximately reflects additions to the preamble in Modified contents, e.g. new include directives.

Definition at line 171 of file Preamble.h.

Member Enumeration Documentation

◆ PatchType

Enumerator
MacroDirectives 
All 

Definition at line 173 of file Preamble.h.

Member Function Documentation

◆ apply()

void clang::clangd::PreamblePatch::apply ( CompilerInvocation &  CI) const

Adjusts CI (which compiles the modified inputs) to be used with the baseline preamble.

This is done by inserting an artificial include to the CI that contains new directives calculated in create.

Definition at line 916 of file Preamble.cpp.

References CI.

◆ createFullPatch()

PreamblePatch clang::clangd::PreamblePatch::createFullPatch ( llvm::StringRef  FileName,
const ParseInputs Modified,
const PreambleData Baseline 
)
static

Builds a patch that contains new PP directives introduced to the preamble section of Modified compared to Baseline.

FIXME: This only handles include directives, we should at least handle define/undef.

Definition at line 904 of file Preamble.cpp.

References All, and FileName.

Referenced by clang::clangd::ParsedAST::build().

◆ createMacroPatch()

PreamblePatch clang::clangd::PreamblePatch::createMacroPatch ( llvm::StringRef  FileName,
const ParseInputs Modified,
const PreambleData Baseline 
)
static

Definition at line 910 of file Preamble.cpp.

References FileName, and MacroDirectives.

◆ getPatchEntry()

OptionalFileEntryRef clang::clangd::PreamblePatch::getPatchEntry ( llvm::StringRef  MainFilePath,
const SourceManager &  SM 
)
static

Returns the FileEntry for the preamble patch of MainFilePath in SM, if any.

Definition at line 963 of file Preamble.cpp.

References clang::clangd::getPatchName().

Referenced by clang::clangd::computeIncludeCleanerFindings().

◆ mainFileMacros()

const MainFileMacros & clang::clangd::PreamblePatch::mainFileMacros ( ) const

Definition at line 957 of file Preamble.cpp.

◆ marks()

llvm::ArrayRef< PragmaMark > clang::clangd::PreamblePatch::marks ( ) const

Definition at line 951 of file Preamble.cpp.

◆ modifiedBounds()

PreambleBounds clang::clangd::PreamblePatch::modifiedBounds ( ) const
inline

Returns preamble bounds for the Modified.

Definition at line 205 of file Preamble.h.

◆ patchedDiags()

llvm::ArrayRef< Diag > clang::clangd::PreamblePatch::patchedDiags ( ) const
inline

Returns diag locations for Modified contents.

Definition at line 211 of file Preamble.h.

◆ preambleIncludes()

std::vector< Inclusion > clang::clangd::PreamblePatch::preambleIncludes ( ) const

Returns #include directives from the Modified preamble that were resolved using the Baseline preamble.

This covers the new locations of inclusions that were moved around, but not inclusions of new files. Those will be recorded when parsing the main file: the includes in the injected section will be resolved back to their spelled positions in the main file using the presumed-location mechanism.

Definition at line 938 of file Preamble.cpp.

◆ text()

llvm::StringRef clang::clangd::PreamblePatch::text ( ) const
inline

Returns textual patch contents.

Definition at line 208 of file Preamble.h.

◆ unmodified()

PreamblePatch clang::clangd::PreamblePatch::unmodified ( const PreambleData Preamble)
static

Preamble is used verbatim.

Definition at line 942 of file Preamble.cpp.

References clang::clangd::Preamble.

Member Data Documentation

◆ HeaderName

constexpr llvm::StringLiteral clang::clangd::PreamblePatch::HeaderName = "__preamble_patch__.h"
staticconstexpr

Definition at line 213 of file Preamble.h.

Referenced by clang::clangd::getPatchName().


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