diff options
-rw-r--r-- | compiler/layouter.nim | 46 | ||||
-rw-r--r-- | nimpretty/tests/exhaustive.nim | 28 | ||||
-rw-r--r-- | nimpretty/tests/expected/exhaustive.nim | 36 |
3 files changed, 87 insertions, 23 deletions
diff --git a/compiler/layouter.nim b/compiler/layouter.nim index 24efc7142..b54fb93bf 100644 --- a/compiler/layouter.nim +++ b/compiler/layouter.nim @@ -300,29 +300,37 @@ proc emitMultilineComment(em: var Emitter, lit: string, col: int) = var i = 0 var lastIndent = em.indentStack[^1] var b = 0 + var dontIndent = false for commentLine in splitLines(lit): - let stripped = commentLine.strip() - var a = 0 - while a < commentLine.len and commentLine[a] == ' ': inc a - if i == 0: - if em.kinds.len > 0 and em.kinds[^1] != ltTab: - wr(em, "", ltTab) - elif stripped.len == 0: + if i == 0 and (commentLine.endsWith("\\") or commentLine.endsWith("[")): + dontIndent = true + wr em, commentLine, ltComment + elif dontIndent: wrNewline em + wr em, commentLine, ltComment else: - if a > lastIndent: - b += em.indWidth - lastIndent = a - elif a < lastIndent: - b -= em.indWidth - lastIndent = a - wrNewline em - #wrSpaces em, col + b - if col + b > 0: - wr(em, repeat(' ', col+b), ltTab) + let stripped = commentLine.strip() + var a = 0 + while a < commentLine.len and commentLine[a] == ' ': inc a + if i == 0: + if em.kinds.len > 0 and em.kinds[^1] != ltTab: + wr(em, "", ltTab) + elif stripped.len == 0: + wrNewline em else: - wr(em, "", ltTab) - wr em, stripped, ltComment + if a > lastIndent: + b += em.indWidth + lastIndent = a + elif a < lastIndent: + b -= em.indWidth + lastIndent = a + wrNewline em + #wrSpaces em, col + b + if col + b > 0: + wr(em, repeat(' ', col+b), ltTab) + else: + wr(em, "", ltTab) + wr em, stripped, ltComment inc i proc lastChar(s: string): char = diff --git a/nimpretty/tests/exhaustive.nim b/nimpretty/tests/exhaustive.nim index 933b0de75..7a8ae6acc 100644 --- a/nimpretty/tests/exhaustive.nim +++ b/nimpretty/tests/exhaustive.nim @@ -689,6 +689,34 @@ proc newRecordGen(ctx: Context; typ: TypRef): PNode = typ.recFields.map(newRecFieldGen)))) +##[ +String `interpolation`:idx: / `format`:idx: inspired by +Python's ``f``-strings. + +.. code-block:: nim + + import strformat + let msg = "hello" + doAssert fmt"{msg}\n" == "hello\\n" + +Because the literal is a raw string literal, the ``\n`` is not interpreted as +an escape sequence. + + +================= ==================================================== + Sign Meaning +================= ==================================================== +``+`` Indicates that a sign should be used for both + positive as well as negative numbers. +``-`` Indicates that a sign should be used only for + negative numbers (this is the default behavior). +(space) Indicates that a leading space should be used on + positive numbers. +================= ==================================================== + +]## + + 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 diff --git a/nimpretty/tests/expected/exhaustive.nim b/nimpretty/tests/expected/exhaustive.nim index c5ef965e6..046364f4e 100644 --- a/nimpretty/tests/expected/exhaustive.nim +++ b/nimpretty/tests/expected/exhaustive.nim @@ -631,10 +631,10 @@ type cmdLongOption, ## A long option such as --option cmdShortOption ## A short option such as -c OptParser* = object of RootObj ## \ - ## Implementation of the command line parser. Here is even more text yad. - ## - ## To initialize it, use the - ## `initOptParser proc<#initOptParser,string,set[char],seq[string]>`_. + ## Implementation of the command line parser. Here is even more text yad. + ## + ## To initialize it, use the + ## `initOptParser proc<#initOptParser,string,set[char],seq[string]>`_. pos*: int inShortState: bool allowWhitespaceAfterColon: bool @@ -695,6 +695,34 @@ proc newRecordGen(ctx: Context; typ: TypRef): PNode = typ.recFields.map(newRecFieldGen)))) +##[ +String `interpolation`:idx: / `format`:idx: inspired by +Python's ``f``-strings. + +.. code-block:: nim + + import strformat + let msg = "hello" + doAssert fmt"{msg}\n" == "hello\\n" + +Because the literal is a raw string literal, the ``\n`` is not interpreted as +an escape sequence. + + +================= ==================================================== + Sign Meaning +================= ==================================================== +``+`` Indicates that a sign should be used for both + positive as well as negative numbers. +``-`` Indicates that a sign should be used only for + negative numbers (this is the default behavior). +(space) Indicates that a leading space should be used on + positive numbers. +================= ==================================================== + +]## + + let lla = 42394219 - 42429849 + 1293293 - 13918391 + 424242 # this here is an okayish comment llb = 42394219 - 42429849 + 1293293 - 13918391 + |