szeiger / ornate

A Markdown-based site generator
http://szeiger.github.io/ornate-doc/
Other
80 stars 12 forks source link

Exception when link is unspecified #3

Closed jvican closed 7 years ago

jvican commented 7 years ago

Input: [link]()

Stack trace:

[E] SpecialLinkProcessor: Page site:/benefits-becoming-module.md: No page or resource found for link  (resolved to site:/)
[E] c.n.o.t.d.html.Theme: Error rendering page site:/benefits-becoming-module.md to /data/rw/code/scala/platform/target/site/benefits-becoming-module.html
java.lang.UnsupportedOperationException: empty.init
    at scala.collection.TraversableLike$class.init(TraversableLike.scala:451)
    at scala.collection.AbstractTraversable.init(Traversable.scala:104)
    at com.novocode.ornate.Util$.relativeSiteURI(Util.scala:43)
    at com.novocode.ornate.theme.SpecialLinkProcessor.resolve(SpecialLinkProcessor.scala:44)
    at com.novocode.ornate.theme.SpecialLinkProcessor$$anon$1.visit(SpecialLinkProcessor.scala:14)
    at org.commonmark.node.Link.accept(Link.java:18)
    at org.commonmark.node.AbstractVisitor.visitChildren(AbstractVisitor.java:132)
    at org.commonmark.node.AbstractVisitor.visit(AbstractVisitor.java:93)
    at org.commonmark.node.Paragraph.accept(Paragraph.java:7)
    at org.commonmark.node.AbstractVisitor.visitChildren(AbstractVisitor.java:132)
    at org.commonmark.node.AbstractVisitor.visit(AbstractVisitor.java:83)
    at org.commonmark.node.ListItem.accept(ListItem.java:7)
    at org.commonmark.node.AbstractVisitor.visitChildren(AbstractVisitor.java:132)
    at org.commonmark.node.AbstractVisitor.visit(AbstractVisitor.java:18)
    at org.commonmark.node.BulletList.accept(BulletList.java:9)
    at org.commonmark.node.AbstractVisitor.visitChildren(AbstractVisitor.java:132)
    at org.commonmark.node.AbstractVisitor.visit(AbstractVisitor.java:83)
    at org.commonmark.node.ListItem.accept(ListItem.java:7)
    at org.commonmark.node.AbstractVisitor.visitChildren(AbstractVisitor.java:132)
    at org.commonmark.node.AbstractVisitor.visit(AbstractVisitor.java:88)
    at org.commonmark.node.OrderedList.accept(OrderedList.java:10)
    at org.commonmark.node.AbstractVisitor.visitChildren(AbstractVisitor.java:132)
    at org.commonmark.node.AbstractVisitor.visit(AbstractVisitor.java:28)
    at org.commonmark.node.Document.accept(Document.java:7)
    at com.novocode.ornate.theme.SpecialLinkProcessor.apply(SpecialLinkProcessor.scala:12)
    at com.novocode.ornate.theme.HtmlTheme$$anonfun$render$1.apply(HtmlTheme.scala:235)
    at com.novocode.ornate.theme.HtmlTheme$$anonfun$render$1.apply(HtmlTheme.scala:227)
    at scala.collection.Iterator$class.foreach(Iterator.scala:893)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
    at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
    at com.novocode.ornate.theme.HtmlTheme.render(HtmlTheme.scala:227)
    at com.novocode.ornate.Main$.run(Main.scala:33)
    at com.novocode.ornate.Main$.runToStatus(Main.scala:77)
    at com.novocode.ornate.Main.runToStatus(Main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.novocode.ornate.sbtplugin.OrnatePlugin$$anonfun$ornateTask$1.apply(OrnatePlugin.scala:62)
    at com.novocode.ornate.sbtplugin.OrnatePlugin$$anonfun$ornateTask$1.apply(OrnatePlugin.scala:39)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
    at sbt.std.Transform$$anon$4.work(System.scala:63)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.Execute.work(Execute.scala:235)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[trace] Stack trace suppressed: run last *:ornate for the full output.
[error] (*:ornate) Ornate run failed with status code 1
[error] Total time: 2 s, completed Oct 11, 2016 10:55:56 AM

As users may sometimes do this on purpose, I propose that ornate warns the user when it detects unspecified links.

szeiger commented 7 years ago

Solved with unchecked: links in https://github.com/szeiger/ornate/commit/d48c6f1acd43c3188d0c0b4a7be77d90dabc71d5 (plus SpecialLinkProcessor has better error handling now so that a bad link will not abort page rendering anymore).