[CodeCompletion] Annotate override completions

* "description" for override completion is now annotatable
* "description" doesn't include attributes and decl introducer, but it
  includes generic paramters, effects specifiers, result type clause,
  and generic where clauses
* "name" now only include the name and the parameter names
* "sourcetext" should be the same

rdar://63835352
This commit is contained in:
Rintaro Ishizaki
2021-07-15 14:43:04 -07:00
parent 027a41dcc1
commit 7e7b2c3557
15 changed files with 912 additions and 347 deletions

View File

@@ -107,8 +107,17 @@ static StringRef getTagForParameter(PrintStructureKind context) {
return "syntaxtype.number";
case PrintStructureKind::StringLiteral:
return "syntaxtype.string";
case PrintStructureKind::DefaultArgumentClause:
case PrintStructureKind::DeclGenericParameterClause:
case PrintStructureKind::DeclGenericRequirementClause:
case PrintStructureKind::EffectsSpecifiers:
case PrintStructureKind::DeclResultTypeClause:
case PrintStructureKind::FunctionParameterList:
case PrintStructureKind::FunctionParameterType:
// These kinds are ignored by 'isIgnoredPrintStructureKind()'
llvm_unreachable("ignored structure kind");
}
llvm_unreachable("unexpected parameter kind");
llvm_unreachable("unexpected structure kind");
}
static StringRef getDeclNameTagForDecl(const Decl *D) {
@@ -233,7 +242,24 @@ private:
closeTag(tag);
}
bool isIgnoredPrintStructureKind(PrintStructureKind kind) {
switch (kind) {
case PrintStructureKind::DefaultArgumentClause:
case PrintStructureKind::DeclGenericParameterClause:
case PrintStructureKind::DeclGenericRequirementClause:
case PrintStructureKind::EffectsSpecifiers:
case PrintStructureKind::DeclResultTypeClause:
case PrintStructureKind::FunctionParameterList:
case PrintStructureKind::FunctionParameterType:
return true;
default:
return false;
}
}
void printStructurePre(PrintStructureKind kind, const Decl *D) override {
if (isIgnoredPrintStructureKind(kind))
return;
if (kind == PrintStructureKind::TupleElement ||
kind == PrintStructureKind::TupleType)
fixupTuple(kind);
@@ -251,6 +277,8 @@ private:
}
}
void printStructurePost(PrintStructureKind kind, const Decl *D) override {
if (isIgnoredPrintStructureKind(kind))
return;
if (kind == PrintStructureKind::TupleElement ||
kind == PrintStructureKind::TupleType) {
auto prev = contextStack.pop_back_val();