bertramdev / hcl4j

HCL is the Hashicorp Configuration Language used in Terraform. This is a java Parser for parsing HCL and converting to Map objects.
Apache License 2.0
67 stars 26 forks source link

"Error Parsing Numerical Value" when using a number minus something #37

Open mccartney opened 1 year ago

mccartney commented 1 year ago

The following code:

locals {
  one = 1
  two = 3 - one
}

fails with:

com.bertramlabs.plugins.hcl4j.HCLParserException: Error Parsing Numerical Value in HCL Attribute 
        at com.bertramlabs.plugins.hcl4j.HCLParser.processValue(HCLParser.java:841)
        at com.bertramlabs.plugins.hcl4j.HCLParser.processSymbolPass2(HCLParser.java:462)
        at com.bertramlabs.plugins.hcl4j.HCLParser.processSymbolPass2(HCLParser.java:656)
        at com.bertramlabs.plugins.hcl4j.HCLParser.processSymbolPass2(HCLParser.java:418)
        at com.bertramlabs.plugins.hcl4j.HCLParser.parse(HCLParser.java:315)
        at com.bertramlabs.plugins.hcl4j.HCLParser.parse(HCLParser.java:276)
        at com.bertramlabs.plugins.hcl4j.HCLParser.parse(HCLParser.java:200)
        at com.bertramlabs.plugins.hcl4j.HCLParser.parse(HCLParser.java:183)
[...]
Caused by: java.lang.NumberFormatException: For input string: "-"
        at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
        at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
        at java.lang.Double.parseDouble(Double.java:538)
        at com.bertramlabs.plugins.hcl4j.HCLParser.processValue(HCLParser.java:838)
        ... 54 more

when running new HCLParser().parse() against it.

Using hcl4j 0.7.3

davydotcom commented 1 week ago

Does this work if you treat the one as a local var ... i.e. local.one instead?

mccartney commented 1 week ago

It fails with the same error message.

Just tried with the current master (24550a3e346d526569e6520707e400044d92ef4a)

    void "should handle variables referring to each other" () {
        given:
        def hcl = '''
locals {
  one = 1
  two = 3 - local.one
}
'''
        HCLParser parser = new HCLParser();
        when:
        def results  = parser.parse(hcl)
        then:
        results != null
    }

fails with:

HCLParserSpec > should handle variables referring to each other FAILED
    java.lang.RuntimeException: com.bertramlabs.plugins.hcl4j.HCLParserException: Error Parsing Numerical Value in HCL Attribute 
        at com.bertramlabs.plugins.hcl4j.HCLParser.parse(HCLParser.java:348)
        at com.bertramlabs.plugins.hcl4j.HCLParser.parse(HCLParser.java:136)
        at com.bertramlabs.plugins.hcl4j.HCLParser.parse(HCLParser.java:123)
        at com.bertramlabs.plugins.hcl4j.HCLParserSpec.should handle variables referring to each other(HCLParserSpec.groovy:1694)

        Caused by:
        com.bertramlabs.plugins.hcl4j.HCLParserException: Error Parsing Numerical Value in HCL Attribute 
            at app//com.bertramlabs.plugins.hcl4j.HCLParser.processValue(HCLParser.java:960)
            at app//com.bertramlabs.plugins.hcl4j.HCLParser.processSymbolPass2(HCLParser.java:508)
            at app//com.bertramlabs.plugins.hcl4j.HCLParser.processSymbolPass2(HCLParser.java:702)
            at app//com.bertramlabs.plugins.hcl4j.HCLParser.processSymbolPass2(HCLParser.java:464)
            at app//com.bertramlabs.plugins.hcl4j.HCLParser.lambda$parse$1(HCLParser.java:328)
            at app//com.bertramlabs.plugins.hcl4j.HCLParser.intermediateHclParserExceptionHandling(HCLParser.java:363)
            at app//com.bertramlabs.plugins.hcl4j.HCLParser.parse(HCLParser.java:328)
            ... 3 more

            Caused by:
            java.lang.NumberFormatException: For input string: "-"
                at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
                at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
                at java.base/java.lang.Double.parseDouble(Double.java:792)
                at com.bertramlabs.plugins.hcl4j.HCLParser.processValue(HCLParser.java:957)
                ... 9 more