klum-ast

compileOnly part of KlumAST

License

License

GroupId

GroupId

com.blackbuild.klum.ast
ArtifactId

ArtifactId

klum-ast
Last Version

Last Version

2.0.0-dev.13+b0a18e7
Release Date

Release Date

Type

Type

jar
Description

Description

klum-ast
compileOnly part of KlumAST
Project URL

Project URL

https://github.com/klum-dsl/klum-ast
Source Code Management

Source Code Management

https://github.com/klum-dsl/klum-ast.git

Download klum-ast

How to add to project

<!-- https://jarcasting.com/artifacts/com.blackbuild.klum.ast/klum-ast/ -->
<dependency>
    <groupId>com.blackbuild.klum.ast</groupId>
    <artifactId>klum-ast</artifactId>
    <version>2.0.0-dev.13+b0a18e7</version>
</dependency>
// https://jarcasting.com/artifacts/com.blackbuild.klum.ast/klum-ast/
implementation 'com.blackbuild.klum.ast:klum-ast:2.0.0-dev.13+b0a18e7'
// https://jarcasting.com/artifacts/com.blackbuild.klum.ast/klum-ast/
implementation ("com.blackbuild.klum.ast:klum-ast:2.0.0-dev.13+b0a18e7")
'com.blackbuild.klum.ast:klum-ast:jar:2.0.0-dev.13+b0a18e7'
<dependency org="com.blackbuild.klum.ast" name="klum-ast" rev="2.0.0-dev.13+b0a18e7">
  <artifact name="klum-ast" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.blackbuild.klum.ast', module='klum-ast', version='2.0.0-dev.13+b0a18e7')
)
libraryDependencies += "com.blackbuild.klum.ast" % "klum-ast" % "2.0.0-dev.13+b0a18e7"
[com.blackbuild.klum.ast/klum-ast "2.0.0-dev.13+b0a18e7"]

Dependencies

compile (3)

Group / Artifact Type Version
com.blackbuild.klum.ast : klum-ast-annotations jar 2.0.0-dev.13+b0a18e7
com.blackbuild.klum.ast : klum-ast-runtime jar 2.0.0-dev.13+b0a18e7
com.blackbuild.klum.common : klum-common jar 0.6.0

Project Modules

There are no modules declared in this project.

Build Status

Welcome to KlumAST

Turn your models into supermodels!

klum logo

Breaking changes

I decided to release 1.2.0 prior to doing some extensive refactorings including splitting into runtime and compile time dependencies.

Thus 1.2.0 is simply a step up to 2.0.0, mainly designed to replace various rc-version in use.

Some new features being introduced in 1.2.0 need KlumAST to be present on the classpath during runtime.

Closure are now all DELEGATE_ONLY, this means methods of an outer object cannot be directly accessed. This is cleaner and somewhat closer to the behaviour of xml or other structured languages. Accessing outer methods should be a corner case. Take a look at Migration if you encounter errors.

What is KlumAST?

KlumAST is the first part of the KlumDSL suite. It provides and easy way to create a complete DSL for a model classes.

There are two main objectives for this project:

  • be as terse as possible while still being readable and using almost no boilerplate code

  • Offer as much IDE-based assistance as possible. Since KlumAST uses AST transformations, this works out of the box for all major IDEs (as long as the model classes are separated from the actual configuration)

Example

Given the following config classes:

@DSL
class Config {
    Map<String, Project> projects
    boolean debugMode
    List<String> options
}

@DSL
class Project {
    @Key String name
    String url
    MavenConfig mvn
}

@DSL
class MavenConfig {
    List<String> goals
    List<String> profiles
    List<String> cliOptions
}

A config object can be created with the following dsl:

def github = "http://github.com"


def config = Config.create {

    debugMode true
    
    options "demo", "fast"
    option "another"
    
    projects {
        project("demo") {
            url "$github/x/y"
            
            mvn {
                goals "clean", "compile"
                profile "ci"
                profile "!developer"
                
                cliOptions "-X -pl :abc".split(" ")
            }
        }
        project("demo2") {
            url "$github/a/b"
            
            mvn {
                goals "compile"
                profile "ci"
            }
        }
    }
}

Find more details on in our brand new wiki

com.blackbuild.klum.ast

KlumDSL

Versions

Version
2.0.0-dev.13+b0a18e7
2.0.0-dev.0.uncommitted+dd1bf58
2.0.0-rc.15
2.0.0-rc.14
2.0.0-rc.13
2.0.0-rc.12
2.0.0-rc.11
2.0.0-rc.10
2.0.0-rc.9
2.0.0-rc.8
2.0.0-rc.7
2.0.0-rc.6
2.0.0-rc.5
2.0.0-rc.4
2.0.0-rc.3
2.0.0-rc.2
1.2.2
1.2.1
1.2.1-rc.3
1.2.0
1.2.0-rc.37
1.2.0-rc.36
1.2.0-rc.35
1.2.0-rc.34
1.2.0-rc.33
1.2.0-rc.32
1.2.0-rc.31
1.2.0-rc.30
1.2.0-rc.29
1.2.0-rc.28
1.2.0-rc.27
1.2.0-rc.26
1.2.0-rc.25
1.2.0-rc.24
1.2.0-rc.23
1.2.0-rc.22
1.2.0-rc.21
1.2.0-rc.20
1.2.0-rc.19
1.2.0-rc.18
1.2.0-rc.17
1.2.0-rc.16
1.2.0-rc.15
1.2.0-rc.14
1.2.0-rc.13
1.2.0-rc.12
1.2.0-rc.11
1.2.0-rc.10
1.2.0-rc.9
1.2.0-rc.8
1.2.0-rc.7
1.2.0-rc.6
1.2.0-rc.5
1.2.0-rc.4
1.2.0-rc.3
1.1.1
1.1
1.0
0.99.2
0.99.1
0.99.0
0.98.2
0.98.1
0.98.0
0.97.5
0.97.4
0.97.3
0.97.2
0.97.1
0.97.0
0.96.1
0.96.0