Skip to content

Spoofax 2.5.0 (11-09-2018)

Spoofax 2.5 introduces FlowSpec, a new meta-language for intra-procedural data-flow analysis; layout-sensitive parsing in SDF3; and has several small improvements and bug fixes.



We updated the Guice version that Spoofax uses to 4.2.0. This has the cascading effect that we need Maven 3.5.4, since Spoofax is used in a maven plugin. Be sure to have this version of Maven installed, or you will run into MethodNotFoundException s for*.


The constraint analyzer was generalized:

  • The constraint analyzer is now independent of NaBL2, and can be used as a generic analysis mechanism from Stratego. The analysis cycle and the Stratego interface to it are defined ans documented in module libspoofax/analysis/constraint.
  • Fixed a bug where ambiguity errors were not always correctly reported.


This release introduces FlowSpec, a new meta-language for intra-procedural data-flow analysis. See the documentation of the language for more details.


Stratego received some small patches to improve user experience.

  • Stratego editor now gives warnings when using left, right and a couple of other variables names as these are also constructors in libstratego-sglr and interpreted as constructor match patterns.
  • When the Stratego compiler generates names for code generation, these now start with the source code name if available or with a constant name related to the language feature (e.g. a where(s) is turned into ?where243;s;!where243). Since some generated names turn up in a stack trace from a Stratego, this should improve readability of the stack trace. Complex closures are still named lifted26, as the compiler cannot replace humans in properly naming things.


Problems related to escaping in string terms of expectations are fixed:

  • Double quotes (") in expectation require escaping using backslashes, but were not unescaped when comparing with actual parse results. This made correct tests containing double quotes in strings fail. This is fixed by unescaping the expectation terms.
  • Formatting expectation terms as strings was different than default ATerms (" and \ were not escaped), which was confusing when a test fails and the actual and expected terms were reported. This is fixed by aligning the SPT expectation terms formatting with default ATerm formatting.


Small usability improvements:

  • Empty parameter tuples in rules can be omitted.
  • Accidentally writing a dot instead of a comma before a recursive rule invocation could make that constraint look like a rule without constraints. Layout is now used to give a warning when such a case is written.
  • Fix import problems caused by nabl2.runtime exports. The exports are restricted such that layout syntax and DynSem signatures are not exported anymore. The sorts defined by the runtime are all prefixed with NaBL2 to prevent accidental merges with sorts from the importing language.
  • Allow all Stratego identifiers to be used as constructor names.

Solver changes:

  • Adopt new naming convention, with packages named mb.nabl2.*, and artifacts named nabl2.*.
  • Add classes for matching and subtitution of terms, independent of unification.
  • Use the generalized constraint analyzer for the NaBL2 analysis strategy.


The experimental support for generating Scala case classes from an SDF3 specification was removed. It was incomplete, unmaintained and unused.

Added support for Layout Declarations <layout-declarations>{.interpreted-text role="ref"} for layout-sensitive parsing and pretty-printing.


Small fixes and improvements:

  • Execute builders for languages which have no analysis defined. Previously builders would always wait until an analysis result was produced.
  • Cancel running SPT test suites. It is now possible to cancel a running SPT test suite in the progress window.


Small fixes and improvements:

  • Can now be installed into any latest IntelliJ, not just the last version we tested
  • By default runs in IntelliJ 2018.1.1
  • Simplified project structure
  • Updated dependencies
  • Changes to support Java 9 in the future


Eclipse plugin

Premade Eclipse installations

With embedded JRE:

Without embedded JRE:

Update site

  • Eclipse update site:
  • Eclipse update site archive

IntelliJ plugin

  • IntelliJ update site:
  • IntelliJ update site archive

Command-line utilities

Core API

  • Spoofax Core Uber JAR
  • Spoofax Core uber Maven artifact: org.metaborg:org.metaborg.spoofax.core.uber:2.5.0


Maven artifacts

Maven artifacts can be found on our artifact server. The Maven version used for this release is 2.5.0.

Last update: May 24, 2024
Created: May 24, 2024