Skip to content

Commit f9fa194

Browse files
authored
fix(to-arrow): add missing modifiers/computed (#9)
1 parent 90bc041 commit f9fa194

File tree

2 files changed

+33
-17
lines changed

2 files changed

+33
-17
lines changed

src/commands/to-arrow.test.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ run(
4545
code: d`
4646
const bar = {
4747
/// to-arrow
48-
async bar(a: number, b: number): number {
48+
async [bar]?(a: number, b: number): number {
4949
return a + b
5050
},
5151
foo() {
@@ -54,7 +54,7 @@ run(
5454
}`,
5555
output: d`
5656
const bar = {
57-
bar: async (a: number, b: number): number => {
57+
[bar]: async (a: number, b: number): number => {
5858
return a + b
5959
},
6060
foo() {
@@ -63,12 +63,22 @@ run(
6363
}`,
6464
errors: ['command-removal', 'command-fix'],
6565
},
66+
// Getter/setter
67+
{
68+
code: d`
69+
const bar = {
70+
/// to-arrow
71+
get id() {}
72+
}`,
73+
output: null,
74+
errors: 'command-error',
75+
},
6676
// Class method
6777
{
6878
code: d`
6979
class Bar {
7080
/// to-arrow
71-
async bar(a: number, b: number): number {
81+
private static override async [bar]?(a: number, b: number): number {
7282
return a + b
7383
}
7484
foo() {
@@ -77,7 +87,7 @@ run(
7787
}`,
7888
output: d`
7989
class Bar {
80-
bar = async (a: number, b: number): number => {
90+
private static override [bar] ? = async (a: number, b: number): number => {
8191
return a + b
8292
}
8393
foo() {

src/commands/to-arrow.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ export const toArrow: Command = {
1414
let rangeStart = fn.range[0]
1515
const rangeEnd = fn.range[1]
1616

17+
const parent = fn.parent
18+
19+
if (parent.type === 'Property' && parent.kind !== 'init')
20+
return ctx.reportError(`Cannot convert ${parent.kind}ter property to arrow function`)
21+
1722
ctx.removeComment()
1823
ctx.report({
1924
node: fn,
@@ -42,24 +47,25 @@ export const toArrow: Command = {
4247
}
4348

4449
// For object methods
45-
else if (fn.parent.type === 'Property') {
46-
rangeStart = fn.parent.range[0]
47-
textName = ctx.getTextOf(fn.parent.key)
48-
final = `${textName}: ${final}`
50+
else if (parent.type === 'Property') {
51+
rangeStart = parent.range[0]
52+
textName = ctx.getTextOf(parent.key)
53+
final = `${parent.computed ? `[${textName}]` : textName}: ${final}`
4954
}
5055

5156
// For class methods
52-
else if (fn.parent.type === 'MethodDefinition') {
53-
rangeStart = fn.parent.range[0]
54-
textName = ctx.getTextOf(fn.parent.key)
55-
final = `${textName} = ${final}`
57+
else if (parent.type === 'MethodDefinition') {
58+
rangeStart = parent.range[0]
59+
textName = ctx.getTextOf(parent.key)
60+
final = `${[
61+
parent.accessibility,
62+
parent.static && 'static',
63+
parent.override && 'override',
64+
parent.computed ? `[${textName}]` : textName,
65+
parent.optional && '?',
66+
].filter(Boolean).join(' ')} = ${final}`
5667
}
5768

58-
// console.log({
59-
// final,
60-
// original: code.slice(rangeStart, rangeEnd),
61-
// p: fn.parent.type,
62-
// })
6369
return fixer.replaceTextRange([rangeStart, rangeEnd], final)
6470
},
6571
})

0 commit comments

Comments
 (0)