chimpler / pyhocon

HOCON parser for Python
Apache License 2.0
493 stars 117 forks source link

Substitution fails for nested sections #321

Closed M0dEx closed 1 month ago

M0dEx commented 5 months ago

Description

Hi!

We have come across an issue where pyhocon is unable to resolve a nested substitution that should be resolvable, according to the HOCON specification.

Example

base.conf:

foo {
  foo-inner {
    pre-foo = 1
    foo-sub = ${foo.foo-inner.pre-foo}${foo.foo-inner.bar}
  }
}

bar {
  bar-inner {
    foo-sub = ${foo.foo-inner.foo-sub}
  }
}

child.conf:

include required("base.conf")

foo {
  foo-inner {
    bar = 1
  }
}

Expected result

foo {
  foo-inner {
    pre-foo = 1
    foo-sub = 11
    bar = 1
  }
}

bar {
  bar-inner {
    foo-sub = 11
  }
}

Actual result

pyhocon.exceptions.ConfigSubstitutionException: Cannot resolve ${foo.foo-inner.foo-sub}: (line: 10, col: 15). Check for cycles.

If the variables are moved from (foo/bar)-inner to (foo/bar), the substitution works as expected.