# Groovy

To use this language, use the class "language-groovy".

## Comments

    // Single line comment
    /* Multi-line
    comment */

## Strings

    "foo 'bar' baz"
    'foo "bar" baz'
    """Multi-line
    string"""
    '''Multi-line
    string'''
    "String /containing/ slashes"

## Slashy strings (regex)

    /.*foo.*/
    /regex"containing quotes"/
    $/.*"(.*)".*/(.*)/$

## Interpolation inside GStrings and regex

    "The answer is ${21*2}"
    "The $foxtype ${foxcolor.join()} fox"
    /foo${21*2}baz/
    'No interpolation here : ${21*2}'

## Full example

    #!/usr/bin/env groovy
    package model

    import groovy.transform.CompileStatic
    import java.util.List as MyList

    trait Distributable {
        void distribute(String version) {}
    }

    @CompileStatic
    class Distribution implements Distributable {
        double number = 1234.234 / 567
        def otherNumber = 3 / 4
        boolean archivable = condition ?: true
        def ternary = a ? b : c
        String name = "Guillaume"
        Closure description = null
        List<DownloadPackage> packages = []
        String regex = ~/.*foo.*/
        String multi = '''
            multi line string
        ''' + """
            now with double quotes and ${gstring}
        """ + $/
            even with dollar slashy strings
        /$

        /**
         * description method
         * @param cl the closure
         */
        void description(Closure cl) { this.description = cl }

        void version(String name, Closure versionSpec) {
            def closure = { println "hi" } as Runnable

            MyList ml = [1, 2, [a: 1, b:2,c :3]]
            for (ch in "name") {}

            // single line comment
            DownloadPackage pkg = new DownloadPackage(version: name)

            check that: true

            label:
            def clone = versionSpec.rehydrate(pkg, pkg, pkg)
            /*
                now clone() in a multiline comment
            */
            clone()
            packages.add(pkg)

            assert 4 / 2 == 2
        }
    }

## Known failures

There are certain edge cases where Prism will fail. There are always such cases in every regex-based syntax highlighter. However, Prism dares to be open and honest about them. If a failure is listed here, it doesn’t mean it will never be fixed. This is more of a “known bugs” list, just with a certain type of bug.

### Comment-like substrings

    "foo /* bar */ baz"; "foo // bar";

### Two divisions on the same line

    2 / 3 / 4