Changelog ========= NOTE: isort follows the [semver](https://semver.org/) versioning standard. Find out more about isort's release policy [here](https://pycqa.github.io/isort/docs/major_releases/release_policy/). ### 5.5.2 [Hotfix] September 9, 2020 - Fixed #1469: --diff option is ignored when input is from stdin. ### 5.5.1 September 4, 2020 - Fixed #1454: Ensure indented import sections with import heading and a preceding comment don't cause import sorting loops. - Fixed #1453: isort error when float to top on almost empty file. - Fixed #1456 and #1415: noqa comment moved to where flake8 cant see it. - Fixed #1460: .svn missing from default ignore list. ### 5.5.0 September 3, 2020 - Fixed #1398: isort: off comment doesn't work, if it's the top comment in the file. - Fixed #1395: reverse_relative setting doesn't have any effect when combined with force_sort_within_sections. - Fixed #1399: --skip can error in the case of projects that contain recursive symlinks. - Fixed #1389: ensure_newline_before_comments doesn't work if comment is at top of section and sections don't have lines between them. - Fixed #1396: comments in imports with ";" can keep isort from recognizing import line. - Fixed #1380: As imports removed when `combine_star` is set. - Fixed #1382: --float-to-top has no effect if no import is already at the top. - Fixed #1420: isort never settles on module docstring + add import. - Fixed #1421: Error raised when repo contains circular symlinks. - Fixed #1427: noqa comment is moved from star import to constant import. - Fixed #1444 & 1445: Incorrect placement of import additions. - Fixed #1447: isort5 throws error when stdin used on Windows with deprecated args. - Implemented #1397: Added support for specifying config file when using git hook (thanks @diseraluca!). - Implemented #1405: Added support for coloring diff output. - Implemented #1434: New multi-line grid mode without parentheses. Goal Zero (Tickets related to aspirational goal of achieving 0 regressions for remaining 5.0.0 lifespan): - Implemented #1392: Extensive profile testing. - Implemented #1393: Proprety based testing applied to code snippets. - Implemented #1391: Create automated integration test that includes full code base of largest OpenSource isort users. Potentially breaking changes: - Fixed #1429: --check doesn't print to stderr as the documentation says. This means if you were looking for `ERROR:` messages for files that contain incorrect imports within stdout you will now need to look in stderr. ### 5.4.2 Aug 14, 2020 - Fixed #1383: Known other does not work anymore with .editorconfig. - Fixed: Regression in first known party path expansion. ### 5.4.1 [Hotfix] Aug 13, 2020 - Fixed #1381: --combine-as loses # noqa in different circumstances. ### 5.4.0 Aug 12, 2020 - Implemented #1373: support for length sort only of direct (AKA straight) imports. - Fixed #1321: --combine-as loses # noqa. - Fixed #1375: --dont-order-by-type CLI broken. ### 5.3.2 [Hotfix] Aug 7, 2020 - Fixed incorrect warning code (W503->W0503). ### 5.3.1 Aug 7, 2020 - Improve upgrade warnings to be less noisy and point to error codes for easy interoperability with Visual Studio Code (see: #1363). ### 5.3.0 Aug 4, 2020 - Implemented ability to treat all or select comments as code (issue #1357) - Implemented ability to use different configs for different file extensions (issue #1162) - Implemented ability to specify the types of imports (issue #1181) - Implemented ability to dedup import headings (issue #953) - Added experimental support for sorting literals (issue #1358) - Added experimental support for sorting and deduping groupings of assignments. - Improved handling of deprecated single line variables for usage with Visual Studio Code (issue #1363) - Improved handling of mixed newline forms within same source file. - Improved error handling for known sections. - Improved API consistency, returning a boolean value for all modification API calls to indicate if changes were made. - Fixed #1366: spurious errors when combining skip with --gitignore. - Fixed #1359: --skip-gitignore does not honor ignored symlink Internal Development: - Initial hypothesmith powered test to help catch unexpected syntax parsing and output errors (thanks @Zac-HD!) ### 5.2.2 July 30, 2020 - Fixed #1356: return status when arguments are passed in without files or a content stream. ### 5.2.1 July 28, 2020 - Update precommit to default to filtering files that are defined in skip. - Improved relative path detection for `skip` config usage. - Added recursive symbolic link protection. - Implemented #1177: Support for color output using `--color`. - Implemented recursive symlink detection support. ### 5.2.0 July 27, 2020 - Implemented #1335: Official API for diff capturing. - Implemented #1331: Warn when sections don't match up. - Implemented #1261: By popular demand, `filter_files` can now be set in the config option. - Implemented #960: Support for respecting git ignore via "--gitignore" or "skip_gitignore=True". - Implemented #727: Ability to only add imports if existing imports exist. - Implemented #970: Support for custom sharable isort profiles. - Implemented #1214: Added support for git_hook lazy option (Thanks @sztamas!) - Implemented #941: Added an additional `multi_line_output` mode for more compact formatting (Thanks @sztamas!) - Implemented #1020: Option for LOCALFOLDER. - Implemented #1353: Added support for output formatting plugins. - `# isort: split` can now be used at the end of an import line. - Fixed #1339: Extra indent is not preserved when isort:skip is used in nested imports. - Fixed #1348: `--diff` works incorrectly with files that have CRLF line endings. - Improved code repositories usage of pylint tags (#1350). ### 5.1.4 July 19, 2020 - Fixed issue #1333: Use of wrap_length raises an exception about it not being lower or equal to line_length. - Fixed issue #1330: Ensure stdout can be stubbed dynamically for `show_unified_diff` function. ### 5.1.3 July 18, 2020 - Fixed issue #1329: Fix comments duplicated when --fass option is set. ### 5.1.2 July 17, 2020 - Fixed issue #1219 / #1326: Comments not wrapped for long lines - Fixed issue #1156: Bug related to isort:skip usage followed by a multiline comment block ### 5.1.1 July 15, 2020 - Fixed issue #1322: Occasionally two extra newlines before comment with `-n` & `--fss`. - Fixed issue #1189: `--diff` broken when reading from standard input. ### 5.1.0 July 14, 2020 - isort now throws an exception if an invalid settings path is given (issue #1174). - Implemented support for automatic redundant alias removal (issue #1281). - Implemented experimental support for floating all imports to the top of a file (issue #1228) - Fixed #1178: support for semicolons in decorators. - Fixed #1315: Extra newline before comment with -n + --fss. - Fixed #1192: `-k` or `--keep-direct-and-as-imports` option has been deprecated as it is now always on. **Formatting changes implied:** - Fixed #1280: rewrite of as imports changes the behavior of the imports. ### 5.0.9 July 11, 2020 - Fixed #1301: Import headings in nested sections leads to check errors ### 5.0.8 July 11, 2020 - Fixed #1277 & #1278: New line detection issues on Windows. - Fixed #1294: Fix bundled git hook. ### 5.0.7 July 9, 2020 - Fixed #1306: unexpected --diff behavior. - Fixed #1279: Fixed NOQA comment regression. ### 5.0.6 July 8, 2020 - Fixed #1302: comments and --trailing-comma can generate invalid code. - Fixed #1293: extra new line in indented imports, when immediately followed by a comment. - Fixed #1304: isort 5 no longer recognises `sre_parse` as a stdlib module. - Fixed #1300: add_imports moves comments following import section. - Fixed #1276: Fix a bug that creates only one line after triple quotes. ### 5.0.5 July 7, 2020 - Fixed #1285: packaging issue with bundling tests via poetry. - Fixed #1284: Regression when sorting `.pyi` files from CLI using black profile. - Fixed #1275 & #1283: Blank line after docstring removed. - Fixed #1298: CLI Help out of date with isort 5. - Fixed #1290: Unecessary blank lines above nested imports when import comments turned on. - Fixed #1297: Usage of `--add-imports` alongside `--check` is broken. - Fixed #1289: Stream usage no longer auto picking up config file from current working directory. - Fixed #1296: Force_single_line setting removes immediately following comment line. - Fixed #1295: `ensure_newline_before_comments` doesnt work with `force_sort_within_sections`. - Setting not_skip will no longer immediately fail but instead give user a warning and direct to upgrade docs. ### 5.0.4 July 6, 2020 - Fixed #1264: a regression with comment handling and `force_sort_within_sections` config option - Added warning for deprecated CLI flags and linked to upgrade guide. ### 5.0.3 - July 4, 2020 - Fixed setup.py command incorrectly passing check=True as a configuration parameter (see: https://github.com/pycqa/isort/issues/1258) - Fixed missing patch version - Fixed issue #1253: Atomic fails when passed in not readable output stream ### 5.0.2 - July 4, 2020 - Ensured black profile was complete, adding missing line_length definition. ### 5.0.1 - July 4, 2020 - Fixed a runtime error in a vendored dependency (toml). ### 5.0.0 Penny - July 4, 2020 **Breaking changes:** - isort now requires Python 3.6+ to run but continues to support formatting on ALL versions of python including Python 2 code. - isort deprecates official support for Python 3.4, removing modules only in this release from known_standard_library: - user - Config files are no longer composed on-top of each-other. Instead the first config file found is used. - Since there is no longer composition negative form settings (such as --dont-skip or it's config file variant `not_skip`) are no longer required and have been removed. - Two-letter shortened setting names (like `ac` for `atomic`) now require two dashes to avoid ambiguity: `--ac`. - For consistency with other tools `-v` now is shorthand for verbose and `-V` is shorthand for version. See Issue: #1067. - `length_sort_{section_name}` config usage has been deprecated. Instead `length_sort_sections` list can be used to specify a list of sections that need to be length sorted. - `safety_excludes` and `unsafe` have been deprecated - Config now includes as default full set of safety directories defined by safety excludes. - `--recursive` option has been removed. Directories passed in are now automatically sorted recursive. - `--apply` option has been removed as it is the default behaviour. - isort now does nothing, beyond giving instructions and exiting status code 0, when ran with no arguments. - a new `--interactive` flag has been added to enable the old style behaviour. - isort now works on contiguous sections of imports, instead of one whole file at a time. - ~~isort now formats all nested "as" imports in the "from" form. `import x.y as a` becomes `from x import y as a`.~~ NOTE: This was undone in version 5.1.0 due to feedback it caused issues with some project conventions. - `keep_direct_and_as_imports` option now defaults to `True`. - `appdirs` is no longer supported. Unless manually specified, config should be project config only. - `toml` is now installed as a vendorized module, meaning pyproject.toml based config is always supported. - Completely new Python API, old version is removed and no longer accessible. - New module placement logic and module fully replaces old finders. Old approach is still available via `--old-finders`. Internal: - isort now utilizes mypy and typing to filter out typing related issues before deployment. - isort now utilizes black internally to ensure more consistent formatting. - profile support for common project types (black, django, google, etc) - Much much more. There is some difficulty in fully capturing the extent of changes in this release - just because of how all encompassing the release is. See: [Github Issues](https://github.com/pycqa/isort/issues?q=is%3Aissue+is%3Aclosed) for more. ### 4.3.21 - June 25, 2019 - hot fix release - Fixed issue #957 - Long aliases and use_parentheses generates invalid syntax ### 4.3.20 - May 14, 2019 - hot fix release - Fixed issue #948 - Pipe redirection broken on Python2.7 ### 4.3.19 - May 12, 2019 - hot fix release - Fixed issue #942 - correctly handle pyi (Python Template Files) to match `black` output ### 4.3.18 - May 1, 2019 - hot fix release - Fixed an issue with parsing files that contain unicode characters in Python 2 - Fixed issue #924 - Pulling in pip internals causes depreciation warning - Fixed issue #938 - Providing a way to filter explicitly passed in files via configuration settings (`--filter-files`) - Improved interoperability with toml configuration files ### 4.3.17 - April 7, 2019 - hot fix release - Fixed issue #905 & #919: Import section headers behaving strangely ### 4.3.16 - March 23, 2019 - hot fix release - Fixed issue #909 - skip and skip-glob are not enforced when using settings-path. - Fixed issue #907 - appdirs optional requirement does not correctly specify version - Fixed issue #902 - Too broad warning about missing toml package - Fixed issue #778 - remove `user` from known standard library as it's no longer in any supported Python version. ### 4.3.15 - March 10, 2019 - hot fix release - Fixed a regression with handling streaming input from pipes (Issue #895) - Fixed handling of \x0c whitespace character (Issue #811) - Improved CLI documentation ### 4.3.14 - March 9, 2019 - hot fix release - Fixed a regression with */directory/*.py style patterns ### 4.3.13 - March 8, 2019 - hot fix release - Fixed the inability to accurately determine import section when a mix of conda and virtual environments are used. - Fixed some output being printed even when --quiet mode is enabled. - Fixed issue #890 interoperability with PyCharm by allowing case sensitive non type grouped sorting. - Fixed issue #889 under some circumstances isort will incorrectly add a new line at the beginning of a file. - Fixed issue #885 many files not being skipped according to set skip settings. - Fixed issue #842 streaming encoding improvements. ### 4.3.12 - March 6, 2019 - hot fix release - Fix error caused when virtual environment not detected ### 4.3.11 - March 6, 2019 - hot fix release - Fixed issue #876: confused by symlinks pointing to virtualenv gives FIRSTPARTY not THIRDPARTY - Fixed issue #873: current version skips every file on travis - Additional caching to reduce performance regression introduced in 4.3.5 ### 4.3.10 - March 2, 2019 - hot fix release - Fixed Windows incompatibilities (Issue #835) - Fixed relative import sorting bug (Issue #417) - Fixed "no_lines_before" to also be respected from previous empty sections. - Fixed slow-down introduced by finders mechanism by adding a LRU cache (issue #848) - Fixed issue #842 default encoding not-set in Python2 - Restored Windows automated testing - Added Mac automated testing ### 4.3.9 - February 25, 2019 - hot fix release - Fixed a bug that led to an incompatibility with black: #831 ### 4.3.8 - February 25, 2019 - hot fix release - Fixed a bug that led to the recursive option not always been available from the command line. ### 4.3.7 - February 25, 2019 - hot fix release - Expands the finder failsafe to occur on the creation of the finder objects. ### 4.3.6 - February 24, 2019 - hot fix release - Fixes a fatal error that occurs if a single finder throws an exception. Important as we add more finders that utilize third party libraries. ### 4.3.5 - February 24, 2019 - last Python 2.7 Maintenance Release This is the final Python 2.x release of isort, and includes the following major changes: Potentially Interface Breaking: - The `-r` option for removing imports has been renamed `-rm` to avoid accidental deletions and confusion with the `-rc` recursive option. - `__init__.py` has been removed from the default ignore list. The default ignore list is now empty - with all items needing to be explicitly ignored. - Isort will now by default ignore .tox / venv folders in an effort to be "safe". You can disable this behaviour by setting the "--unsafe" flag, this is separate from any skip or not skip rules you may have in place. - Isort now allows for files missing closing newlines in whitespace check - `distutils` support has been removed to simplify setup.py New: - Official Python 3.7 Compatibility. - Support for using requirements files to auto determine third-paty section if pipreqs & requirementslib are installed. - Added support for using pyproject.toml if toml is installed. - Added support for XDG_HOME if appdirs is installed. - An option has been added to enable ignoring trailing comments ('ignore_comments') defaulting to False. - Added support to enable line length sorting for only specific sections - Added a `correctly_sorted` property on the SortsImport to enable more intuitive programmatic checking. Fixes: - Improved black compatibility. - Isort will now detect files in the CWD as first-party. - Fixed several cases where '-ns' or 'not_skip' was being incorrectly ignored. - Fixed sorting of relative path imports ('.', '..', '...', etc). - Fixed bugs caused by a failure to maintain order when loading iterables from config files. - Correctly handle CPython compiled imports and others that need EXT_SUFFIX to correctly identify. - Fixed handling of Symbolic Links to follow them when walking the path. - Fixed handling of relative known_paths. - Fixed lack of access to all wrap modes from the CLI. - Fixed handling of FIFO files. - Fixed a bug that could result in multiple imports being inserted on the same line. ### 4.3.4 - February 12, 2018 - hotfix release - Fixed issue #671: isort is corrupting CRLF files ### 4.3.3 - Feburary 5, 2018 - hotfix release - Fixed issue #665: Tabs turned into single spaces ### 4.3.2 - Feburary 4, 2018 - hotfix release - Fixed issue #651: Add imports option is broken - Fixed issue #662: An error generated by rewriting `.imports` to `. imoprts` ### 4.3.1 - Feburary 2, 2018 - hotfix release - Fixed setup.py errors - Fixed issue #654: Trailing comma count error - Fixed issue #650: Wrong error message displayed ### 4.3.0 - January 31, 2018 - Fixed #557: `force_alphabetical_sort` and `force_sort_within_sections` can now be utilized together without extra new lines - Fix case-sensitive path existence check in Mac OS X - Added `--no-lines-before` for more granular control over section output - Fixed #493: Unwanted conversion to Windows line endings - Fixed #590: Import `as` mucks with alphabetical sorting - Implemented `--version-number` to retrieve just the version number without the isort logo - Breaking changes - Python 2.7+ only (dropped 2.6) allowing various code simplifications and improvements. ### 4.2.15 - June 6, 2017 - hotfix release IMPORTANT NOTE: This will be the last release with Python 2.6 support, subsequent releases will be 2.7+ only - Fixed certain one line imports not being successfully wrapped ### 4.2.14 - June 5, 2017 - hotfix release - Fixed #559 & #565: Added missing standard library imports ### 4.2.13 - June 2, 2017 - hotfix release - Fixed #553: Check only and --diff now work together again ### 4.2.12 - June 1, 2017 - hotfix release - Fixed wheel distribution bug ### 4.2.11 - June 1, 2017 - hotfix release - Fixed #546: Can't select y/n/c after latest update - Fixed #545: Incorrectly moves __future__ imports above encoding comments ### 4.2.9 - June 1, 2017 - hotfix release - Fixed #428: Check only modifies sorting - Fixed #540: Not correctly identifying stdlib modules ### 4.2.8 - May 31, 2017 - Added `--virtual-env` switch command line option - Added --enforce-whitespace option to go along with --check-only for more exact checks (issue #423) - Fixed imports with a tailing '\' and no space in-between getting removed (issue #425) - Fixed issue #299: long lines occasionally not wrapped - Fixed issue #432: No longer add import inside class when class starts at top of file after encoding comment - Fixed issue #440: Added missing `--use-parentheses` option to command line tool and documentation - Fixed issue #496: import* imports now get successfully identified and reformatted instead of deleted - Fixed issue #491: Non ending parentheses withing single line comments no longer cause formatting issues - Fixed issue #471: Imports that wrap the maximum line length and contain comments on the last line are no longer rendered incorrectly - Fixed issue #436: Force sort within section no longer rearranges comments - Fixed issue #473: Force_to_top and force_sort_within_sections now work together - Fixed issue #484 & #472: Consistent output with imports of same spelling but different case - Fixed issue #433: No longer incorrectly add an extra new-line when comment between imports and function definition - Fixed issue #419: Path specification for skipped paths is not Unix/Windows inter-operable. Breaking Changes: - Fixed issue #511: All command line options with an underscore, have had the underscore replaced with a dash for consistency. This effects: multi-line, add-import, remove-import, force-adds, --force-single-line-imports, and length-sort. - Replaced the `--enforce-whitespace` option with `--ignore-whitespace` to restore original behavior of strict whitespace by default ### 4.2.5 - Fixed an issue that caused modules to inccorectly be matched as thirdparty when they simply had `src` in the leading path, even if they weren't withing $VIRTUALENV/src #414 ### 4.2.4 - Fixed an issue that caused module that contained functions before doc strings, to incorrectly place imports - Fixed regression in how `force_alphabetical_sort` was being interpretted (issue #409) - Fixed stray print statement printing skipped files (issue #411) - Added option for forcing imports into a single bucket: `no_sections` - Added option for new lines between import types (from, straight): `lines_between_sections` ### 4.2.3 - Fixed a large number of priority bugs - bug fix only release ### 4.2.2 - Give an error message when isort is unable to determine where to place a module - Allow imports to be sorted by module, independent of import_type, when `force_sort_within_sections` option is set - Fixed an issue that caused Python files with 2 top comments not to be sorted ### 4.2.1 - Hot fix release to fix code error when skipping globs ### 4.2.0 - Added option "NOQA" Do not wrap lines, but add a noqa statement at the end - Added support for running isort recursively, simply with a standalone `isort` command - Added support to run isort library as a module - Added compatibility for Python 3.5 - Fixed performance issue (#338) when running on project with lots of skipped directories - Fixed issue #328: extra new can occasionally occur when using alphabetical-only sort - Fixed custom sections parsing from config file (unicode string -> list) - Updated pylama extension to the correct entry point - Skip files even when file_contents is provided if they are explicitly in skip list - Removed always showing isort banner, keeping it for when the version is requested, verbose is used, or show_logo setting is set. ### 4.1.2 - Fixed issue #323: Accidental default configuration change introduced ### 4.1.1 - Added support for partial file match skips (thanks to @Amwam) - Added support for --quiet option to only show errors when running isort - Fixed issue #316: isort added new lines incorrectly when a top-of line comment is present ### 4.1.0 - Started keeping a log of all changes between releases - Added the isort logo to the command line interface - Added example usage gif to README - Implemented issue #292: skip setting now supports glob patterns - Implemented issue #271: Add option to sort imports purely alphabetically - Implemented issue #301: Readme is now natively in RST format, making it easier for Python tooling to pick up - Implemented pylama isort extension - Fixed issue #260: # encoding lines at the top of the file are now correctly supported - Fixed issue #284: Sticky comments above first import are now supported - Fixed issue #310: Ensure comments don't get duplicated when reformatting imports - Fixed issue #289: Sections order not being respected - Fixed issue #296: Made it more clear how to set arguments more then once ### 4.0.0 - Removed all external dependencies