[SourceKit] Add documentation range in structure (SR-2487) (#11264)

This commit is contained in:
Marcelo Fabri
2017-08-02 20:39:49 +00:00
committed by Xi Ge
parent 0c44bbd9a5
commit d16cce3a94
15 changed files with 136 additions and 37 deletions

View File

@@ -67,6 +67,8 @@ struct RawComment {
bool isEmpty() const { bool isEmpty() const {
return Comments.empty(); return Comments.empty();
} }
CharSourceRange getCharSourceRange();
}; };
struct CommentInfo { struct CommentInfo {

View File

@@ -137,6 +137,7 @@ struct SyntaxStructureNode {
CharSourceRange BodyRange; CharSourceRange BodyRange;
CharSourceRange NameRange; CharSourceRange NameRange;
CharSourceRange TypeRange; CharSourceRange TypeRange;
CharSourceRange DocRange;
std::vector<CharSourceRange> InheritedTypeRanges; std::vector<CharSourceRange> InheritedTypeRanges;
std::vector<SyntaxStructureElement> Elements; std::vector<SyntaxStructureElement> Elements;

View File

@@ -247,3 +247,18 @@ StringRef Decl::getBriefComment() const {
Context.setBriefComment(this, Result); Context.setBriefComment(this, Result);
return Result; return Result;
} }
CharSourceRange RawComment::getCharSourceRange() {
if (this->isEmpty()) {
return CharSourceRange();
}
auto Start = this->Comments.front().Range.getStart();
if (Start.isInvalid()) {
return CharSourceRange();
}
auto End = this->Comments.back().Range.getEnd();
auto Length = (char *)End.getOpaquePointerValue() -
(char* )Start.getOpaquePointerValue();
return CharSourceRange(Start, Length);
}

View File

@@ -418,6 +418,12 @@ CharSourceRange parameterNameRangeOfCallArg(const TupleExpr *TE,
return CharSourceRange(); return CharSourceRange();
} }
static void setDecl(SyntaxStructureNode &N, Decl *D) {
N.Dcl = D;
N.Attrs = D->getAttrs();
N.DocRange = D->getRawComment().getCharSourceRange();
}
} // anonymous namespace } // anonymous namespace
bool SyntaxModelContext::walk(SyntaxModelWalker &Walker) { bool SyntaxModelContext::walk(SyntaxModelWalker &Walker) {
@@ -753,7 +759,7 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
} else { } else {
// Pass Function / Method structure node. // Pass Function / Method structure node.
SyntaxStructureNode SN; SyntaxStructureNode SN;
SN.Dcl = D; setDecl(SN, D);
const DeclContext *DC = AFD->getDeclContext(); const DeclContext *DC = AFD->getDeclContext();
if (DC->isTypeContext()) { if (DC->isTypeContext()) {
if (FD && FD->isStatic()) { if (FD && FD->isStatic()) {
@@ -772,12 +778,11 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
AFD->getBodySourceRange()); AFD->getBodySourceRange());
SN.NameRange = charSourceRangeFromSourceRange(SM, SN.NameRange = charSourceRangeFromSourceRange(SM,
AFD->getSignatureSourceRange()); AFD->getSignatureSourceRange());
SN.Attrs = AFD->getAttrs();
pushStructureNode(SN, AFD); pushStructureNode(SN, AFD);
} }
} else if (auto *NTD = dyn_cast<NominalTypeDecl>(D)) { } else if (auto *NTD = dyn_cast<NominalTypeDecl>(D)) {
SyntaxStructureNode SN; SyntaxStructureNode SN;
SN.Dcl = D; setDecl(SN, D);
SN.Kind = syntaxStructureKindFromNominalTypeDecl(NTD); SN.Kind = syntaxStructureKindFromNominalTypeDecl(NTD);
SN.Range = charSourceRangeFromSourceRange(SM, NTD->getSourceRange()); SN.Range = charSourceRangeFromSourceRange(SM, NTD->getSourceRange());
SN.BodyRange = innerCharSourceRangeFromSourceRange(SM, NTD->getBraces()); SN.BodyRange = innerCharSourceRangeFromSourceRange(SM, NTD->getBraces());
@@ -792,12 +797,11 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
SN.Elements.emplace_back(SyntaxStructureElementKind::TypeRef, TR); SN.Elements.emplace_back(SyntaxStructureElementKind::TypeRef, TR);
} }
SN.Attrs = NTD->getAttrs();
pushStructureNode(SN, NTD); pushStructureNode(SN, NTD);
} else if (auto *ED = dyn_cast<ExtensionDecl>(D)) { } else if (auto *ED = dyn_cast<ExtensionDecl>(D)) {
SyntaxStructureNode SN; SyntaxStructureNode SN;
SN.Dcl = D; setDecl(SN, D);
SN.Kind = SyntaxStructureKind::Extension; SN.Kind = SyntaxStructureKind::Extension;
SN.Range = charSourceRangeFromSourceRange(SM, ED->getSourceRange()); SN.Range = charSourceRangeFromSourceRange(SM, ED->getSourceRange());
SN.BodyRange = innerCharSourceRangeFromSourceRange(SM, ED->getBraces()); SN.BodyRange = innerCharSourceRangeFromSourceRange(SM, ED->getBraces());
@@ -811,7 +815,6 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
SN.Elements.emplace_back(SyntaxStructureElementKind::TypeRef, TR); SN.Elements.emplace_back(SyntaxStructureElementKind::TypeRef, TR);
} }
SN.Attrs = ED->getAttrs();
pushStructureNode(SN, ED); pushStructureNode(SN, ED);
} else if (auto *PD = dyn_cast<ParamDecl>(D)) { } else if (auto *PD = dyn_cast<ParamDecl>(D)) {
@@ -832,7 +835,7 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
const DeclContext *DC = VD->getDeclContext(); const DeclContext *DC = VD->getDeclContext();
if (DC->isTypeContext() || DC->isModuleScopeContext()) { if (DC->isTypeContext() || DC->isModuleScopeContext()) {
SyntaxStructureNode SN; SyntaxStructureNode SN;
SN.Dcl = D; setDecl(SN, D);
SourceRange SR; SourceRange SR;
if (auto *PBD = VD->getParentPatternBinding()) if (auto *PBD = VD->getParentPatternBinding())
SR = PBD->getSourceRange(); SR = PBD->getSourceRange();
@@ -863,7 +866,6 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
} else { } else {
SN.Kind = SyntaxStructureKind::GlobalVariable; SN.Kind = SyntaxStructureKind::GlobalVariable;
} }
SN.Attrs = VD->getAttrs();
pushStructureNode(SN, VD); pushStructureNode(SN, VD);
} }
@@ -915,7 +917,7 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
} else if (auto *EnumCaseD = dyn_cast<EnumCaseDecl>(D)) { } else if (auto *EnumCaseD = dyn_cast<EnumCaseDecl>(D)) {
SyntaxStructureNode SN; SyntaxStructureNode SN;
SN.Dcl = D; setDecl(SN, D);
SN.Kind = SyntaxStructureKind::EnumCase; SN.Kind = SyntaxStructureKind::EnumCase;
SN.Range = charSourceRangeFromSourceRange(SM, D->getSourceRange()); SN.Range = charSourceRangeFromSourceRange(SM, D->getSourceRange());
@@ -939,7 +941,7 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
if (EnumElemD->getName().empty()) if (EnumElemD->getName().empty())
continue; continue;
SyntaxStructureNode SN; SyntaxStructureNode SN;
SN.Dcl = EnumElemD; setDecl(SN, EnumElemD);
SN.Kind = SyntaxStructureKind::EnumElement; SN.Kind = SyntaxStructureKind::EnumElement;
SN.Range = charSourceRangeFromSourceRange(SM, SN.Range = charSourceRangeFromSourceRange(SM,
EnumElemD->getSourceRange()); EnumElemD->getSourceRange());
@@ -956,23 +958,21 @@ bool ModelASTWalker::walkToDeclPre(Decl *D) {
} }
} else if (auto *TypeAliasD = dyn_cast<TypeAliasDecl>(D)) { } else if (auto *TypeAliasD = dyn_cast<TypeAliasDecl>(D)) {
SyntaxStructureNode SN; SyntaxStructureNode SN;
SN.Dcl = TypeAliasD; setDecl(SN, D);
SN.Kind = SyntaxStructureKind::TypeAlias; SN.Kind = SyntaxStructureKind::TypeAlias;
SN.Range = charSourceRangeFromSourceRange(SM, SN.Range = charSourceRangeFromSourceRange(SM,
TypeAliasD->getSourceRange()); TypeAliasD->getSourceRange());
SN.NameRange = CharSourceRange(TypeAliasD->getNameLoc(), SN.NameRange = CharSourceRange(TypeAliasD->getNameLoc(),
TypeAliasD->getName().getLength()); TypeAliasD->getName().getLength());
SN.Attrs = TypeAliasD->getAttrs();
pushStructureNode(SN, TypeAliasD); pushStructureNode(SN, TypeAliasD);
} else if (auto *SubscriptD = dyn_cast<SubscriptDecl>(D)) { } else if (auto *SubscriptD = dyn_cast<SubscriptDecl>(D)) {
SyntaxStructureNode SN; SyntaxStructureNode SN;
SN.Dcl = SubscriptD; setDecl(SN, D);
SN.Kind = SyntaxStructureKind::Subscript; SN.Kind = SyntaxStructureKind::Subscript;
SN.Range = charSourceRangeFromSourceRange(SM, SN.Range = charSourceRangeFromSourceRange(SM,
SubscriptD->getSourceRange()); SubscriptD->getSourceRange());
SN.BodyRange = innerCharSourceRangeFromSourceRange(SM, SN.BodyRange = innerCharSourceRangeFromSourceRange(SM,
SubscriptD->getBracesRange()); SubscriptD->getBracesRange());
SN.Attrs = SubscriptD->getAttrs();
pushStructureNode(SN, SubscriptD); pushStructureNode(SN, SubscriptD);
} }

View File

@@ -4116,6 +4116,8 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.namelength: 8, key.namelength: 8,
key.bodyoffset: 237, key.bodyoffset: 237,
key.bodylength: 106, key.bodylength: 106,
key.docoffset: 157,
key.doclength: 26,
key.inheritedtypes: [ key.inheritedtypes: [
{ {
key.name: "RawRepresentable" key.name: "RawRepresentable"
@@ -4199,7 +4201,9 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.length: 31, key.length: 31,
key.typename: "FooEnum1", key.typename: "FooEnum1",
key.nameoffset: 384, key.nameoffset: 384,
key.namelength: 9 key.namelength: 9,
key.docoffset: 346,
key.doclength: 27
}, },
{ {
key.kind: source.lang.swift.decl.struct, key.kind: source.lang.swift.decl.struct,
@@ -4423,6 +4427,8 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.namelength: 19, key.namelength: 19,
key.bodyoffset: 970, key.bodyoffset: 970,
key.bodylength: 133, key.bodylength: 133,
key.docoffset: 894,
key.doclength: 37,
key.inheritedtypes: [ key.inheritedtypes: [
{ {
key.name: "Int" key.name: "Int"
@@ -4502,6 +4508,8 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.namelength: 17, key.namelength: 17,
key.bodyoffset: 1186, key.bodyoffset: 1186,
key.bodylength: 210, key.bodylength: 210,
key.docoffset: 1106,
key.doclength: 35,
key.inheritedtypes: [ key.inheritedtypes: [
{ {
key.name: "OptionSet" key.name: "OptionSet"
@@ -4803,7 +4811,9 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.offset: 1974, key.offset: 1974,
key.length: 29, key.length: 29,
key.nameoffset: 1984, key.nameoffset: 1984,
key.namelength: 11 key.namelength: 11,
key.docoffset: 1938,
key.doclength: 29
}, },
{ {
key.kind: source.lang.swift.decl.var.global, key.kind: source.lang.swift.decl.var.global,
@@ -4814,7 +4824,9 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.length: 20, key.length: 20,
key.typename: "Int32", key.typename: "Int32",
key.nameoffset: 2043, key.nameoffset: 2043,
key.namelength: 9 key.namelength: 9,
key.docoffset: 2005,
key.doclength: 27
}, },
{ {
key.kind: source.lang.swift.decl.function.free, key.kind: source.lang.swift.decl.function.free,
@@ -4824,6 +4836,8 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.length: 34, key.length: 34,
key.nameoffset: 2099, key.nameoffset: 2099,
key.namelength: 20, key.namelength: 20,
key.docoffset: 2061,
key.doclength: 26,
key.substructure: [ key.substructure: [
{ {
key.kind: source.lang.swift.decl.var.parameter, key.kind: source.lang.swift.decl.var.parameter,
@@ -4967,7 +4981,9 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.offset: 2627, key.offset: 2627,
key.length: 26, key.length: 26,
key.nameoffset: 2632, key.nameoffset: 2632,
key.namelength: 21 key.namelength: 21,
key.docoffset: 2557,
key.doclength: 62
}, },
{ {
key.kind: source.lang.swift.decl.function.free, key.kind: source.lang.swift.decl.function.free,
@@ -4985,7 +5001,9 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.offset: 2800, key.offset: 2800,
key.length: 26, key.length: 26,
key.nameoffset: 2805, key.nameoffset: 2805,
key.namelength: 21 key.namelength: 21,
key.docoffset: 2733,
key.doclength: 59
}, },
{ {
key.kind: source.lang.swift.decl.function.free, key.kind: source.lang.swift.decl.function.free,
@@ -4994,7 +5012,9 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.offset: 2888, key.offset: 2888,
key.length: 26, key.length: 26,
key.nameoffset: 2893, key.nameoffset: 2893,
key.namelength: 21 key.namelength: 21,
key.docoffset: 2828,
key.doclength: 53
}, },
{ {
key.kind: source.lang.swift.decl.function.free, key.kind: source.lang.swift.decl.function.free,
@@ -5003,7 +5023,9 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.offset: 2982, key.offset: 2982,
key.length: 26, key.length: 26,
key.nameoffset: 2987, key.nameoffset: 2987,
key.namelength: 21 key.namelength: 21,
key.docoffset: 2916,
key.doclength: 59
}, },
{ {
key.kind: source.lang.swift.decl.function.free, key.kind: source.lang.swift.decl.function.free,
@@ -5013,6 +5035,8 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.length: 58, key.length: 58,
key.nameoffset: 3072, key.nameoffset: 3072,
key.namelength: 44, key.namelength: 44,
key.docoffset: 3010,
key.doclength: 50,
key.substructure: [ key.substructure: [
{ {
key.kind: source.lang.swift.decl.var.parameter, key.kind: source.lang.swift.decl.var.parameter,
@@ -5036,6 +5060,8 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.namelength: 15, key.namelength: 15,
key.bodyoffset: 3193, key.bodyoffset: 3193,
key.bodylength: 545, key.bodylength: 545,
key.docoffset: 3127,
key.doclength: 33,
key.substructure: [ key.substructure: [
{ {
key.kind: source.lang.swift.decl.function.method.instance, key.kind: source.lang.swift.decl.function.method.instance,
@@ -5044,7 +5070,9 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.offset: 3258, key.offset: 3258,
key.length: 19, key.length: 19,
key.nameoffset: 3263, key.nameoffset: 3263,
key.namelength: 14 key.namelength: 14,
key.docoffset: 3204,
key.doclength: 43
}, },
{ {
key.kind: source.lang.swift.decl.function.method.instance, key.kind: source.lang.swift.decl.function.method.instance,
@@ -5053,7 +5081,9 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.offset: 3363, key.offset: 3363,
key.length: 40, key.length: 40,
key.nameoffset: 3368, key.nameoffset: 3368,
key.namelength: 35 key.namelength: 35,
key.docoffset: 3288,
key.doclength: 64
}, },
{ {
key.kind: source.lang.swift.decl.function.method.instance, key.kind: source.lang.swift.decl.function.method.instance,
@@ -5062,7 +5092,9 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.offset: 3503, key.offset: 3503,
key.length: 40, key.length: 40,
key.nameoffset: 3508, key.nameoffset: 3508,
key.namelength: 35 key.namelength: 35,
key.docoffset: 3414,
key.doclength: 77
}, },
{ {
key.kind: source.lang.swift.decl.function.method.static, key.kind: source.lang.swift.decl.function.method.static,
@@ -5243,6 +5275,8 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.namelength: 15, key.namelength: 15,
key.bodyoffset: 4192, key.bodyoffset: 4192,
key.bodylength: 422, key.bodylength: 422,
key.docoffset: 4096,
key.doclength: 33,
key.inheritedtypes: [ key.inheritedtypes: [
{ {
key.name: "FooClassBase" key.name: "FooClassBase"

View File

@@ -222,7 +222,9 @@ public protocol SameNameProtocol {
key.nameoffset: 179, key.nameoffset: 179,
key.namelength: 8, key.namelength: 8,
key.bodyoffset: 189, key.bodyoffset: 189,
key.bodylength: 1 key.bodylength: 1,
key.docoffset: 106,
key.doclength: 62
}, },
{ {
key.kind: source.lang.swift.decl.protocol, key.kind: source.lang.swift.decl.protocol,

View File

@@ -390,6 +390,8 @@ internal enum Colors {
key.namelength: 19, key.namelength: 19,
key.bodyoffset: 200, key.bodyoffset: 200,
key.bodylength: 51, key.bodylength: 51,
key.docoffset: 139,
key.doclength: 27,
key.substructure: [ key.substructure: [
{ {
key.kind: source.lang.swift.decl.function.method.instance, key.kind: source.lang.swift.decl.function.method.instance,
@@ -498,7 +500,9 @@ internal enum Colors {
key.length: 13, key.length: 13,
key.typename: "Int", key.typename: "Int",
key.nameoffset: 512, key.nameoffset: 512,
key.namelength: 4 key.namelength: 4,
key.docoffset: 473,
key.doclength: 22
}, },
{ {
key.kind: source.lang.swift.decl.var.instance, key.kind: source.lang.swift.decl.var.instance,
@@ -509,7 +513,9 @@ internal enum Colors {
key.length: 24, key.length: 24,
key.typename: "(Int, Int)", key.typename: "(Int, Int)",
key.nameoffset: 564, key.nameoffset: 564,
key.namelength: 2 key.namelength: 2,
key.docoffset: 527,
key.doclength: 19
} }
] ]
}, },

View File

@@ -211,6 +211,8 @@ public:
unsigned NameLength, unsigned NameLength,
unsigned BodyOffset, unsigned BodyOffset,
unsigned BodyLength, unsigned BodyLength,
unsigned DocOffset,
unsigned DocLength,
StringRef DisplayName, StringRef DisplayName,
StringRef TypeName, StringRef TypeName,
StringRef RuntimeName, StringRef RuntimeName,

View File

@@ -69,6 +69,8 @@ KEY(BodyOffset, "key.bodyoffset")
KEY(BodyLength, "key.bodylength") KEY(BodyLength, "key.bodylength")
KEY(ThrowOffset, "key.throwoffset") KEY(ThrowOffset, "key.throwoffset")
KEY(ThrowLength, "key.throwlength") KEY(ThrowLength, "key.throwlength")
KEY(DocOffset, "key.docoffset")
KEY(DocLength, "key.doclength")
KEY(IsLocal, "key.is_local") KEY(IsLocal, "key.is_local")
KEY(InheritedTypes, "key.inheritedtypes") KEY(InheritedTypes, "key.inheritedtypes")
KEY(Attributes, "key.attributes") KEY(Attributes, "key.attributes")

View File

@@ -1027,6 +1027,15 @@ public:
BodyOffset = BodyEnd = 0; BodyOffset = BodyEnd = 0;
} }
unsigned DocOffset = 0;
unsigned DocEnd = 0;
if (Node.DocRange.isValid()) {
DocOffset = SrcManager.getLocOffsetInBuffer(Node.DocRange.getStart(),
BufferID);
DocEnd = SrcManager.getLocOffsetInBuffer(Node.DocRange.getEnd(),
BufferID);
}
UIdent Kind = SwiftLangSupport::getUIDForSyntaxStructureKind(Node.Kind); UIdent Kind = SwiftLangSupport::getUIDForSyntaxStructureKind(Node.Kind);
UIdent AccessLevel; UIdent AccessLevel;
UIdent SetterAccessLevel; UIdent SetterAccessLevel;
@@ -1080,6 +1089,7 @@ public:
Kind, AccessLevel, SetterAccessLevel, Kind, AccessLevel, SetterAccessLevel,
NameStart, NameEnd - NameStart, NameStart, NameEnd - NameStart,
BodyOffset, BodyEnd - BodyOffset, BodyOffset, BodyEnd - BodyOffset,
DocOffset, DocEnd - DocOffset,
DisplayName, DisplayName,
TypeName, RuntimeName, TypeName, RuntimeName,
SelectorName, SelectorName,
@@ -1144,7 +1154,7 @@ public:
UIdent Kind = SwiftLangSupport::getUIDForSyntaxNodeKind(Node.Kind); UIdent Kind = SwiftLangSupport::getUIDForSyntaxNodeKind(Node.Kind);
Consumer.beginDocumentSubStructure(StartOffset, EndOffset - StartOffset, Consumer.beginDocumentSubStructure(StartOffset, EndOffset - StartOffset,
Kind, UIdent(), UIdent(), 0, 0, Kind, UIdent(), UIdent(), 0, 0,
0, 0, 0, 0, 0, 0,
StringRef(), StringRef(),
StringRef(), StringRef(), StringRef(), StringRef(),
StringRef(), StringRef(),

View File

@@ -33,6 +33,7 @@ public:
SourceKit::UIdent SetterAccessLevel, SourceKit::UIdent SetterAccessLevel,
unsigned NameOffset, unsigned NameLength, unsigned NameOffset, unsigned NameLength,
unsigned BodyOffset, unsigned BodyLength, unsigned BodyOffset, unsigned BodyLength,
unsigned DocOffset, unsigned DocLength,
llvm::StringRef DisplayName, llvm::StringRef TypeName, llvm::StringRef DisplayName, llvm::StringRef TypeName,
llvm::StringRef RuntimeName, llvm::StringRef RuntimeName,
llvm::StringRef SelectorName, llvm::StringRef SelectorName,

View File

@@ -34,6 +34,8 @@ struct Node {
unsigned NameLength; unsigned NameLength;
unsigned BodyOffset; unsigned BodyOffset;
unsigned BodyLength; unsigned BodyLength;
unsigned DocOffset;
unsigned DocLength;
std::string DisplayName; std::string DisplayName;
std::string TypeName; std::string TypeName;
std::string RuntimeName; std::string RuntimeName;
@@ -72,6 +74,8 @@ struct DocStructureArrayBuilder::Implementation {
unsigned, // NameLength unsigned, // NameLength
unsigned, // BodyOffset unsigned, // BodyOffset
unsigned, // BodyLength unsigned, // BodyLength
unsigned, // DocOffset
unsigned, // DocLength
Optional<StringRef>, // DisplayName Optional<StringRef>, // DisplayName
Optional<StringRef>, // TypeName Optional<StringRef>, // TypeName
Optional<StringRef>, // RuntimeName Optional<StringRef>, // RuntimeName
@@ -167,7 +171,8 @@ void DocStructureArrayBuilder::beginSubStructure(
unsigned Offset, unsigned Length, SourceKit::UIdent Kind, unsigned Offset, unsigned Length, SourceKit::UIdent Kind,
SourceKit::UIdent AccessLevel, SourceKit::UIdent SetterAccessLevel, SourceKit::UIdent AccessLevel, SourceKit::UIdent SetterAccessLevel,
unsigned NameOffset, unsigned NameLength, unsigned BodyOffset, unsigned NameOffset, unsigned NameLength, unsigned BodyOffset,
unsigned BodyLength, StringRef DisplayName, StringRef TypeName, unsigned BodyLength, unsigned DocOffset, unsigned DocLength,
StringRef DisplayName, StringRef TypeName,
StringRef RuntimeName, StringRef SelectorName, StringRef RuntimeName, StringRef SelectorName,
ArrayRef<StringRef> InheritedTypes, ArrayRef<UIdent> Attrs) { ArrayRef<StringRef> InheritedTypes, ArrayRef<UIdent> Attrs) {
@@ -181,6 +186,8 @@ void DocStructureArrayBuilder::beginSubStructure(
NameLength, NameLength,
BodyOffset, BodyOffset,
BodyLength, BodyLength,
DocOffset,
DocLength,
DisplayName, DisplayName,
TypeName, TypeName,
RuntimeName, RuntimeName,
@@ -216,10 +223,10 @@ void DocStructureArrayBuilder::endSubStructure() {
impl.structureBuilder.addEntry( impl.structureBuilder.addEntry(
node.Offset, node.Length, node.Kind, node.AccessLevel, node.Offset, node.Length, node.Kind, node.AccessLevel,
node.SetterAccessLevel, node.NameOffset, node.NameLength, node.BodyOffset, node.SetterAccessLevel, node.NameOffset, node.NameLength, node.BodyOffset,
node.BodyLength, str(node.DisplayName), str(node.TypeName), node.BodyLength, node.DocOffset, node.DocLength, str(node.DisplayName),
str(node.RuntimeName), str(node.SelectorName), node.InheritedTypesOffset, str(node.TypeName), str(node.RuntimeName), str(node.SelectorName),
node.AttrsOffset, impl.addElements(node.elements), node.InheritedTypesOffset, node.AttrsOffset,
impl.addChildren(node.childIndices)); impl.addElements(node.elements), impl.addChildren(node.childIndices));
} }
std::unique_ptr<llvm::MemoryBuffer> DocStructureArrayBuilder::createBuffer() { std::unique_ptr<llvm::MemoryBuffer> DocStructureArrayBuilder::createBuffer() {
@@ -280,6 +287,8 @@ struct OutNode {
unsigned NameLength; unsigned NameLength;
unsigned BodyOffset; unsigned BodyOffset;
unsigned BodyLength; unsigned BodyLength;
unsigned DocOffset;
unsigned DocLength;
const char *DisplayName; const char *DisplayName;
const char *TypeName; const char *TypeName;
const char *RuntimeName; const char *RuntimeName;
@@ -331,6 +340,8 @@ private:
unsigned, // NameLength unsigned, // NameLength
unsigned, // BodyOffset unsigned, // BodyOffset
unsigned, // BodyLength unsigned, // BodyLength
unsigned, // DocOffset
unsigned, // DocLength
const char *, // DisplayName const char *, // DisplayName
const char *, // TypeName const char *, // TypeName
const char *, // RuntimeName const char *, // RuntimeName
@@ -353,8 +364,9 @@ OutNode DocStructureArrayReader::readStructure(size_t index) {
reader.readEntries( reader.readEntries(
index, result.Offset, result.Length, result.Kind, result.AccessLevel, index, result.Offset, result.Length, result.Kind, result.AccessLevel,
result.SetterAccessLevel, result.NameOffset, result.NameLength, result.SetterAccessLevel, result.NameOffset, result.NameLength,
result.BodyOffset, result.BodyLength, result.DisplayName, result.TypeName, result.BodyOffset, result.BodyLength, result.DocOffset, result.DocLength,
result.RuntimeName, result.SelectorName, result.InheritedTypesOffset, result.DisplayName, result.TypeName, result.RuntimeName,
result.SelectorName, result.InheritedTypesOffset,
result.AttrsOffset, result.ElementsOffset, result.ChildIndicesOffset); result.AttrsOffset, result.ElementsOffset, result.ChildIndicesOffset);
return result; return result;
} }
@@ -461,6 +473,10 @@ struct DocStructureReader {
APPLY(KeyBodyOffset, Int, node.BodyOffset); APPLY(KeyBodyOffset, Int, node.BodyOffset);
APPLY(KeyBodyLength, Int, node.BodyLength); APPLY(KeyBodyLength, Int, node.BodyLength);
} }
if (node.DocOffset || node.DocLength) {
APPLY(KeyDocOffset, Int, node.DocOffset);
APPLY(KeyDocLength, Int, node.DocLength);
}
if (node.DisplayName) if (node.DisplayName)
APPLY(KeyName, String, node.DisplayName); APPLY(KeyName, String, node.DisplayName);
if (node.TypeName) if (node.TypeName)

View File

@@ -1894,6 +1894,8 @@ public:
unsigned NameLength, unsigned NameLength,
unsigned BodyOffset, unsigned BodyOffset,
unsigned BodyLength, unsigned BodyLength,
unsigned DocOffset,
unsigned DocLength,
StringRef DisplayName, StringRef DisplayName,
StringRef TypeName, StringRef TypeName,
StringRef RuntimeName, StringRef RuntimeName,
@@ -2119,6 +2121,8 @@ SKEditorConsumer::beginDocumentSubStructure(unsigned Offset,
unsigned NameLength, unsigned NameLength,
unsigned BodyOffset, unsigned BodyOffset,
unsigned BodyLength, unsigned BodyLength,
unsigned DocOffset,
unsigned DocLength,
StringRef DisplayName, StringRef DisplayName,
StringRef TypeName, StringRef TypeName,
StringRef RuntimeName, StringRef RuntimeName,
@@ -2128,8 +2132,8 @@ SKEditorConsumer::beginDocumentSubStructure(unsigned Offset,
if (EnableStructure) { if (EnableStructure) {
DocStructure.beginSubStructure( DocStructure.beginSubStructure(
Offset, Length, Kind, AccessLevel, SetterAccessLevel, NameOffset, Offset, Length, Kind, AccessLevel, SetterAccessLevel, NameOffset,
NameLength, BodyOffset, BodyLength, DisplayName, TypeName, RuntimeName, NameLength, BodyOffset, BodyLength, DocOffset, DocLength, DisplayName,
SelectorName, InheritedTypes, Attrs); TypeName, RuntimeName, SelectorName, InheritedTypes, Attrs);
} }
return true; return true;
} }

View File

@@ -52,6 +52,8 @@ class NullEditorConsumer : public EditorConsumer {
unsigned NameLength, unsigned NameLength,
unsigned BodyOffset, unsigned BodyOffset,
unsigned BodyLength, unsigned BodyLength,
unsigned DocOffset,
unsigned DocLength,
StringRef DisplayName, StringRef DisplayName,
StringRef TypeName, StringRef TypeName,
StringRef RuntimeName, StringRef RuntimeName,

View File

@@ -57,6 +57,8 @@ private:
unsigned NameLength, unsigned NameLength,
unsigned BodyOffset, unsigned BodyOffset,
unsigned BodyLength, unsigned BodyLength,
unsigned DocOffset,
unsigned DocLength,
StringRef DisplayName, StringRef DisplayName,
StringRef TypeName, StringRef TypeName,
StringRef RuntimeName, StringRef RuntimeName,