Introspection API

Stylus supports an introspection API. This allows mixins and functions to reflect relative to the caller, etc.

mixin

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";
    }
Stylus on GitHub