Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ni_python_styleguide/_config_constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@

FLAKE8_CONFIG_FILE = __FILE_DIR / "config.ini"
BLACK_CONFIG_FILE = __FILE_DIR / "config.toml"
ISORT_CONFIG_FILE = BLACK_CONFIG_FILE
35 changes: 6 additions & 29 deletions ni_python_styleguide/_fix.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import fileinput
import logging
import pathlib
from collections import defaultdict
Expand All @@ -8,6 +7,7 @@
import isort

from ni_python_styleguide import _acknowledge_existing_errors
from ni_python_styleguide import _config_constants
from ni_python_styleguide import _format
from ni_python_styleguide import _utils

Expand Down Expand Up @@ -67,42 +67,19 @@ def _split_imports_line(lines: str, *_, **__):

def _sort_imports(file: pathlib.Path, app_import_names):
raw = file.read_text()
isort_config = isort.Config(
settings_file=str(_config_constants.ISORT_CONFIG_FILE),
known_first_party=filter(None, app_import_names.split(",")),
)
output = isort.code(
raw,
multi_line_output=3,
line_length=1,
known_first_party=filter(None, app_import_names.split(",")),
config=isort_config,
)
file.write_text(output)


def _handle_multiple_import_lines(bad_file: pathlib.Path):
multiline_string_checker = _utils.string_helpers.InMultiLineStringChecker(
lines=bad_file.read_text(encoding=_utils.DEFAULT_ENCODING).splitlines()
)
with fileinput.FileInput(files=[str(bad_file)], inplace=True) as f:
for line_no, line in enumerate(f):
working_line = line
if multiline_string_checker.in_multiline_string(line_no + 1):
print(working_line, end="")
continue
working_line = _split_imports_line(working_line)
print(working_line, end="")


def _format_imports(file: pathlib.Path, app_import_names: Iterable[str]) -> None:
_sort_imports(file, app_import_names=app_import_names)
start_line, end_line = _utils.code_analysis.find_import_region(file)
file_lines = file.read_text().splitlines()
before = file_lines[:start_line]
import_lines = file_lines[start_line:end_line]
after = file_lines[end_line:]
with _utils.temp_file.multi_access_tempfile(suffix=".py") as temp_py_file:
temp_py_file.write_text("\n".join(import_lines))
_format.format(temp_py_file, "--line-length=300") # condense any split lines
_handle_multiple_import_lines(temp_py_file)
handled_import_region = temp_py_file.read_text().splitlines()
file.write_text("\n".join(before + handled_import_region + after))
_format.format(file)


Expand Down
5 changes: 5 additions & 0 deletions ni_python_styleguide/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,8 @@

[tool.black]
line-length = 100

[tool.isort]
profile = "black"
combine_as_imports = true
force_single_line = true
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
import pathlib
from os import access
from os import path
from typing import (
from typing import ( # noqa F401: un-used import comment that is actually used, should get removed in --aggressive (auto-generated noqa)
Hashable,
) # noqa F401: un-used import comment that is actually used, should get removed in --aggressive (auto-generated noqa)
)
from typing import Iterable
from typing import List

Expand Down