handleGetTypesAtPositions returns types at multiple positions in a file.
(ctx context.Context, params *GetTypesAtPositionsParams)
| 1456 | |
| 1457 | // handleGetTypesAtPositions returns types at multiple positions in a file. |
| 1458 | func (s *Session) handleGetTypesAtPositions(ctx context.Context, params *GetTypesAtPositionsParams) ([]*TypeResponse, error) { |
| 1459 | setup, err := s.setupChecker(ctx, params.Snapshot, params.Project) |
| 1460 | if err != nil { |
| 1461 | return nil, err |
| 1462 | } |
| 1463 | defer setup.done() |
| 1464 | |
| 1465 | sourceFile := setup.program.GetSourceFile(params.File.ToFileName()) |
| 1466 | if sourceFile == nil { |
| 1467 | return nil, fmt.Errorf("%w: source file not found: %v", ErrClientError, params.File) |
| 1468 | } |
| 1469 | |
| 1470 | positionMap := sourceFile.GetPositionMap() |
| 1471 | results := make([]*TypeResponse, len(params.Positions)) |
| 1472 | for i, pos := range params.Positions { |
| 1473 | node := astnav.GetTouchingPropertyName(sourceFile, positionMap.UTF16ToUTF8(int(pos))) |
| 1474 | if node == nil { |
| 1475 | continue |
| 1476 | } |
| 1477 | t := setup.checker.GetTypeAtLocation(node) |
| 1478 | if t != nil { |
| 1479 | results[i] = setup.newTypeResponse(t) |
| 1480 | } |
| 1481 | } |
| 1482 | |
| 1483 | return results, nil |
| 1484 | } |
| 1485 | |
| 1486 | func (s *Session) handleGetParentOfSymbol(_ context.Context, params *GetSymbolPropertyParams) (*SymbolResponse, error) { |
| 1487 | return s.resolveSymbolPropertyOfSymbol(params, func(sym *ast.Symbol) *ast.Symbol { return sym.Parent }) |
no test coverage detected