Skip to content

Releases: usethesource/rascal-language-servers

v0.13.0

17 Dec 10:57
75d99c0

Choose a tag to compare

Works best with Rascal 0.41.2 (and rascal-maven-plugin 0.30.3). Due to changes in the type checker, users will most likely also have to update their library dependencies to the latest release.

New Features for Rascal Developers

  • Rascal parsers now support error recovery. This is the first release that enables it: you get more syntax highlighting and other features even in the presence of syntax errors.
  • Rascal code that reads or writes to files open in the editor is now redirected to the editor contents instead of the state on disk (this aligns with the LSP specification).
  • The type checker now works correctly with multi-project workspaces. Users do not have to trigger the type checker in "higher-up" projects by hand anymore.
  • The type checker now aborts early when required modules have parse errors.
  • Long-running jobs (such as the type checker) can now be interrupted.
  • Rascal has better selection ranges support such that you can grow/shrink your selection based on the Rascal syntax.
  • We have migrated to LogOutputChannels such that users can combine, filter, and configure Rascal's output channels.
  • Copy file path as Rascal location from the explorer context menu.

New Features for DSL Developers

  • Error recovery support for DSLs is opt-in (the parse function should be constructed with allowRecovery=true); your code might have to be updated to deal with error trees with skipped/ambiguous parts.
  • DSLs can contribute their own rename refactoring using the LanguageService::rename contribution.
  • DSLs can contribute their own selection ranges using the LanguageService::selectionRange contribution.
  • DSLs can contribute their own call hierarchies using the LanguageServer::callHierachy contribution.
  • DSLs can extend text edits with labels and descriptions, and mark them as requiring user confirmation, using keyword parameters (str label, str description, bool needsConfirmation). See util::LanguageServer::TextEdit.

For more details, please refer to the documentation in the source code of util::LanguageServer, or the rendered documentation page.

Improved features

  • Reimplemented rename using a new framework (available in TypePal). It is faster, has better error messages, now also tracks file renames, and supports many more edge cases.
  • The Rascal type checker has better messages, is more accurate, and in some cases is a bit faster. Note that while the typechecker has become stricter the interpreter will still run your code as before.
  • Document symbols (used in the outline and when quickly navigating between symbols in the editor) are more robust.
  • Hover hints now belong to the smallest expression under the cursor.
  • UX tweaks: better error messages, many debug/internal messages have been removed, and improved progress reporting.
  • Hover and Go to Definition are more accurate due to bugfixes in internal data structures.
  • Improved documentation of util::LanguageServer.
  • Git diff viewers, untitled files and other virtual documents are better supported for DSLs.
  • Files without an extension are now associated with a DSL when there is only one registered.
  • Various performance & reliability improvements.

Rascal 0.41.2 highlights

Below is a summary of the full release-notes for rascal 0.41.x.

  • A completely new REPL implementation with:
    • multi-line editing
    • better completion support
    • parse error highlighting
    • better module reloading behavior & feedback
    • much more
  • Require-Libraries from RASCAL.MF is not used anymore. Instead, pom.xml is the only place where you define dependencies.
  • We no longer call Maven, but have our own implementation to extract information from pom.xml. This has resulted in faster REPL starts and better error messages.
  • The lib scheme is gone: it has been replaced by either the project or mvn scheme. Please open an issue if you need help migrating.
  • IO has new features, such as isReadable and isWritable, and the watch feature has better support for macOS.
  • Various performance improvements.
  • Message has an optional causes field that can be used to report extra locations to VS Code.
  • The debugger has gained many new features, improving the debugging experience.

Extension developers

  • We've moved to Node 20. VS Code has switched since 1.90, and the Node 18 support of some of our dependencies has been deprecated for a while. This will mean having to upgrade your own extension as well.

v0.12.2

16 Feb 15:16
75cc26e

Choose a tag to compare

  • Debug and Debug side bar got a new view that lists active REPLs and allows the user to start a debugging session for it
  • Bugfixes:
    • Type checker was to eager in reporting binary incompatiblities
    • Improved the performance of rename on large rascal files

v0.12.1

29 Jan 12:32
38505d9

Choose a tag to compare

  • The type-checker got a lot faster, especially if you're editing a single file in a larger project.
  • Various bugfixes in:
    • The rename functionality
    • The code actions
    • The type-checker

v0.12.0

15 Nov 12:59
7189791

Choose a tag to compare

  • New feature: The "Rename Symbol" command (default: F2) is now supported for all identifiers in Rascal modules. Renaming is safe, so the semantics of Rascal code before/after renaming is the same.
  • New feature: Code Actions (default: CTRL+.) are now supported in Rascal modules to analyze and transform code (e.g.: visualization of import graphs; simplification of functions). Code Actions can also be defined for DSLs.
  • New feature: Keywords, numbers, strings (single-line), regular expressions, comments, and tags are now highlighted in Rascal modules even in the presence of parse errors. This feature uses a TextMate grammar for Rascal, generated using rascal-textmate.
  • Upgrade to a greatly improved version of the Rascal type checker, including:
    • Backward-compatibility between different versions of libraries. After this upgrade, you won't have to keep all your dependencies aligned with the latest released Rascal version. We think we have developed a scheme that should work for all future upgrades, but there might be a few bumps in the road the coming releases.
    • Better type checking errors (roughly 3 years of bugfixes)
    • Increased performance for partial type checks
    • Deprecation warnings for deprecated functions
  • Upgrade to Rascal 0.40.17, including (see also its release notes):
    • A new mvn scheme for referencing jars in the maven repository
    • Improvements to json/xml/html deserialization, including better origin tracking
    • A new REPL progress bar that you can also use via util::Monitor
    • Improvements to our support for defining pretty printing
    • Clipboard control from Rascal code
    • Upgraded the Java support in m3
    • Various bugfixes
  • For DSL extension developers:
    • The present release is updated to work with Node.js 18. The next release will be updated to work with Node.js 20, to align with the VS Code engine and our dependencies.
    • Changes to module util::LanguageServer:
      • Code Actions can be defined using constructor action of type CodeAction, and registered using constructor codeAction of type LanguageService.
      • Code Actions can also be attached to info, warning, and error messages as Quick Fixes.
      • Constructors in type LanguageService are renamed to align them with the corresponding requests in LSP. Usage of the old names is now deprecated.
      • Keyword parameter useSpecialCaseHighlighting is introduced on constructor parsing of type LanguageService (default: true). It is used to control whether or not the semantic highlighter should apply an odd special case (i.e., categories of syntax non-terminals are sometimes ignored); the semantic highlighter has been applying this special case for several releases. Usage of the special case is now deprecated.
      • Constructor codeLens of type LanguageService has a function parameter with return type lrel instead of rel as before. This is to ensure that multiple code lenses for a single line are always ordered in the same way. Usage of return type rel for this function parameter is now deprecated.
      • Type Focus is introduced. It is used to declare the parameters of on-demand services (hover, definition, referenes, implementation) instead of loc-Tree-Tree triples as before. Unlike such triples, a value of type Focus provides the full context (list of subtrees) of the cursor position. Usage of the triples is now deprecated.
    • For each deprecated item:
      • In the present release, support is retained for backward-compatibility, but existing code should be updated.
      • In a future release, support will be removed, and existing code must be updated. (In the case of keyword parameter useSpecialCaseHighlighting, the default will first become false before it is removed.)
  • Other improvements:
    • New feature: When the Rascal LSP server crashes, VS Code will now report the crash in a notification, including a button to open a GitHub issue.
    • New feature: The default names of Rascal terminals can now be configured via setting Rascal > Terminal > Name: Origin Format.
    • New feature: Project setups are now checked for common errors.
    • Fixed "Start Rascal Terminal and Import this module" command

v0.11.2

09 Jul 09:37
24a4c3a

Choose a tag to compare

  • bumping to rascal 0.34.2:
    • improved heuristic of json mapping for an empty map
    • fixed bugs related to grammar fusing for modules with extends & imports

v0.11.1

26 Mar 12:30
fe94d6a

Choose a tag to compare

  • bugfix for syntax highlighting categories

v0.11.0

11 Mar 13:07
4b50364

Choose a tag to compare

  • there is a new "Rascal Configuration" view that shows the resolved dependencies per project xml, and allows you to browse the rascal sources inside of those.
  • the summarizer contribution for DSLs has been replaced by analyzer and builder. Please review your language setup and migrate to builders (only on save), and analyzer (every change in the IDE). We have tried to keep the behavior as close to the original summarizer, but it will not be triggered on-demand anymore.
  • small improvements:
    • DSLs can now register multiple extensions for a single language
    • we check for common rascal project setup errors when starting a new REPL
    • automatic reloading of changes now also works for cross-project dependencies
    • We have a new and improved version of the rascal logo
    • downstream dependencies were updated to the latest version

v0.10.2

30 Oct 14:48
0fc1611

Choose a tag to compare

  • upgrading to rascal 0.34.1 to fix a regression in concrete syntax
  • the REPL is marked as non-transient, until we can properly reconnect it after a reload of the window

v0.10.1

20 Oct 08:19
0e95f59

Choose a tag to compare

  • bugfix for preloaded parsers

v0.10.0

19 Oct 12:37
b9cc9a5

Choose a tag to compare

  • the automatic JVM downloader will now prompt you for updates if they are available
  • Every REPL now gets named after the project they are connected to
  • For deployed DSL extensions (via the npm published version of this plugin) we have a temporary interface to supply a preloaded parser
  • We now automatically run our pre-release test on every PR/commit via VS Code extension tester
  • upgraded to rascal 0.34.0:
    • various performance improvements that improve import time and memory pressure
    • removal of some unused resolvers (benchmark/testdata/test-modules/boot)
    • various small bug fixes
  • bug fixes:
    • fixed a bug where changes in a pom.xml would only be visible after a VS Code restart. Now it only takes a restart of the REPL. (or re-trigger the type checker)
    • fixed a bug where we would register schema's that were already registered (zip error message in the debug console)