diff options
author | Andrey Makarov <ph.makarov@gmail.com> | 2021-01-15 02:53:36 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-15 00:53:36 +0100 |
commit | 554fe8f88fc6d146b17726acbab415f77e346a72 (patch) | |
tree | 43871a8c12bcbe9744b3bd347a96ef8b75715b25 | |
parent | 41965880ce095da09a1f7e781a0c79e436432401 (diff) | |
download | Nim-554fe8f88fc6d146b17726acbab415f77e346a72.tar.gz |
conservative approach to fix #15184 (#16723)
-rw-r--r-- | compiler/lexer.nim | 29 | ||||
-rw-r--r-- | doc/docgen.rst | 18 | ||||
-rw-r--r-- | doc/manual.rst | 2 | ||||
-rw-r--r-- | nimdoc/testproject/expected/testproject.html | 12 | ||||
-rw-r--r-- | nimdoc/testproject/expected/testproject.idx | 1 | ||||
-rw-r--r-- | nimdoc/testproject/expected/theindex.html | 4 | ||||
-rw-r--r-- | nimdoc/testproject/testproject.nim | 6 |
7 files changed, 61 insertions, 11 deletions
diff --git a/compiler/lexer.nim b/compiler/lexer.nim index b55dd3585..729ba3435 100644 --- a/compiler/lexer.nim +++ b/compiler/lexer.nim @@ -955,8 +955,10 @@ proc skipMultiLineComment(L: var Lexer; tok: var Token; start: int; # detect the amount of indentation: if isDoc: toStrip = getColNumber(L, pos) - while L.buf[pos] == ' ': inc pos - if L.buf[pos] in {CR, LF}: + while L.buf[pos] == ' ': + inc pos + inc toStrip + while L.buf[pos] in {CR, LF}: # skip blank lines pos = handleCRLF(L, pos) toStrip = 0 while L.buf[pos] == ' ': @@ -1028,11 +1030,17 @@ proc scanComment(L: var Lexer, tok: var Token) = inc(pos, 2) var toStrip = 0 - while L.buf[pos] == ' ': - inc pos - inc toStrip + var stripInit = false while true: + if not stripInit: # find baseline indentation inside comment + while L.buf[pos] == ' ': + inc pos + inc toStrip + if L.buf[pos] in {CR, LF}: # don't set toStrip in blank comment lines + toStrip = 0 + else: # found first non-whitespace character + stripInit = true var lastBackslash = -1 while L.buf[pos] notin {CR, LF, nimlexbase.EndOfFile}: if L.buf[pos] == '\\': lastBackslash = pos+1 @@ -1048,11 +1056,12 @@ proc scanComment(L: var Lexer, tok: var Token) = if L.buf[pos] == '#' and L.buf[pos+1] == '#': tok.literal.add "\n" inc(pos, 2) - var c = toStrip - while L.buf[pos] == ' ' and c > 0: - inc pos - dec c - inc tok.iNumber + if stripInit: + var c = toStrip + while L.buf[pos] == ' ' and c > 0: + inc pos + dec c + inc tok.iNumber else: if L.buf[pos] > ' ': L.indentAhead = indent diff --git a/doc/docgen.rst b/doc/docgen.rst index bbf0838bb..09f6504c8 100644 --- a/doc/docgen.rst +++ b/doc/docgen.rst @@ -76,6 +76,24 @@ Note that without the `*` following the name of the type, the documentation for this type would not be generated. Documentation will only be generated for *exported* types/procedures/etc. +It's recommended to always add exactly **one** space after `##` for readability +of comments — this extra space will be cropped from the parsed comments and +won't influence RST formatting. + +.. note:: Generally, this baseline indentation level inside a documentation + comment may not be 1: it can be any since it is determined by the offset + of the first non-whitespace character in the comment. + After that indentation **must** be consistent on the following lines of + the same comment. + If you still need to add an additional indentation at the very beginning + (for RST block quote syntax) use backslash \\ before it: + + .. code-block:: nim + ## \ + ## + ## Block quote at the first line. + ## + ## Paragraph. Nim file input ----------------- diff --git a/doc/manual.rst b/doc/manual.rst index 9fabee1e8..4ef962f3a 100644 --- a/doc/manual.rst +++ b/doc/manual.rst @@ -247,7 +247,7 @@ Multiline documentation comments also exist and support nesting too: .. code-block:: nim proc foo = ##[Long documentation comment - here. + here. ]## diff --git a/nimdoc/testproject/expected/testproject.html b/nimdoc/testproject/expected/testproject.html index 2bf8855c7..c60d9f26a 100644 --- a/nimdoc/testproject/expected/testproject.html +++ b/nimdoc/testproject/expected/testproject.html @@ -191,6 +191,11 @@ window.addEventListener('DOMContentLoaded', main); title="z6(): int">z6</a></li> </ul> + <ul class="simple nested-toc-section">anything + <li><a class="reference" href="#anything" + title="anything()">anything</a></li> + + </ul> <ul class="simple nested-toc-section">low <li><a class="reference" href="#low%2CT" title="low[T: Ordinal | enum | range](x: T): T">low,<wbr>T</a></li> @@ -795,6 +800,13 @@ ok1 <pre class="listing"><span class="Keyword">discard</span></pre>ok1 </dd> +<a id="anything"></a> +<dt><pre><span class="Keyword">proc</span> <a href="#anything"><span class="Identifier">anything</span></a><span class="Other">(</span><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt> +<dd> + +There is no block quote after blank lines at the beginning. + +</dd> </dl></div> <div class="section" id="14"> diff --git a/nimdoc/testproject/expected/testproject.idx b/nimdoc/testproject/expected/testproject.idx index 5714efac0..1d8be99da 100644 --- a/nimdoc/testproject/expected/testproject.idx +++ b/nimdoc/testproject/expected/testproject.idx @@ -59,3 +59,4 @@ Circle testproject.html#Circle Shapes.Circle Triangle testproject.html#Triangle Shapes.Triangle Rectangle testproject.html#Rectangle Shapes.Rectangle Shapes testproject.html#Shapes testproject: Shapes +anything testproject.html#anything testproject: anything() diff --git a/nimdoc/testproject/expected/theindex.html b/nimdoc/testproject/expected/theindex.html index 978560e0f..81370d115 100644 --- a/nimdoc/testproject/expected/theindex.html +++ b/nimdoc/testproject/expected/theindex.html @@ -78,6 +78,10 @@ window.addEventListener('DOMContentLoaded', main); <li><a class="reference external" data-doc-search-tag="utils: aEnum(): untyped" href="subdir/subdir_b/utils.html#aEnum.t">utils: aEnum(): untyped</a></li> </ul></dd> +<dt><a name="anything" href="#anything"><span>anything:</span></a></dt><dd><ul class="simple"> +<li><a class="reference external" + data-doc-search-tag="testproject: anything()" href="testproject.html#anything">testproject: anything()</a></li> + </ul></dd> <dt><a name="asyncFun1" href="#asyncFun1"><span>asyncFun1:</span></a></dt><dd><ul class="simple"> <li><a class="reference external" data-doc-search-tag="testproject: asyncFun1(): Future[int]" href="testproject.html#asyncFun1">testproject: asyncFun1(): Future[int]</a></li> diff --git a/nimdoc/testproject/testproject.nim b/nimdoc/testproject/testproject.nim index eea399f82..69edb0d23 100644 --- a/nimdoc/testproject/testproject.nim +++ b/nimdoc/testproject/testproject.nim @@ -375,3 +375,9 @@ when true: # issue #15702 Circle, ## A circle Triangle, ## A three-sided shape Rectangle ## A four-sided shape + +when true: # issue #15184 + proc anything* = + ## + ## There is no block quote after blank lines at the beginning. + discard |