mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[SourceKit] Add documentation range in structure (SR-2487) (#11264)
This commit is contained in:
@@ -418,6 +418,12 @@ CharSourceRange parameterNameRangeOfCallArg(const TupleExpr *TE,
|
||||
return CharSourceRange();
|
||||
}
|
||||
|
||||
static void setDecl(SyntaxStructureNode &N, Decl *D) {
|
||||
N.Dcl = D;
|
||||
N.Attrs = D->getAttrs();
|
||||
N.DocRange = D->getRawComment().getCharSourceRange();
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
bool SyntaxModelContext::walk(SyntaxModelWalker &Walker) {
|
||||
@@ -753,7 +759,7 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
|
||||
} else {
|
||||
// Pass Function / Method structure node.
|
||||
SyntaxStructureNode SN;
|
||||
SN.Dcl = D;
|
||||
setDecl(SN, D);
|
||||
const DeclContext *DC = AFD->getDeclContext();
|
||||
if (DC->isTypeContext()) {
|
||||
if (FD && FD->isStatic()) {
|
||||
@@ -772,12 +778,11 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
|
||||
AFD->getBodySourceRange());
|
||||
SN.NameRange = charSourceRangeFromSourceRange(SM,
|
||||
AFD->getSignatureSourceRange());
|
||||
SN.Attrs = AFD->getAttrs();
|
||||
pushStructureNode(SN, AFD);
|
||||
}
|
||||
} else if (auto *NTD = dyn_cast<NominalTypeDecl>(D)) {
|
||||
SyntaxStructureNode SN;
|
||||
SN.Dcl = D;
|
||||
setDecl(SN, D);
|
||||
SN.Kind = syntaxStructureKindFromNominalTypeDecl(NTD);
|
||||
SN.Range = charSourceRangeFromSourceRange(SM, NTD->getSourceRange());
|
||||
SN.BodyRange = innerCharSourceRangeFromSourceRange(SM, NTD->getBraces());
|
||||
@@ -792,12 +797,11 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
|
||||
SN.Elements.emplace_back(SyntaxStructureElementKind::TypeRef, TR);
|
||||
}
|
||||
|
||||
SN.Attrs = NTD->getAttrs();
|
||||
pushStructureNode(SN, NTD);
|
||||
|
||||
} else if (auto *ED = dyn_cast<ExtensionDecl>(D)) {
|
||||
SyntaxStructureNode SN;
|
||||
SN.Dcl = D;
|
||||
setDecl(SN, D);
|
||||
SN.Kind = SyntaxStructureKind::Extension;
|
||||
SN.Range = charSourceRangeFromSourceRange(SM, ED->getSourceRange());
|
||||
SN.BodyRange = innerCharSourceRangeFromSourceRange(SM, ED->getBraces());
|
||||
@@ -811,7 +815,6 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
|
||||
SN.Elements.emplace_back(SyntaxStructureElementKind::TypeRef, TR);
|
||||
}
|
||||
|
||||
SN.Attrs = ED->getAttrs();
|
||||
pushStructureNode(SN, ED);
|
||||
|
||||
} else if (auto *PD = dyn_cast<ParamDecl>(D)) {
|
||||
@@ -832,7 +835,7 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
|
||||
const DeclContext *DC = VD->getDeclContext();
|
||||
if (DC->isTypeContext() || DC->isModuleScopeContext()) {
|
||||
SyntaxStructureNode SN;
|
||||
SN.Dcl = D;
|
||||
setDecl(SN, D);
|
||||
SourceRange SR;
|
||||
if (auto *PBD = VD->getParentPatternBinding())
|
||||
SR = PBD->getSourceRange();
|
||||
@@ -863,7 +866,6 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
|
||||
} else {
|
||||
SN.Kind = SyntaxStructureKind::GlobalVariable;
|
||||
}
|
||||
SN.Attrs = VD->getAttrs();
|
||||
pushStructureNode(SN, VD);
|
||||
}
|
||||
|
||||
@@ -915,7 +917,7 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
|
||||
|
||||
} else if (auto *EnumCaseD = dyn_cast<EnumCaseDecl>(D)) {
|
||||
SyntaxStructureNode SN;
|
||||
SN.Dcl = D;
|
||||
setDecl(SN, D);
|
||||
SN.Kind = SyntaxStructureKind::EnumCase;
|
||||
SN.Range = charSourceRangeFromSourceRange(SM, D->getSourceRange());
|
||||
|
||||
@@ -939,7 +941,7 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
|
||||
if (EnumElemD->getName().empty())
|
||||
continue;
|
||||
SyntaxStructureNode SN;
|
||||
SN.Dcl = EnumElemD;
|
||||
setDecl(SN, EnumElemD);
|
||||
SN.Kind = SyntaxStructureKind::EnumElement;
|
||||
SN.Range = charSourceRangeFromSourceRange(SM,
|
||||
EnumElemD->getSourceRange());
|
||||
@@ -956,23 +958,21 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
|
||||
}
|
||||
} else if (auto *TypeAliasD = dyn_cast<TypeAliasDecl>(D)) {
|
||||
SyntaxStructureNode SN;
|
||||
SN.Dcl = TypeAliasD;
|
||||
setDecl(SN, D);
|
||||
SN.Kind = SyntaxStructureKind::TypeAlias;
|
||||
SN.Range = charSourceRangeFromSourceRange(SM,
|
||||
TypeAliasD->getSourceRange());
|
||||
SN.NameRange = CharSourceRange(TypeAliasD->getNameLoc(),
|
||||
TypeAliasD->getName().getLength());
|
||||
SN.Attrs = TypeAliasD->getAttrs();
|
||||
pushStructureNode(SN, TypeAliasD);
|
||||
} else if (auto *SubscriptD = dyn_cast<SubscriptDecl>(D)) {
|
||||
SyntaxStructureNode SN;
|
||||
SN.Dcl = SubscriptD;
|
||||
setDecl(SN, D);
|
||||
SN.Kind = SyntaxStructureKind::Subscript;
|
||||
SN.Range = charSourceRangeFromSourceRange(SM,
|
||||
SubscriptD->getSourceRange());
|
||||
SN.BodyRange = innerCharSourceRangeFromSourceRange(SM,
|
||||
SubscriptD->getBracesRange());
|
||||
SN.Attrs = SubscriptD->getAttrs();
|
||||
pushStructureNode(SN, SubscriptD);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user