mirror of https://github.com/sveltejs/svelte
Merge pull request #1106 from sveltejs/gh-1083
Enforce valid names for computed propertiespull/1105/merge
commit
d0be845190
@ -0,0 +1,10 @@
|
||||
// Adapted from https://github.com/acornjs/acorn/blob/6584815dca7440e00de841d1dad152302fdd7ca5/src/tokenize.js
|
||||
// Reproduced under MIT License https://github.com/acornjs/acorn/blob/master/LICENSE
|
||||
|
||||
export default function fullCharCodeAt(str: string, i: number): number {
|
||||
let code = str.charCodeAt(i)
|
||||
if (code <= 0xd7ff || code >= 0xe000) return code;
|
||||
|
||||
let next = str.charCodeAt(i + 1);
|
||||
return (code << 10) + next - 0x35fdc00;
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
import { isIdentifierStart, isIdentifierChar } from 'acorn';
|
||||
import fullCharCodeAt from './fullCharCodeAt';
|
||||
|
||||
export default function isValidIdentifier(str: string): boolean {
|
||||
let i = 0;
|
||||
|
||||
while (i < str.length) {
|
||||
const code = fullCharCodeAt(str, i);
|
||||
if (!(i === 0 ? isIdentifierStart : isIdentifierChar)(code, true)) return false;
|
||||
|
||||
i += code <= 0xffff ? 1 : 2;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{{#each things as 𐊧}}
|
||||
<p>{{𐊧}}</p>
|
||||
{{/each}}
|
@ -0,0 +1,46 @@
|
||||
{
|
||||
"hash": 795130236,
|
||||
"html": {
|
||||
"start": 0,
|
||||
"end": 47,
|
||||
"type": "Fragment",
|
||||
"children": [
|
||||
{
|
||||
"start": 0,
|
||||
"end": 47,
|
||||
"type": "EachBlock",
|
||||
"expression": {
|
||||
"type": "Identifier",
|
||||
"start": 8,
|
||||
"end": 14,
|
||||
"name": "things"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"start": 24,
|
||||
"end": 37,
|
||||
"type": "Element",
|
||||
"name": "p",
|
||||
"attributes": [],
|
||||
"children": [
|
||||
{
|
||||
"start": 27,
|
||||
"end": 33,
|
||||
"type": "MustacheTag",
|
||||
"expression": {
|
||||
"type": "Identifier",
|
||||
"start": 29,
|
||||
"end": 31,
|
||||
"name": "𐊧"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"context": "𐊧"
|
||||
}
|
||||
]
|
||||
},
|
||||
"css": null,
|
||||
"js": null
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
[{
|
||||
"message":
|
||||
"Computed property name 'new' is invalid — cannot be a JavaScript reserved word",
|
||||
"loc": {
|
||||
"line": 9,
|
||||
"column": 3
|
||||
},
|
||||
"pos": 87
|
||||
}]
|
@ -0,0 +1,12 @@
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
a: 1
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
new: a => a * 2
|
||||
}
|
||||
};
|
||||
</script>
|
@ -0,0 +1,8 @@
|
||||
[{
|
||||
"message": "Computed property name 'with-hyphen' is invalid — must be a valid identifier such as with_hyphen",
|
||||
"loc": {
|
||||
"line": 9,
|
||||
"column": 3
|
||||
},
|
||||
"pos": 87
|
||||
}]
|
@ -0,0 +1,12 @@
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
a: 1
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
"with-hyphen": a => a * 2
|
||||
}
|
||||
};
|
||||
</script>
|
Loading…
Reference in new issue