diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2018-06-19 23:45:11 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-06-19 23:45:11 +0200 |
commit | c3090fcb48b0323cb7be79d2fcd009e11360dab5 (patch) | |
tree | 55478fb6f3959d331e7bebb6eff3f220da0c79fa /compiler | |
parent | 837d0c7270a67ea632d492586843807075eefb88 (diff) | |
download | Nim-c3090fcb48b0323cb7be79d2fcd009e11360dab5.tar.gz |
nimpretty: don't produce trailing whitespace; fixes the rendering of unary operators
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/layouter.nim | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/compiler/layouter.nim b/compiler/layouter.nim index eb591b6e1..d0c9a77b9 100644 --- a/compiler/layouter.nim +++ b/compiler/layouter.nim @@ -93,6 +93,8 @@ proc softLinebreak(em: var Emitter, lit: string) = # +2 because we blindly assume a comma or ' &' might follow if not em.inquote and em.col+lit.len+2 >= MaxLineLen: if em.lastTok in splitters: + while em.content.len > 0 and em.content[em.content.high] == ' ': + setLen(em.content, em.content.len-1) wr("\L") em.col = 0 for i in 1..em.indentLevel+moreIndent(em): wr(" ") @@ -100,8 +102,11 @@ proc softLinebreak(em: var Emitter, lit: string) = # search backwards for a good split position: for a in em.altSplitPos: if a > em.fixedUntil: - let ws = "\L" & repeat(' ',em.indentLevel+moreIndent(em) - - ord(em.content[a] == ' ')) + var spaces = 0 + while a+spaces < em.content.len and em.content[a+spaces] == ' ': + inc spaces + if spaces > 0: delete(em.content, a, a+spaces-1) + let ws = "\L" & repeat(' ',em.indentLevel+moreIndent(em)) em.col = em.content.len - a em.content.insert(ws, a) break @@ -186,8 +191,8 @@ proc emitTok*(em: var Emitter; L: TLexer; tok: TToken) = wr(" ") of tkSemicolon, tkComma: wr(TokTypeToStr[tok.tokType]) - wr(" ") rememberSplit(splitComma) + wr(" ") of tkParDotLe, tkParLe, tkBracketDotLe, tkBracketLe, tkCurlyLe, tkCurlyDotLe, tkBracketLeColon: if tok.strongSpaceA > 0 and not em.endsInWhite: @@ -215,7 +220,7 @@ proc emitTok*(em: var Emitter; L: TLexer; tok: TToken) = template isUnary(tok): bool = tok.strongSpaceB == 0 and tok.strongSpaceA > 0 - if not isUnary(tok) or em.lastTok in {tkOpr, tkDotDot}: + if not isUnary(tok): wr(" ") rememberSplit(splitBinary) of tkAccent: |