Location of function name?

Hi Clang Experts, could you kindly advice how to get location of a function name when visiting FunctionDecl in RecursiveASTVisitor (getBeginLoc and getEndLoc return the whole range for the definition, not just the name). Example:

For source code like this:
int f(int x) { return x + 1; }

this is the current code

bool VisitFunctionDecl(clang::FunctionDecl *FD) {

clang::ASTContext &context = FD->getASTContext();

int begin = context.getFullLoc(FD->getBeginLoc()).getFileOffset();
int end = context.getFullLoc(FD->getEndLoc()).getFileOffset();
std::string path = context.getFullLoc(FD->getBeginLoc()).getFileEntry()->getName().str();
. …

}

will give offsets [0,29], but I’d like to get the location of the “f”, i.e. [5-6].

Thanks!
Sterling.

Hi Clang Experts, could you kindly advice how to get location of a function name when visiting FunctionDecl in RecursiveASTVisitor (getBeginLoc and getEndLoc return the whole range for the definition, not just the name). Example:

For source code like this:
int f(int x) { return x + 1; }

this is the current code

bool VisitFunctionDecl(clang::FunctionDecl *FD) {

clang::ASTContext &context = FD->getASTContext();

int begin = context.getFullLoc(FD->getBeginLoc()).getFileOffset();
int end = context.getFullLoc(FD->getEndLoc()).getFileOffset();
std::string path = context.getFullLoc(FD->getBeginLoc()).getFileEntry()->getName().str();
. …

}

will give offsets [0,29], but I’d like to get the location of the “f”, i.e. [5-6].

In general, you can use getLocation() to get the location of the name in a NamedDecl. For a FunctionDecl, there’s also getNameInfo(), which will return more detailed information about the name of the function (allowing you to handle the case where the function name is more than a single token, such as for C++ functions with non-identifier names like “operator int*”). If you want to also include the preceding C++ nested name specifier as part of the name, you can use getQualifierLoc to determine its location.