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.
Changes¶
Maven¶
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
com.google.inject.internal.*
.
Core¶
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 modulelibspoofax/analysis/constraint
. - Fixed a bug where ambiguity errors were not always correctly reported.
FlowSpec¶
This release introduces FlowSpec, a new meta-language for intra-procedural data-flow analysis. See the documentation of the language for more details.
Stratego¶
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 namedlifted26
, as the compiler cannot replace humans in properly naming things.
SPT¶
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.
NaBL2¶
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 withNaBL2
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 namednabl2.*
. - Add classes for matching and subtitution of terms, independent of unification.
- Use the generalized
constraint
analyzer for the NaBL2 analysis strategy.
SDF3¶
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.
Eclipse¶
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.
IntelliJ¶
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
Downloads¶
Eclipse plugin¶
Premade Eclipse installations¶
With embedded JRE:
- macOS 64-bit with embedded JVM
- Linux 64-bit with embedded JVM
- Windows 64-bit with embedded JVM
- Windows 32-bit with embedded JVM
Without embedded JRE:
Update site¶
- Eclipse update site:
https://artifacts.metaborg.org/content/unzip/releases-unzipped/org/metaborg/org.metaborg.spoofax.eclipse.updatesite/2.5.0/org.metaborg.spoofax.eclipse.updatesite-2.5.0-assembly.zip-unzip/
- Eclipse update site archive
IntelliJ plugin¶
- IntelliJ update site:
https://artifacts.metaborg.org/service/local/artifact/maven/redirect?r=releases&g=org.metaborg&a=org.metaborg.intellij.dist&p=zip&v=2.5.0
- 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
StrategoXT¶
Maven artifacts¶
Maven artifacts can be found on our artifact server.
The Maven version used for this release is 2.5.0
.
Created: January 28, 2025