From c7f36078e3a9c4700d0b40bc52831685dba9922f Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Mon, 10 Jul 2017 21:51:50 +0200 Subject: [PATCH 1/3] substitution on left site of not allowed --- .../src/com/typesafe/hocon/parser/ParserTest.xtend | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.typesafe.hocon.tests/src/com/typesafe/hocon/parser/ParserTest.xtend b/com.typesafe.hocon.tests/src/com/typesafe/hocon/parser/ParserTest.xtend index 5cc6a05..26e7e76 100644 --- a/com.typesafe.hocon.tests/src/com/typesafe/hocon/parser/ParserTest.xtend +++ b/com.typesafe.hocon.tests/src/com/typesafe/hocon/parser/ParserTest.xtend @@ -118,7 +118,7 @@ class ParserTest { @Test def void testSubstitution() { - succeeds("${foo.bar} += ${akka.timeout}\n") + succeeds("foo.bar += ${akka.timeout}\n") } @Test From 4a076fe62a376c73ec19f5e90b2096bd36a0f935 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Mon, 10 Jul 2017 21:52:21 +0200 Subject: [PATCH 2/3] Define Substitution --- com.typesafe.hocon/src/com/typesafe/config/Hocon.xtext | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/com.typesafe.hocon/src/com/typesafe/config/Hocon.xtext b/com.typesafe.hocon/src/com/typesafe/config/Hocon.xtext index 12d9dc1..5c234ec 100644 --- a/com.typesafe.hocon/src/com/typesafe/config/Hocon.xtext +++ b/com.typesafe.hocon/src/com/typesafe/config/Hocon.xtext @@ -50,7 +50,11 @@ Null: StringLiteral returns EString: - (name = STRING | name = UNQUOTED_STRING | '${' ('?')? UNQUOTED_STRING '}') + (name = STRING | name = UNQUOTED_STRING | Substitution) +; + +Substitution returns EString: + '${' ('?')? UNQUOTED_STRING '}' ; NumberLiteral: From 74edfb909234204fecf5389e7594741a5cc86be2 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Mon, 10 Jul 2017 21:52:48 +0200 Subject: [PATCH 3/3] Support concatenation of arrays --- .../src/com/typesafe/hocon/parser/ParserTest.xtend | 2 ++ com.typesafe.hocon/src/com/typesafe/config/Hocon.xtext | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/com.typesafe.hocon.tests/src/com/typesafe/hocon/parser/ParserTest.xtend b/com.typesafe.hocon.tests/src/com/typesafe/hocon/parser/ParserTest.xtend index 26e7e76..bf7fa7b 100644 --- a/com.typesafe.hocon.tests/src/com/typesafe/hocon/parser/ParserTest.xtend +++ b/com.typesafe.hocon.tests/src/com/typesafe/hocon/parser/ParserTest.xtend @@ -82,6 +82,8 @@ class ParserTest { // This is a map with some nested maps and arrays within it, as well as some concatenations qux { baz: abc 123 + biz: [element1, element2] [element3, element4] + buz: [prependelementtoarray] ${arrayref} bar: { baz: abcdefg bar: { diff --git a/com.typesafe.hocon/src/com/typesafe/config/Hocon.xtext b/com.typesafe.hocon/src/com/typesafe/config/Hocon.xtext index 5c234ec..6da3c9a 100644 --- a/com.typesafe.hocon/src/com/typesafe/config/Hocon.xtext +++ b/com.typesafe.hocon/src/com/typesafe/config/Hocon.xtext @@ -27,10 +27,10 @@ Member: ; Literal: - (value += SimpleLiteral)+ | Object | Array ; + (value += SimpleLiteral)+ | Object | (value += Array)+ ; SimpleLiteral returns EString: - (StringLiteral | name = Boolean | Null | NumberLiteral) + (StringLiteral | name = Boolean | Null | NumberLiteral | Substitution) ; Array: @@ -38,7 +38,7 @@ Array: (values+=Literal) ((',' | NL) NL* values+=Literal)* NL* - ']') | ( '[' NL* ']' ) + ']') | Substitution | ( '[' NL* ']' ) ; Boolean: @@ -50,7 +50,7 @@ Null: StringLiteral returns EString: - (name = STRING | name = UNQUOTED_STRING | Substitution) + (name = STRING | name = UNQUOTED_STRING) ; Substitution returns EString: