[SourceKit] Add parameter.name.local and parameter.name.external tags

... for the fully annotated declarations. More substructure more better.
This has to go through a callback mechanism similar to printDeclLoc and
printDeclPre since it should be scheduled after both of those are
printed.

rdar://problem/24292226
This commit is contained in:
Ben Langmuir
2016-02-24 15:03:46 -08:00
parent b509fca173
commit d3e98f52ef
5 changed files with 92 additions and 19 deletions

View File

@@ -62,6 +62,9 @@ static StringRef getTagForDecl(const Decl *D, bool isRef) {
return UID.getName().drop_front(strlen(prefix));
}
static StringRef ExternalParamNameTag = "decl.var.parameter.name.external";
static StringRef LocalParamNameTag = "decl.var.parameter.name.local";
/// An ASTPrinter for annotating declarations with XML tags that describe the
/// key substructure of the declaration for CursorInfo/DocInfo.
///
@@ -90,6 +93,31 @@ private:
closeTag("decl.name");
}
void printNamePre(PrintNameContext context) override {
switch (context) {
case PrintNameContext::FunctionParameterExternal:
openTag(ExternalParamNameTag);
break;
case PrintNameContext::FunctionParameterLocal:
openTag(LocalParamNameTag);
break;
default:
break;
}
}
void printNamePost(PrintNameContext context) override {
switch (context) {
case PrintNameContext::FunctionParameterExternal:
closeTag(ExternalParamNameTag);
break;
case PrintNameContext::FunctionParameterLocal:
closeTag(LocalParamNameTag);
break;
default:
break;
}
}
void printTypeRef(const TypeDecl *TD, Identifier name) override {
auto tag = getTagForDecl(TD, /*isRef=*/true);
OS << "<" << tag << " usr=\"";