Skip to content

Commit 6c96c66

Browse files
authored
Merge pull request #46 from haya14busa/go-offset
Fix offset
2 parents 42350bb + da787ad commit 6c96c66

File tree

5 files changed

+65
-14
lines changed

5 files changed

+65
-14
lines changed

.drone.sec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhHQ00ifQ.fkWEl5SfcCEntdIFAB5yO4F91yx5a4jXdHvzgzY25HLo4dxGfCdFCrOGQKCNCulX4czQRaxXvESz-Dwki-lAh-TTeMuHSU0Xje7rPY4o0txxB1zrlKGrZ5-36izJB92doxOTNm-NWVxnsAlGzVECbgWMCDg154g-sypof8hCN7My6JXQ-Y815rGultkAID60rUgg4dsSMXiP5mWBqktUtKs-pwDwwWeRWpASdufTshkbwjxJzJsRpTFdJCRzgOpEeP7Z07IcFZE8vHb0tMWSLDJShOTtGjR3Dz881MrUbGoPvQv9Jg8DVNeKcQHSKKU7qa0e-zNGzBjULhd0mE4HZw.ygbdZZeyGiwm7LWt.NwFVXqKdHkl55Dn45TZgToblcbJWw6pACeAIetuSG4M-FY2ZSgpruEC-M9oktIqoRrhSShjyjLBmdrTaKUyj5k8WyF0xGR2T2rbZ9Mn9IFmNzzM0pNNfCvNAN5CpIUBNboX-L-_6DsAFAfekEkUBQYvArDhA8WE2pq7udUnr8u0n00MG1gcuT98mtSzovZCe1z57AdmItqazILYZuB-x.8IxWXoXOvzqtFh_fNn069A
1+
eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhHQ00ifQ.FrcY-tGPQJXsnzxNagYAHJ3qfF7ky99nK_b_EkaSA41IfwQET70V0XTEyijloXxcknKIVtgyGK3ER5ciyjSg-kZdTd-tEsxl10GK_4gyhyqF4TYCnq_nD-mYuFV6TavVrzi0kojZAKVGEmD-gf3cMmQjViGL1TNeiDlaSkkpzaGMWK90XqQw434sqTvP4jYrmd9wJlQhRyrvUOh-PVsdncpAp9i3Q75av4G261qR8m_whiHV9npiBFaB8QBEoEZfhd23etguSStySjvyFwWVpYtKW8JGx4ObZtR7svOUHQJanSQxwKNKGjGg8DU8SfYm-T22yR5W7ovi0C8kkoLDIA.JsptLvDoaGfhqGvb.jhA_OACKn6mLjlSiLbn7Ut29KOYbNu6oxHSTSlRzZI210CuBHrxOKYfWZM_zq6ZirLpmRCW4d4D4hf_-UJ0glj9VKQWub16gXS67gVvMHVQOwGISYIWuywbj27WskwKl14bdcwL5xsY0y6YEbuecjx7savlbVbhcAaYfNCW-y8aHL8TqhE2vtF-X-M-Tsbzgmb27BZvJ5RJs3X1PmLfI.lZRskgG3PzXdE4JFnqT42A

autoload/vimlparser.vim

+11-6
Original file line numberDiff line numberDiff line change
@@ -3773,12 +3773,14 @@ function! s:StringReader.__init__(lines)
37733773
let self.buf = []
37743774
let self.pos = []
37753775
let lnum = 0
3776+
let offset = 0
37763777
while lnum < len(a:lines)
37773778
let col = 0
37783779
for c in split(a:lines[lnum], '\zs')
37793780
call add(self.buf, c)
3780-
call add(self.pos, [lnum + 1, col + 1])
3781+
call add(self.pos, [lnum + 1, col + 1, offset])
37813782
let col += len(c)
3783+
let offset += len(c)
37823784
endfor
37833785
while lnum + 1 < len(a:lines) && a:lines[lnum + 1] =~# '^\s*\\'
37843786
let skip = s:TRUE
@@ -3790,18 +3792,21 @@ function! s:StringReader.__init__(lines)
37903792
endif
37913793
else
37923794
call add(self.buf, c)
3793-
call add(self.pos, [lnum + 2, col + 1])
3795+
call add(self.pos, [lnum + 2, col + 1, offset])
37943796
endif
37953797
let col += len(c)
3798+
let offset += len(c)
37963799
endfor
37973800
let lnum += 1
3801+
let offset += 1
37983802
endwhile
37993803
call add(self.buf, '<EOL>')
3800-
call add(self.pos, [lnum + 1, col + 1])
3804+
call add(self.pos, [lnum + 1, col + 1, offset])
38013805
let lnum += 1
3806+
let offset += 1
38023807
endwhile
38033808
" for <EOF>
3804-
call add(self.pos, [lnum + 1, 0])
3809+
call add(self.pos, [lnum + 1, 0, offset])
38053810
let self.i = 0
38063811
endfunction
38073812

@@ -3895,8 +3900,8 @@ function! s:StringReader.getstr(begin, end)
38953900
endfunction
38963901

38973902
function! s:StringReader.getpos()
3898-
let [lnum, col] = self.pos[self.i]
3899-
return {'i': self.i, 'lnum': lnum, 'col': col}
3903+
let [lnum, col, offset] = self.pos[self.i]
3904+
return {'i': self.i, 'lnum': lnum, 'col': col, 'offset': offset}
39003905
endfunction
39013906

39023907
function! s:StringReader.setpos(pos)

go/export.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ func newPos(p *pos, filename string) *ast.Pos {
467467
return nil
468468
}
469469
return &ast.Pos{
470-
Offset: p.i,
470+
Offset: p.offset,
471471
Line: p.lnum,
472472
Column: p.col,
473473
Filename: filename,

go/type.go

+12-6
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,10 @@ type lhs struct {
8686
}
8787

8888
type pos struct {
89-
i int
90-
lnum int
91-
col int
89+
i int
90+
lnum int
91+
col int
92+
offset int
9293
}
9394

9495
// Node returns new VimNode.
@@ -192,13 +193,15 @@ func (self *StringReader) __init__(lines []string) {
192193
self.buf = make([]string, 0, size)
193194
self.pos = make([]pos, 0, size+1) // +1 for EOF
194195
var lnum = 0
196+
var offset = 0
195197
for lnum < len(lines) {
196198
var col = 0
197199
for _, r := range lines[lnum] {
198200
c := string(r)
199201
self.buf = append(self.buf, c)
200-
self.pos = append(self.pos, pos{lnum: lnum + 1, col: col + 1})
202+
self.pos = append(self.pos, pos{lnum: lnum + 1, col: col + 1, offset: offset})
201203
col += len(c)
204+
offset += len(c)
202205
}
203206
for lnum+1 < len(lines) && viml_eqregh(lines[lnum+1], "^\\s*\\\\") {
204207
var skip = true
@@ -214,15 +217,18 @@ func (self *StringReader) __init__(lines []string) {
214217
self.pos = append(self.pos, pos{lnum: lnum + 2, col: col + 1})
215218
}
216219
col += len(c)
220+
offset += len(c)
217221
}
218222
lnum += 1
223+
offset += 1
219224
}
220225
self.buf = append(self.buf, "<EOL>")
221-
self.pos = append(self.pos, pos{lnum: lnum + 1, col: col + 1})
226+
self.pos = append(self.pos, pos{lnum: lnum + 1, col: col + 1, offset: offset})
222227
lnum += 1
228+
offset += 1
223229
}
224230
// for <EOF>
225-
self.pos = append(self.pos, pos{lnum: lnum + 1, col: 0})
231+
self.pos = append(self.pos, pos{lnum: lnum + 1, col: 0, offset: offset})
226232
self.i = 0
227233
}
228234

go/vimlparser_test.go

+40
Original file line numberDiff line numberDiff line change
@@ -197,3 +197,43 @@ func testParseVimLParser(t testing.TB) {
197197
n := NewVimLParser(false).parse(NewStringReader(lines))
198198
c.compile(n)
199199
}
200+
201+
func TestVimLParser_offset(t *testing.T) {
202+
defer recovert(t)
203+
const src = `
204+
205+
function! F()
206+
let x =
207+
\ 1
208+
209+
let x = "
210+
\1
211+
\2 <- tab
212+
\3 マルチバイト
213+
\4"
214+
endfunction
215+
216+
" END
217+
`
218+
const want = `function! F()
219+
let x =
220+
\ 1
221+
222+
let x = "
223+
\1
224+
\2 <- tab
225+
\3 マルチバイト
226+
\4"
227+
endfunction`
228+
229+
n := NewVimLParser(false).parse(NewStringReader(strings.Split(src, "\n")))
230+
f := n.body[0]
231+
start := f.pos
232+
end := f.endfunction.pos
233+
endfExArg := f.endfunction.ea
234+
end.offset += endfExArg.argpos.offset - endfExArg.cmdpos.offset
235+
236+
if got := src[start.offset:end.offset]; got != want {
237+
t.Errorf("got:\n%v\nwant:\n%v", got, want)
238+
}
239+
}

0 commit comments

Comments
 (0)