Skip to content

Commit

Permalink
fix(sort-exports): work with star exports
Browse files Browse the repository at this point in the history
  • Loading branch information
chirokas committed Apr 13, 2024
1 parent 3de399f commit ce76606
Show file tree
Hide file tree
Showing 2 changed files with 149 additions and 144 deletions.
14 changes: 5 additions & 9 deletions rules/sort-exports.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,11 @@ export default createEslintRule<Options, MESSAGE_ID>({
| TSESTree.ExportNamedDeclarationWithSource
| TSESTree.ExportAllDeclaration,
) => {
if (node.type === 'ExportAllDeclaration' && node.exported === null) {
parts.push([])
} else {
parts.at(-1)!.push({
size: rangeToDiff(node.range),
name: node.source.value,
node,
})
}
parts.at(-1)!.push({
size: rangeToDiff(node.range),
name: node.source.value,
node,
})
}

return {
Expand Down
279 changes: 144 additions & 135 deletions test/sort-exports.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,52 +73,55 @@ describe(RULE_NAME, () => {
],
})

ruleTester.run(
`${RULE_NAME}(${type}): sorts all-exports only if export kind is value`,
rule,
{
valid: [
{
code: dedent`
export { SuzuHoujou } from './houjou'
export * as Kuromura from './kuromura'
export { TetsuMizuhara } from './mizuhara'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
options: [options],
},
],
invalid: [
{
code: dedent`
export * as Kuromura from './kuromura'
export { SuzuHoujou } from './houjou'
export { TetsuMizuhara } from './mizuhara'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
output: dedent`
export { SuzuHoujou } from './houjou'
export * as Kuromura from './kuromura'
export { TetsuMizuhara } from './mizuhara'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
options: [options],
errors: [
{
messageId: 'unexpectedExportsOrder',
data: {
left: './kuromura',
right: './houjou',
},
ruleTester.run(`${RULE_NAME}(${type}): sorts all-exports`, rule, {
valid: [
{
code: dedent`
export { SuzuHoujou } from './houjou'
export * as Kuromura from './kuromura'
export { TetsuMizuhara } from './mizuhara'
export { Shuusaku } from './shuusaku'
export * from 'hiroshima'
`,
options: [options],
},
],
invalid: [
{
code: dedent`
export * as Kuromura from './kuromura'
export { SuzuHoujou } from './houjou'
export { TetsuMizuhara } from './mizuhara'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
output: dedent`
export { SuzuHoujou } from './houjou'
export * as Kuromura from './kuromura'
export { TetsuMizuhara } from './mizuhara'
export { Shuusaku } from './shuusaku'
export * from 'hiroshima'
`,
options: [options],
errors: [
{
messageId: 'unexpectedExportsOrder',
data: {
left: './kuromura',
right: './houjou',
},
],
},
],
},
)
},
{
messageId: 'unexpectedExportsOrder',
data: {
left: 'hiroshima',
right: './shuusaku',
},
},
],
},
],
})

ruleTester.run(`${RULE_NAME}(${type}): works with export aliases`, rule, {
valid: [
Expand Down Expand Up @@ -214,52 +217,55 @@ describe(RULE_NAME, () => {
],
})

ruleTester.run(
`${RULE_NAME}(${type}): sorts all-exports only if export kind is value`,
rule,
{
valid: [
{
code: dedent`
export { SuzuHoujou } from './houjou'
export * as Kuromura from './kuromura'
export { TetsuMizuhara } from './mizuhara'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
options: [options],
},
],
invalid: [
{
code: dedent`
export * as Kuromura from './kuromura'
export { SuzuHoujou } from './houjou'
export { TetsuMizuhara } from './mizuhara'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
output: dedent`
export { SuzuHoujou } from './houjou'
export * as Kuromura from './kuromura'
export { TetsuMizuhara } from './mizuhara'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
options: [options],
errors: [
{
messageId: 'unexpectedExportsOrder',
data: {
left: './kuromura',
right: './houjou',
},
ruleTester.run(`${RULE_NAME}(${type}): sorts all-exports`, rule, {
valid: [
{
code: dedent`
export { SuzuHoujou } from './houjou'
export * as Kuromura from './kuromura'
export { TetsuMizuhara } from './mizuhara'
export { Shuusaku } from './shuusaku'
export * from 'hiroshima'
`,
options: [options],
},
],
invalid: [
{
code: dedent`
export * as Kuromura from './kuromura'
export { SuzuHoujou } from './houjou'
export { TetsuMizuhara } from './mizuhara'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
output: dedent`
export { SuzuHoujou } from './houjou'
export * as Kuromura from './kuromura'
export { TetsuMizuhara } from './mizuhara'
export { Shuusaku } from './shuusaku'
export * from 'hiroshima'
`,
options: [options],
errors: [
{
messageId: 'unexpectedExportsOrder',
data: {
left: './kuromura',
right: './houjou',
},
],
},
],
},
)
},
{
messageId: 'unexpectedExportsOrder',
data: {
left: 'hiroshima',
right: './shuusaku',
},
},
],
},
],
})

ruleTester.run(`${RULE_NAME}(${type}): works with export aliases`, rule, {
valid: [
Expand Down Expand Up @@ -354,52 +360,55 @@ describe(RULE_NAME, () => {
],
})

ruleTester.run(
`${RULE_NAME}(${type}): sorts all-exports only if export kind is value`,
rule,
{
valid: [
{
code: dedent`
export { TetsuMizuhara } from './mizuhara'
export * as Kuromura from './kuromura'
export { SuzuHoujou } from './houjou'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
options: [options],
},
],
invalid: [
{
code: dedent`
export * as Kuromura from './kuromura'
export { SuzuHoujou } from './houjou'
export { TetsuMizuhara } from './mizuhara'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
output: dedent`
export { TetsuMizuhara } from './mizuhara'
export * as Kuromura from './kuromura'
export { SuzuHoujou } from './houjou'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
options: [options],
errors: [
{
messageId: 'unexpectedExportsOrder',
data: {
left: './houjou',
right: './mizuhara',
},
ruleTester.run(`${RULE_NAME}(${type}): sorts all-exports`, rule, {
valid: [
{
code: dedent`
export { TetsuMizuhara } from './mizuhara'
export * as Kuromura from './kuromura'
export { SuzuHoujou } from './houjou'
export { Shuusaku } from './shuusaku'
export * from 'hiroshima'
`,
options: [options],
},
],
invalid: [
{
code: dedent`
export * as Kuromura from './kuromura'
export { SuzuHoujou } from './houjou'
export { TetsuMizuhara } from './mizuhara'
export * from 'hiroshima'
export { Shuusaku } from './shuusaku'
`,
output: dedent`
export { TetsuMizuhara } from './mizuhara'
export * as Kuromura from './kuromura'
export { SuzuHoujou } from './houjou'
export { Shuusaku } from './shuusaku'
export * from 'hiroshima'
`,
options: [options],
errors: [
{
messageId: 'unexpectedExportsOrder',
data: {
left: './houjou',
right: './mizuhara',
},
],
},
],
},
)
},
{
messageId: 'unexpectedExportsOrder',
data: {
left: 'hiroshima',
right: './shuusaku',
},
},
],
},
],
})

ruleTester.run(`${RULE_NAME}(${type}): works with export aliases`, rule, {
valid: [
Expand Down

0 comments on commit ce76606

Please sign in to comment.