Problem with codeblocks following lists
Opened this issue · 9 comments
If I add a list (it does not mind if it is numbered or not) and a code block just in the line after it, codeblock is not processed as such
version: mdless 2.1.42
Example file
- something
```
hello
```
As a bonus, if the code block contains an empty line at some point, mdless crashes:
Example files with empty line
- something
```
```
or
- something
```
hello
there
```
Example crash
#<Thread:0x00007f09490f2428 /home/myuser/.local/share/gem/ruby/gems/tty-spinner-0.9.3/lib/tty/spinner.rb:308 run> terminated with exception (report_on_exception is true):
/home/myuser/.local/share/gem/ruby/gems/mdless-2.1.42/lib/mdless/array.rb:5:in `longest_element': undefined method `last' for nil:NilClass (NoMethodError)
group_by(&:size).max.last[0]
^^^^^
from /home/myuser/.local/share/gem/ruby/gems/mdless-2.1.42/lib/mdless/console.rb:69:in `hilite_code'
from /home/myuser/.local/share/gem/ruby/gems/mdless-2.1.42/lib/mdless/console.rb:198:in `block_code'
from /home/myuser/.local/share/gem/ruby/gems/mdless-2.1.42/lib/mdless/converter.rb:346:in `render'
from /home/myuser/.local/share/gem/ruby/gems/mdless-2.1.42/lib/mdless/converter.rb:346:in `block (2 levels) in initialize'
from /home/myuser/.local/share/gem/ruby/gems/tty-spinner-0.9.3/lib/tty/spinner.rb:225:in `execute_job'
from /home/myuser/.local/share/gem/ruby/gems/tty-spinner-0.9.3/lib/tty/spinner.rb:308:in `block in run'
/home/myuser/.local/share/gem/ruby/gems/mdless-2.1.42/lib/mdless/array.rb:5:in `longest_element': undefined method `last' for nil:NilClass (NoMethodError)
group_by(&:size).max.last[0]
^^^^^
from /home/myuser/.local/share/gem/ruby/gems/mdless-2.1.42/lib/mdless/console.rb:69:in `hilite_code'
from /home/myuser/.local/share/gem/ruby/gems/mdless-2.1.42/lib/mdless/console.rb:198:in `block_code'
from /home/myuser/.local/share/gem/ruby/gems/mdless-2.1.42/lib/mdless/converter.rb:346:in `render'
from /home/myuser/.local/share/gem/ruby/gems/mdless-2.1.42/lib/mdless/converter.rb:346:in `block (2 levels) in initialize'
from /home/myuser/.local/share/gem/ruby/gems/tty-spinner-0.9.3/lib/tty/spinner.rb:225:in `execute_job'
from /home/myuser/.local/share/gem/ruby/gems/tty-spinner-0.9.3/lib/tty/spinner.rb:308:in `block in run'
Yeah, I discovered that the hard way :D
Anyway, other markdown tools work with that kind of syntax, which makes mdless not render properly markdown files that are written like that ...
But the scary thing is that mdless crashses on some conditions as explained above 😅
Example of that incorrect markdown rendering in github:
- something
some code
- other thing
I understand your point of view, but as a user, I want a tool I can use with files I did not produce. At least for me, it is the main use of mdless :)
However, the big concern is not that something is rendered incorrectly, but that the app crashes, and thus nothing is rendered
This is unfortunate as I get the same exact error with very little ability to understand why the parsing is broken.
mdless index.md
[⠋] Processing index.md...#<Thread:0x00000001249961a8 /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/tty-spinner-0.9.3/lib/tty/spinner.rb:308 run> terminated with exception (report_on_exception is true):
[⠙] Processing index.md.../usr/local/Cellar/mdless/2.1.42_1/libexec/gems/mdless-2.1.42/lib/mdless/array.rb:5:in `longest_element': undefined method `last' for nil (NoMethodError)
group_by(&:size).max.last[0]
^^^^^
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/mdless-2.1.42/lib/mdless/console.rb:69:in `hilite_code'
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/mdless-2.1.42/lib/mdless/console.rb:198:in `block_code'
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/mdless-2.1.42/lib/mdless/converter.rb:346:in `render'
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/mdless-2.1.42/lib/mdless/converter.rb:346:in `block (2 levels) in initialize'
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/tty-spinner-0.9.3/lib/tty/spinner.rb:225:in `execute_job'
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/tty-spinner-0.9.3/lib/tty/spinner.rb:308:in `block in run'
/usr/local/Cellar/mdless/2.1.42_1/libexec/gems/mdless-2.1.42/lib/mdless/array.rb:5:in `longest_element': undefined method `last' for nil (NoMethodError)
group_by(&:size).max.last[0]
^^^^^
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/mdless-2.1.42/lib/mdless/console.rb:69:in `hilite_code'
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/mdless-2.1.42/lib/mdless/console.rb:198:in `block_code'
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/mdless-2.1.42/lib/mdless/converter.rb:346:in `render'
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/mdless-2.1.42/lib/mdless/converter.rb:346:in `block (2 levels) in initialize'
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/tty-spinner-0.9.3/lib/tty/spinner.rb:225:in `execute_job'
from /usr/local/Cellar/mdless/2.1.42_1/libexec/gems/tty-spinner-0.9.3/lib/tty/spinner.rb:308:in `block in run'
The markdown is GHFM.