tristanjuricek / knockoff

A Markdown parser + object model in scala
http://tristanjuricek.github.com/knockoff
BSD 3-Clause "New" or "Revised" License
102 stars 17 forks source link

Malformed links throw java.util.NoSuchElementException: None.get #36

Open eed3si9n opened 10 years ago

eed3si9n commented 10 years ago

steps

Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_51).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import com.tristanhunt.knockoff.DefaultDiscounter._
import com.tristanhunt.knockoff.DefaultDiscounter._

scala> knockoff("""val turtlePosition = Lens.lensu[Turtle, Point] (
     |   (a, value) => a.copy(position = value),
     |   _.position)
     | val pointX = Lens.lensu[Point, Double] (
     |   (a, value) => a.copy(x = value),
     |   _.x)""")

problem

java.util.NoSuchElementException: None.get
    at scala.None$.get(Option.scala:313)
    at scala.None$.get(Option.scala:311)
    at com.tristanhunt.knockoff.SpanConverter.findNormalMatch(MarkdownParsing.scala:810)
    at com.tristanhunt.knockoff.SpanConverter$$anonfun$matchers$3.apply(MarkdownParsing.scala:660)
    at com.tristanhunt.knockoff.SpanConverter$$anonfun$matchers$3.apply(MarkdownParsing.scala:660)
    at com.tristanhunt.knockoff.SpanConverter$$anonfun$2.apply(MarkdownParsing.scala:642)
    at com.tristanhunt.knockoff.SpanConverter$$anonfun$2.apply(MarkdownParsing.scala:641)
    at scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:111)
    at scala.collection.immutable.List.foldLeft(List.scala:84)
    at scala.collection.TraversableOnce$class.$div$colon(TraversableOnce.scala:138)
    at scala.collection.AbstractTraversable.$div$colon(Traversable.scala:105)
    at com.tristanhunt.knockoff.SpanConverter.convert(MarkdownParsing.scala:641)
    at com.tristanhunt.knockoff.SpanConverter$DelimMatcher.apply(MarkdownParsing.scala:616)
    at com.tristanhunt.knockoff.SpanConverter$DelimMatcher.apply(MarkdownParsing.scala:606)
    at com.tristanhunt.knockoff.SpanConverter$$anonfun$2.apply(MarkdownParsing.scala:642)
    at com.tristanhunt.knockoff.SpanConverter$$anonfun$2.apply(MarkdownParsing.scala:641)
    at scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:111)
    at scala.collection.immutable.List.foldLeft(List.scala:84)
    at scala.collection.TraversableOnce$class.$div$colon(TraversableOnce.scala:138)
    at scala.collection.AbstractTraversable.$div$colon(Traversable.scala:105)
    at com.tristanhunt.knockoff.SpanConverter.convert(MarkdownParsing.scala:641)
    at com.tristanhunt.knockoff.SpanConverter.apply(MarkdownParsing.scala:630)
    at com.tristanhunt.knockoff.Discounter$$anonfun$2.apply(Discounter.scala:38)
    at com.tristanhunt.knockoff.Discounter$$anonfun$2.apply(Discounter.scala:37)
    at scala.collection.immutable.Stream.map(Stream.scala:376)
    at com.tristanhunt.knockoff.Discounter$class.knockoff(Discounter.scala:37)
    at com.tristanhunt.knockoff.DefaultDiscounter$.knockoff(Discounter.scala:79)

expectation

As the comment says, it shouldn't fail:

/** Parses and returns our best guess at the sequence of blocks. It will
      never fail, just log all suspicious things. */
tristanjuricek commented 10 years ago

Ah, thanks for the clear reproduction step!