Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / internal / lsp / folding_range.go
1 package lsp
2
3 import (
4         "context"
5
6         "golang.org/x/tools/internal/lsp/protocol"
7         "golang.org/x/tools/internal/lsp/source"
8 )
9
10 func (s *Server) foldingRange(ctx context.Context, params *protocol.FoldingRangeParams) ([]protocol.FoldingRange, error) {
11         snapshot, fh, ok, release, err := s.beginFileRequest(ctx, params.TextDocument.URI, source.Go)
12         defer release()
13         if !ok {
14                 return nil, err
15         }
16
17         ranges, err := source.FoldingRange(ctx, snapshot, fh, snapshot.View().Options().LineFoldingOnly)
18         if err != nil {
19                 return nil, err
20         }
21         return toProtocolFoldingRanges(ranges)
22 }
23
24 func toProtocolFoldingRanges(ranges []*source.FoldingRangeInfo) ([]protocol.FoldingRange, error) {
25         result := make([]protocol.FoldingRange, 0, len(ranges))
26         for _, info := range ranges {
27                 rng, err := info.Range()
28                 if err != nil {
29                         return nil, err
30                 }
31                 result = append(result, protocol.FoldingRange{
32                         StartLine:      rng.Start.Line,
33                         StartCharacter: rng.Start.Character,
34                         EndLine:        rng.End.Line,
35                         EndCharacter:   rng.End.Character,
36                         Kind:           string(info.Kind),
37                 })
38         }
39         return result, nil
40 }