DEV Community

Cover image for Automatic import sorting with ESLint
Andreas Riedmüller
Andreas Riedmüller

Posted on • Edited on

17

Automatic import sorting with ESLint

Recently I found that it is possible to automatically sort imports in VS Code when saving a file. To do this you just need to set a flag in the settings.json

cmd+shift+p → Open User Settings (JSON)

{
    ...
    "editor.codeActionsOnSave": {
        "source.organizeImports": true
    }
}
Enter fullscreen mode Exit fullscreen mode

More granular settings using eslint

If, like me, you need more precise settings, you can also use eslint plugins in combination with eslint-autofix.

While the plugin eslint-plugin-import is probably the most popular and has many configuration options. I went with eslint-plugin-simple-import-sort because it has a simpler feature set and is easy to configure.

For VS Code there is an option to execute eslint --fix when saving a file. For this to work you can ignore the above setting and add this to your settings.json instead:

{
    ...
    "editor.codeActionsOnSave": {
        "source.fixAll.eslint": "explicit"
    }
}
Enter fullscreen mode Exit fullscreen mode

This will automatically fix all auto fixable eslint errors when saving a file.

The value for this setting used to be Boolean, this was changed in VSCode 1.85.0 and can now be "explicit", "always" or "never". Read more here

My settings for eslint-plugin-simple-import-sort

Basically all I want to do is import React at the top and group packages, local imports and style and media imports at the bottom.

This was relatively simple: you first need to install the eslint plugin:

npm install --save-dev eslint-plugin-simple-import-sort
Enter fullscreen mode Exit fullscreen mode

Then configure the plugin in your eslint config file (.eslintrc.json in my case):

{
  ...
  "plugins": ["simple-import-sort"],
  "rules": {
    "simple-import-sort/imports": [
      "error",
      {
        "groups": [
          // 1. Side effect imports at the start. For me this is important because I want to import reset.css and global styles at the top of my main file.
          ["^\\u0000"],
          // 2. `react` and packages: Things that start with a letter (or digit or underscore), or `@` followed by a letter.
          ["^react$", "^@?\\w"],
          // 3. Absolute imports and other imports such as Vue-style `@/foo`.
          // Anything not matched in another group. (also relative imports starting with "../")
          ["^@", "^"],
          // 4. relative imports from same folder "./" (I like to have them grouped together)
          ["^\\./"],
          // 5. style module imports always come last, this helps to avoid CSS order issues
          ["^.+\\.(module.css|module.scss)$"],
          // 6. media imports
          ["^.+\\.(gif|png|svg|jpg)$"]
        ]
      }
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

💡 If you want to fix all files in a folder, you should be able to just run npx eslint --fix ./dir/subdir instead of opening and saving every single file. But make sure you have a clean git before you do that ;)

Hope this helps someone. Feel free to comment if you have any questions and/or suggestions.

Note to self: 1. I should evaluate using a prettier plugin for import instead. 2. For CSS Modules the import order is relevant, css imports should not be reordered.

SurveyJS custom survey software

Simplify data collection in your JS app with a fully integrated form management platform. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more. Integrates with any backend system, giving you full control over your data and no user limits.

Learn more

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay