Like many other languages, ReScript allows annotating a piece of code to express extra functionality. Here's an example:
@inline annotation tells
An attribute starts with
@ and goes before the item it annotates. In the above example, it's hooked onto the let binding.
Note: In previous versions (< 8.3) all our interop related attributes started with a
bs.val). Our formatter will automatically drop them in newer ReScript versions.
You can put an attribute almost anywhere. You can even add extra data to them by using them visually like a function call. Here are a few famous attributes (explained in other sections):
@@warning("-27")is a standalone attribute that annotates the entire file. Those attributes start with
@@. Here, it carries the data
"-27". You can find a full list of all available warnings here.
@unboxedannotates the type definition.
customDoubleexpression. This shows a warning while compiling telling consumers to not rely on this method long-term.
@deprecated("Use SomeOther.customTriple instead")annotates the
customTripleexpression with a string to describe the reason for deprecation.
For a list of all decorators and their usage, please refer to the Syntax Lookup page.
There's a second category of attributes, called "extension points" (a remnant term of our early systems):
Extension points are attributes that don't annotate an item; they are the item. Usually they serve as placeholders for the compiler to implicitly substitute them with another item.
Extension points start with
%. A standalone extension point (akin to a standalone regular attribute) starts with
For a list of all extension points and their usage, please refer to the Syntax Lookup page.