From 7ace798ba807c9a0cb04dd85a22ced8b4365ac94 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 12 Oct 2026 10:46:05 +0200 Subject: [PATCH 01/11] added blog on annotation removal --- blog/--- | 0 blog/2026-10-12-no-more-annotations.md | 40 ++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 blog/--- create mode 100644 blog/2026-10-12-no-more-annotations.md diff --git a/blog/--- b/blog/--- new file mode 100644 index 000000000..e69de29bb diff --git a/blog/2026-10-12-no-more-annotations.md b/blog/2026-10-12-no-more-annotations.md new file mode 100644 index 000000000..b92b8de77 --- /dev/null +++ b/blog/2026-10-12-no-more-annotations.md @@ -0,0 +1,40 @@ +--- +title: Final step in replacing the annotations feature with the keyword field feature +authors: [jvinju] +--- + +Over the years we have been gradually replacing the (docs/Rascal/Declarations/Annotation/) feature with the (docs/Rascal/Declarations/AlgebraicDataType/)[Keyword field] feature. +In release 0.43.0 the final step has been made by replacing the semantics of annotations with a "not implemented" error message with a **quick-fix** suggestion. +This feature removal went through the following stages to make for a smooth transition: + +1. $2009-2013$ only annotations implemented (syntax and semantics). +2. $2013-2019$ both annotations and keyword fields implemented (syntax and semantics), but never at the same time on the same node. +3. $2019-2026$ annotations simulated by keyword fields (both the syntactical features use semantics of keyword fields); `Tree@\loc` is simulated by `Tree.src`. +4. $2026-\ldots$ annotations not implemented anymore (only syntax), everything is a keyword field. `anno loc Tree@\loc` is replaced by `data Tree(loc src=|unknown:///|)` in the `ParseTree` module. + +We are now past step 4. Every use of a syntactic construct related to annotations will produce: +1. an error message by the checker +2. a quick-fix suggestion to remove any and all uses of annotation syntax _in the current project_ and replace them by the respective keyword field feature. + +Note that: +* If you don't fix the code, it will not run anymore and you will get runtime "static" exceptions by the interpreter. +* After you have fixed the code, it may not run properly on older versions of Rascal anymore, because older versions always come with their own version of the `ParseTree` module. + +For your convenience we list the differences in syntax and semantics here: + +| Feature | Annotations | Keyword fields | Note | +| --- | --- | ---- | --- | +| declaration | `anno OfType OnType@name` | `data OnType(OfType name = Default)` | annotations do not have default expressions | +| projection | `OnExpr@name` | `OnExpr.name` | annotations throw `NoSuchAnnotation` if `name` does not exist, while keyword fields return their default. Keyword fields on `node` throw `NoSuchField` exceptions and return a value of type `value` always. | +| assignment | `OnExpr@name = Expr` | `OnExpr.name = Expr` | Assigment operators like `+=` also inherit the semantics of projection | +| equality | `Cons[@f=1] == Cons[@f=2]` is `true` | `Cons(f=1) == Cons(f=2)` is `false` | constructor equality ignores annotations while it does not ignore keyword fields, this also holds for set elements, and map/relation keys | +| matching | `Cons[@f=1] := Cons[@f=2]` is `true` | `Cons(f=1) := Cons(f=2)` is `true` | constructor matching always ignores keyword fields and annotations | + +In stage 3, annotations took the semantics of keyword fields for _declaration_, _assignment_ and _matching_, and _equality_ while for _projection_ still the old `NoSuchAnnotation` was thrown. This is the stage you have probably been using. The hard change was between stages 2 and 3. + +The quickfix for stage 4 produces an arbitrary default for well known types, +i.e. `int age = 0`, while for more complex type an exception is thrown by the default expression. It is advised to review the defaults manually. + +Finally, the quickfix may open and rewrite a large group of files for the current project. You have to save and close each of them manually to write the result to disk. This would also be a good time to review the generated defaults. + +If you get stuck, please contact mailto:Jurgen.Vinju@cwi.nl or mailto:Davy.Landman@swat.engineering for help. \ No newline at end of file From b8e81277f333431017fd9fe1178a5a89bfc844b4 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 12 Oct 2026 11:35:52 +0200 Subject: [PATCH 02/11] removed traces of @ from documentation --- blog/2026-10-12-no-more-annotations.md | 11 ++++--- .../Declarations/Annotation/Annotation.md | 31 ++----------------- .../Assignment/Annotation/Annotation.md | 8 ++--- .../Statements/Assignment/Assignment.md | 2 -- release-notes/rascal-0-43-x-release-notes.md | 11 +++++-- 5 files changed, 19 insertions(+), 44 deletions(-) diff --git a/blog/2026-10-12-no-more-annotations.md b/blog/2026-10-12-no-more-annotations.md index b92b8de77..e8a6adabb 100644 --- a/blog/2026-10-12-no-more-annotations.md +++ b/blog/2026-10-12-no-more-annotations.md @@ -3,14 +3,14 @@ title: Final step in replacing the annotations feature with the keyword field fe authors: [jvinju] --- -Over the years we have been gradually replacing the (docs/Rascal/Declarations/Annotation/) feature with the (docs/Rascal/Declarations/AlgebraicDataType/)[Keyword field] feature. +Over the years we have been gradually replacing the (/docs/Rascal/Declarations/Annotation/)[Annotation] feature with the (/docs/Rascal/Declarations/AlgebraicDataType/)[Keyword field] feature. In release 0.43.0 the final step has been made by replacing the semantics of annotations with a "not implemented" error message with a **quick-fix** suggestion. This feature removal went through the following stages to make for a smooth transition: -1. $2009-2013$ only annotations implemented (syntax and semantics). -2. $2013-2019$ both annotations and keyword fields implemented (syntax and semantics), but never at the same time on the same node. -3. $2019-2026$ annotations simulated by keyword fields (both the syntactical features use semantics of keyword fields); `Tree@\loc` is simulated by `Tree.src`. -4. $2026-\ldots$ annotations not implemented anymore (only syntax), everything is a keyword field. `anno loc Tree@\loc` is replaced by `data Tree(loc src=|unknown:///|)` in the `ParseTree` module. +1. `2009-2013` only annotations implemented (syntax and semantics). +2. `2013-2019` both annotations and keyword fields implemented (syntax and semantics), but never at the same time on the same node. +3. `2019-2026 annotations simulated by keyword fields (both the syntactical features use semantics of keyword fields); `Tree@\loc` is simulated by `Tree.src`. +4. `2026-....` annotations not implemented anymore (only syntax), everything is a keyword field. `anno loc Tree@\loc` is replaced by `data Tree(loc src=|unknown:///|)` in the `ParseTree` module. We are now past step 4. Every use of a syntactic construct related to annotations will produce: 1. an error message by the checker @@ -27,6 +27,7 @@ For your convenience we list the differences in syntax and semantics here: | declaration | `anno OfType OnType@name` | `data OnType(OfType name = Default)` | annotations do not have default expressions | | projection | `OnExpr@name` | `OnExpr.name` | annotations throw `NoSuchAnnotation` if `name` does not exist, while keyword fields return their default. Keyword fields on `node` throw `NoSuchField` exceptions and return a value of type `value` always. | | assignment | `OnExpr@name = Expr` | `OnExpr.name = Expr` | Assigment operators like `+=` also inherit the semantics of projection | +| update | `OnExpr[@name=Expr]` | `OnExpr[name=Expr]` | field update works the same for both features, both set the field whether or not it was there before | | equality | `Cons[@f=1] == Cons[@f=2]` is `true` | `Cons(f=1) == Cons(f=2)` is `false` | constructor equality ignores annotations while it does not ignore keyword fields, this also holds for set elements, and map/relation keys | | matching | `Cons[@f=1] := Cons[@f=2]` is `true` | `Cons(f=1) := Cons(f=2)` is `true` | constructor matching always ignores keyword fields and annotations | diff --git a/courses/Rascal/Declarations/Annotation/Annotation.md b/courses/Rascal/Declarations/Annotation/Annotation.md index 557b1a1a5..c77f8057e 100644 --- a/courses/Rascal/Declarations/Annotation/Annotation.md +++ b/courses/Rascal/Declarations/Annotation/Annotation.md @@ -4,13 +4,15 @@ keywords: - anno - attributes - decorations + - keyword field - "@" --- #### Synopsis -Declare an annotation type for nodes. This feature is deprecated; please use [keyword fields]((AlgebraicDataType)) instead. +Declare an annotation type for nodes. This feature has been removed; please use [keyword fields]((AlgebraicDataType)) instead. +See (/blog/2026/10/12/no-more-annotations)[this blog]. #### Syntax @@ -22,35 +24,8 @@ Declare an annotation type for nodes. This feature is deprecated; please use [ke #### Description -An annotation may be associated with any node value, be it a pure node or some ((Algebraic Data Type)) derived from it. - -Annotations are intended to attach application data to values, -like adding position information or control flow information to source code or adding visualization information to a graph. - -An annotation declaration defines: - -* _AnnoType_, the type of the annotation values, -* _OnType_, the type of the values that are being annotated, -* _Name_, the name of the annotation. - - -Any value of any named type can be annotated and the type of these annotations can be declared precisely. - -The following constructs are provided for handling annotations: - -* `Val @ Anno`: is an expression that retrieves the value of annotation _Anno_ of value _Val_ (may be undefined!). - -* `Val~1~[@Anno = Val~2~]`: is an expression that sets the value of annotation _Anno_ of the value _Val~1~_ to _Val~2~_ - and returns _Val~1~_ with the new annotation value as result. - -* `Var @ Anno = Val`: is an assignment statement that sets the value of annotation _Anno_ of the value of variable _Var_ to _Val_. - #### Examples -Examples have been removed since this feature is deprecated. - #### Benefits #### Pitfalls - -* Annotations are cumbersome since they change the structure of ((Values)) without changing the semantics of the identity of a value. This is why they are deprecated. diff --git a/courses/Rascal/Statements/Assignment/Annotation/Annotation.md b/courses/Rascal/Statements/Assignment/Annotation/Annotation.md index 97db6bd51..404dd798d 100644 --- a/courses/Rascal/Statements/Assignment/Annotation/Annotation.md +++ b/courses/Rascal/Statements/Assignment/Annotation/Annotation.md @@ -8,7 +8,8 @@ keywords: #### Synopsis -Assign to an annotation. This feature is deprecated. +Assign to an annotation. This feature has been removed. +See (/blog/2026/10/12/no-more-annotations)[this blog]. #### Syntax @@ -20,14 +21,9 @@ Assign to an annotation. This feature is deprecated. #### Description -The value _V_ of _Assignable_ is determined and should be of a type that has an annotation _Name_. -A new value _V_' is created that is a copy of _V_ but with the value of annotation _Name_ replaced by the value of _Exp_. -_V_' is assigned to _Assignable_. -See ((Declarations-Annotation)). #### Examples -Examples have been removed since this feature is deprecated. #### Benefits diff --git a/courses/Rascal/Statements/Assignment/Assignment.md b/courses/Rascal/Statements/Assignment/Assignment.md index 6441585cd..2affa04ac 100644 --- a/courses/Rascal/Statements/Assignment/Assignment.md +++ b/courses/Rascal/Statements/Assignment/Assignment.md @@ -12,7 +12,6 @@ keywords: - "]" - "." - "?" - - "@" --- @@ -35,7 +34,6 @@ An _Assignable_ is one of the following: * `Assignable . Name` * `< Assignable, Assignable, ..., Assignable >` * `Assignable ? Exp` -* `Assignable @ Name` * `Name ( Assignable, Assignable, ... )` #### Types diff --git a/release-notes/rascal-0-43-x-release-notes.md b/release-notes/rascal-0-43-x-release-notes.md index 910e4dd42..24faef673 100644 --- a/release-notes/rascal-0-43-x-release-notes.md +++ b/release-notes/rascal-0-43-x-release-notes.md @@ -1,7 +1,7 @@ --- authors: [sungshik] title: "Rascal 0.43.x release notes" -sidebar_position: 87 +sidebar_position: 85 --- In this post we report on the Rascal release 0.43.x @@ -23,11 +23,16 @@ The Java-air project was extracted from the Rascal standard library in version 0 * The `std` scheme to refer to locations in the standard library has been sunsetted. See the separate [blog post](/blog/2026/10/08/removed-library-schemes) for details. ([#2828](https://github.com/usethesource/rascal/pull/2828), [#2847](https://github.com/usethesource/rascal/pull/2847)) * The scheme and authority of locations are now case-insensitive (normalized to lowercase), as required by the [URI RFC](https://datatracker.ietf.org/doc/html/rfc3986). This fixes a few subtle issues when locations were used in combination with some form of RPC (HTTP/JSON/LSP) or case-sensitive file system. ([#2845](https://github.com/usethesource/rascal/pull/2845), [#2857](https://github.com/usethesource/rascal/pull/2857), [#2851](https://github.com/usethesource/rascal/pull/2851), [#2860](https://github.com/usethesource/rascal/pull/2860), [#2862](https://github.com/usethesource/rascal/pull/2862)) * Parsers (including concrete syntax pattern matchers) can now be run directly for symbols with regular operators, including `*`, `+`, and `?`, without the need to introduce dummy symbols in the grammar. ([#2809](https://github.com/usethesource/rascal/pull/2809)) -* Annotations have been removed. A Quick Fix is available in VS Code to automatically migrate all Rascal code with annotations to equivalent code without them. ([#1974](https://github.com/usethesource/rascal/pull/1974), [#2793](https://github.com/usethesource/rascal/pull/2793)) +* Annotation syntax and semantics have been removed. See [blog post](/blog/2026/10/12/no-more-annotations). A Quick Fix is available in VS Code to automatically migrate all Rascal code with annotations to equivalent code (keyword fields). ([#1974](https://github.com/usethesource/rascal/pull/1974), [#2793](https://github.com/usethesource/rascal/pull/2793)) * The Rascal language now depends on version 1.1.x of Vallang. :::info -The removal of the `std` scheme, the removal of annotation support, and the case-insensitivity of scheme/authority are low-impact breaking changes. Migration tools and Quick Fixes in the VS Code extension are provided to streamline the few code changes that might be needed. +The removal of the `std` scheme, the removal of annotation support, and the case-insensitivity of scheme/authority are low-impact breaking changes. Migration tools and Quick Fixes in the VS Code extension are provided to streamline the few code changes that might be needed. +::: + +:::info +If you have string constants in your own Java code for location schemes, changing these to all lowercase will help prevent any issues. For example, +change `String myScheme = "arrayLength";` to `String myScheme = "arraylength";`, to make sure that `myLoc.getScheme().equals(myScheme)` still works. ::: ### Maven and evaluator improvements From f0ab05676a470d76d9a6e605b451b9eb16648b0e Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 12 Oct 2026 11:37:09 +0200 Subject: [PATCH 03/11] removed dead error messages --- .../UndeclaredAnnotation.md | 45 ------------ .../NoSuchAnnotation/NoSuchAnnotation.md | 71 ------------------- 2 files changed, 116 deletions(-) delete mode 100644 courses/Rascal/Errors/CompileTimeErrors/UndeclaredAnnotation/UndeclaredAnnotation.md delete mode 100644 courses/Rascal/Errors/RunTimeErrors/RuntimeExceptions/NoSuchAnnotation/NoSuchAnnotation.md diff --git a/courses/Rascal/Errors/CompileTimeErrors/UndeclaredAnnotation/UndeclaredAnnotation.md b/courses/Rascal/Errors/CompileTimeErrors/UndeclaredAnnotation/UndeclaredAnnotation.md deleted file mode 100644 index ee864b87b..000000000 --- a/courses/Rascal/Errors/CompileTimeErrors/UndeclaredAnnotation/UndeclaredAnnotation.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: UndeclaredAnnotation ---- - -#### Synopsis - -An annotation is used that has not been declared. - -#### Syntax - -#### Types - -#### Function - -#### Usage - -#### Description - -An [annotation]((Rascal:Declarations-Annotation)) can be used to add information to an instance of an -[algebraic data type]((Rascal:Declarations-AlgebraicDataType)). -An annotation has to declared beforehand. This error is generated when an undeclared annotation is used. - -Remedies: - -* Declare the annotation. -* Use an already declared annotation. - -#### Examples - -This is correct: -```rascal-shell -data Fruit = apple(int n) | orange(int n); -anno str Fruit @ quality; -piece = orange(13); -piece@quality = "great"; -``` -But using a wrong annotation name generates an error: -```rascal-shell,continue,error -piece@qual -``` - -#### Benefits - -#### Pitfalls - diff --git a/courses/Rascal/Errors/RunTimeErrors/RuntimeExceptions/NoSuchAnnotation/NoSuchAnnotation.md b/courses/Rascal/Errors/RunTimeErrors/RuntimeExceptions/NoSuchAnnotation/NoSuchAnnotation.md deleted file mode 100644 index a5268d892..000000000 --- a/courses/Rascal/Errors/RunTimeErrors/RuntimeExceptions/NoSuchAnnotation/NoSuchAnnotation.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: No Such Annotation ---- - -#### Synopsis - -Annotation without a value. - -#### Types - -`data RuntimeException = NoSuchAnnotation(str label);` - -#### Usage - -`import Exception;` (only needed when `NoSuchAnnotation` is used in `catch`) - - -#### Function - -#### Usage - -#### Description - -An [annotation]((Rascal:Declarations-Annotation)) can be associated with any node value -(including any [algebraic data type]((Rascal:Declarations-AlgebraicDataType))). -This error is generated when the value of an annotation is requested but has not been defined. - -Remedies: - -* Ensure that the annotation value is properly initialized for all relevant parts of the node value. -* Use the - [isDefined]((Rascal:Boolean-IsDefined)) and - [ifDefinedElse]((Rascal:Boolean-IfDefinedElse)) operators to check whether the annotation value - is set and act accordingly. -* Catch the `NoSuchAnnotation yourself`, see [try catch]((Rascal:Statements-TryCatch)). - -#### Examples - -```rascal-shell,error -data Fruit = apple(int n) | orange(int n); -anno str Fruit @ quality; -piece = orange(13); -piece@quality; -``` -Use the unary postfix operator isDefined `?` to check whether the `quality` annotation is set: -```rascal-shell,continue -piece@quality?; -``` -Use the ternary operator ifDefinedElse `?` to compute an alternative value when the `quality` annotation is not set: -```rascal-shell,continue -piece@quality ? "no quality value"; -``` -We can also catch the `NoSuchAnnotation` error. First import the Rascal exceptions (which are also included in `Prelude`) -and `IO`: -```rascal-shell,continue -import Exception; -import IO; -try piece@quality; catch NoSuchAnnotation(l): println("No such annotation: "); -``` -Finally, we can just assign a value to the `quality` annotation: -```rascal-shell,continue -piece@quality = "excellent"; -piece@quality; -``` - -#### Benefits - -#### Pitfalls - -WARNING: Using white space around the `@` confuses the Rascal parser - From f1448819bb45dd7c18bd9c98a384d07fc533f6bb Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 12 Oct 2026 11:41:53 +0200 Subject: [PATCH 04/11] added keyword --- courses/Rascal/Statements/Assignment/Assignment.md | 1 + 1 file changed, 1 insertion(+) diff --git a/courses/Rascal/Statements/Assignment/Assignment.md b/courses/Rascal/Statements/Assignment/Assignment.md index 2affa04ac..cfd220dba 100644 --- a/courses/Rascal/Statements/Assignment/Assignment.md +++ b/courses/Rascal/Statements/Assignment/Assignment.md @@ -12,6 +12,7 @@ keywords: - "]" - "." - "?" + - deconstructing bind --- From 9b7ba5a261c956315cb252c52a234709687aeedc Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 12 Oct 2026 11:46:50 +0200 Subject: [PATCH 05/11] minor fix --- blog/2026-10-12-no-more-annotations.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/blog/2026-10-12-no-more-annotations.md b/blog/2026-10-12-no-more-annotations.md index e8a6adabb..9a22b3759 100644 --- a/blog/2026-10-12-no-more-annotations.md +++ b/blog/2026-10-12-no-more-annotations.md @@ -13,11 +13,12 @@ This feature removal went through the following stages to make for a smooth tran 4. `2026-....` annotations not implemented anymore (only syntax), everything is a keyword field. `anno loc Tree@\loc` is replaced by `data Tree(loc src=|unknown:///|)` in the `ParseTree` module. We are now past step 4. Every use of a syntactic construct related to annotations will produce: -1. an error message by the checker +1. an error message by the checker. 2. a quick-fix suggestion to remove any and all uses of annotation syntax _in the current project_ and replace them by the respective keyword field feature. +3. a static error by the interpreter. Note that: -* If you don't fix the code, it will not run anymore and you will get runtime "static" exceptions by the interpreter. +* If you don't fix the code, it will not run anymore and you will get static exceptions by the interpreter. * After you have fixed the code, it may not run properly on older versions of Rascal anymore, because older versions always come with their own version of the `ParseTree` module. For your convenience we list the differences in syntax and semantics here: From 798666ecaa79f54cf0b718186f5b38f6ab003544 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 12 Oct 2026 11:47:39 +0200 Subject: [PATCH 06/11] missing quote --- blog/2026-10-12-no-more-annotations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2026-10-12-no-more-annotations.md b/blog/2026-10-12-no-more-annotations.md index 9a22b3759..8fc8e7519 100644 --- a/blog/2026-10-12-no-more-annotations.md +++ b/blog/2026-10-12-no-more-annotations.md @@ -9,7 +9,7 @@ This feature removal went through the following stages to make for a smooth tran 1. `2009-2013` only annotations implemented (syntax and semantics). 2. `2013-2019` both annotations and keyword fields implemented (syntax and semantics), but never at the same time on the same node. -3. `2019-2026 annotations simulated by keyword fields (both the syntactical features use semantics of keyword fields); `Tree@\loc` is simulated by `Tree.src`. +3. `2019-2026` annotations simulated by keyword fields (both the syntactical features use semantics of keyword fields); `Tree@\loc` is simulated by `Tree.src`. 4. `2026-....` annotations not implemented anymore (only syntax), everything is a keyword field. `anno loc Tree@\loc` is replaced by `data Tree(loc src=|unknown:///|)` in the `ParseTree` module. We are now past step 4. Every use of a syntactic construct related to annotations will produce: From 71c221bd5ececa08cdc5417a6b650191e9282616 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 12 Oct 2026 11:50:08 +0200 Subject: [PATCH 07/11] removed weird file --- blog/--- | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 blog/--- diff --git a/blog/--- b/blog/--- deleted file mode 100644 index e69de29bb..000000000 From 4357dcfc34f32ea9128e42565209bfa4d9c30496 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 12 Oct 2026 11:52:38 +0200 Subject: [PATCH 08/11] feedback by @davylandman --- blog/2026-10-12-no-more-annotations.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/blog/2026-10-12-no-more-annotations.md b/blog/2026-10-12-no-more-annotations.md index 8fc8e7519..95b168a5f 100644 --- a/blog/2026-10-12-no-more-annotations.md +++ b/blog/2026-10-12-no-more-annotations.md @@ -3,8 +3,8 @@ title: Final step in replacing the annotations feature with the keyword field fe authors: [jvinju] --- -Over the years we have been gradually replacing the (/docs/Rascal/Declarations/Annotation/)[Annotation] feature with the (/docs/Rascal/Declarations/AlgebraicDataType/)[Keyword field] feature. -In release 0.43.0 the final step has been made by replacing the semantics of annotations with a "not implemented" error message with a **quick-fix** suggestion. +Over the years we have been gradually replacing the (/docs/Rascal/Declarations/Annotation)[Annotation] feature with the (/docs/Rascal/Declarations/AlgebraicDataType)[Keyword field] feature. +In (/release-notes/rascal-0-43-x-release-notes)[release 0.43.0] the final step has been made by replacing the semantics of annotations with a "not implemented" error message with a **quick-fix** suggestion. This feature removal went through the following stages to make for a smooth transition: 1. `2009-2013` only annotations implemented (syntax and semantics). @@ -39,4 +39,4 @@ i.e. `int age = 0`, while for more complex type an exception is thrown by the de Finally, the quickfix may open and rewrite a large group of files for the current project. You have to save and close each of them manually to write the result to disk. This would also be a good time to review the generated defaults. -If you get stuck, please contact mailto:Jurgen.Vinju@cwi.nl or mailto:Davy.Landman@swat.engineering for help. \ No newline at end of file +If you get stuck, please contact (Jurgen Vinju)[mailto:Jurgen.Vinju@cwi.nl] or (Davy Landman)[mailto:Davy.Landman@swat.engineering] for help. \ No newline at end of file From 0fd33f5e0192e2286eccf354c9ad006c9ae6a917 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 12 Oct 2026 12:35:01 +0200 Subject: [PATCH 09/11] titles jurgen changed --- blog/authors.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/authors.yml b/blog/authors.yml index 3edf2fffa..959958f8a 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -1,6 +1,6 @@ jvinju: name: Jurgen Vinju - title: Senior Researcher @ CWI-SWAT, professor @ TU/E, Rascal Core Team + title: Senior Researcher @ CWI-SWAT, Rascal Core Team url: http://homepages.cwi.nl/~jurgenv image_url: /images/authors/jurgen.jpg From 7f19f97c2f1a9843f5779ff15c9f7efb50e856f0 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 12 Oct 2026 12:35:40 +0200 Subject: [PATCH 10/11] fixed links --- blog/2026-10-12-no-more-annotations.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog/2026-10-12-no-more-annotations.md b/blog/2026-10-12-no-more-annotations.md index 95b168a5f..84510853e 100644 --- a/blog/2026-10-12-no-more-annotations.md +++ b/blog/2026-10-12-no-more-annotations.md @@ -3,8 +3,8 @@ title: Final step in replacing the annotations feature with the keyword field fe authors: [jvinju] --- -Over the years we have been gradually replacing the (/docs/Rascal/Declarations/Annotation)[Annotation] feature with the (/docs/Rascal/Declarations/AlgebraicDataType)[Keyword field] feature. -In (/release-notes/rascal-0-43-x-release-notes)[release 0.43.0] the final step has been made by replacing the semantics of annotations with a "not implemented" error message with a **quick-fix** suggestion. +Over the years we have been gradually replacing the [Annotation](/docs/Rascal/Declarations/Annotation) feature with the [Keyword field](/docs/Rascal/Declarations/AlgebraicDataType) feature. +In [release 0.43.0](/release-notes/rascal-0-43-x-release-notes) the final step has been made by replacing the semantics of annotations with a "not implemented" error message with a **quick-fix** suggestion. This feature removal went through the following stages to make for a smooth transition: 1. `2009-2013` only annotations implemented (syntax and semantics). From bc6f6836680a0f0d612c4afeccce42d4cb1668ae Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 12 Oct 2026 12:40:50 +0200 Subject: [PATCH 11/11] fixed links --- courses/Rascal/Declarations/Annotation/Annotation.md | 2 +- courses/Rascal/Statements/Assignment/Annotation/Annotation.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/courses/Rascal/Declarations/Annotation/Annotation.md b/courses/Rascal/Declarations/Annotation/Annotation.md index c77f8057e..f544e6bb0 100644 --- a/courses/Rascal/Declarations/Annotation/Annotation.md +++ b/courses/Rascal/Declarations/Annotation/Annotation.md @@ -12,7 +12,7 @@ keywords: #### Synopsis Declare an annotation type for nodes. This feature has been removed; please use [keyword fields]((AlgebraicDataType)) instead. -See (/blog/2026/10/12/no-more-annotations)[this blog]. +See [blog](/blog/2026/10/12/no-more-annotations). #### Syntax diff --git a/courses/Rascal/Statements/Assignment/Annotation/Annotation.md b/courses/Rascal/Statements/Assignment/Annotation/Annotation.md index 404dd798d..05c69a4b1 100644 --- a/courses/Rascal/Statements/Assignment/Annotation/Annotation.md +++ b/courses/Rascal/Statements/Assignment/Annotation/Annotation.md @@ -9,7 +9,7 @@ keywords: #### Synopsis Assign to an annotation. This feature has been removed. -See (/blog/2026/10/12/no-more-annotations)[this blog]. +See [this blog](/blog/2026/10/12/no-more-annotations). #### Syntax