clang-tools  13.0.0git
Classes | Public Member Functions | Static Public Member Functions | List of all members
clang::clangd::ClangdServer Class Reference

Manages a collection of source files and derived data (ASTs, indexes), and provides language-aware features such as code completion. More...

#include <ClangdServer.h>

Classes

class  Callbacks
 Interface with hooks for users of ClangdServer to be notified of events. More...
 
struct  Options
 
struct  TweakRef
 

Public Member Functions

 ClangdServer (const GlobalCompilationDatabase &CDB, const ThreadsafeFS &TFS, const Options &Opts, Callbacks *Callbacks=nullptr)
 Creates a new ClangdServer instance. More...
 
 ~ClangdServer ()
 
template<typename Mod >
Mod * featureModule ()
 Gets the installed feature module of a given type, if any. More...
 
template<typename Mod >
const Mod * featureModule () const
 
void addDocument (PathRef File, StringRef Contents, llvm::StringRef Version="null", WantDiagnostics WD=WantDiagnostics::Auto, bool ForceRebuild=false)
 Add a File to the list of tracked C++ files or update the contents if File is already tracked. More...
 
void removeDocument (PathRef File)
 Remove File from list of tracked files, schedule a request to free resources associated with it. More...
 
void reparseOpenFilesIfNeeded (llvm::function_ref< bool(llvm::StringRef File)> Filter)
 Requests a reparse of currently opened files using their latest source. More...
 
void codeComplete (PathRef File, Position Pos, const clangd::CodeCompleteOptions &Opts, Callback< CodeCompleteResult > CB)
 Run code completion for File at Pos. More...
 
void signatureHelp (PathRef File, Position Pos, Callback< SignatureHelp > CB)
 Provide signature help for File at Pos. More...
 
void locateSymbolAt (PathRef File, Position Pos, Callback< std::vector< LocatedSymbol >> CB)
 Find declaration/definition locations of symbol at a specified position. More...
 
void switchSourceHeader (PathRef Path, Callback< llvm::Optional< clangd::Path >> CB)
 Switch to a corresponding source file when given a header file, and vice versa. More...
 
void findDocumentHighlights (PathRef File, Position Pos, Callback< std::vector< DocumentHighlight >> CB)
 Get document highlights for a given position. More...
 
void findHover (PathRef File, Position Pos, Callback< llvm::Optional< HoverInfo >> CB)
 Get code hover for a given position. More...
 
void typeHierarchy (PathRef File, Position Pos, int Resolve, TypeHierarchyDirection Direction, Callback< llvm::Optional< TypeHierarchyItem >> CB)
 Get information about type hierarchy for a given position. More...
 
void resolveTypeHierarchy (TypeHierarchyItem Item, int Resolve, TypeHierarchyDirection Direction, Callback< llvm::Optional< TypeHierarchyItem >> CB)
 Resolve type hierarchy item in the given direction. More...
 
void prepareCallHierarchy (PathRef File, Position Pos, Callback< std::vector< CallHierarchyItem >> CB)
 Get information about call hierarchy for a given position. More...
 
void incomingCalls (const CallHierarchyItem &Item, Callback< std::vector< CallHierarchyIncomingCall >>)
 Resolve incoming calls for a given call hierarchy item. More...
 
void inlayHints (PathRef File, Callback< std::vector< InlayHint >>)
 Resolve inlay hints for a given document. More...
 
void workspaceSymbols (StringRef Query, int Limit, Callback< std::vector< SymbolInformation >> CB)
 Retrieve the top symbols from the workspace matching a query. More...
 
void documentSymbols (StringRef File, Callback< std::vector< DocumentSymbol >> CB)
 Retrieve the symbols within the specified file. More...
 
void foldingRanges (StringRef File, Callback< std::vector< FoldingRange >> CB)
 Retrieve ranges that can be used to fold code within the specified file. More...
 
void findImplementations (PathRef File, Position Pos, Callback< std::vector< LocatedSymbol >> CB)
 Retrieve implementations for virtual method. More...
 
void findReferences (PathRef File, Position Pos, uint32_t Limit, Callback< ReferencesResult > CB)
 Retrieve locations for symbol references. More...
 
void formatFile (PathRef File, llvm::Optional< Range > Rng, Callback< tooling::Replacements > CB)
 Run formatting for the File with content Code. More...
 
void formatOnType (PathRef File, Position Pos, StringRef TriggerText, Callback< std::vector< TextEdit >> CB)
 Run formatting after TriggerText was typed at Pos in File with content Code. More...
 
void prepareRename (PathRef File, Position Pos, llvm::Optional< std::string > NewName, const RenameOptions &RenameOpts, Callback< RenameResult > CB)
 Test the validity of a rename operation. More...
 
void rename (PathRef File, Position Pos, llvm::StringRef NewName, const RenameOptions &Opts, Callback< RenameResult > CB)
 Rename all occurrences of the symbol at the Pos in File to NewName. More...
 
void enumerateTweaks (PathRef File, Range Sel, llvm::unique_function< bool(const Tweak &)> Filter, Callback< std::vector< TweakRef >> CB)
 Enumerate the code tweaks available to the user at a specified point. More...
 
void applyTweak (PathRef File, Range Sel, StringRef ID, Callback< Tweak::Effect > CB)
 Apply the code tweak with a specified ID. More...
 
void onFileEvent (const DidChangeWatchedFilesParams &Params)
 Called when an event occurs for a watched file in the workspace. More...
 
void symbolInfo (PathRef File, Position Pos, Callback< std::vector< SymbolDetails >> CB)
 Get symbol info for given position. More...
 
void semanticRanges (PathRef File, const std::vector< Position > &Pos, Callback< std::vector< SelectionRange >> CB)
 Get semantic ranges around a specified position in a file. More...
 
void documentLinks (PathRef File, Callback< std::vector< DocumentLink >> CB)
 Get all document links in a file. More...
 
void semanticHighlights (PathRef File, Callback< std::vector< HighlightingToken >>)
 
void getAST (PathRef File, llvm::Optional< Range > R, Callback< llvm::Optional< ASTNode >> CB)
 Describe the AST subtree for a piece of code. More...
 
void customAction (PathRef File, llvm::StringRef Name, Callback< InputsAndAST > Action)
 Runs an arbitrary action that has access to the AST of the specified file. More...
 
void diagnostics (PathRef File, Callback< std::vector< Diag >> CB)
 Fetches diagnostics for current version of the File. More...
 
llvm::StringMap< TUScheduler::FileStatsfileStats () const
 Returns estimated memory usage and other statistics for each of the currently open files. More...
 
std::shared_ptr< const std::string > getDraft (PathRef File) const
 Gets the contents of a currently tracked file. More...
 
LLVM_NODISCARD bool blockUntilIdleForTest (llvm::Optional< double > TimeoutSeconds=10)
 
void profile (MemoryTree &MT) const
 Builds a nested representation of memory used by components. More...
 

Static Public Member Functions

static std::function< Context(PathRef)> createConfiguredContextProvider (const config::Provider *Provider, ClangdServer::Callbacks *)
 Creates a context provider that loads and installs config. More...
 
static Options optsForTest ()
 

Detailed Description

Manages a collection of source files and derived data (ASTs, indexes), and provides language-aware features such as code completion.

The primary client is ClangdLSPServer which exposes these features via the Language Server protocol. ClangdServer may also be embedded directly, though its API is not stable over time.

ClangdServer should be used from a single thread. Many potentially-slow operations have asynchronous APIs and deliver their results on another thread. Such operations support cancellation: if the caller sets up a cancelable context, many operations will notice cancellation and fail early. (ClangdLSPServer uses this to implement $/cancelRequest).

Definition at line 62 of file ClangdServer.h.

Constructor & Destructor Documentation

◆ ClangdServer()

clang::clangd::ClangdServer::ClangdServer ( const GlobalCompilationDatabase CDB,
const ThreadsafeFS TFS,
const Options Opts,
Callbacks Callbacks = nullptr 
)

Creates a new ClangdServer instance.

ClangdServer uses CDB to obtain compilation arguments for parsing. Note that ClangdServer only obtains compilation arguments once for each newly added file (i.e., when processing a first call to addDocument) and reuses those arguments for subsequent reparses. However, ClangdServer will check if compilation arguments changed on calls to forceReparse().

Definition at line 153 of file ClangdServer.cpp.

◆ ~ClangdServer()

clang::clangd::ClangdServer::~ClangdServer ( )

Definition at line 209 of file ClangdServer.cpp.

References FeatureModules, and clang::clangd::Deadline::infinity().

Member Function Documentation

◆ addDocument()

void clang::clangd::ClangdServer::addDocument ( PathRef  File,
StringRef  Contents,
llvm::StringRef  Version = "null",
WantDiagnostics  WD = WantDiagnostics::Auto,
bool  ForceRebuild = false 
)

Add a File to the list of tracked C++ files or update the contents if File is already tracked.

Also schedules parsing of the AST for it on a separate thread. When the parsing is complete, DiagConsumer passed in constructor will receive onDiagnosticsReady callback. Version identifies this snapshot and is propagated to ASTs, preambles, diagnostics etc built from it. If empty, a version number is generated.

Definition at line 223 of file ClangdServer.cpp.

◆ applyTweak()

void clang::clangd::ClangdServer::applyTweak ( PathRef  File,
Range  Sel,
StringRef  ID,
Callback< Tweak::Effect CB 
)

Apply the code tweak with a specified ID.

Definition at line 610 of file ClangdServer.cpp.

References Action, and clang::clangd::trace::Metric::Counter.

◆ blockUntilIdleForTest()

LLVM_NODISCARD bool clang::clangd::ClangdServer::blockUntilIdleForTest ( llvm::Optional< double >  TimeoutSeconds = 10)

Definition at line 952 of file ClangdServer.cpp.

References clang::clangd::timeoutSeconds().

◆ codeComplete()

void clang::clangd::ClangdServer::codeComplete ( PathRef  File,
Position  Pos,
const clangd::CodeCompleteOptions Opts,
Callback< CodeCompleteResult CB 
)

Run code completion for File at Pos.

This method should only be called for currently tracked files.

Definition at line 344 of file ClangdServer.cpp.

◆ createConfiguredContextProvider()

std::function< Context(PathRef)> clang::clangd::ClangdServer::createConfiguredContextProvider ( const config::Provider Provider,
ClangdServer::Callbacks Publish 
)
static

Creates a context provider that loads and installs config.

Errors in loading config are reported as diagnostics via Callbacks. (This is typically used as ClangdServer::Options::ContextProvider).

Definition at line 263 of file ClangdServer.cpp.

References clang::clangd::Context::clone(), and clang::clangd::Context::current().

◆ customAction()

void clang::clangd::ClangdServer::customAction ( PathRef  File,
llvm::StringRef  Name,
Callback< InputsAndAST Action 
)

Runs an arbitrary action that has access to the AST of the specified file.

The action will execute on one of ClangdServer's internal threads. The AST is only valid for the duration of the callback. As with other actions, the file must have been opened.

Definition at line 927 of file ClangdServer.cpp.

References Action, and Name.

◆ diagnostics()

void clang::clangd::ClangdServer::diagnostics ( PathRef  File,
Callback< std::vector< Diag >>  CB 
)

Fetches diagnostics for current version of the File.

This might fail if server is busy (building a preamble) and would require a long time to prepare diagnostics. If it fails, clients should wait for onSemanticsMaybeChanged and then retry. These 'pulled' diagnostics do not interfere with the diagnostics 'pushed' to Callbacks::onDiagnosticsReady, and clients may use either or both.

Definition at line 932 of file ClangdServer.cpp.

References Action, and Diags.

◆ documentLinks()

void clang::clangd::ClangdServer::documentLinks ( PathRef  File,
Callback< std::vector< DocumentLink >>  CB 
)

Get all document links in a file.

Definition at line 864 of file ClangdServer.cpp.

References Action, and clang::clangd::getDocumentLinks().

◆ documentSymbols()

void clang::clangd::ClangdServer::documentSymbols ( StringRef  File,
Callback< std::vector< DocumentSymbol >>  CB 
)

Retrieve the symbols within the specified file.

Definition at line 785 of file ClangdServer.cpp.

References Action, and clang::clangd::getDocumentSymbols().

◆ enumerateTweaks()

void clang::clangd::ClangdServer::enumerateTweaks ( PathRef  File,
Range  Sel,
llvm::unique_function< bool(const Tweak &)>  Filter,
Callback< std::vector< TweakRef >>  CB 
)

Enumerate the code tweaks available to the user at a specified point.

Tweaks where Filter returns false will not be checked or included.

Definition at line 575 of file ClangdServer.cpp.

◆ featureModule() [1/2]

template<typename Mod >
Mod* clang::clangd::ClangdServer::featureModule ( )
inline

Gets the installed feature module of a given type, if any.

This exposes access the public interface of feature modules that have one.

Definition at line 188 of file ClangdServer.h.

References clang::clangd::FeatureModuleSet::get().

◆ featureModule() [2/2]

template<typename Mod >
const Mod* clang::clangd::ClangdServer::featureModule ( ) const
inline

Definition at line 191 of file ClangdServer.h.

References clang::clangd::FeatureModuleSet::get().

◆ fileStats()

llvm::StringMap< TUScheduler::FileStats > clang::clangd::ClangdServer::fileStats ( ) const

Returns estimated memory usage and other statistics for each of the currently open files.

Overall memory usage of clangd may be significantly more than reported here, as this metric does not account (at least) for:

  • memory occupied by static and dynamic index,
  • memory required for in-flight requests, FIXME: those metrics might be useful too, we should add them.

Definition at line 947 of file ClangdServer.cpp.

◆ findDocumentHighlights()

void clang::clangd::ClangdServer::findDocumentHighlights ( PathRef  File,
Position  Pos,
Callback< std::vector< DocumentHighlight >>  CB 
)

Get document highlights for a given position.

Definition at line 689 of file ClangdServer.cpp.

References Action, clang::clangd::findDocumentHighlights(), and Pos.

◆ findHover()

void clang::clangd::ClangdServer::findHover ( PathRef  File,
Position  Pos,
Callback< llvm::Optional< HoverInfo >>  CB 
)

Get code hover for a given position.

Definition at line 701 of file ClangdServer.cpp.

References Action, FormatStyle(), and Pos.

◆ findImplementations()

void clang::clangd::ClangdServer::findImplementations ( PathRef  File,
Position  Pos,
Callback< std::vector< LocatedSymbol >>  CB 
)

Retrieve implementations for virtual method.

Definition at line 809 of file ClangdServer.cpp.

References Action, clang::clangd::findImplementations(), and Pos.

◆ findReferences()

void clang::clangd::ClangdServer::findReferences ( PathRef  File,
Position  Pos,
uint32_t  Limit,
Callback< ReferencesResult CB 
)

Retrieve locations for symbol references.

Definition at line 821 of file ClangdServer.cpp.

◆ foldingRanges()

void clang::clangd::ClangdServer::foldingRanges ( StringRef  File,
Callback< std::vector< FoldingRange >>  CB 
)

Retrieve ranges that can be used to fold code within the specified file.

Definition at line 797 of file ClangdServer.cpp.

References Action, and clang::clangd::getFoldingRanges().

◆ formatFile()

void clang::clangd::ClangdServer::formatFile ( PathRef  File,
llvm::Optional< Range Rng,
Callback< tooling::Replacements >  CB 
)

Run formatting for the File with content Code.

If Rng is non-null, formats only that region.

Definition at line 427 of file ClangdServer.cpp.

References Code, getDraft(), clang::clangd::InvalidParams, and Range.

◆ formatOnType()

void clang::clangd::ClangdServer::formatOnType ( PathRef  File,
Position  Pos,
StringRef  TriggerText,
Callback< std::vector< TextEdit >>  CB 
)

Run formatting after TriggerText was typed at Pos in File with content Code.

Definition at line 465 of file ClangdServer.cpp.

References Action, Code, getDraft(), clang::clangd::InvalidParams, Pos, and clang::clangd::positionToOffset().

◆ getAST()

void clang::clangd::ClangdServer::getAST ( PathRef  File,
llvm::Optional< Range R,
Callback< llvm::Optional< ASTNode >>  CB 
)

Describe the AST subtree for a piece of code.

Definition at line 888 of file ClangdServer.cpp.

References Action, and Inputs.

◆ getDraft()

std::shared_ptr< const std::string > clang::clangd::ClangdServer::getDraft ( PathRef  File) const

Gets the contents of a currently tracked file.

Returns nullptr if the file isn't being tracked.

Definition at line 255 of file ClangdServer.cpp.

References clang::clangd::DraftStore::getDraft().

Referenced by formatFile(), and formatOnType().

◆ incomingCalls()

void clang::clangd::ClangdServer::incomingCalls ( const CallHierarchyItem Item,
Callback< std::vector< CallHierarchyIncomingCall >>  CB 
)

Resolve incoming calls for a given call hierarchy item.

Definition at line 750 of file ClangdServer.cpp.

References clang::clangd::incomingCalls().

◆ inlayHints()

void clang::clangd::ClangdServer::inlayHints ( PathRef  File,
Callback< std::vector< InlayHint >>  CB 
)

Resolve inlay hints for a given document.

Definition at line 759 of file ClangdServer.cpp.

References Action, and clang::clangd::inlayHints().

◆ locateSymbolAt()

void clang::clangd::ClangdServer::locateSymbolAt ( PathRef  File,
Position  Pos,
Callback< std::vector< LocatedSymbol >>  CB 
)

Find declaration/definition locations of symbol at a specified position.

Definition at line 657 of file ClangdServer.cpp.

References Action, clang::clangd::locateSymbolAt(), and Pos.

◆ onFileEvent()

void clang::clangd::ClangdServer::onFileEvent ( const DidChangeWatchedFilesParams Params)

Called when an event occurs for a watched file in the workspace.

Definition at line 769 of file ClangdServer.cpp.

◆ optsForTest()

ClangdServer::Options clang::clangd::ClangdServer::optsForTest ( )
static

Definition at line 135 of file ClangdServer.cpp.

◆ prepareCallHierarchy()

void clang::clangd::ClangdServer::prepareCallHierarchy ( PathRef  File,
Position  Pos,
Callback< std::vector< CallHierarchyItem >>  CB 
)

Get information about call hierarchy for a given position.

Definition at line 739 of file ClangdServer.cpp.

References Action, Pos, and clang::clangd::prepareCallHierarchy().

◆ prepareRename()

void clang::clangd::ClangdServer::prepareRename ( PathRef  File,
Position  Pos,
llvm::Optional< std::string >  NewName,
const RenameOptions RenameOpts,
Callback< RenameResult CB 
)

Test the validity of a rename operation.

If NewName is provided, it performs a name validation.

Definition at line 493 of file ClangdServer.cpp.

References Action, Pos, clang::clangd::rename(), and Results.

◆ profile()

void clang::clangd::ClangdServer::profile ( MemoryTree MT) const

Builds a nested representation of memory used by components.

Definition at line 987 of file ClangdServer.cpp.

References clang::clangd::MemoryTree::child().

◆ removeDocument()

void clang::clangd::ClangdServer::removeDocument ( PathRef  File)

Remove File from list of tracked files, schedule a request to free resources associated with it.

Pending diagnostics for closed files may not be delivered, even if requested with WantDiags::Auto or WantDiags::Yes. An empty set of diagnostics will be delivered, with Version = "".

Definition at line 339 of file ClangdServer.cpp.

References clang::clangd::DraftStore::removeDraft().

◆ rename()

void clang::clangd::ClangdServer::rename ( PathRef  File,
Position  Pos,
llvm::StringRef  NewName,
const RenameOptions Opts,
Callback< RenameResult CB 
)

Rename all occurrences of the symbol at the Pos in File to NewName.

If WantFormat is false, the final TextEdit will be not formatted, embedders could use this method to get all occurrences of the symbol (e.g. highlighting them in prepare stage).

Definition at line 519 of file ClangdServer.cpp.

◆ reparseOpenFilesIfNeeded()

void clang::clangd::ClangdServer::reparseOpenFilesIfNeeded ( llvm::function_ref< bool(llvm::StringRef File)>  Filter)

Requests a reparse of currently opened files using their latest source.

This will typically only rebuild if something other than the source has changed (e.g. the CDB yields different flags, or files included in the preamble have been modified).

Definition at line 245 of file ClangdServer.cpp.

◆ resolveTypeHierarchy()

void clang::clangd::ClangdServer::resolveTypeHierarchy ( TypeHierarchyItem  Item,
int  Resolve,
TypeHierarchyDirection  Direction,
Callback< llvm::Optional< TypeHierarchyItem >>  CB 
)

Resolve type hierarchy item in the given direction.

Definition at line 729 of file ClangdServer.cpp.

References clang::clangd::resolveTypeHierarchy().

◆ semanticHighlights()

void clang::clangd::ClangdServer::semanticHighlights ( PathRef  File,
Callback< std::vector< HighlightingToken >>  CB 
)

Definition at line 876 of file ClangdServer.cpp.

References Action, and clang::clangd::getSemanticHighlightings().

◆ semanticRanges()

void clang::clangd::ClangdServer::semanticRanges ( PathRef  File,
const std::vector< Position > &  Pos,
Callback< std::vector< SelectionRange >>  CB 
)

Get semantic ranges around a specified position in a file.

Definition at line 845 of file ClangdServer.cpp.

References Action.

◆ signatureHelp()

void clang::clangd::ClangdServer::signatureHelp ( PathRef  File,
Position  Pos,
Callback< SignatureHelp CB 
)

Provide signature help for File at Pos.

This method should only be called for tracked files.

Definition at line 405 of file ClangdServer.cpp.

References Action, clang::clangd::error(), ParseInput, Pos, clang::clangd::PreambleData::Preamble, clang::clangd::signatureHelp(), and clang::clangd::TUScheduler::Stale.

◆ switchSourceHeader()

void clang::clangd::ClangdServer::switchSourceHeader ( PathRef  Path,
Callback< llvm::Optional< clangd::Path >>  CB 
)

Switch to a corresponding source file when given a header file, and vice versa.

Definition at line 669 of file ClangdServer.cpp.

References Action, clang::clangd::getCorrespondingHeaderOrSource(), and clang::clangd::ThreadsafeFS::view().

◆ symbolInfo()

void clang::clangd::ClangdServer::symbolInfo ( PathRef  File,
Position  Pos,
Callback< std::vector< SymbolDetails >>  CB 
)

Get symbol info for given position.

Clangd extension - not part of official LSP.

Definition at line 833 of file ClangdServer.cpp.

References Action, clang::clangd::getSymbolInfo(), and Pos.

◆ typeHierarchy()

void clang::clangd::ClangdServer::typeHierarchy ( PathRef  File,
Position  Pos,
int  Resolve,
TypeHierarchyDirection  Direction,
Callback< llvm::Optional< TypeHierarchyItem >>  CB 
)

Get information about type hierarchy for a given position.

Definition at line 715 of file ClangdServer.cpp.

References Action, clang::clangd::getTypeHierarchy(), and Pos.

◆ workspaceSymbols()

void clang::clangd::ClangdServer::workspaceSymbols ( StringRef  Query,
int  Limit,
Callback< std::vector< SymbolInformation >>  CB 
)

Retrieve the top symbols from the workspace matching a query.

Definition at line 774 of file ClangdServer.cpp.


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