Rascal MPL is a programming language specifically designed to analyze and manipulate code in
any data format or programming language. This means code generation, code analysis, code visualization,
anything that you can do to code and with code, Rascal is designed to make it easy.
In particular the creation of IDEs for new Programming Languages and Domain Specific Languages (DSLs)
is easy with Rascal. The Rascal VScode extension is a so-called Language Workbench.
Have a look here for more information:
- R-LSP: IDE features for the Rascal metaprogramming language (parsing, syntax highlighting, type-checking, REPL terminal)
- P-LSP: "language parameterized" LSP server for languages expressed in Rascal. From a syntax definition you can start running your own LSP in vscode in a few steps.
- Rascal terminal: highly integrated terminal REPL that allows you to:
- script and experiment with ad-hoc code analyses and visualizations
- register new DSLs with VSCode using the P-LSP
- experiment and test new DSL features
The Rascal VScode extension currently is bundled with the following libraries:
- Rascal standard library
- Rascal-LSP LanguageServer library
- Java analysis library based on Eclipse JDT
- Installed JDK 11
- However, the extension will propose to download the right JDK for you if you do not have it yet.
No settings so far.
This extension is under development, some stuff is still buggy. Please consider it an alpha-quality try-out version.
Your constructive feedback is much appreciated at https://github.com/usethesource/rascal-language-servers/issues.
This extension works best with Java 11; higher will cause breakage.
For other things we are working on have a look here:
- fixes issue which was caused by an issue in the rascal project.
- bumped rascal to 0.27.3 for the above fix.
This release is about including a new version of the rascal project, 0.27.2:
- fixes issue with variable scope leakages for optimized visit statements
- adds util::Validator for validating complex untyped hierarchical structures (such as obtained from XML, JSON or YAML)
- added vis::Charts for eight basic chart types
- redesign of lang::json::IO with more natural mapping to JSON objects, but more precarious constraints for mapping back. See util::Validator for bridging the new gap if you have a complex ADT with lots of overloading and many constructors per type. The default mapping only supports simple enums and single constructors per ADT.
- fixed efficiency issue in use of the
project:/// scheme for browsing file hierarchies, like for example in getASTs function for Java.
- new logo
- upgraded to latest version of rascal (0.26.2) to fix an issue that become more present with the multiple evaluators feature
- Now using rascal 0.24.7
- Rascal DSLs can now use multiple evaluators if they want (see discussion in #181)
- Rascal DSLs do not get typepal on the PathConfig/evaluator search path by default. Only rascal & rascal-lsp.
unregisterLanguage was added to clear all or parts of a language
- Rascal REPLs get a progressbar while starting. This provides more feedback that something is happening, especially until the performance regression on windows is fixed.
- Now using rascal 0.24.6
- Better support pom.xml dependency resolution
- Rascal LSP commands can return values that are available in typescript
- Bugfix for handling def/ref/hover request in the "start" region of a rascal parse tree
- Moved to LSP 3.17 using the native inlayHint implementation
- Updated java & node dependencies to latest releases
- Improved performance of DSL init (specifically the time spent on generating parsers)
- Rascal DSLs get more flexibility (and performance) in how they contribute the information back to VS Code. Summaries work as base, but developers can defined custom functions for specific requests from VS Code.
- Rascal DSLs can parse without waiting for other request to finish
- Now using Rascal 0.24.2
- reduced frequency of summary calls for DSLs
- updated typepal dependency to reduce debug prints
- Virtual file systems of VSCode are now available in rascal
- Bumped dependencies of java and nodejs
- rascal version bumped to 0.23.2
- Improved REPL integration for browsing and editing files from the command line
- Version bump of rascal dependency from 0.23.0 to 0.23.1, which makes browsing the standard libraries possible due to fixing an incompatible type file format.
- Version bump of rascal dependencies from 0.22.1 to 0.23.0; this includes bugfixes around prefix matching with concrete syntax trees and the use of the
private modifier (if one alternative is private, they are now all private).
- Version bumps for typepal and rascal-core with improved typechecking efficiency.
- Better error reporting for the Rascal LSP server and the parameterized LSP server.
- Fixes around status progress bars.
- Fix for packaging of rascal-lsp jar (which helped remove spurious type-checking errors in clients of the LanguageServer library modules)
- Moved to Java 11
- Upgrade to newer Rascal type-checker
- Early support for cross-project rascal dependencies for both REPL & type-checker
- Rascal features work even without a project open (opening a single rascal file for example)
- Improved status bar messages for DSLs and making sure to always clear finished tasked
- Increases performance of project source location operations
- Automatic java detection ignores JREs
- Fixed bug that prevented detection of new projects added to the workspace
- Security release, bumping log4j dependency
- Rascal is now properly reporting progress
- Parametric DSLs can defined inlayHints to annotate a source tree
- Rascal LSP server now starts lazily to reduce memory overhead.
- Parametric LSP server now starts lazily to reduce memory overhead.
- Fixed missing print of Rascal version in the REPL.
- Added print of Rascal-lsp version in the REPL.
- Added automatic JDK download if none is available.
registerLanguage to public extension API.
- Improved semantic tokenization and highlighting for Rascal and DSLs. Tokenization has been refined to allow differential coloring of nested nonterminals.
- Added folding regions for Rascal based on its grammar.
- Added folding regions for DSLs based on the grammar.
- Fixed REPL autoreloading for changed files.
- Bugfixes for the features below.
- Bugfixes for the features below
- Added feature to publish diagnostics while scripting code analyses in the terminal (uses util::IDEServices)
- Added feature of clickable logical URI's, like "|java+class://java/util/List|" in the terminal such that they resolve to the code location of the declared entity.
- Added features for progress reporting from both the R-LSP and the P-LSP
- Added applyEdits functionality from the terminal and the P-LSP
- Added code lenses for the P-LSP
- Fixed a number of synchronization issues
- Fixed bug that disabled the IDE generator functionality.
- Initial release of rudimentary support for the Rascal language
- A terminal REPL for Rascal
- A parametrized LSP that can be configured directly from the Rascal REPL using
Rascal and this extension are licensed under the BSD2 open-source license. Some files
and libraries are licensed with the Eclipse Licence v2. See LICENSE