You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Add sort by length option
* fix types
* Correct default type
Co-authored-by: annes <[email protected]>
* Yet another <SEPARATOR> feature PR (#339)
* Added current-state snapshots
Capturing the current state of transformations so we can see how the
upcoming changes affect them.
* Add `<SEPARATOR>` support
When `importOrderSeparation` is enabled, users can further control
separation placement with the `<SEPARATOR>` keyword.
* fix tests, update docs
* feat: Import sort order skip files
* Downgraded minimatch for node 18
* Added new types
* (fix) Types error
* Switch to ESM
* Ensure all tests are running
* Correctly resolve plugin
* Remove some changes
* Fix svelte
* Require node >= 20.x (#367)
* Require node >= 20.x
* Add checking 24.x
* docs: add pnpm install command to README (#361)
* Switch to vitest for better ESM support
I was still hitting issues with jest and trying to get full ESM support, so I decided to switch to vitest. This seems to be working and snapshots are generated essentially the same.
* Explicitly import expect and test
* Fix types
* Fix accidentally checked file
* Add extensions to imports, fix some example issues
* Make tsc happy
* Convert all cjs to mjs
* Fix some things
* Get examples and tests working
* (fix) PR review comments analysed and reviewed
* State now matches upstream/main
* Revert "State now matches upstream/main"
This reverts commit a7db2b5.
* Fixed version mis matches
* [Format] Run prettier on most files
Summary:
```
$ npx prettier --write .
```
Manually inspected changes, and reverted changes to examples, package.json, and tsconfig.json
Test Plan: doitlive
* Delete ppsi.spec.js.snap
* Delete prettier.config.mjs
* Alt: Add support for gjs/gts, fix examples more (#377)
* Add support for gjs/gts, fix examples more
* WIP
* hm
* wheeeee
* Revert extraneous svelte change
* Revert extraneous vue change
* Update src/preprocessors/ember-preprocessor.ts
Co-authored-by: Robbie Wagner <[email protected]>
* Update examples/.prettierrc
Co-authored-by: Robbie Wagner <[email protected]>
* Update .prettierrc
Co-authored-by: Robbie Wagner <[email protected]>
* Update examples/example.gts
Co-authored-by: Robbie Wagner <[email protected]>
* Update examples/example.gjs
Co-authored-by: Robbie Wagner <[email protected]>
* Update tests/Ember/sfc.gts
Co-authored-by: Robbie Wagner <[email protected]>
* Support namespace imports
* Support named type imports
* Fix all type imports
* debugging improvement to run_spec
* Fix parser
* Reduce config
* Extract replaceAt to its own util and add tests for it
* Fix spelling: injest -> ingest
---------
Co-authored-by: Robbie Wagner <[email protected]>
Co-authored-by: Robbie Wagner <[email protected]>
* 6.0.0-0
* [Test] Stop ignoring exceptions thrown in snapshot tests
Summary:
This logic can hide breakages and cause tests to pass when the
underlying logic is actually broken. I encountered these hidden
breakages while working on some further feature changes, and figured
it was appropriate to fix this first.
As all existing tests pass without the try/catch, this change is
effectively a no-op.
Test Plan:
`yarn install && yarn run test ./tests/`
* [Perf] Improve performance of removeNodesFromOriginalCode()
Summary:
This change replaces the existing RegExp replace() logic with
concatenated string slices. This avoids reallocation the result
string for each node replacement, replacing it with string slice
operations (which are implemented as O(1) string views within v8) and
a single .join(''), which can be optimized by the runtime to a single
allocation.
This probably won't make a noticable difference, but the change also
simplifies some further feature work I am attempting to add.
Test Plan:
`yarn install && yarn run test --all`
* [Refactor] Stop rerendering directives, inject imports instead
Summary:
This commit changes how the sorted imports are combined with the
original source.
Prior to this commit, all ImportDeclaration nodes and their leading
comments, plus any InterpreterDirective and Directive nodes, were
extracted from the original code and re-rendered using babel. The
rendered nodes were then concatenated with the original source with
those nodes removed to produce the updated source.
This approach safely protected against functional changes, but
removed newlines around comments near the beginning of the file when
the first node of the original source was an ImportDeclaration, as
babel does not preserve whitespace when rendering content.
If a user has configured a plugin that attempts to manage comments
and/or whitespace near the top of the file, such as auto-inserting a
license header (as I am trying to do), this results in conflicts /
formatting churn.
This commit does not directly resolve this incompatibility, however
it better prepares the codebase for a plugin option to be added that
can resolve the issue.
Test Plan:
`yarn install && yarn run test --all`
Note that one snapshot was changed by this commit where a newline was
changed, acting as an effective example of how the original approach
could affect whitespace in the re-rendered portion of the file.
* [Feature] Expand detection for `sort-imports-ignore`
Summary:
Prior to this commit, isSortImportsIgnored() checked comments
associated with the extracted ImportDirectives, and only if the
comment started on line 1. This could result in a failure to suppress
sorting if the comment was not next to an ImportDirective (never
considered), the first import directive were embedded later in the
file (line mismatch), or directives/shebangs were used (Line 1 is
unavailable).
With this change, the line restriction is removed, and all comments
from the beginning of the file and the first statement are checked.
This ensures better coverage, especially with the
importOrderIgnoreHeaderComments feature stacked on this commit.
Test Plan:
`yarn install && yarn run test --all`
* Add sortNodeBuiltinModulesToTop
* Refactor: Use <BUILTIN_MODULES> placeholder instead of boolean option
* Fix test file extensions to .mjs for ES modules compatibility
* fix undefined error
* Update Ember snapshot and clean up debug code
* run yarn prettify
* prettify files
* remove changelog entry
* update CHANGELOG with features
* run yarn
* Revert "run yarn"
This reverts commit 5b1b267.
---------
Co-authored-by: KLewin23 <[email protected]>
Co-authored-by: annes <[email protected]>
Co-authored-by: Chason Choate <[email protected]>
Co-authored-by: RyderKishan <[email protected]>
Co-authored-by: Robbie Wagner <[email protected]>
Co-authored-by: Robert Wagner <[email protected]>
Co-authored-by: Vladislav Arsenev <[email protected]>
Co-authored-by: Nathan H. Leung <[email protected]>
Co-authored-by: Balkishan <[email protected]>
Co-authored-by: Cullen Walsh <[email protected]>
Co-authored-by: NullVoxPopuli <[email protected]>
Co-authored-by: Ayush Sharma <[email protected]>
Co-authored-by: Vladislav Arsenev <[email protected]>
Co-authored-by: Stuart Dotson <[email protected]>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+25Lines changed: 25 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,31 @@
2
2
3
3
4
4
---
5
+
### 6.0.0
6
+
7
+
#### Breaking Changes
8
+
-**Switch to ESM**[#366](https://github.com/trivago/prettier-plugin-sort-imports/pull/366) by [@RobbieTheWagner](https://github.com/RobbieTheWagner) - The plugin now uses ES modules instead of CommonJS
9
+
-**Require Node >= 20.x**[#367](https://github.com/trivago/prettier-plugin-sort-imports/pull/367) by [@RobbieTheWagner](https://github.com/RobbieTheWagner) - Drop support for Node.js versions below 20
10
+
-**Switch to vitest**[#370](https://github.com/trivago/prettier-plugin-sort-imports/pull/370) by [@RobbieTheWagner](https://github.com/RobbieTheWagner) - Replaced Jest with Vitest for better ESM support
11
+
12
+
#### New features
13
+
-**Ember.js gjs/gts support**[#377](https://github.com/trivago/prettier-plugin-sort-imports/pull/377) by [@NullVoxPopuli](https://github.com/NullVoxPopuli) and [@RobbieTheWagner](https://github.com/RobbieTheWagner) - Add support for Ember.js gjs/gts file formats with namespace and named type imports
14
+
-**`<BUILTIN_MODULES>` placeholder**[#381](https://github.com/trivago/prettier-plugin-sort-imports/pull/381) by [@sdotson](https://github.com/sdotson) - Add support for sorting Node.js builtin modules to a specific position using `<BUILTIN_MODULES>` placeholder in `importOrder`
15
+
-**`<SEPARATOR>` placeholder**[#339](https://github.com/trivago/prettier-plugin-sort-imports/pull/339) - Add `<SEPARATOR>` keyword for fine-grained control over import group separation when `importOrderSeparation` is enabled
16
+
-**Sort by length option**[#224](https://github.com/trivago/prettier-plugin-sort-imports/pull/224) by [@KLewin23](https://github.com/KLewin23) - Add option to sort imports by import statement length
17
+
-**`importOrderExclude` option**[#384](https://github.com/trivago/prettier-plugin-sort-imports/pull/384) by [@RyderKishan](https://github.com/RyderKishan) - Add support for excluding specific files from import sorting using glob patterns
18
+
-**Expand `sort-imports-ignore` detection**[#358](https://github.com/trivago/prettier-plugin-sort-imports/pull/358) by [@ckwalsh](https://github.com/ckwalsh) - Improved detection of `sort-imports-ignore` comments throughout the file, not just at line 1
19
+
20
+
#### Performance improvements
21
+
-**Improve `removeNodesFromOriginalCode()` performance**[#356](https://github.com/trivago/prettier-plugin-sort-imports/pull/356) by [@ckwalsh](https://github.com/ckwalsh) - Replace RegExp logic with string slices for better performance
22
+
23
+
#### Refactoring
24
+
-**Stop rerendering directives**[#357](https://github.com/trivago/prettier-plugin-sort-imports/pull/357) by [@ckwalsh](https://github.com/ckwalsh) - Inject imports instead of re-rendering directives to better preserve whitespace and reduce formatting conflicts
25
+
-**Stop ignoring exceptions in snapshot tests**[#355](https://github.com/trivago/prettier-plugin-sort-imports/pull/355) by [@ckwalsh](https://github.com/ckwalsh) - Improve test reliability by properly handling exceptions
You can also use `<BUILTIN_MODULES>` to control the position of Node.js builtin modules (like `fs`, `path`, `http`, and their `node:` prefixed variants):
When `<BUILTIN_MODULES>` is included in your `importOrder`, Node.js builtin modules will be sorted to that position. If not included, builtin modules are treated as regular third-party imports.
130
+
117
131
#### `importOrderSeparation`
118
132
119
133
**type**: `boolean`
@@ -127,6 +141,9 @@ between sorted import declarations group. The separation takes place according t
127
141
"importOrderSeparation": true,
128
142
```
129
143
144
+
If this option is enabled and `<SEPARATOR>` is used in the `importOrder` array, the plugin
145
+
will ONLY add newlines at those locations and at the end of the imports.
146
+
130
147
#### `importOrderSortSpecifiers`
131
148
132
149
**type**: `boolean`
@@ -198,6 +215,13 @@ with options as a JSON string of the plugin array:
198
215
importOrderParserPlugins: []
199
216
```
200
217
218
+
### `importOrderSortByLength`
219
+
**type**: `'asc' | 'desc' | null`
220
+
**default value**: `null`
221
+
222
+
A choice value to enable sorting imports within their groups based on their string lengths, the two options being ascending and descending.
223
+
Leaving the value blank or setting it to null will result in length being ignored
224
+
201
225
### `importOrderSideEffects`
202
226
**type**: `boolean`
203
227
**default value**: `true`
@@ -229,6 +253,7 @@ import b from 'b'
229
253
importcfrom'c'
230
254
```
231
255
256
+
232
257
### Ignoring import ordering
233
258
234
259
In some cases it's desired to ignore import ordering, specifically if you require to instantiate a common service or polyfill in your application logic before all the other imports. The plugin supports the `// sort-imports-ignore` comment, which will exclude the file from ordering the imports.
@@ -267,6 +292,12 @@ In the end, the plugin returns final imports with _third party imports_ on top a
267
292
268
293
The _third party imports_ position (it's top by default) can be overridden using the `<THIRD_PARTY_MODULES>` special word in the `importOrder`.
269
294
295
+
### Pattern Matching Implementation
296
+
297
+
This plugin uses [minimatch](https://github.com/isaacs/minimatch) for pattern matching of import paths. The matching is performed using the exact version specified in the plugin's dependencies to ensure consistent behavior. This is important to note because different versions of minimatch or other glob matching libraries might have subtle differences in their pattern matching behavior.
298
+
299
+
If you're experiencing unexpected matching behavior, please ensure you're using patterns compatible with minimatch's syntax, which might differ slightly from other glob implementations.
300
+
270
301
### FAQ / Troubleshooting
271
302
272
303
Having some trouble or an issue ? You can check [FAQ / Troubleshooting section](./docs/TROUBLESHOOTING.md).
@@ -277,11 +308,13 @@ Having some trouble or an issue ? You can check [FAQ / Troubleshooting section](
0 commit comments