summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Crosley <timothy.crosley@gmail.com>2019-03-07 23:53:50 -0800
committerTimothy Crosley <timothy.crosley@gmail.com>2019-03-07 23:53:50 -0800
commit12c034a100afb18c6628b4b972516e87a10eec8d (patch)
treefef4879fb16573f0bc7b507c90fbdd6225f77519
parent476ebe46f761a1b75096d895ce24170439f46680 (diff)
downloadisort-12c034a100afb18c6628b4b972516e87a10eec8d.tar.gz
Fix issue #890
-rw-r--r--CHANGELOG.md1
-rw-r--r--isort/isort.py3
-rw-r--r--isort/main.py2
-rw-r--r--isort/settings.py3
-rw-r--r--test_isort.py22
5 files changed, 29 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f7ebed58..c5826060 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@ Changelog
### 4.3.13 - March 6, 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
### 4.3.12 - March 6, 2019 - hot fix release
- Fix error caused when virtual environment not detected
diff --git a/isort/isort.py b/isort/isort.py
index ff3921bf..22e5d019 100644
--- a/isort/isort.py
+++ b/isort/isort.py
@@ -303,7 +303,8 @@ class SortImports(object):
prefix = "B"
else:
prefix = "C"
- module_name = module_name.lower()
+ if not config['case_sensitive']:
+ module_name = module_name.lower()
if section_name is None or 'length_sort_' + str(section_name).lower() not in config:
length_sort = config['length_sort']
else:
diff --git a/isort/main.py b/isort/main.py
index 299562ed..5da3fb3a 100644
--- a/isort/main.py
+++ b/isort/main.py
@@ -292,6 +292,8 @@ def parse_args(argv=None):
parser.add_argument('--unsafe', dest='unsafe', action='store_true',
help='Tells isort to look for files in standard library directories, etc. '
'where it may not be safe to operate in')
+ parser.add_argument('--case-sensitive', dest='case_sensitive', action='store_true',
+ help='Tells isort to include casing when sorting module names')
parser.add_argument('files', nargs='*', help='One or more Python source files that need their imports sorted.')
arguments = {key: value for key, value in vars(parser.parse_args(argv)).items() if value}
diff --git a/isort/settings.py b/isort/settings.py
index c796d966..b1075148 100644
--- a/isort/settings.py
+++ b/isort/settings.py
@@ -162,7 +162,8 @@ default = {'force_to_top': [],
'no_lines_before': [],
'no_inline_sort': False,
'ignore_comments': False,
- 'safety_excludes': True}
+ 'safety_excludes': True,
+ 'case_sensitive': False}
@lru_cache()
diff --git a/test_isort.py b/test_isort.py
index fb095fc7..ee08b00e 100644
--- a/test_isort.py
+++ b/test_isort.py
@@ -2845,3 +2845,25 @@ def test_unwrap_issue_762():
test_input = ('from os.\\\n'
' path import (join, split)')
assert SortImports(file_contents=test_input).output == 'from os.path import join, split\n'
+
+
+def test_ensure_support_for_non_typed_but_cased_alphabetic_sort_issue_890():
+ test_input = ('from pkg import BALL\n'
+ 'from pkg import RC\n'
+ 'from pkg import Action\n'
+ 'from pkg import Bacoo\n'
+ 'from pkg import RCNewCode\n'
+ 'from pkg import actual\n'
+ 'from pkg import rc\n'
+ 'from pkg import recorder\n')
+ expected_output = ('from pkg import Action\n'
+ 'from pkg import BALL\n'
+ 'from pkg import Bacoo\n'
+ 'from pkg import RC\n'
+ 'from pkg import RCNewCode\n'
+ 'from pkg import actual\n'
+ 'from pkg import rc\n'
+ 'from pkg import recorder\n')
+ assert SortImports(file_contents=test_input, case_sensitive=True, order_by_type=False,
+ force_single_line=True).output == expected_output
+