Skip to content

Commit 0cd9c58

Browse files
tanhauhautaylorzane
authored andcommitted
mark module variables as mutated or reassigned (sveltejs#4469)
1 parent 7245a3d commit 0cd9c58

File tree

4 files changed

+98
-2
lines changed

4 files changed

+98
-2
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## Unreleased
44

5+
* In `vars` array, correctly indicate whether `module` variables are `mutated` or `reassigned` ([#3215](https://github.com/sveltejs/svelte/issues/3215))
56
* Exclude global variables from `$capture_state` ([#4463](https://github.com/sveltejs/svelte/issues/4463))
67

78
## 3.19.1

src/compiler/compile/Component.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,7 @@ export default class Component {
780780

781781
const component = this;
782782
const { content } = script;
783-
const { instance_scope, instance_scope_map: map } = this;
783+
const { instance_scope, module_scope, instance_scope_map: map } = this;
784784

785785
let scope = instance_scope;
786786

@@ -797,7 +797,12 @@ export default class Component {
797797
const deep = assignee.type === 'MemberExpression';
798798

799799
names.forEach(name => {
800-
if (scope.find_owner(name) === instance_scope) {
800+
const scope_owner = scope.find_owner(name);
801+
if (
802+
scope_owner !== null
803+
? scope_owner === instance_scope
804+
: module_scope && module_scope.has(name)
805+
) {
801806
const variable = component.var_lookup.get(name);
802807
variable[deep ? 'mutated' : 'reassigned'] = true;
803808
}
+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
export default {
2+
test(assert, vars) {
3+
assert.deepEqual(vars, [
4+
{
5+
name: "a",
6+
export_name: null,
7+
injected: false,
8+
module: true,
9+
mutated: false,
10+
reassigned: true,
11+
referenced: false,
12+
referenced_from_script: false,
13+
writable: true
14+
},
15+
{
16+
name: "b",
17+
export_name: null,
18+
injected: false,
19+
module: true,
20+
mutated: true,
21+
reassigned: false,
22+
referenced: false,
23+
referenced_from_script: false,
24+
writable: true
25+
},
26+
{
27+
name: "c",
28+
export_name: null,
29+
injected: false,
30+
module: true,
31+
mutated: false,
32+
reassigned: false,
33+
referenced: false,
34+
referenced_from_script: false,
35+
writable: true
36+
},
37+
{
38+
name: "d",
39+
export_name: null,
40+
injected: false,
41+
module: true,
42+
mutated: false,
43+
reassigned: false,
44+
referenced: false,
45+
referenced_from_script: false,
46+
writable: true
47+
},
48+
{
49+
name: "c",
50+
export_name: null,
51+
injected: false,
52+
module: false,
53+
mutated: false,
54+
reassigned: true,
55+
referenced: false,
56+
referenced_from_script: true,
57+
writable: true
58+
},
59+
{
60+
name: "foo",
61+
export_name: null,
62+
injected: false,
63+
module: false,
64+
mutated: false,
65+
reassigned: false,
66+
referenced: false,
67+
referenced_from_script: false,
68+
writable: false
69+
}
70+
]);
71+
}
72+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<script context='module'>
2+
let a = {};
3+
let b = {};
4+
let c = {};
5+
let d = {};
6+
</script>
7+
<script>
8+
let c = {};
9+
10+
a = 1;
11+
b.x = 1;
12+
13+
function foo() {
14+
let d = {};
15+
c = 1;
16+
d.x = 1;
17+
}
18+
</script>

0 commit comments

Comments
 (0)