diff --git a/README.rst b/README.rst
index 7741351d..7103f1a5 100644
--- a/README.rst
+++ b/README.rst
@@ -73,8 +73,8 @@ Start by setting up and activating a virtualenv:
# If you're done with the virtualenv, you can leave it by running:
deactivate
-We use `isort `_ and `black `_
-to format code. To format changes to be conformant, run the following in the root:
+We use `ufmt `_ to format code. To format
+changes to be conformant, run the following in the root:
.. code-block:: shell
diff --git a/fixit/cli/__init__.py b/fixit/cli/__init__.py
index 19b2fffb..43788d7d 100644
--- a/fixit/cli/__init__.py
+++ b/fixit/cli/__init__.py
@@ -16,7 +16,6 @@
from dataclasses import asdict, dataclass, field
from pathlib import Path
from typing import (
- TYPE_CHECKING,
Callable,
Collection,
Dict,
@@ -28,6 +27,7 @@
Sequence,
Tuple,
Type,
+ TYPE_CHECKING,
TypeVar,
Union,
)
@@ -35,7 +35,7 @@
import libcst as cst
from libcst.metadata import MetadataWrapper
-from fixit.cli.args import LintWorkers, get_multiprocessing_parser
+from fixit.cli.args import get_multiprocessing_parser, LintWorkers
from fixit.common.base import LintConfig
from fixit.common.config import get_lint_config
from fixit.common.full_repo_metadata import FullRepoMetadataConfig, get_repo_caches
diff --git a/fixit/cli/apply_fix.py b/fixit/cli/apply_fix.py
index 39898252..b50bfb8b 100644
--- a/fixit/cli/apply_fix.py
+++ b/fixit/cli/apply_fix.py
@@ -17,15 +17,14 @@
from dataclasses import dataclass
from multiprocessing import Manager
from pathlib import Path
-from typing import TYPE_CHECKING, Iterable, List, Mapping, Optional
+from typing import Iterable, List, Mapping, Optional, TYPE_CHECKING
-from libcst import ParserSyntaxError, parse_module
+from libcst import parse_module, ParserSyntaxError
from libcst.codemod._cli import invoke_formatter
from libcst.metadata import MetadataWrapper
from fixit.cli import find_files, map_paths
from fixit.cli.args import (
- LintWorkers,
get_compact_parser,
get_metadata_cache_parser,
get_multiprocessing_parser,
@@ -34,6 +33,7 @@
get_skip_autoformatter_parser,
get_skip_ignore_byte_marker_parser,
get_skip_ignore_comments_parser,
+ LintWorkers,
)
from fixit.cli.formatter import LintRuleReportFormatter
from fixit.cli.full_repo_metadata import (
@@ -45,8 +45,8 @@
from fixit.common.report import BaseLintRuleReport
from fixit.common.utils import LintRuleCollectionT
from fixit.rule_lint_engine import (
- LintRuleReportsWithAppliedPatches,
lint_file_and_apply_patches,
+ LintRuleReportsWithAppliedPatches,
)
diff --git a/fixit/cli/args.py b/fixit/cli/args.py
index 39ef2b09..d5ce6b27 100644
--- a/fixit/cli/args.py
+++ b/fixit/cli/args.py
@@ -12,9 +12,9 @@
from fixit.common.base import LintRuleT
from fixit.common.config import get_lint_config, get_rules_from_config
from fixit.common.utils import (
- LintRuleNotFoundError,
find_and_import_rule,
import_distinct_rules_from_package,
+ LintRuleNotFoundError,
)
diff --git a/fixit/cli/full_repo_metadata.py b/fixit/cli/full_repo_metadata.py
index f9880739..bbeee273 100644
--- a/fixit/cli/full_repo_metadata.py
+++ b/fixit/cli/full_repo_metadata.py
@@ -4,9 +4,9 @@
# LICENSE file in the root directory of this source tree.
from collections import defaultdict
-from logging import Handler, Logger, LogRecord, getLogger
+from logging import getLogger, Handler, Logger, LogRecord
from subprocess import TimeoutExpired
-from typing import TYPE_CHECKING, DefaultDict, Iterable, List, Mapping, Type
+from typing import DefaultDict, Iterable, List, Mapping, Type, TYPE_CHECKING
from libcst.metadata import TypeInferenceProvider
diff --git a/fixit/cli/insert_suppressions.py b/fixit/cli/insert_suppressions.py
index b648ae4d..9b99b374 100644
--- a/fixit/cli/insert_suppressions.py
+++ b/fixit/cli/insert_suppressions.py
@@ -17,9 +17,9 @@
from dataclasses import dataclass
from enum import Enum
from pathlib import Path
-from typing import TYPE_CHECKING, Iterable, List, Mapping, Optional, Union
+from typing import Iterable, List, Mapping, Optional, TYPE_CHECKING, Union
-from libcst import ParserSyntaxError, parse_module
+from libcst import parse_module, ParserSyntaxError
from libcst.codemod._cli import invoke_formatter
from libcst.metadata import MetadataWrapper
@@ -41,9 +41,9 @@
from fixit.common.base import LintRuleT
from fixit.common.config import get_lint_config
from fixit.common.insert_suppressions import (
+ insert_suppressions,
SuppressionComment,
SuppressionCommentKind,
- insert_suppressions,
)
from fixit.common.report import BaseLintRuleReport
from fixit.rule_lint_engine import lint_file
diff --git a/fixit/cli/run_rules.py b/fixit/cli/run_rules.py
index 6c9d9003..74787419 100644
--- a/fixit/cli/run_rules.py
+++ b/fixit/cli/run_rules.py
@@ -19,9 +19,9 @@
import time
from dataclasses import dataclass
from pathlib import Path
-from typing import TYPE_CHECKING, Iterable, List, Mapping, Optional
+from typing import Iterable, List, Mapping, Optional, TYPE_CHECKING
-from libcst import ParserSyntaxError, parse_module
+from libcst import parse_module, ParserSyntaxError
from libcst.metadata import MetadataWrapper
from fixit.cli import find_files, map_paths
diff --git a/fixit/cli/tests/test_formatter.py b/fixit/cli/tests/test_formatter.py
index b8912979..6bafcb2c 100644
--- a/fixit/cli/tests/test_formatter.py
+++ b/fixit/cli/tests/test_formatter.py
@@ -7,7 +7,7 @@
import libcst as cst
from libcst.testing.utils import UnitTest
-from fixit.cli.formatter import LintRuleReportFormatter, format_warning
+from fixit.cli.formatter import format_warning, LintRuleReportFormatter
from fixit.common.report import BaseLintRuleReport, CstLintRuleReport
diff --git a/fixit/cli/tests/test_lint_opts.py b/fixit/cli/tests/test_lint_opts.py
index 1296f21b..bf3b75cb 100644
--- a/fixit/cli/tests/test_lint_opts.py
+++ b/fixit/cli/tests/test_lint_opts.py
@@ -5,7 +5,7 @@
from dataclasses import dataclass
from pathlib import Path
-from typing import Collection, List, Optional, Sequence, cast
+from typing import cast, Collection, List, Optional, Sequence
from libcst import Module
from libcst.testing.utils import UnitTest
diff --git a/fixit/common/base.py b/fixit/common/base.py
index cfdca7d5..bee68f91 100644
--- a/fixit/common/base.py
+++ b/fixit/common/base.py
@@ -7,7 +7,7 @@
from abc import ABCMeta
from dataclasses import dataclass, field
from pathlib import Path
-from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Type, Union
+from typing import Dict, List, Optional, Tuple, Type, TYPE_CHECKING, Union
import libcst as cst
from libcst import BatchableCSTVisitor
diff --git a/fixit/common/cli/__init__.py b/fixit/common/cli/__init__.py
index bcb9efab..74882985 100644
--- a/fixit/common/cli/__init__.py
+++ b/fixit/common/cli/__init__.py
@@ -7,7 +7,7 @@
For backwards compatibility.
"""
-from fixit.cli import IPCResult, LintOpts, find_files, ipc_main, map_paths
+from fixit.cli import find_files, ipc_main, IPCResult, LintOpts, map_paths
__all__ = ["IPCResult", "LintOpts", "find_files", "ipc_main", "map_paths"]
diff --git a/fixit/common/config.py b/fixit/common/config.py
index c1a13688..294df3ce 100644
--- a/fixit/common/config.py
+++ b/fixit/common/config.py
@@ -23,7 +23,7 @@
from jsonschema import validate
from fixit.common.base import LintConfig
-from fixit.common.utils import LintRuleCollectionT, import_distinct_rules_from_package
+from fixit.common.utils import import_distinct_rules_from_package, LintRuleCollectionT
LINT_CONFIG_FILE_NAME: Path = Path(".fixit.config.yaml")
diff --git a/fixit/common/full_repo_metadata.py b/fixit/common/full_repo_metadata.py
index 4c6dc765..4ecb0fc2 100644
--- a/fixit/common/full_repo_metadata.py
+++ b/fixit/common/full_repo_metadata.py
@@ -6,7 +6,7 @@
from collections import defaultdict
from dataclasses import dataclass
from itertools import chain, islice
-from typing import TYPE_CHECKING, Dict, Iterable, Mapping, Optional, Set
+from typing import Dict, Iterable, Mapping, Optional, Set, TYPE_CHECKING
from libcst.metadata import FullRepoManager, TypeInferenceProvider
diff --git a/fixit/common/generate_pyre_fixtures.py b/fixit/common/generate_pyre_fixtures.py
index 864ae3bf..aba99f84 100644
--- a/fixit/common/generate_pyre_fixtures.py
+++ b/fixit/common/generate_pyre_fixtures.py
@@ -7,11 +7,11 @@
import json
import tempfile
from pathlib import Path
-from typing import List, cast
+from typing import cast, List
from libcst.metadata.type_inference_provider import (
- PyreData,
_process_pyre_data,
+ PyreData,
run_command,
)
diff --git a/fixit/common/testing.py b/fixit/common/testing.py
index edd6ce82..fb7e6f18 100644
--- a/fixit/common/testing.py
+++ b/fixit/common/testing.py
@@ -6,7 +6,7 @@
import unittest
from dataclasses import dataclass
from pathlib import Path
-from typing import Any, Callable, Dict, Mapping, Optional, Sequence, Type, Union, cast
+from typing import Any, Callable, cast, Dict, Mapping, Optional, Sequence, Type, Union
from libcst.metadata import MetadataWrapper
@@ -14,11 +14,11 @@
from fixit.common.generate_pyre_fixtures import get_fixture_path
from fixit.common.report import BaseLintRuleReport
from fixit.common.utils import (
+ _dedent,
+ gen_type_inference_wrapper,
InvalidTestCase,
LintRuleCollectionT,
ValidTestCase,
- _dedent,
- gen_type_inference_wrapper,
)
from fixit.rule_lint_engine import lint_file
diff --git a/fixit/common/tests/test_autofix.py b/fixit/common/tests/test_autofix.py
index 946d7193..cb71aeb9 100644
--- a/fixit/common/tests/test_autofix.py
+++ b/fixit/common/tests/test_autofix.py
@@ -7,7 +7,7 @@
import libcst as cst
from libcst.metadata import CodePosition, MetadataWrapper
-from libcst.testing.utils import UnitTest, data_provider
+from libcst.testing.utils import data_provider, UnitTest
from fixit.common.autofix import LintPatch
diff --git a/fixit/common/tests/test_full_repo_metadata.py b/fixit/common/tests/test_full_repo_metadata.py
index 48273838..8d3bd850 100644
--- a/fixit/common/tests/test_full_repo_metadata.py
+++ b/fixit/common/tests/test_full_repo_metadata.py
@@ -9,7 +9,7 @@
from pathlib import Path
from subprocess import TimeoutExpired
from typing import Dict, Mapping
-from unittest.mock import MagicMock, call, patch
+from unittest.mock import call, MagicMock, patch
from libcst.metadata import TypeInferenceProvider
from libcst.metadata.base_provider import ProviderT
diff --git a/fixit/common/tests/test_ignores.py b/fixit/common/tests/test_ignores.py
index f3419530..12869da0 100644
--- a/fixit/common/tests/test_ignores.py
+++ b/fixit/common/tests/test_ignores.py
@@ -9,7 +9,7 @@
from typing import Container, Iterable, Tuple
import libcst as cst
-from libcst.testing.utils import UnitTest, data_provider
+from libcst.testing.utils import data_provider, UnitTest
from fixit.common.comments import CommentInfo
from fixit.common.ignores import IgnoreInfo
diff --git a/fixit/common/tests/test_imports.py b/fixit/common/tests/test_imports.py
index bd9e0f37..21756fef 100644
--- a/fixit/common/tests/test_imports.py
+++ b/fixit/common/tests/test_imports.py
@@ -11,11 +11,11 @@
from fixit.common.config import get_lint_config, get_rules_from_config
from fixit.common.utils import (
- DuplicateLintRuleNameError,
- LintRuleNotFoundError,
dedent_with_lstrip,
+ DuplicateLintRuleNameError,
find_and_import_rule,
import_rule_from_package,
+ LintRuleNotFoundError,
)
diff --git a/fixit/common/tests/test_insert_suppressions.py b/fixit/common/tests/test_insert_suppressions.py
index 4e1101bb..0bb3c263 100644
--- a/fixit/common/tests/test_insert_suppressions.py
+++ b/fixit/common/tests/test_insert_suppressions.py
@@ -5,12 +5,12 @@
from typing import Iterable
-from libcst.testing.utils import UnitTest, data_provider
+from libcst.testing.utils import data_provider, UnitTest
from fixit.common.insert_suppressions import (
+ insert_suppressions,
SuppressionComment,
SuppressionCommentKind,
- insert_suppressions,
)
from fixit.common.utils import dedent_with_lstrip
diff --git a/fixit/common/tests/test_line_mapping.py b/fixit/common/tests/test_line_mapping.py
index 019ab0f0..c8b44332 100644
--- a/fixit/common/tests/test_line_mapping.py
+++ b/fixit/common/tests/test_line_mapping.py
@@ -7,7 +7,7 @@
from io import BytesIO
from typing import Mapping
-from libcst.testing.utils import UnitTest, data_provider
+from libcst.testing.utils import data_provider, UnitTest
from fixit.common.line_mapping import LineMappingInfo
from fixit.common.utils import dedent_with_lstrip
diff --git a/fixit/common/tests/test_report.py b/fixit/common/tests/test_report.py
index 23dce97e..b607ed20 100644
--- a/fixit/common/tests/test_report.py
+++ b/fixit/common/tests/test_report.py
@@ -8,7 +8,7 @@
from pathlib import Path
import libcst as cst
-from libcst.testing.utils import UnitTest, data_provider
+from libcst.testing.utils import data_provider, UnitTest
from fixit.common.report import AstLintRuleReport, BaseLintRuleReport, CstLintRuleReport
diff --git a/fixit/common/tests/test_unused_suppressions.py b/fixit/common/tests/test_unused_suppressions.py
index ac891d7c..03f837bd 100644
--- a/fixit/common/tests/test_unused_suppressions.py
+++ b/fixit/common/tests/test_unused_suppressions.py
@@ -7,7 +7,7 @@
import libcst as cst
from libcst.metadata import MetadataWrapper
-from libcst.testing.utils import UnitTest, data_provider
+from libcst.testing.utils import data_provider, UnitTest
from fixit.common.base import CstContext, CstLintRule, LintConfig
from fixit.common.comments import CommentInfo
@@ -15,10 +15,10 @@
from fixit.common.line_mapping import LineMappingInfo
from fixit.common.report import CstLintRuleReport
from fixit.common.unused_suppressions import (
+ _compose_new_comment,
+ RemoveUnusedSuppressionsRule,
UNUSED_SUPPRESSION_CODES_IN_COMMENT_MESSAGE,
UNUSED_SUPPRESSION_COMMENT_MESSAGE,
- RemoveUnusedSuppressionsRule,
- _compose_new_comment,
)
from fixit.common.utils import dedent_with_lstrip
from fixit.rule_lint_engine import _get_tokens, _visit_cst_rules_with_context
diff --git a/fixit/common/unused_suppressions.py b/fixit/common/unused_suppressions.py
index 8f8a9739..389ed953 100644
--- a/fixit/common/unused_suppressions.py
+++ b/fixit/common/unused_suppressions.py
@@ -3,7 +3,7 @@
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
-from typing import Collection, List, Sequence, cast
+from typing import cast, Collection, List, Sequence
import libcst as cst
from libcst.metadata import ParentNodeProvider, PositionProvider
diff --git a/fixit/common/utils.py b/fixit/common/utils.py
index b20b56aa..1c429436 100644
--- a/fixit/common/utils.py
+++ b/fixit/common/utils.py
@@ -12,7 +12,7 @@
from dataclasses import dataclass
from pathlib import Path
from types import ModuleType
-from typing import Dict, List, Optional, Set, Type, Union, cast
+from typing import cast, Dict, List, Optional, Set, Type, Union
import libcst as cst
from libcst._add_slots import add_slots
diff --git a/fixit/rule_lint_engine.py b/fixit/rule_lint_engine.py
index 0944cac3..27e6065f 100644
--- a/fixit/rule_lint_engine.py
+++ b/fixit/rule_lint_engine.py
@@ -7,7 +7,7 @@
import tokenize
from dataclasses import dataclass
from pathlib import Path
-from typing import Collection, List, Optional, Sequence, Type, cast
+from typing import cast, Collection, List, Optional, Sequence, Type
import libcst as cst
from libcst.metadata import MetadataWrapper
diff --git a/fixit/rules/await_async_call.py b/fixit/rules/await_async_call.py
index 84c521bd..af2fd713 100644
--- a/fixit/rules/await_async_call.py
+++ b/fixit/rules/await_async_call.py
@@ -3,7 +3,7 @@
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
-from typing import Dict, Optional, Sequence, Union, cast
+from typing import cast, Dict, Optional, Sequence, Union
import libcst as cst
import libcst.matchers as m
diff --git a/fixit/rules/no_namedtuple.py b/fixit/rules/no_namedtuple.py
index 05763380..8e1a6a7e 100644
--- a/fixit/rules/no_namedtuple.py
+++ b/fixit/rules/no_namedtuple.py
@@ -6,7 +6,7 @@
from typing import List, Optional, Sequence, Tuple
import libcst as cst
-from libcst import MaybeSentinel, ensure_type, parse_expression
+from libcst import ensure_type, MaybeSentinel, parse_expression
from libcst.metadata import QualifiedName, QualifiedNameProvider, QualifiedNameSource
from fixit import CstLintRule, InvalidTestCase as Invalid, ValidTestCase as Valid
diff --git a/fixit/rules/use_is_none_on_optional.py b/fixit/rules/use_is_none_on_optional.py
index aa96345e..94ac9761 100644
--- a/fixit/rules/use_is_none_on_optional.py
+++ b/fixit/rules/use_is_none_on_optional.py
@@ -3,7 +3,7 @@
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
-from typing import Dict, List, Optional, Union, cast
+from typing import cast, Dict, List, Optional, Union
import libcst as cst
import libcst.matchers as m
diff --git a/fixit/tests/test_rule_lint_engine.py b/fixit/tests/test_rule_lint_engine.py
index 48984813..7ed09898 100644
--- a/fixit/tests/test_rule_lint_engine.py
+++ b/fixit/tests/test_rule_lint_engine.py
@@ -6,7 +6,7 @@
from pathlib import Path
import libcst as cst
-from libcst.testing.utils import UnitTest, data_provider
+from libcst.testing.utils import data_provider, UnitTest
from fixit import rule_lint_engine
from fixit.common.base import CstLintRule, LintConfig
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 02cf0a0c..a109fe00 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,8 +1,9 @@
-black>=19.10b0
+black>=21.10b0
codecov>=2.0.15
coverage>=4.5.4
git+https://github.com/jimmylai/sphinx.git@slots_type_annotation
-isort>=4.3.20
+ufmt==1.3
+usort==1.0.0rc1
jupyter>=1.0.0
nbsphinx>=0.7.1
pyre-check==0.9.9; platform_system != "Windows"
diff --git a/tox.ini b/tox.ini
index e2fe5486..6038c60e 100644
--- a/tox.ini
+++ b/tox.ini
@@ -14,8 +14,7 @@ deps =
-rrequirements-dev.txt
commands =
flake8 {posargs}
- isort --check-only {posargs:.}
- black --check {posargs:.}
+ ufmt check {posargs:.}
python -m fixit.cli.run_rules {posargs:fixit}
[testenv:docs]
@@ -30,8 +29,7 @@ deps =
-rrequirements.txt
-rrequirements-dev.txt
commands =
- isort -q {posargs:.}
- black {posargs:.}
+ ufmt format {posargs:.}
python -m fixit.cli.apply_fix {posargs:.}
[testenv:coverage]