Stylus supports an introspection API. This allows mixins and functions to reflect relative to the caller, etc.
The mixin
local variable is automatically assigned within function bodies.
It contains the string root
if the function was called at the root
level, or block
indicating otherwise, and finally false
if the invoked function expects a return value.
In the following example, we define reset()
to alter its behaviour depending on whether it's mixed into root, into another block, or into a return value, as used in the foo
property below:
reset()
if mixin == 'root'
got
root true
else if mixin
got 'a mixin'
else
'not a mixin'
reset()
body
reset()
foo reset()
Compiles to:
got {
root: true;
}
body {
foo: "not a mixin";
got: "a mixin";
}