.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / internal / span / token111.go
1 // Copyright 2019 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 //go:build !go1.12
6 // +build !go1.12
7
8 package span
9
10 import (
11         "go/token"
12 )
13
14 // lineStart is the pre-Go 1.12 version of (*token.File).LineStart. For Go
15 // versions <= 1.11, we borrow logic from the analysisutil package.
16 // TODO(rstambler): Delete this file when we no longer support Go 1.11.
17 func lineStart(f *token.File, line int) token.Pos {
18         // Use binary search to find the start offset of this line.
19
20         min := 0        // inclusive
21         max := f.Size() // exclusive
22         for {
23                 offset := (min + max) / 2
24                 pos := f.Pos(offset)
25                 posn := f.Position(pos)
26                 if posn.Line == line {
27                         return pos - (token.Pos(posn.Column) - 1)
28                 }
29
30                 if min+1 >= max {
31                         return token.NoPos
32                 }
33
34                 if posn.Line < line {
35                         min = offset
36                 } else {
37                         max = offset
38                 }
39         }
40 }