clang-tools  10.0.0svn
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

struct  Options
 
struct  TweakRef
 

Public Member Functions

 ClangdServer (const GlobalCompilationDatabase &CDB, const FileSystemProvider &FSProvider, DiagnosticsConsumer &DiagConsumer, const Options &Opts)
 Creates a new ClangdServer instance. More...
 
void addDocument (PathRef File, StringRef Contents, WantDiagnostics WD=WantDiagnostics::Auto)
 Add a File to the list of tracked C++ files or update the contents if File is already tracked. More...
 
llvm::StringRef getDocument (PathRef File) const
 Get the contents of File, which should have been added. More...
 
void removeDocument (PathRef File)
 Remove File from list of tracked files, schedule a request to free resources associated with it. 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 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 findReferences (PathRef File, Position Pos, uint32_t Limit, Callback< std::vector< Location >> CB)
 Retrieve locations for symbol references. More...
 
llvm::Expected< tooling::Replacements > formatRange (StringRef Code, PathRef File, Range Rng)
 Run formatting for Rng inside File with content Code. More...
 
llvm::Expected< tooling::Replacements > formatFile (StringRef Code, PathRef File)
 Run formatting for the whole File with content Code. More...
 
llvm::Expected< std::vector< TextEdit > > formatOnType (StringRef Code, PathRef File, Position Pos, StringRef TriggerText)
 Run formatting after TriggerText was typed at Pos in File with content Code. More...
 
void prepareRename (PathRef File, Position Pos, Callback< llvm::Optional< Range >> CB)
 Test the validity of a rename operation. More...
 
void rename (PathRef File, Position Pos, llvm::StringRef NewName, bool WantFormat, Callback< std::vector< TextEdit >> CB)
 Rename all occurrences of the symbol at the Pos in File to NewName. More...
 
void enumerateTweaks (PathRef File, Range Sel, 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 dumpAST (PathRef File, llvm::unique_function< void(std::string)> Callback)
 Only for testing purposes. 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, Position Pos, Callback< std::vector< Range >> CB)
 Get semantic ranges around a specified position in a file. More...
 
std::vector< std::pair< Path, std::size_t > > getUsedBytesPerFile () const
 Returns estimated memory usage for each of the currently open files. More...
 
LLVM_NODISCARD bool blockUntilIdleForTest (llvm::Optional< double > TimeoutSeconds=10)
 

Static Public Member Functions

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 78 of file ClangdServer.h.

Constructor & Destructor Documentation

◆ ClangdServer()

clang::clangd::ClangdServer::ClangdServer ( const GlobalCompilationDatabase CDB,
const FileSystemProvider FSProvider,
DiagnosticsConsumer DiagConsumer,
const Options Opts 
)

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().

After each parsing request finishes, ClangdServer reports diagnostics to DiagConsumer. Note that a callback to DiagConsumer happens on a worker thread. Therefore, instances of DiagConsumer must properly synchronize access to shared state.

Definition at line 112 of file ClangdServer.cpp.

Member Function Documentation

◆ addDocument()

void clang::clangd::ClangdServer::addDocument ( PathRef  File,
StringRef  Contents,
WantDiagnostics  WD = WantDiagnostics::Auto 
)

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.

Definition at line 156 of file ClangdServer.cpp.

References FS, and clang::clangd::FileSystemProvider::getFileSystem().

Referenced by clang::clangd::runAddDocument(), and clang::clangd::TEST_F().

◆ 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 392 of file ClangdServer.cpp.

References Action, FormatStyle(), FS, clang::clangd::FileSystemProvider::getFileSystem(), clang::clangd::prepareTweak(), and clang::clangd::tweakSelection().

◆ blockUntilIdleForTest()

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

◆ codeComplete()

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

Run code completion for File at Pos.

Request is processed asynchronously.

This method should only be called for currently tracked files. However, it is safe to call removeDocument for File after this method returns, even while returned future is not yet ready. A version of codeComplete that runs Callback on the processing thread when codeComplete results become available.

Definition at line 185 of file ClangdServer.cpp.

◆ documentSymbols()

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

Retrieve the symbols within the specified file.

Definition at line 553 of file ClangdServer.cpp.

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

◆ dumpAST()

void clang::clangd::ClangdServer::dumpAST ( PathRef  File,
llvm::unique_function< void(std::string)>  Callback 
)

Only for testing purposes.

Waits until all requests to worker thread are finished and dumps AST for File. File must be in the list of added documents.

Definition at line 420 of file ClangdServer.cpp.

References Action.

◆ enumerateTweaks()

void clang::clangd::ClangdServer::enumerateTweaks ( PathRef  File,
Range  Sel,
Callback< std::vector< TweakRef >>  CB 
)

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

Definition at line 373 of file ClangdServer.cpp.

References Action, clang::clangd::prepareTweaks(), clang::clangd::TUScheduler::runWithAST(), and clang::clangd::tweakSelection().

◆ 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 490 of file ClangdServer.cpp.

References Action, clang::clangd::findDocumentHighlights(), and clang::clangd::TUScheduler::runWithAST().

◆ 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 502 of file ClangdServer.cpp.

References Action, and FormatStyle().

◆ findReferences()

void clang::clangd::ClangdServer::findReferences ( PathRef  File,
Position  Pos,
uint32_t  Limit,
Callback< std::vector< Location >>  CB 
)

Retrieve locations for symbol references.

Definition at line 564 of file ClangdServer.cpp.

References Action, clang::clangd::findReferences(), Limit, and clang::clangd::TUScheduler::runWithAST().

◆ formatFile()

llvm::Expected< tooling::Replacements > clang::clangd::ClangdServer::formatFile ( StringRef  Code,
PathRef  File 
)

Run formatting for the whole File with content Code.

Definition at line 280 of file ClangdServer.cpp.

References Range.

◆ formatOnType()

llvm::Expected< std::vector< TextEdit > > clang::clangd::ClangdServer::formatOnType ( StringRef  Code,
PathRef  File,
Position  Pos,
StringRef  TriggerText 
)

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

Definition at line 286 of file ClangdServer.cpp.

References FS, clang::clangd::FileSystemProvider::getFileSystem(), and clang::clangd::positionToOffset().

◆ formatRange()

llvm::Expected< tooling::Replacements > clang::clangd::ClangdServer::formatRange ( StringRef  Code,
PathRef  File,
Range  Rng 
)

Run formatting for Rng inside File with content Code.

Definition at line 269 of file ClangdServer.cpp.

◆ getDocument()

llvm::StringRef clang::clangd::ClangdServer::getDocument ( PathRef  File) const

Get the contents of File, which should have been added.

Definition at line 181 of file ClangdServer.cpp.

References clang::clangd::TUScheduler::getContents().

◆ getUsedBytesPerFile()

std::vector< std::pair< Path, std::size_t > > clang::clangd::ClangdServer::getUsedBytesPerFile ( ) const

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

The order of results is unspecified. 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 600 of file ClangdServer.cpp.

References clang::clangd::TUScheduler::getUsedBytesPerFile().

◆ 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 440 of file ClangdServer.cpp.

References Action, clang::clangd::locateSymbolAt(), and clang::clangd::TUScheduler::runWithAST().

◆ onFileEvent()

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

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

Definition at line 537 of file ClangdServer.cpp.

◆ optsForTest()

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

Definition at line 103 of file ClangdServer.cpp.

◆ prepareRename()

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

◆ 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.

Definition at line 179 of file ClangdServer.cpp.

References clang::clangd::TUScheduler::remove().

◆ rename()

void clang::clangd::ClangdServer::rename ( PathRef  File,
Position  Pos,
llvm::StringRef  NewName,
bool  WantFormat,
Callback< std::vector< TextEdit >>  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 332 of file ClangdServer.cpp.

References Action, Changes, and clang::clangd::renameWithinFile().

◆ 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 530 of file ClangdServer.cpp.

References clang::clangd::resolveTypeHierarchy().

◆ semanticRanges()

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

Get semantic ranges around a specified position in a file.

Definition at line 588 of file ClangdServer.cpp.

References Action, clang::clangd::getSemanticRanges(), and clang::clangd::TUScheduler::runWithAST().

◆ 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 246 of file ClangdServer.cpp.

References Action, clang::clangd::TUScheduler::Consistent, FS, clang::clangd::FileSystemProvider::getFileSystem(), clang::clangd::PreambleData::Preamble, clang::clangd::TUScheduler::runWithPreamble(), and clang::clangd::signatureHelp().

◆ 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 452 of file ClangdServer.cpp.

References Action, Code, FormatStyle(), clang::clangd::getCorrespondingHeaderOrSource(), clang::clangd::FileSystemProvider::getFileSystem(), and clang::clangd::TUScheduler::runWithAST().

◆ 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 576 of file ClangdServer.cpp.

References Action, clang::clangd::getSymbolInfo(), and clang::clangd::TUScheduler::runWithAST().

◆ 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 516 of file ClangdServer.cpp.

References Action, clang::clangd::getTypeHierarchy(), and clang::clangd::TUScheduler::runWithAST().

◆ 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 542 of file ClangdServer.cpp.


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