Skip to content

Commit b584b8a

Browse files
update the entry point and add additional fixes
1 parent 924cdc4 commit b584b8a

File tree

2 files changed

+51
-10
lines changed

2 files changed

+51
-10
lines changed

src/rules/__tests__/use-next-tooltip.test.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,41 @@ const ruleTester = new RuleTester({
1313

1414
ruleTester.run('use-next-tooltip', rule, {
1515
valid: [
16-
`import {Tooltip} from '@primer/react/next';`,
16+
`import {Tooltip} from '@primer/react/experimental';`,
1717
`import {UnderlineNav, Button} from '@primer/react';
18-
import {Tooltip} from '@primer/react/next';`,
18+
import {Tooltip} from '@primer/react/experimental';`,
1919
`import {UnderlineNav, Button} from '@primer/react';
20-
import {Tooltip, SelectPanel} from '@primer/react/next';`,
20+
import {Tooltip, SelectPanel} from '@primer/react/experimental';`,
2121
],
2222
invalid: [
2323
{
2424
code: `import {Tooltip} from '@primer/react';`,
2525
errors: [{messageId: 'useNextTooltip'}],
26-
output: `import {Tooltip} from '@primer/react/next';`,
26+
output: `import {Tooltip} from '@primer/react/experimental';`,
2727
},
2828
{
2929
code: `import {Tooltip, Button} from '@primer/react';\n<Tooltip aria-label="tooltip text"><Button>Button</Button></Tooltip>`,
3030
errors: [{messageId: 'useNextTooltip'}, {messageId: 'useTextProp'}],
31-
output: `import {Button} from '@primer/react';\nimport {Tooltip} from '@primer/react/next';\n<Tooltip text="tooltip text"><Button>Button</Button></Tooltip>`,
31+
output: `import {Button} from '@primer/react';\nimport {Tooltip} from '@primer/react/experimental';\n<Tooltip text="tooltip text"><Button>Button</Button></Tooltip>`,
3232
},
3333
{
3434
code: `import {ActionList, ActionMenu, Tooltip, Button} from '@primer/react';\n<Tooltip aria-label="tooltip text"><Button>Button</Button></Tooltip>`,
3535
errors: [
3636
{messageId: 'useNextTooltip', line: 1},
3737
{messageId: 'useTextProp', line: 2},
3838
],
39-
output: `import {ActionList, ActionMenu, Button} from '@primer/react';\nimport {Tooltip} from '@primer/react/next';\n<Tooltip text="tooltip text"><Button>Button</Button></Tooltip>`,
39+
output: `import {ActionList, ActionMenu, Button} from '@primer/react';\nimport {Tooltip} from '@primer/react/experimental';\n<Tooltip text="tooltip text"><Button>Button</Button></Tooltip>`,
40+
},
41+
{
42+
code: `import {ActionList, ActionMenu, Tooltip, Button} from '@primer/react';\n<Tooltip aria-label="tooltip text" noDelay={true} wrap={true} align="left"><Button>Button</Button></Tooltip>`,
43+
errors: [
44+
{messageId: 'useNextTooltip', line: 1},
45+
{messageId: 'useTextProp', line: 2},
46+
{messageId: 'noDelayRemoved', line: 2},
47+
{messageId: 'wrapRemoved', line: 2},
48+
{messageId: 'alignRemoved', line: 2},
49+
],
50+
output: `import {ActionList, ActionMenu, Button} from '@primer/react';\nimport {Tooltip} from '@primer/react/experimental';\n<Tooltip text="tooltip text" ><Button>Button</Button></Tooltip>`,
4051
},
4152
],
4253
})

src/rules/use-next-tooltip.js

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,18 @@ module.exports = {
44
meta: {
55
type: 'suggestion',
66
docs: {
7-
description: 'recommends the use of @primer/react/next Tooltip component',
7+
description: 'recommends the use of @primer/react/experimental Tooltip component',
88
category: 'Best Practices',
99
recommended: true,
1010
},
1111
fixable: true,
1212
schema: [],
1313
messages: {
14-
useNextTooltip: 'Please use @primer/react/next Tooltip component that has accessibility improvements',
14+
useNextTooltip: 'Please use @primer/react/experimental Tooltip component that has accessibility improvements',
1515
useTextProp: 'Please use the text prop instead of aria-label',
16+
noDelayRemoved: 'noDelay prop is removed. Tooltip now has no delay by default',
17+
wrapRemoved: 'wrap prop is removed. Tooltip now wraps by default',
18+
alignRemoved: 'align prop is removed. Please use the direction prop instead.',
1619
},
1720
},
1821
create(context) {
@@ -37,7 +40,7 @@ module.exports = {
3740
fix(fixer) {
3841
// If Tooltip is the only import, replace the whole import statement
3942
if (!hasOtherImports) {
40-
return fixer.replaceText(node.source, `'@primer/react/next'`)
43+
return fixer.replaceText(node.source, `'@primer/react/experimental'`)
4144
} else {
4245
// Otherwise, remove Tooltip from the import statement and add a new import statement with the correct path
4346
const tooltipSpecifier = node.specifiers.find(
@@ -49,7 +52,7 @@ module.exports = {
4952
// fixer.remove(tooltipSpecifier),
5053
fixer.insertTextAfterRange(
5154
[node.range[1], node.range[1]],
52-
`\nimport {Tooltip} from '@primer/react/next';`,
55+
`\nimport {Tooltip} from '@primer/react/experimental';`,
5356
),
5457
]
5558
}
@@ -66,6 +69,33 @@ module.exports = {
6669
},
6770
})
6871
}
72+
if (node.name.name === 'noDelay') {
73+
context.report({
74+
node,
75+
messageId: 'noDelayRemoved',
76+
fix(fixer) {
77+
return fixer.remove(node)
78+
},
79+
})
80+
}
81+
if (node.name.name === 'wrap') {
82+
context.report({
83+
node,
84+
messageId: 'wrapRemoved',
85+
fix(fixer) {
86+
return fixer.remove(node)
87+
},
88+
})
89+
}
90+
if (node.name.name === 'align') {
91+
context.report({
92+
node,
93+
messageId: 'alignRemoved',
94+
fix(fixer) {
95+
return fixer.remove(node)
96+
},
97+
})
98+
}
6999
},
70100
}
71101
},

0 commit comments

Comments
 (0)