All notable changes to this project are documented in this file, based on Keep a Changelog.
0.23.0 - 2024-06-25
-
Configure placeholder syntax for SDF3:
sdf3 { source = files { placeholders { prefix = "$" postfix = "" } } }
0.20.0 - 2024-05-07
- Gradle 6 is no longer supported. The minimum supported Gradle version is 7.6.4.
- Extract common classes from JSGLR and JSGLR2 into
jsglr.shared
. - Update the baseline.
0.19.8 - 2024-03-06
- Command Line Interface now returns a non-zero error code when the underlying command fails.
- Command Line Interface executing tests now prints the number of passed and failed test cases.
- SPT
transform
expectations support commands using the enclosing file and/or enclosing project.
- Termination issues in Code Completion
- Serialization issues of meta-language configuration objects
- Region arguments to SPT
transform
expectations now correspond to the imploder attachments. - Missing Java code bundling in SPT
0.19.7 - 2024-02-09
releng
(devenv-release) requirement to0.1.35
.coronium
plugin requirement to0.3.17
.- Removed SnakeYAML dependency of Tego.
- Removed direct use of guava dependency.
- Explicitly bundling guava dependency in Eclipse plugin due to 3rd party dependency via dagger-compiler.
- Eclipse versions to
2022-06
.
- Missing Java code bundling in sdf3.ext.statix
0.19.6 - 2023-05-03
- Command-line options not getting default values due to wrong command context.
- Missing dependencies from Gradle
processResources
tasks to our tasks that provide resources.
- Feedback names to not be printed by default in command-line runs. Can be printed with
--print-feedback-names
.
0.19.5 - 2023-05-01
strategolib.eclipse
not using Eclipse version2021-03
.
- Command-line runs use the current working directory as enclosing project/directory context.
0.19.4 - 2023-03-13
releng
(devenv-release) requirement to0.1.34
.- Eclipse versions to
2021-03
.
- Adapter section to
spoofaxc.cfg
to extend several adapter classes of languages.
0.19.3 - 2022-11-25
- Missing class files in 0.19.2 release.
releng
(devenv-release) requirement to0.1.33
.
- Preliminary support for using existing Stratego concrete syntax extension parse tables.
0.19.2 - 2022-05-25
- New SDF3 and Statix source files not being detected.
- Default SDF3 layout definition not including horizontal tabs.
releng
(devenv-release) requirement to0.1.32
.
0.19.1 - 2022-05-24
- CFG conversion being executed even if static analysis returned errors, resulting in runtime exceptions. Fixes #109, #94.
- Value argument provider always causing runtime exceptions. Fixes #102.
- Absolute file paths in places where relative ones were expected always causing runtime exceptions. Fixes #96.
- Eclipse LWB plugin still generating the old
build/generated/sources/languageSpecification/java
directory.
0.19.0 - 2022-05-13
- ESV imports not resolving to modules in the main source directory.
- Updating the Eclipse LWB plugin causing failures when no clean is performed. The PIE store is now automatically cleaned when the version changes. Fixes #39.
- UNIX JVMs embedded into Eclipse installations not working due to JVM not having the executable mode set. Fixes #37.
include-libspoofax2-exports
option inesv
section ofspoofaxc.cfg
, this can now simply be replaced with a dependency toorg.metaborg:libspoofax2:*
.
resource
requirement to0.14.1
.common
requirement to0.11.0
.pie
requirement to0.21.0
.releng
(devenv-release) requirement to0.1.31
.coronium
plugin requirement to0.3.16
.- Dependency syntax to be less verbose and more configurable.
- Dependency kinds into
Build
for dependencies that are needed when building the language, andRun
for dependencies that are needed when running the language. - Generated meta-language files are now generated in
./build/generated/sources/metalang/<metalang>
instead of./build/generated/sources/languageSpecification/<metalang>
. - Unarchived meta-language files are now unarchived into
./build/unarchive/<metalang>
instead of./build/unarchive
. <Name> = parameter { <Options> }
into<Name> = { <Options> }
. The old syntax is still supported but deprecated, and will be removed in the future.parse-table-generator
section insdf3
section is now part ofsource = files { ... }
section.sdf3-statix-signature-generation
section instatix
section is now part ofsource = files { ... }
section.sdf3-statix-explication-generation
section instratego
section is now part ofsource = files { ... }
section.language-strategy-affix
option instratego
section is now partsource = files { ... }
section. Also, the property in the lockfile corresponding to this option has been changed fromstratego.languageStrategyAffix
tostratego.source.files.languageStrategyAffix
.- Default dependencies are now only added if no dependencies are specified in
spoofaxc.cfg
. When generating a new Spoofax 3 project, these default dependencies are added explicitly to thespoofaxc.cfg
file. In the future, these default dependencies will be removed. It is recommended to add these dependencies to yourspoofax.cfg
:
build-dependencies [
org.metaborg:strategolib:*
org.metaborg:gpp:*
org.metaborg:libspoofax2:*
org.metaborg:libstatix:*
]
- Preliminary support for SDF3, ESV, and Statix compile-time dependencies. That is, exports of source directories of those meta-languages and imports through dependencies.
- Support for include directories for SDF3.
build-dependencies [ ... ]
section for quickly specifying build dependencies without having to specify the kind for every dependency.
0.18.0 - 2022-04-04
- Ensure that
strategolib.eclipse
andgpp.eclipse
are published, as they are required by Eclipse plugins of languages. - Exception in
DynamicLoad
when a classpath directory did not exist.
- Update
org.jetbrains.intellij
Gradle plugin to1.4.0
. common
requirement to0.10.3
.resource
requirement to0.14.0
.pie
requirement to0.20.0
.releng
(devenv-release) requirement to0.1.30
.
- Preliminary support for Stratego compile-time dependencies.
0.17.0 - 2022-03-09
- Literals on the left-hand side in SDF3 kernel syntax productions causing errors even though they are valid.
- Improve "language/component management" and make it cross-platform.
- Merge
spoofax.compiler.dagger
intospoofax.compiler
. - Merge
spoofax.lwb.compiler.dagger
intospoofax.lwb.compiler
. - Rename
Spoofax3
->SpoofaxLwb
inspoofax.lwb.compiler
. - Update
org.jetbrains.intellij
Gradle plugin to1.0
. releng
(devenv-release) requirement to0.1.29
.common
requirement to0.10.2
.pie
requirement to0.19.8
.
0.16.17 - 2021-12-13
pie
requirement to0.19.7
.
0.16.16 - 2021-12-11
releng
(devenv-release) requirement to0.1.28
. (skipped a few versions due to bugs)
0.16.15 - 2021-12-01
- imports to
libspoofax
in Stratego 2 not working due to unresolved import tolibstratego-aterm
. This precompiled Stratego 1 library is now passed in by default.
releng
(devenv-release) requirement to0.1.23
.
0.16.14 - 2021-12-01
releng
(devenv-release) requirement to0.1.22
.
0.16.13 - 2021-11-24
releng
(devenv-release) requirement to0.1.21
.
0.16.12 - 2021-11-23
- More wrong main files being used when only the main source directory was set for a meta-language in
spoofaxc.cfg
. - Extract more messages in SPT
transform
expectations. - Out-of-bounds messages in SPT. Messages outside the bounds of the test fragment are now moved to the expectation.
common
requirement to0.10.1
.pie
requirement to0.19.6
.
0.16.11 - 2021-11-19
- RV32IM not being parsed due to wrong start symbol.
- Wrong main files being used when only the main SDF3 source directory was set in
spoofaxc.cfg
.
0.16.10 - 2021-11-19
releng
(devenv-release) requirement to0.1.20
.- Updated RV32IM syntax.
0.16.9 - 2021-11-18
- Eclipse editors of dynamically loaded languages lacking many editor services.
- Add
stratego.output-java-package
option to CFG, for configuring the Stratego generated Java files package.
releng
(devenv-release) requirement to0.1.19
.
0.16.8 - 2021-11-17
- Support for toggle comment in Eclipse plugins.
- Support for bracket matching in Eclipse plugins.
0.16.7 - 2021-11-17
- Many Stratego messages having no origin locations.
0.16.6 - 2021-11-16
- Messages with exceptions not showing their exception in Eclipse.
- SPT transform expectation halting the entire pipeline due to an exception when building the arguments for a command. It now creates an error in the SPT file.
- SPT transform expectation not working on commands that require an enclosing context. Fixed by making SPT test case resources implement
HierarchicalResource
that mock a directory with itself in it. - SPT transform to term expectation not giving an error if a command returned no feedback at all.
LanguageInstance#createCodeCompletionTask
to return anOption
to signal that the language does not support code completion. This change will be rolled out to the other task creating functions ofLanguageInstance
in the future.RawArgsBuilder
to throwArgumentBuilderException
instead of a genericRuntimeException
to differentiate between otherRuntimeException
s.- RV32IM execution task to be split into
ExecuteRiscV
which takes a supplier of RV32IM text, and produces the printed text or an error, andShowExecuteRiscV
which shows that as a command. - SPT transform to ATerm expectation not checking whether the command feedback matches the expected term pattern. It now checks the "show text" feedback against the term pattern, which will only work if the pattern is a wildcard or a string.
- Made it possible to depend on the RV32IM language, giving access to its tasks. A dependency can be added with the following syntax in CFG:
depend-on-rv32im = true
. A more general language dependency system will be added in the future.
0.16.5 - 2021-11-12
releng
(devenv-release) requirement to0.1.18
.
0.16.4 - 2021-11-11
- Fix
InvalidAstShapeException
for incomplete CFG files (#93).
common
requirement to0.10.0
.pie
requirement to0.19.5
.
- Documentation page on importing a project into the Eclipse LWB.
0.16.3 - 2021-11-10
- Fix "Resource ‘...’ does not exist." in Eclipse when outputting files from commands.
- Fix exception being thrown, halting the entire pipeline, when the SDF3 source directory does not exist. Now a result with the error is returned instead.
- Fix exception being thrown, halting the entire pipeline, when meta-language files are moved around. Now an error is logged instead.
- Importing language project into Eclipse causing many duplicate definition errors due to all files being copied into
bin
. Thebin
directory is now ignored as a source directory by default. - Spoofax Eclipse plugins/features/repositories not having names or providers (#85).
resource
requirement to0.13.2
.pie
requirement to0.19.4
.
0.16.2 - 2021-11-09
- Fix wrong separator being used on Windows in
pp.str2
Stratego import.
resource
requirement to0.13.1
.
0.16.1 - 2021-11-08
- Fix wrong pretty-printer import in Stratego when SDF3 main file is not
./start.sdf3
.
0.16.0 - 2021-11-05
- Evaluating .stxtest files outside of the Statix source directory (src by default) silently failing.
- Errors in CFG not appearing, or just displaying a single error on the first line.
- Source file configuration in
spoofaxc.cfg
to be relative to the respective source directory, instead of relative to the root directory. - Missing source directories or files not giving errors in
spoofaxc.cfg
. - Serialization failure when an Eclipse resource issue occurred due to
CoreException
not being serializable. Fixed by turningCoreException
intoSerializableCoreException
which is serializable. - No errors being printed when reading configuration failed in the LWB Gradle plugin.
- Spoofax Eclipse LWB plugin to show an error dialog when building a language fails due to errors in language definition files.
- LWB compiler to make it possible to supply a prebuilt ESV output file for a language instead of always having to compile ESV from sources. This is done with the
esv { source = prebuilt { file = ./prebuilt/editor.esf.af } }
configuration inspoofaxc.cfg
. The syntax for setting the main source directory, main file, and include directories has also changed. See the configuration reference on the documentation site for details. - LWB compiler to make it possible to supply prebuilt SDF3 parse table files for a language instead of always having to compile SDF3 from sources. This is done with the
sdf3 { source = prebuilt { parse-table-aterm-file = ./prebuilt/sdf.tbl parse-table-persisted-file = ./prebuilt/sdf.bin } }
configuration inspoofaxc.cfg
. The syntax for setting the main source directory and main file has also changed. See the configuration reference on the documentation site for details. - LWB compiler to make it possible to supply prebuilt Statix spec ATerm files for a language instead of always having to compile Statix from sources. This is done with the
statix { source = prebuilt { spec-aterm-directory = ./prebuilt/resource/statix } }
configuration inspoofaxc.cfg
. The syntax for setting the main source directory and main file has also changed. See the configuration reference on the documentation site for details. - Moved most Stratego configuration into a
source = files {}
section in accordance with the other meta-languages. See the configuration reference on the documentation site for details. - LWB compiler to be more incremental by adding output stampers to high-level tasks, ensuring they only get re-executed when a relevant part of the configuration changes.
common
requirement to0.9.9
.pie
requirement to0.19.3
.coronium
plugin requirements to0.3.12
.releng
(devenv-release) requirement to0.1.17
.
- RV32IM language for targeting RISC-V.
- Semantic code completion.
0.15.3 - 2021-10-22
- Another instance of cancellation/interrupt during PIE execution leaving behind an inconsistent state in certain edge cases. This should resolve all instances of intermittent
NullPointerException
s. (#81)
0.15.2 - 2021-10-21
- Tego runtime, along with exposing this runtime to languages that require it, in preparation for semantic code completion based on Statix (#73).
- Undo in the Eclipse LWB applying to the first opened editor when multiple editors of the same language were opened (#55).
0.15.1 - 2021-10-19
- No errors for certain kinds of SDF3 context-free productions that do require a constructor. All context-free productions except those of the form
A = B
andA = {B ","}*
, excluding productions that have a{reject}
or{bracket}
annotation, now require a constructor or produce an error. - No error for ill-formed SDF3 bracket productions. Bracket productions must be of the form
A = "(" B ")"
or produce an error. IndexOutOfBoundsException
in SPT tests withresolve
andresolve to
expectations where there was no valid target for a selection.- Cancellation/interrupt during PIE execution leaving behind an inconsistent state in certain edge cases. This solved some intermittent
NullPointerException
s, but not all (#81).
pie
requirement to0.19.1
releng
(devenv-release) requirement to 0.1.16.
0.15.0 - 2021-10-18
- Continuous commands not updating after a language was rebuilt in Eclipse.
- Not unobserving continuous command feedback while a language is being rebuilt in Eclipse, which would cause the feedback to always reappear after every change.
- Possible deadlock when closing Eclipse continuous command feedback editors.
- Read lock rules in Eclipse not being able to be acquired concurrently.
- Some changes to programs of languages with single-file analysis losing their messages.
resource
requirement to0.13.0
.pie
requirement to0.19.0
.
0.14.2 - 2021-10-13
- Laggy typing in Statix editors by downgrading the Eclipse LWB to Eclipse 2021-03.
0.14.1 - 2021-10-12
- Editors in the Eclipse LWB not updating after making changes to the editor that causes the underlying computation to interrupt.
- Command for showing the Statix scope graph AST of a file (#80).
- Stratego invocation to check for
InterruptedException
in the cause/suppressed chain ofInterpreterException
and rethrow that. For now, this is sneakily thrown so thatInterruptedException
does not have to be added to the method signature ofStrategoRuntime.invoke
methods, but this should be added in the future. This sneakily thrown exception is catched and handled by PIE. pie
requirement to0.18.1
.
0.14.0 - 2021-10-11
default-statix-message-stacktrace-length
,default-statix-message-term-depth
,default-statix-test-log-level
,default-statix-supress-cascading-errors
options to theconstraint-analyzer
section inspoofaxc.cfg
.
ClassLoaderResources
implementations to be factored intomb.spoofax.resource.ClassLoaderResources
inspoofax.resource
, and make generated implementations extend it.- Use
EclipseClassLoaderToNativeResolver
in Eclipse to attempt to resolve class loader resources into Eclipse resources. - ConstraintAnalyzer to pass unchanged inputs; determined by AST hashCode and equality, and recursive region equality; as cached to the constraint analyzer, allowing it to reuse some cached results. The analysis tasks of languages keep this cache by storing the
ConstraintAnalyzerContext
as an internal object. This internal object is cleared when the Statix specification of a (dynamically loaded) language is changed. ConstraintAnalyzer.Result.ast
toanalyzedAst
.ConstraintAnalyzer.SingleFileResult.ast
toanalyzedAst
.- Clearing a language project to unload the dynamically loaded language associated with that language project.
resource
requirement to0.12.0
.common
requirement to0.9.8
.pie
requirement to0.18.0
.releng
(devenv-release) requirement to 0.1.15.
LAYOUT?-CF
not accepted in SDF3 (#78). Fixed by marking-CF
,-LEX
, and-VAR
sorts as kernel, allowing them to be used in kernel syntax context.LAYOUT?-CF
in kernel production causing build errors due to a bug in the SDF3->Stratego signature generator.- Constraint analysis not being cancellable. Cancelling an editor update or run command job in the Eclipse plugin now interrupts the thread, and the thread interrupt in turn cancels the constraint solver.
0.13.0 - 2021-10-01
- ValidationException on configuration change (#70).
- CLI and Eclipse/IntelliJ plugins of languages not working due to missing
strategolib
dependency. - Eclipse plugins of languages not starting due to out-of-date Eclipse version.
- Bracket production with constructor causing build errors (#65).
- SDF Legacy constructs (optional, alteration, sequence) in context-free syntax not being exhaustively checked.
- Bracket production in lexical syntax being allowed.
- SPT parse to ATerm constructor names don't support underscores (#67)
- Commands that fail give no feedback in the Eclipse LWB (#68)
- Drop support for Gradle 5.6.4, the minimum supported Gradle version is 6.8.
common
requirement to 0.9.7.pie
requirement to 0.17.0.releng
(devenv-release) requirement to 0.1.14.
0.12.1 - 2021-09-24
- Evaluate test command for Statix
.stxtest
files.
- SDF3 files in subdirectories cause the parenthesizer file to not import the correct signatures (#61).
- Deadlocks in SPT *ToFragment expectations due to not closing PIE sessions (#64).
common
requirement to 0.9.6.releng
(devenv-release) requirement to 0.1.13.
0.12.0 - 2021-09-22
- UI hang when invoking hover/reference resolution for the first time after a change in the Eclipse LWB (#56). This was fixed by consistently using the
JsglrParseTaskDef#create(Recoverable)MultiAstSupplierFunction
override that takes asourceFilesFunction
, increasing incrementality due to the task identity being stable. - Fix SDF3 issuing multiple kinds of parse tasks due to passing the main source directory as the root directory hint, instead of passing in the actual root directory.
- The
JsglrParseTaskDef#create(Recoverable)MultiAstSupplierFunction
methods to accept a function that produces? extends ListView<? extends ResourceKey>
instead ofListView<ResourceKey>
, allowing functions that produceListView<ResourcePath>
.
- The
JsglrParseTaskDef#create(Recoverable)MultiAstSupplierFunction
methods that take aResourceWalker
andResourceMatcher
.
0.11.13 - 2021-09-22
- Deadlock when closing editor while language build is running in the Eclipse LWB (#60).
- Not being able to update to newer Eclipse LWB from update site due to change in required Eclipse version.
0.11.12 - 2021-09-20
- Deadlock when invoking hover/reference resolution in the Eclipse LWB (#58).
- Eclipse to 2021-09.
- Colors in Eclipse are inverted in dark mode themes using the same hack as metaborg/spoofax-eclipse#19.
coronium
requirement to 0.3.11.pie
requirement to 0.16.8.common
requirement to 0.9.5.
0.11.11 - 2021-09-17
- Stratego backend tasks triggering overlapping provided files, hidden dependencies, and visited multiple times errors in bottom-up builds when dynamic rules were added or removed.
- Unremovable directories on Windows due to Stratego leaking directory streams.
- Compile failures due to SDF3 module name not matching the relative file name. This now produces an error in the SDF3 file.
- Compile failures due to duplicate constructors in SDF3. Constructors with the same name were allowed if they were defined on a different sort, but Statix does not support this at the moment. Duplicate constructor names now result in an error.
- Compile failures due to constructor names starting with lowercase characters. This now produces an error in the SDF3 file.
- Module name does not agree with relative file path error in SDF3 always given on Windows due to difference in file separator characters.
releng
(devenv-release) requirement to 0.1.12.
0.11.10 - 2021-09-15
- SDF3 label references (from layout constraints) that do not refer to a defined label causing compile errors. These undefined labels now show an error.
- Missing imports in SDF3 now no longer give errors on everything due to improved cascaded error handling in the Statix constraint solver.
releng
(devenv-release) requirement to 0.1.11.
0.11.9 - 2021-09-13
- Injection explication failing on context-free productions without constructors that are not an injection, bracket, or rejection production. These productions now show an error.
- Signature generation failing on context-free productions with optionals, alternations, and sequences. These productions now show an error.
- Errors markers on directories never disappearing in the Eclipse LWB. Fixed for now by not adding error markers on directories.
- Cleaning a project in the Eclipse LWB does not remove all markers.
- Lexical productions with constructors show a warning to remove the constructor.
releng
(devenv-release) requirement to 0.1.10.
0.11.8 - 2021-09-13
- Hidden dependency in MultiAstSupplierFunction.
- PIE requirement to 0.16.7.
releng
(devenv-release) requirement to 0.1.9.
- CFG, SDF3, and Statix hover tooltips, as they do not provide useful information at the moment.
0.11.7 - 2021-09-08
- SPT
parse succeeds
now fails in case of ambiguities and recovery. (#41)
- Temporarily removed SDF3 to syntactic completion generation to work around an incrementality issue in the Stratego compiler. Will be enabled again when the issue is resolved and completions are needed.
0.11.6 - 2021-09-06
- Several optional Eclipse preferences to tutorial.
.gitignore
file when generating a language project.- Check for incompatible sort kinds in SDF3.
releng
(devenv-release) requirement to 0.1.8.
0.11.5 - 2021-09-06
- SPT file to new project template.
- Short SPT tutorial.
- Short debugging command tutorial.
- Split tutorial up into multiple parts. Transformation tutorial has been temporarily removed until it is rewritten.
0.11.4 - 2021-09-03
- Return generated commands as Java source files, ensuring they get compiled by the Java compiler.
0.11.3 - 2021-09-03
- Prefix generated commands with language's Java class prefix.
- Show scope graph debugging task/commands/menus generated for each language (that uses Statix).
- Show pre-analyze AST debugging task/commands/menus generated for each language (that uses Statix).
0.11.2 - 2021-09-03
strategolib
import from template.
0.11.1 - 2021-09-02
- Show parsed AST and tokens debugging tasks/commands/menus generated for each language.
- Show analyzed AST debugging task/commands/menus generated for each language.
- Restructure troubleshooting documentation.
resource
requirement to 0.11.5.common
requirement to 0.9.3.pie
requirement to 0.16.6.- Menus with the same display name are merged into one.
- IndexOutOfBoundsException in SPT when selection reference
#0
is used.
0.11.0 - 2021-08-31
- Duplicate sort definition check in SDF3.
reference-resolution
andhover
sections in language CFG file, promoted from subsections insideeditor-services
section.- Ask for help guide in documentation.
- Report a bug guide in documentation.
- Troubleshooting guide in documentation.
- Run commands in Eclipse plugins as jobs in order to not hang the IDE and to make them cancellable.
- Long SPT test suites are cancellable.
- Eclipse console always uses UTF-8 encoding.
editor-services
section from language CFG file.reference-resolution
andhover
subsections are promoted to sections.