Skip to content

Commit e0d4dbd

Browse files
committed
✨ Adds range codemods!
1 parent 0bd32e8 commit e0d4dbd

File tree

3 files changed

+140
-0
lines changed

3 files changed

+140
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
const defineInlineTest = require('jscodeshift/dist/testUtils').defineInlineTest;
2+
import transformer from '../transform';
3+
4+
describe('@atlaskit/[email protected] transform', () => {
5+
defineInlineTest(
6+
{ default: transformer, parser: 'tsx' },
7+
{},
8+
`
9+
import React, { useRef } from 'react';
10+
import Range from '@atlaskit/range';
11+
12+
const SimpleRange = () => {
13+
let ref = useRef();
14+
15+
const inputRef = (newRef) => {
16+
ref = newRef;
17+
}
18+
return <Range inputRef={inputRef} />;
19+
}
20+
`,
21+
`
22+
import React, { useRef } from 'react';
23+
import Range from '@atlaskit/range';
24+
25+
const SimpleRange = () => {
26+
let ref = useRef();
27+
28+
const inputRef = (newRef) => {
29+
ref = newRef;
30+
}
31+
return <Range ref={inputRef} />;
32+
}
33+
`,
34+
'should replace inputRef with ref',
35+
);
36+
37+
defineInlineTest(
38+
{ default: transformer, parser: 'tsx' },
39+
{},
40+
`
41+
import React, { useRef } from 'react';
42+
import Range from '@atlaskit/range';
43+
44+
const SimpleRange = () => {
45+
let ref = useRef();
46+
47+
return (
48+
<Range
49+
inputRef={newRef => {
50+
ref = newRef;
51+
}}
52+
/>
53+
);
54+
}
55+
`,
56+
`
57+
import React, { useRef } from 'react';
58+
import Range from '@atlaskit/range';
59+
60+
const SimpleRange = () => {
61+
let ref = useRef();
62+
63+
return (
64+
<Range
65+
ref={newRef => {
66+
ref = newRef;
67+
}}
68+
/>
69+
);
70+
}
71+
`,
72+
'should replace inputRef with ref when defined inline',
73+
);
74+
75+
defineInlineTest(
76+
{ default: transformer, parser: 'tsx' },
77+
{},
78+
`
79+
import React, { useRef } from 'react';
80+
import Foo from '@atlaskit/range';
81+
82+
const SimpleRange = () => {
83+
let ref = useRef();
84+
85+
const inputRef = (newRef) => {
86+
ref = newRef;
87+
}
88+
return <Foo inputRef={inputRef} />;
89+
}
90+
`,
91+
`
92+
import React, { useRef } from 'react';
93+
import Foo from '@atlaskit/range';
94+
95+
const SimpleRange = () => {
96+
let ref = useRef();
97+
98+
const inputRef = (newRef) => {
99+
ref = newRef;
100+
}
101+
return <Foo ref={inputRef} />;
102+
}
103+
`,
104+
'should change inputRef with aliased import name',
105+
);
106+
});
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { API, FileInfo, Options } from 'jscodeshift';
2+
import {
3+
getDefaultImportSpecifierName,
4+
getJSXAttributesByName,
5+
} from '@codeshift/utils';
6+
7+
export default function transformer(
8+
fileInfo: FileInfo,
9+
{ jscodeshift: j }: API,
10+
options: Options,
11+
) {
12+
const source = j(fileInfo.source);
13+
14+
const defaultSpecifier = getDefaultImportSpecifierName(
15+
j,
16+
source,
17+
'@atlaskit/range',
18+
);
19+
20+
if (!defaultSpecifier) return fileInfo.source;
21+
22+
source.findJSXElements(defaultSpecifier).forEach(element => {
23+
getJSXAttributesByName(j, element, 'inputRef').forEach(attribute => {
24+
j(attribute).replaceWith(
25+
j.jsxAttribute(j.jsxIdentifier('ref'), attribute.node.value),
26+
);
27+
});
28+
});
29+
30+
return source.toSource(options.printOptions);
31+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default {
2+
maintainers: ['danieldelcore'],
3+
};

0 commit comments

Comments
 (0)