Skip to content

Commit

Permalink
feat(xrefs): handle columnar decl/def CrossReferences (#3204)
Browse files Browse the repository at this point in the history
  • Loading branch information
schroederc committed Oct 31, 2018
1 parent a2216e5 commit eec113d
Show file tree
Hide file tree
Showing 2 changed files with 125 additions and 4 deletions.
17 changes: 13 additions & 4 deletions kythe/go/serving/xrefs/columnar.go
Original file line number Diff line number Diff line change
Expand Up @@ -319,12 +319,21 @@ func (c *ColumnarTable) CrossReferences(ctx context.Context, req *xpb.CrossRefer
switch e := e.Entry.(type) {
case *xspb.CrossReferences_Reference_:
ref := e.Reference
if xrefs.IsRefKind(req.ReferenceKind, getRefKind(ref)) {
kind := getRefKind(ref)
var anchors *[]*xpb.CrossReferencesReply_RelatedAnchor
switch {
case xrefs.IsDefKind(req.DefinitionKind, kind, false):
anchors = &set.Definition
case xrefs.IsDeclKind(req.DeclarationKind, kind, false):
anchors = &set.Declaration
case xrefs.IsRefKind(req.ReferenceKind, kind):
anchors = &set.Reference
}
if anchors != nil {
a := a2a(ref.Location, emitSnippets).Anchor
a.Ticket = ""
set.Reference = append(set.Reference, &xpb.CrossReferencesReply_RelatedAnchor{
Anchor: a,
})
ra := &xpb.CrossReferencesReply_RelatedAnchor{Anchor: a}
*anchors = append(*anchors, ra)
}
case *xspb.CrossReferences_Relation_:
if len(patterns) == 0 {
Expand Down
112 changes: 112 additions & 0 deletions kythe/go/serving/xrefs/columnar_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,42 @@ func TestServingCrossReferences(t *testing.T) {
Span: span,
},
}},
}, {
Source: src,
Entry: &xspb.CrossReferences_Reference_{&xspb.CrossReferences_Reference{
Kind: &xspb.CrossReferences_Reference_KytheKind{scpb.EdgeKind_DEFINES},
Location: &srvpb.ExpandedAnchor{
Ticket: "kythe:?path=path1#def1",
Span: span,
},
}},
}, {
Source: src,
Entry: &xspb.CrossReferences_Reference_{&xspb.CrossReferences_Reference{
Kind: &xspb.CrossReferences_Reference_KytheKind{scpb.EdgeKind_DEFINES_BINDING},
Location: &srvpb.ExpandedAnchor{
Ticket: "kythe:?path=path2#def2",
Span: span,
},
}},
}, {
Source: src,
Entry: &xspb.CrossReferences_Reference_{&xspb.CrossReferences_Reference{
Kind: &xspb.CrossReferences_Reference_GenericKind{"#internal/ref/declare"},
Location: &srvpb.ExpandedAnchor{
Ticket: "kythe:?path=path1#decl1",
Span: span,
},
}},
}, {
Source: src,
Entry: &xspb.CrossReferences_Reference_{&xspb.CrossReferences_Reference{
Kind: &xspb.CrossReferences_Reference_GenericKind{"#internal/ref/declare"},
Location: &srvpb.ExpandedAnchor{
Ticket: "kythe:?path=path2#decl2",
Span: span,
},
}},
}, {
Source: src,
Entry: &xspb.CrossReferences_Caller_{&xspb.CrossReferences_Caller{
Expand Down Expand Up @@ -424,6 +460,30 @@ func TestServingCrossReferences(t *testing.T) {
},
}}

defs := []*xpb.CrossReferencesReply_RelatedAnchor{{
Anchor: &xpb.Anchor{
Parent: "kythe:?path=path1",
Span: span,
},
}, {
Anchor: &xpb.Anchor{
Parent: "kythe:?path=path2",
Span: span,
},
}}

decls := []*xpb.CrossReferencesReply_RelatedAnchor{{
Anchor: &xpb.Anchor{
Parent: "kythe:?path=path1",
Span: span,
},
}, {
Anchor: &xpb.Anchor{
Parent: "kythe:?path=path2",
Span: span,
},
}}

ticket := kytheuri.ToString(src)

t.Run("requested_node", makeXRefTestCase(ctx, xs, &xpb.CrossReferencesRequest{
Expand Down Expand Up @@ -459,6 +519,58 @@ func TestServingCrossReferences(t *testing.T) {
},
}))

t.Run("decls", makeXRefTestCase(ctx, xs, &xpb.CrossReferencesRequest{
Ticket: []string{ticket},
DeclarationKind: xpb.CrossReferencesRequest_ALL_DECLARATIONS,
}, &xpb.CrossReferencesReply{
CrossReferences: map[string]*xpb.CrossReferencesReply_CrossReferenceSet{
ticket: {
Ticket: ticket,
MarkedSource: ms,
Declaration: decls,
},
},
}))

t.Run("defs", makeXRefTestCase(ctx, xs, &xpb.CrossReferencesRequest{
Ticket: []string{ticket},
DefinitionKind: xpb.CrossReferencesRequest_ALL_DEFINITIONS,
}, &xpb.CrossReferencesReply{
CrossReferences: map[string]*xpb.CrossReferencesReply_CrossReferenceSet{
ticket: {
Ticket: ticket,
MarkedSource: ms,
Definition: defs,
},
},
}))

t.Run("full_defs", makeXRefTestCase(ctx, xs, &xpb.CrossReferencesRequest{
Ticket: []string{ticket},
DefinitionKind: xpb.CrossReferencesRequest_FULL_DEFINITIONS,
}, &xpb.CrossReferencesReply{
CrossReferences: map[string]*xpb.CrossReferencesReply_CrossReferenceSet{
ticket: {
Ticket: ticket,
MarkedSource: ms,
Definition: defs[0:1],
},
},
}))

t.Run("bindings", makeXRefTestCase(ctx, xs, &xpb.CrossReferencesRequest{
Ticket: []string{ticket},
DefinitionKind: xpb.CrossReferencesRequest_BINDING_DEFINITIONS,
}, &xpb.CrossReferencesReply{
CrossReferences: map[string]*xpb.CrossReferencesReply_CrossReferenceSet{
ticket: {
Ticket: ticket,
MarkedSource: ms,
Definition: defs[1:2],
},
},
}))

t.Run("related_nodes", makeXRefTestCase(ctx, xs, &xpb.CrossReferencesRequest{
Ticket: []string{ticket},
ReferenceKind: xpb.CrossReferencesRequest_ALL_REFERENCES,
Expand Down

0 comments on commit eec113d

Please sign in to comment.