wdl-analysis 0.24.0

Analysis of Workflow Description Language (WDL) documents.
Documentation
## This is a test of type mismatches in numeric expressions.

#@ except: UnusedDeclaration

version 1.3

task test {
    Int a = 1
    Int b = 2
    String c = "3"
    File d = "4"
    Float e = 1.0
    Int? f = 1
    String? g = "3"
    File? h = "4"
    Float? i = 1.0

    Int a1 = a + b      # OK
    String a2 = a + c   # OK
    String a3 = c + a   # OK
    String a4 = c + c   # OK
    File a5 = d + d     # NOT OK
    Float a6 = e + e    # OK
    Float a7 = a + e    # OK
    Float a8 = e + a    # OK
    String a9 = c + f   # NOT OK
    String a10 = c + g  # NOT OK
    String a11 = c + h  # NOT OK
    String a12 = c + i  # NOT OK

    # Check for string concatenation in interpolation context that allows optional types
    # None of these should error
    String i1 = "~{f + c}"
    String i2 = "~{c + f}"
    String i3 = "~{g + c}"
    String i4 = "~{c + g}"
    String i5 = "~{h + c}"
    String i6 = "~{c + h}"
    String i7 = "~{i + c}"
    String i8 = "~{c + i}"

    Int s1 = a - b      # OK
    String s2 = a - c   # NOT OK
    String s3 = c - a   # NOT OK
    String s4 = c - c   # NOT OK
    File s5 = d - d     # NOT OK
    Float s6 = e - e    # OK
    Float s7 = a - e    # OK
    Float s8 = e - a    # OK

    Int m1 = a * b      # OK
    String m2 = a * c   # NOT OK
    String m3 = c * a   # NOT OK
    String m4 = c * c   # NOT OK
    File m5 = d * d     # NOT OK
    Float m6 = e * e    # OK
    Float m7 = a * e    # OK
    Float m8 = e * a    # OK

    Int d1 = a / b      # OK
    String d2 = a / c   # NOT OK
    String d3 = c / a   # NOT OK
    String d4 = c / c   # NOT OK
    File d5 = d / d     # NOT OK
    Float d6 = e / e    # OK
    Float d7 = a / e    # OK
    Float d8 = e / a    # OK

    Int mod1 = a % b      # OK
    String mod2 = a % c   # NOT OK
    String mod3 = c % a   # NOT OK
    String mod4 = c % c   # NOT OK
    File mod5 = d % d     # NOT OK
    Float mod6 = e % e    # OK
    Float mod7 = a % e    # OK
    Float mop8 = e % a    # OK

    Int e1 = a ** b      # OK
    String e2 = a ** c   # NOT OK
    String e3 = c ** a   # NOT OK
    String e4 = c ** c   # NOT OK
    File e5 = d ** d     # NOT OK
    Float e6 = e ** e    # OK
    Float e7 = a ** e    # OK
    Float e8 = e ** a    # OK

    command <<<>>>
}