handleGetReferencedSymbolsForNode returns node handles for all references found at a node.
(ctx context.Context, params *GetReferencedSymbolsForNodeParams)
| 3247 | |
| 3248 | // handleGetReferencedSymbolsForNode returns node handles for all references found at a node. |
| 3249 | func (s *Session) handleGetReferencedSymbolsForNode(ctx context.Context, params *GetReferencedSymbolsForNodeParams) ([]ReferencedSymbolEntry, error) { |
| 3250 | sd, err := s.getSnapshotData(params.Snapshot) |
| 3251 | if err != nil { |
| 3252 | return nil, err |
| 3253 | } |
| 3254 | program, err := sd.getProgram(params.Project) |
| 3255 | if err != nil { |
| 3256 | return nil, err |
| 3257 | } |
| 3258 | |
| 3259 | node, err := sd.resolveNodeHandle(program, params.Node) |
| 3260 | if err != nil { |
| 3261 | return nil, err |
| 3262 | } |
| 3263 | if node == nil { |
| 3264 | return nil, nil |
| 3265 | } |
| 3266 | |
| 3267 | langSvc, err := s.setupLanguageService(sd, program, params.Project, "") |
| 3268 | if err != nil { |
| 3269 | return nil, err |
| 3270 | } |
| 3271 | |
| 3272 | sourceFiles := program.GetSourceFiles() |
| 3273 | entries := langSvc.GetReferencedSymbolsForNode(ctx, params.Position, node, sourceFiles) |
| 3274 | if entries == nil { |
| 3275 | return nil, nil |
| 3276 | } |
| 3277 | |
| 3278 | var result []ReferencedSymbolEntry |
| 3279 | for _, entry := range entries { |
| 3280 | defNode := entry.DefinitionNode() |
| 3281 | if defNode == nil { |
| 3282 | continue |
| 3283 | } |
| 3284 | var refs []NodeHandle |
| 3285 | for _, ref := range entry.References() { |
| 3286 | if ref.IsNodeEntry() { |
| 3287 | refs = append(refs, sd.nodeHandleFrom(ref.Node())) |
| 3288 | } |
| 3289 | } |
| 3290 | re := ReferencedSymbolEntry{ |
| 3291 | Definition: sd.nodeHandleFrom(defNode), |
| 3292 | References: refs, |
| 3293 | } |
| 3294 | if sym := entry.DefinitionSymbol(); sym != nil { |
| 3295 | re.Symbol = sd.newSymbolResponse(sym, params.Project) |
| 3296 | } |
| 3297 | result = append(result, re) |
| 3298 | } |
| 3299 | return result, nil |
| 3300 | } |
no test coverage detected