little progress on nimpretty

This commit is contained in:
Araq 2018-04-12 10:57:47 +02:00
commit a230307b48

View file

@ -1003,6 +1003,10 @@ proc skip(L: var TLexer, tok: var TToken) =
var buf = L.buf var buf = L.buf
tokenBegin(tok, pos) tokenBegin(tok, pos)
tok.strongSpaceA = 0 tok.strongSpaceA = 0
when defined(nimpretty):
var hasComment = false
tok.commentOffsetA = L.offsetBase + pos
tok.commentOffsetB = tok.commentOffsetA
while true: while true:
case buf[pos] case buf[pos]
of ' ': of ' ':
@ -1021,6 +1025,7 @@ proc skip(L: var TLexer, tok: var TToken) =
inc(pos) inc(pos)
inc(indent) inc(indent)
elif buf[pos] == '#' and buf[pos+1] == '[': elif buf[pos] == '#' and buf[pos+1] == '[':
when defined(nimpretty): hasComment = true
skipMultiLineComment(L, tok, pos+2, false) skipMultiLineComment(L, tok, pos+2, false)
pos = L.bufpos pos = L.bufpos
buf = L.buf buf = L.buf
@ -1034,14 +1039,11 @@ proc skip(L: var TLexer, tok: var TToken) =
of '#': of '#':
# do not skip documentation comment: # do not skip documentation comment:
if buf[pos+1] == '#': break if buf[pos+1] == '#': break
when defined(nimpretty): when defined(nimpretty): hasComment = true
tok.commentOffsetA = L.offsetBase + pos
if buf[pos+1] == '[': if buf[pos+1] == '[':
skipMultiLineComment(L, tok, pos+2, false) skipMultiLineComment(L, tok, pos+2, false)
pos = L.bufpos pos = L.bufpos
buf = L.buf buf = L.buf
when defined(nimpretty):
tok.commentOffsetB = L.offsetBase + pos
else: else:
tokenBegin(tok, pos) tokenBegin(tok, pos)
while buf[pos] notin {CR, LF, nimlexbase.EndOfFile}: inc(pos) while buf[pos] notin {CR, LF, nimlexbase.EndOfFile}: inc(pos)
@ -1053,6 +1055,9 @@ proc skip(L: var TLexer, tok: var TToken) =
tokenEndPrevious(tok, pos-1) tokenEndPrevious(tok, pos-1)
L.bufpos = pos L.bufpos = pos
when defined(nimpretty): when defined(nimpretty):
if hasComment:
tok.commentOffsetB = L.offsetBase + pos
tok.tokType = tkComment
if gIndentationWidth <= 0: if gIndentationWidth <= 0:
gIndentationWidth = tok.indent gIndentationWidth = tok.indent
@ -1074,6 +1079,8 @@ proc rawGetTok*(L: var TLexer, tok: var TToken) =
else: else:
tok.indent = -1 tok.indent = -1
skip(L, tok) skip(L, tok)
when defined(nimpretty):
if tok.tokType == tkComment: return
var c = L.buf[L.bufpos] var c = L.buf[L.bufpos]
tok.line = L.lineNumber tok.line = L.lineNumber
tok.col = getColNumber(L, L.bufpos) tok.col = getColNumber(L, L.bufpos)