eslint-plugin-sort-exports icon indicating copy to clipboard operation
eslint-plugin-sort-exports copied to clipboard

Autofixer does not a great job at sorting (and actually fails to entirely sort)

Open matthew-dean opened this issue 1 year ago • 0 comments

I had a file like this:

/* eslint-disable import/no-internal-modules */
/* eslint sort-exports/sort-exports: "error" */
export { default as LogoLink } from './LogoLink.vue'
export { default as AddPixelingComponent } from './AddPixelingComponent/AddPixelingComponent.vue'
export { default as AdvancedLinkEditor } from './AdvancedLinkEditor/AdvancedLinkEditor.vue'
export { default as AffiliateAggregatorsTable } from './AffiliateAggregatorsTable/AffiliateAggregatorsTable.vue'
export { default as AffiliateProgramsTable } from './AffiliateProgramsTable/AffiliateProgramsTable.vue'
export { default as BuiltLinkBox } from './BuiltLinkBox/BuiltLinkBox.vue'
export { default as ConnectAffiliateProgramPopup } from './ConnectAffiliateProgramPopup/ConnectAffiliateProgramPopup.vue'
export { default as EmailNotifications } from './EmailNotifications/EmailNotifications.vue'
export { default as Interstitial } from './Interstitial/interstitial.vue'
// export { default as JunkOnOffToggle } from './JunkOnOffToggle/JunkOnOffToggle.vue'
export { default as LinkEditor } from './LinkEditor/LinkEditor.vue'
export { default as LinksList } from './LinksList/LinksList.vue'
export { default as LinksListFilter } from './LinksListFilter/LinksListFilter.vue'
export { default as MiniReportContent } from './MiniReportContent/MiniReportContent.vue'
// export { default as OnOffToggle } from './OnOffToggle/OnOffToggle.vue'
export { default as PeriodTotalLine } from './PeriodTotalLine/PeriodTotalLine.vue'
export { default as ReportController } from './ReportController/ReportController.vue'
export { default as ReportDataTable } from './ReportDataTable/ReportDataTable.vue'
export { default as SelectSearchRetailer } from './SelectSearchRetailer/SelectSearchRetailer.vue'
export { default as SplitLinkEditor } from './SplitLinkEditor/SplitLinkEditor.vue'
export { default as SubusersController } from './SubusersController/SubusersController.vue'
export { default as UtmDomains } from './UtmDomains/UtmDomains.vue'
export { default as ProductSuggestionsEnticement } from './ProductSuggestionsEnticement/ProductSuggestionsEnticement.vue'
export { default as GlobalizerBox } from './GlobalizerBox/GlobalizerBox.vue'
export { default as Tags } from './Tags/Tags.vue'

Upon saving / fixing, the output was:

export { default as AddPixelingComponent } from './AddPixelingComponent/AddPixelingComponent.vue'

export { default as AdvancedLinkEditor } from './AdvancedLinkEditor/AdvancedLinkEditor.vue'

export { default as AffiliateAggregatorsTable } from './AffiliateAggregatorsTable/AffiliateAggregatorsTable.vue'

export { default as AffiliateProgramsTable } from './AffiliateProgramsTable/AffiliateProgramsTable.vue'

export { default as BuiltLinkBox } from './BuiltLinkBox/BuiltLinkBox.vue'

export { default as ConnectAffiliateProgramPopup } from './ConnectAffiliateProgramPopup/ConnectAffiliateProgramPopup.vue'

export { default as EmailNotifications } from './EmailNotifications/EmailNotifications.vue'

export { default as Interstitial } from './Interstitial/interstitial.vue'

// export { default as JunkOnOffToggle } from './JunkOnOffToggle/JunkOnOffToggle.vue'
export { default as LinkEditor } from './LinkEditor/LinkEditor.vue'



export { default as LinksList } from './LinksList/LinksList.vue'
/* eslint-disable import/no-internal-modules */
/* eslint sort-exports/sort-exports: "error" */
export { default as LogoLink } from './LogoLink.vue'
export { default as LinksListFilter } from './LinksListFilter/LinksListFilter.vue'
export { default as GlobalizerBox } from './GlobalizerBox/GlobalizerBox.vue'

export { default as MiniReportContent } from './MiniReportContent/MiniReportContent.vue'
// export { default as OnOffToggle } from './OnOffToggle/OnOffToggle.vue'
export { default as PeriodTotalLine } from './PeriodTotalLine/PeriodTotalLine.vue'
export { default as ProductSuggestionsEnticement } from './ProductSuggestionsEnticement/ProductSuggestionsEnticement.vue'
export { default as ReportController } from './ReportController/ReportController.vue'
export { default as ReportDataTable } from './ReportDataTable/ReportDataTable.vue'
export { default as SelectSearchRetailer } from './SelectSearchRetailer/SelectSearchRetailer.vue'
export { default as SplitLinkEditor } from './SplitLinkEditor/SplitLinkEditor.vue'
export { default as SubusersController } from './SubusersController/SubusersController.vue'
export { default as Tags } from './Tags/Tags.vue'
export { default as UtmDomains } from './UtmDomains/UtmDomains.vue'

As you can see, this had the following bad outcomes:

  1. It put un-necessary spaces between exports (minor), sometimes multiple blank lines
  2. It pushed eslint directives from the top of the file to somewhere in the middle (this breaks ESLint)
  3. It didn't actually sort everything and errors persist

I love that you made this plugin, so I hope you have time to fix it! No worries if not.

matthew-dean avatar Jan 29 '24 20:01 matthew-dean