foursquare / fsqio

A monorepo that holds all of Foursquare's opensource projects
Apache License 2.0
252 stars 54 forks source link

thrift map parser incorrectly parsing values with string literal `:` #59

Closed cobrien704 closed 1 year ago

cobrien704 commented 5 years ago

The thrift value below does not compile. Link to discussion in #code

const map<string, list<string>> NamesToUrls = {
  "myName": [
    "https://helloworld.com",
    "https://foobar.com"
  ]
}

Error

==== stderr ====
                       SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
                       SLF4J: Defaulting to no-operation (NOP) logger implementation
                       SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
                       java.lang.Exception: unable to parse map value '{
                            "myName": [
                                "https://helloworld.com",
                                "https://foobar.com"
                            ]
                        }'
                        at io.fsq.spindle.codegen.runtime.MapRenderType.renderValue(RenderType.scala:275)
                        at io.fsq.spindle.codegen.runtime.ScalaConst.valueOption(ScalaConst.scala:28)
                        at src.resources.io.fsq.ssp.codegen.scala.$_scalate_$constants_ssp$$anonfun$$_scalate_$render$1.apply(constants.ssp.scala:32)
                        at src.resources.io.fsq.ssp.codegen.scala.$_scalate_$constants_ssp$$anonfun$$_scalate_$render$1.apply(constants.ssp.scala:29)
                        at scala.collection.immutable.List.foreach(List.scala:381)
                        at src.resources.io.fsq.ssp.codegen.scala.$_scalate_$constants_ssp$.$_scalate_$render(constants.ssp.scala:29)
                        at src.resources.io.fsq.ssp.codegen.scala.$_scalate_$constants_ssp.render(constants.ssp.scala:48)
                        at org.fusesource.scalate.RenderContext$$anonfun$render$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(RenderContext.scala:391)
                        at org.fusesource.scalate.RenderContext$$anonfun$render$1$$anonfun$apply$mcV$sp$1.apply(RenderContext.scala:391)
                        at org.fusesource.scalate.RenderContext$$anonfun$render$1$$anonfun$apply$mcV$sp$1.apply(RenderContext.scala:391)
                        at org.fusesource.scalate.RenderContext$class.withUri(RenderContext.scala:447)
                        at org.fusesource.scalate.DefaultRenderContext.withUri(DefaultRenderContext.scala:30)
                        at org.fusesource.scalate.RenderContext$$anonfun$render$1.apply$mcV$sp(RenderContext.scala:390)
                        at org.fusesource.scalate.RenderContext$$anonfun$render$1.apply(RenderContext.scala:390)
                        at org.fusesource.scalate.RenderContext$$anonfun$render$1.apply(RenderContext.scala:390)
                        at org.fusesource.scalate.RenderContext$class.withAttributes(RenderContext.scala:421)
                        at org.fusesource.scalate.DefaultRenderContext.withAttributes(DefaultRenderContext.scala:30)
                        at org.fusesource.scalate.RenderContext$class.render(RenderContext.scala:389)
                        at org.fusesource.scalate.DefaultRenderContext.render(DefaultRenderContext.scala:30)
                        at src.resources.io.fsq.ssp.codegen.scala.$_scalate_$record_ssp$.$_scalate_$render(record.ssp.scala:53)
                        at src.resources.io.fsq.ssp.codegen.scala.$_scalate_$record_ssp.render(record.ssp.scala:103)
                        at org.fusesource.scalate.layout.NullLayoutStrategy$.layout(LayoutStrategy.scala:43)
                        at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(TemplateEngine.scala:559)
                        at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1$$anonfun$apply$mcV$sp$1.apply(TemplateEngine.scala:559)
                        at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1$$anonfun$apply$mcV$sp$1.apply(TemplateEngine.scala:559)
                        at org.fusesource.scalate.RenderContext$class.withUri(RenderContext.scala:447)
                        at org.fusesource.scalate.DefaultRenderContext.withUri(DefaultRenderContext.scala:30)
                        at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1.apply$mcV$sp(TemplateEngine.scala:558)
                        at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1.apply(TemplateEngine.scala:555)
                        at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1.apply(TemplateEngine.scala:555)
                        at org.fusesource.scalate.RenderContext$.using(RenderContext.scala:47)
                        at org.fusesource.scalate.TemplateEngine.layout(TemplateEngine.scala:555)
                        at org.fusesource.scalate.TemplateEngine.layout(TemplateEngine.scala:587)
                        at org.fusesource.scalate.TemplateEngine.layout(TemplateEngine.scala:579)
                        at io.fsq.spindle.codegen.binary.ThriftCodegen$$anonfun$compile$2.apply(ThriftCodegen.scala:233)
                        at io.fsq.spindle.codegen.binary.ThriftCodegen$$anonfun$compile$2.apply(ThriftCodegen.scala:187)
                        at scala.collection.immutable.List.foreach(List.scala:381)
                        at io.fsq.spindle.codegen.binary.ThriftCodegen$.compile(ThriftCodegen.scala:187)
                        at io.fsq.spindle.codegen.binary.ThriftCodegen$.main(ThriftCodegen.scala:142)
                        at io.fsq.spindle.codegen.binary.ThriftCodegen.main(ThriftCodegen.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.martiansoftware.nailgun.NGSession.run(NGSession.java:280)
                       Caused by: scala.MatchError: [Ljava.lang.String;@68cb85dc (of class [Ljava.lang.String;)
                        at io.fsq.spindle.codegen.runtime.MapRenderType$$anonfun$2.apply(RenderType.scala:263)
                        at io.fsq.spindle.codegen.runtime.MapRenderType$$anonfun$2.apply(RenderType.scala:263)
                        at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
                        at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
                        at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
                        at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
                        at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
                        at scala.collection.mutable.ArrayOps$ofRef.flatMap(ArrayOps.scala:186)
                        at io.fsq.spindle.codegen.runtime.MapRenderType.renderValue(RenderType.scala:263)
                        ... 44 more

                       ==== stdout ====
cobrien704 commented 5 years ago

@iantabolt @jvandew @nfolkert-foursquare