Skip to content

[Reactivity Transform] $$ breaks the original semantics #6312

Closed as not planned
@sxzz

Description

@sxzz

Vue version

v3.2.37

Link to minimal reproduction

https://sfc.vuejs.org/#eNo9TjsOwjAMvUpkdQAJErFWoRIbh8hSKpe2aj6yXRiq3p2kICb7ffz8VrilpF8LQg2WOxqTKEZZUuOCC10MLIrUVVWE/eFydKGqDpSHNV/zbrOCPs2tYEZK2eHS3HGeozV5K9a/DCcYfYokZ98mPXEM+e1ajtxPYAe12pnC5V4FOxhEEtfGcN+VshPrSE+TN01LkNGjRvbnB8U3I+VgByVic2GD7QP4UU0C

Steps to reproduce

Open the reproduction link, there's an error on SFC playground. Cannot access 'r' before initialization

The code

const r = $ref(1)
$$(r)

is transformed to

const r = _ref(1)
(r)

We can see that $$ is removed, and only brackets remain. It will break the original semantics.
It's actually only one line code: const r = _ref(1)(r).

What is expected?

const r = _ref(1)
r

// ⬇️ formatted to
const r = _ref(1);
r;

What is actually happening?

const r = _ref(1)
(r)

// ⬇️ formatted to
const r = _ref(1)(r);

System Info

N/A

Any additional comments?

IMHO, the brackets should be removed to avoid changing the semantics when using $$ function.

Metadata

Metadata

Assignees

No one assigned

    Labels

    🔨 p3-minor-bugPriority 3: this fixes a bug, but is an edge case that only affects very specific usage.🐞 bugSomething isn't workingscope: reactivityTransform

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions