98 lines
2.0 KiB
JavaScript
98 lines
2.0 KiB
JavaScript
const a = {
|
||
a: "a"
|
||
};
|
||
|
||
const b = {
|
||
'b': "b"
|
||
};
|
||
|
||
const b2 = {
|
||
// Escapes should stay as escapes and not be unquoted.
|
||
'\u0062': "b",
|
||
'\u0031': "1"
|
||
};
|
||
|
||
const c = {
|
||
c1: "c1",
|
||
'c2': "c2"
|
||
};
|
||
|
||
const d = {
|
||
d1: "d1",
|
||
'd-2': "d2"
|
||
};
|
||
|
||
// None of these should become quoted, regardless of the quoteProps value.
|
||
const e = {
|
||
NaN: null,
|
||
1: null,
|
||
1.5: null,
|
||
.1: null,
|
||
1.: null,
|
||
1.0: null,
|
||
999999999999999999999: null,
|
||
0.99999999999999999: null,
|
||
1E2: null,
|
||
1e+3: null,
|
||
1e+100: null,
|
||
0b10: null,
|
||
0o10: null,
|
||
0xf: null,
|
||
2n: null,
|
||
}
|
||
|
||
const f = {
|
||
// These should be unquoted for quoteProps=as-needed.
|
||
"NaN": null,
|
||
"1": null,
|
||
"1.5": null,
|
||
// These should never be unquoted. `1e+100` technically could (it’s the only
|
||
// one where `String(Number(key)) === key`), but we came to the conclusion
|
||
// that it is unexpected.
|
||
".1": null,
|
||
"1.": null,
|
||
"1.0": null,
|
||
"999999999999999999999": null,
|
||
"0.99999999999999999": null,
|
||
"1E2": null,
|
||
"1e+3": null,
|
||
"1e+100": null,
|
||
"0b10": null,
|
||
"0o10": null,
|
||
"0xf": null,
|
||
"2n": null,
|
||
}
|
||
|
||
Object.entries({
|
||
// To force quotes for quoteProps=consistent.
|
||
'a-': 'a-',
|
||
// These can be quoted:
|
||
NaN: 'NaN',
|
||
1: '1',
|
||
1.5: '1.5',
|
||
// Prettier will normalize these to `0.1` and `1` – then they can be quoted.
|
||
.1: '.1',
|
||
1.: '1.',
|
||
// These should never be quoted. The _actual_ keys are shown as comments.
|
||
// Copy-paste this into the console to verify. If we were to convert these
|
||
// numbers into decimal (which completely valid), “information/intent” is
|
||
// lost. Either way, writing code like this is super confusing.
|
||
1.0: '1.0', // 1
|
||
999999999999999999999: '999999999999999999999', // 1e+21
|
||
0.99999999999999999: '0.99999999999999999', // 1
|
||
1E2: '1E2', // 100
|
||
1e+3: '1e+3', // 1000
|
||
1e+100: '1e+100', // 1e+100 – this one is identical, but would be inconsistent to quote.
|
||
0b10: '0b10', // 2
|
||
0o10: '0o10', // 8
|
||
0xf: '0xf', // 15
|
||
2n: '2n', // 2
|
||
0xan: '0xan', // 10
|
||
})
|
||
|
||
// Negative numbers cannot be unquoted.
|
||
!{
|
||
"-1": null,
|
||
"-1.5": null,
|
||
}
|