summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorMiran <narimiran@disroot.org>2019-07-05 09:32:56 +0200
committerAndreas Rumpf <rumpf_a@web.de>2019-07-05 09:32:56 +0200
commit96a19ea1b441f5e1682b2f04bac188003ceea6dd (patch)
treea119e332eb484cee39495cbca9f92f19ad4c3e80
parent95f2f2396f868b418996358d6328368395a1f5c6 (diff)
downloadNim-96a19ea1b441f5e1682b2f04bac188003ceea6dd.tar.gz
nimpretty: relax line length rules when dealing with (inline) comments (#11657)
-rw-r--r--compiler/layouter.nim12
-rw-r--r--nimpretty/tests/exhaustive.nim12
-rw-r--r--nimpretty/tests/expected/exhaustive.nim19
-rw-r--r--nimpretty/tests/expected/simple3.nim3
4 files changed, 36 insertions, 10 deletions
diff --git a/compiler/layouter.nim b/compiler/layouter.nim
index 724e827cc..d8e1b7b0f 100644
--- a/compiler/layouter.nim
+++ b/compiler/layouter.nim
@@ -16,7 +16,7 @@ from sequtils import delete
 
 const
   MaxLineLen = 80
-  MinLineLen = 10
+  MinLineLen = 15
 
 type
   SplitKind = enum
@@ -102,12 +102,14 @@ proc findNewline(em: Emitter; p, lineLen: var int) =
     inc lineLen, em.tokens[p].len
     inc p
 
-proc optionalIsGood(em: var Emitter; pos: int): bool =
+proc optionalIsGood(em: var Emitter; pos, currentLen: int): bool =
   let ourIndent = em.tokens[pos].len
   var p = pos+1
   var lineLen = 0
   em.findNewline(p, lineLen)
-  if p+1 < em.tokens.len and em.kinds[p+1] == ltSpaces and
+  if em.kinds[p-1] == ltComment and currentLen+lineLen < MaxLineLen+MinLineLen:
+    result = false
+  elif p+1 < em.tokens.len and em.kinds[p+1] == ltSpaces and
       em.kinds[p-1] == ltOptionalNewline:
     if em.tokens[p+1].len == ourIndent:
       # concatenate lines with the same indententation
@@ -163,7 +165,7 @@ proc closeEmitter*(em: var Emitter) =
       else:
         # pick the shorter indentation token:
         var spaces = maxLhs - lineLen
-        if spaces < em.tokens[i].len or computeRhs(em, i+1)+maxLhs <= MaxLineLen:
+        if spaces < em.tokens[i].len or computeRhs(em, i+1)+maxLhs <= MaxLineLen+MinLineLen:
           if spaces <= 0 and content[^1] notin {' ', '\L'}: spaces = 1
           for j in 1..spaces: content.add ' '
           inc lineLen, spaces
@@ -177,7 +179,7 @@ proc closeEmitter*(em: var Emitter) =
     of ltOptionalNewline:
       let totalLineLen = lineLen + lenOfNextTokens(em, i)
       if totalLineLen > MaxLineLen + MinLineLen or
-         totalLineLen > MaxLineLen and optionalIsGood(em, i):
+         totalLineLen > MaxLineLen and optionalIsGood(em, i, lineLen):
         if i-1 >= 0 and em.kinds[i-1] == ltSpaces:
           let spaces = em.tokens[i-1].len
           content.setLen(content.len - spaces)
diff --git a/nimpretty/tests/exhaustive.nim b/nimpretty/tests/exhaustive.nim
index c0d4ac084..933b0de75 100644
--- a/nimpretty/tests/exhaustive.nim
+++ b/nimpretty/tests/exhaustive.nim
@@ -688,3 +688,15 @@ proc newRecordGen(ctx: Context; typ: TypRef): PNode =
       nkRecList.t(
         typ.recFields.map(newRecFieldGen))))
 
+
+let
+  lla = 42394219 - 42429849 + 1293293 - 13918391 + 424242 # this here is an okayish comment
+  llb = 42394219 - 42429849 + 1293293 - 13918391 + 424242 # this here is a very long comment which should be split
+  llc = 42394219 - 42429849 + 1293293 - 13918391 + 424242 - 3429424 + 4239489 - 42399
+  lld = 42394219 - 42429849 + 1293293 - 13918391 + 424242 - 342949924 + 423948999 - 42399
+
+type
+  MyLongEnum = enum ## doc comment here
+    first, ## this is a long comment here, but please align it
+    secondWithAVeryLongNameMightBreak, ## this is a short one
+    thirdOne ## it's ok
diff --git a/nimpretty/tests/expected/exhaustive.nim b/nimpretty/tests/expected/exhaustive.nim
index 4ed056656..c5ef965e6 100644
--- a/nimpretty/tests/expected/exhaustive.nim
+++ b/nimpretty/tests/expected/exhaustive.nim
@@ -19,8 +19,7 @@ var body = newNimNode(nnkIfExpr).add(
         ident("kind"))),
     condition
   ),
-  newNimNode(nnkElse).add(newStmtList(newNimNode(nnkReturnStmt).add(ident(
-      "false"))))
+  newNimNode(nnkElse).add(newStmtList(newNimNode(nnkReturnStmt).add(ident("false"))))
 )
 
 # comment
@@ -122,7 +121,7 @@ type
     inquote {.pragmaHereWrongCurlyEnd.}: bool
     col, lastLineNumber, lineSpan, indentLevel: int
     content: string
-    fixedUntil: int # marks where we must not go in the content
+    fixedUntil: int                    # marks where we must not go in the content
     altSplitPos: array[SplitKind, int] # alternative split positions
 
 proc openEmitter*[T, S](em: var Emitter; config: ConfigRef;
@@ -695,3 +694,17 @@ proc newRecordGen(ctx: Context; typ: TypRef): PNode =
       nkRecList.t(
         typ.recFields.map(newRecFieldGen))))
 
+
+let
+  lla = 42394219 - 42429849 + 1293293 - 13918391 + 424242 # this here is an okayish comment
+  llb = 42394219 - 42429849 + 1293293 - 13918391 +
+      424242 # this here is a very long comment which should be split
+  llc = 42394219 - 42429849 + 1293293 - 13918391 + 424242 - 3429424 + 4239489 - 42399
+  lld = 42394219 - 42429849 + 1293293 - 13918391 + 424242 - 342949924 +
+      423948999 - 42399
+
+type
+  MyLongEnum = enum                     ## doc comment here
+    first,                              ## this is a long comment here, but please align it
+    secondWithAVeryLongNameMightBreak,  ## this is a short one
+    thirdOne                            ## it's ok
diff --git a/nimpretty/tests/expected/simple3.nim b/nimpretty/tests/expected/simple3.nim
index b7a02758a..c1c0af449 100644
--- a/nimpretty/tests/expected/simple3.nim
+++ b/nimpretty/tests/expected/simple3.nim
@@ -9,8 +9,7 @@ proc fun() =
   echo "ok1"
 
 proc fun2(a = "fooo" & "bar" & "bar" & "bar" & "bar" & ("bar" & "bar" & "bar") &
-    "bar" & "bar" & "bar" & "bar" & "bar" & "bar" & "bar" & "bar" &
-    "bar"): auto =
+    "bar" & "bar" & "bar" & "bar" & "bar" & "bar" & "bar" & "bar" & "bar"): auto =
   discard
 
 fun2()