summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Crosley <timothy.crosley@gmail.com>2020-01-06 08:50:52 -0800
committerTimothy Crosley <timothy.crosley@gmail.com>2020-01-06 08:50:52 -0800
commit4dc2a71af88d59b664a8bfdcfcc7acd6412bed76 (patch)
tree8495ce0ddfd9c3391e6eda45b8b94afacc34e1e7
parentf02f012c7c13b8caa946d782ef8f6775972972bd (diff)
downloadisort-4dc2a71af88d59b664a8bfdcfcc7acd6412bed76.tar.gz
Add cdef and cpdef support
-rw-r--r--isort/api.py4
-rw-r--r--isort/output.py11
-rw-r--r--tests/test_isort.py38
3 files changed, 45 insertions, 8 deletions
diff --git a/isort/api.py b/isort/api.py
index bf86cd0e..004c5f5b 100644
--- a/isort/api.py
+++ b/isort/api.py
@@ -323,9 +323,11 @@ def sort_imports(
output_stream.write(line)
indent = ""
- contains_imports = False
if next_import_section:
cimports = not cimports
+ contains_imports = True
+ else:
+ contains_imports = False
import_section = next_import_section
next_import_section = ""
else:
diff --git a/isort/output.py b/isort/output.py
index 5f2659f7..cd925c91 100644
--- a/isort/output.py
+++ b/isort/output.py
@@ -1,7 +1,7 @@
import copy
import itertools
from functools import partial
-from typing import Any, Dict, Iterable, List, Optional
+from typing import Any, Dict, Iterable, List, Optional, Tuple
from isort.format import format_simplified
@@ -9,6 +9,8 @@ from . import parse, sorting, wrap
from .comments import add_to_line as with_comments
from .settings import DEFAULT_CONFIG, Config
+STATEMENT_DECLERATIONS: Tuple[str, ...] = ("def ", "cdef ", "cpdef ", "class ", "@", "async def")
+
def sorted_imports(
parsed: parse.ParsedContent,
@@ -202,12 +204,7 @@ def sorted_imports(
if config.lines_after_imports != -1:
formatted_output[imports_tail:0] = ["" for line in range(config.lines_after_imports)]
- elif extension != "pyi" and (
- next_construct.startswith("def ")
- or next_construct.startswith("class ")
- or next_construct.startswith("@")
- or next_construct.startswith("async def")
- ):
+ elif extension != "pyi" and next_construct.startswith(STATEMENT_DECLERATIONS):
formatted_output[imports_tail:0] = ["", ""]
else:
formatted_output[imports_tail:0] = [""]
diff --git a/tests/test_isort.py b/tests/test_isort.py
index 11a7079f..0228b414 100644
--- a/tests/test_isort.py
+++ b/tests/test_isort.py
@@ -4627,6 +4627,44 @@ IF CEF_VERSION == 3:
SortImports(file_contents=test_input).output == expected_output
+def test_cdef_support():
+ assert (
+ SortImports(
+ file_contents="""
+from cpython.version cimport PY_MAJOR_VERSION
+
+cdef extern from *:
+ ctypedef CefString ConstCefString "const CefString"
+"""
+ ).output
+ == """
+from cpython.version cimport PY_MAJOR_VERSION
+
+
+cdef extern from *:
+ ctypedef CefString ConstCefString "const CefString"
+"""
+ )
+
+ assert (
+ SortImports(
+ file_contents="""
+from cpython.version cimport PY_MAJOR_VERSION
+
+cpdef extern from *:
+ ctypedef CefString ConstCefString "const CefString"
+"""
+ ).output
+ == """
+from cpython.version cimport PY_MAJOR_VERSION
+
+
+cpdef extern from *:
+ ctypedef CefString ConstCefString "const CefString"
+"""
+ )
+
+
def test_top_level_import_order() -> None:
test_input = (
"from rest_framework import throttling, viewsets\n"