refurb - Python コードベースを改装および近代化するためのツール

(A tool for refurbishing and modernizing Python codebases)

Created at: 2022-07-27 12:13:51
Language: Python
License: GPL-3.0

改装

Python コードベースを改装および近代化するためのツール。

# main.py

for filename in ["file1.txt", "file2.txt"]:
    with open(filename) as f:
        contents = f.read()

    lines = contents.splitlines()

    for line in lines:
        if not line or line.startswith("# ") or line.startswith("// "):
            continue

        for word in line.split():
            print(f"[{word}]", end="")

        print("")

ランニング:

$ refurb main.py
main.py:3:17 [FURB109]: Use `in (x, y, z)` instead of `in [x, y, z]`
main.py:4:5 [FURB101]: Use `y = Path(x).read_text()` instead of `with open(x, ...) as f: y = f.read()`
main.py:10:40 [FURB102]: Replace `x.startswith(y) or x.startswith(z)` with `x.startswith((y, z))`
main.py:16:9 [FURB105]: Use `print() instead of `print("")`

装着

インストールする前に、仮想環境をセットアップすることをお勧めします。

$ pip3 install refurb
$ refurb file.py folder/

注意: Refurb は Python 3.10 のみをサポートしています。Python 3.6 以上のコードをチェックすることはできますが、Refurb 自体は Python 3.10 で実行する必要があります。

小切手の説明

あなたは使用することができます 、 はあなたが検索しようとしているエラーコードです。例えば:

refurb --explain FURB123
FURB123

$ refurb --explain FURB123
Don't cast a variable or literal if it is already of that type. For
example:

Bad:

```
name = str("bob")
num = int(123)
```

Good:

```
name = "bob"
num = 123
```

エラーの無視

エラー 123 を無視するために使用します。エラー コードは、または の形式にすることができます。このフラグは繰り返すことができます。

--ignore 123
FURB123
123

接頭部は、これが組み込みエラーであることを示します。接頭辞はオプションですが、他のすべてのエラー(つまり、)の場合は接頭辞が必要です。

FURB
FURB
ABC123

インラインコメントを使用してエラーを無効にすることもできます。

x = int(0)  # noqa: FURB123
y = list()  # noqa

ここでは、具体的には、その行の FURB123 エラーを無視し、その行のすべてのエラーを無視します。

noqa: FURB123
noqa

再生の構成

コマンドライン引数に加えて、ファイルに設定を追加することもできます。たとえば、次のコマンド ライン引数があるとします。

pyproject.toml

refurb file.py --ignore 100 --load some_module --quiet

ファイル内の次のものに対応します。

pyproject.toml

[tool.refurb]
ignore = [100]
load = ["some_module"]
quiet = true

今あなたが入力する必要があるのは!コマンドライン引数を指定すると、設定ファイル内の既存の設定が上書きされます。

refurb file.py

再生の使用
pre-commit

Refurb を事前コミットと共に使用するには、ファイルに以下を追加します。

.pre-commit-config.yaml

  - repo: https://github.com/dosisod/refurb
    rev: REVISION
    hooks:
      - id: refurb

選択したバージョンまたはSHAに置き換えます(または空白のままにして最新のバージョンを見つけてもらいます)。

REVISION
pre-commit

プラグイン

Refurb用のプラグインのインストールは非常に簡単です:

$ pip3 install refurb-plugin-example

ここで、 はプラグインの名前です。Refurbはインストールされているプラグインを自動的にロードします。

refurb-plugin-example

独自の Refurb プラグインを作成するには、refurb-plugin-example リポジトリで詳細を確認してください。

独自の小切手を書く

Refurbを拡張したいが、本格的なプラグインを作りたくない場合は、コマンドで1回限りのチェックファイルを簡単に作成できます。

refurb gen

このコマンドはユーザー入力を取得するためにファジーファインダーを使用するので、続行する前にfzfをインストールする必要があることに注意してください。

fzf

コマンドを使用して新しいチェックを作成するための基本的な概要を次に示します。

refurb gen

  1. まず、受け入れるノードタイプを選択します。
  2. 次に、自動生成されたファイルを保存する場所を入力します
  3. 新しいファイルにコードを追加する

チェックに何を追加する必要があるかを理解するには、フラグを使用して、特定のファイルのAST表現(つまり、)を確認します。いくつかの例については、フォルダ内のファイルを見てください。

--debug
refurb --debug file.py
refurb/checks/

次に、新しい小切手をロードするには、

refurb file.py --load your.path.here

を使用するときは、通常のPythonモジュールをインポートするのと同じように、引数にドットを使用する必要があることに注意してください。

--load

現像

ローカルでセットアップするには、次のコマンドを実行します。

$ git clone https://github.com/dosisod/refurb
$ cd refurb
$ make install
$ make install-local

テストは、 を使用して一度にすべてを実行することも、 、 などを使用して各ツールを単独で実行することもできます。

make
make black
make flake8

単体テストは、または で実行できます。

pytest
make test

エンドツーエンド (e2e) テストは遅いため、実行時には実行されません。それらを実行するには、実行する必要があります。

make
make test-e2e

なぜこれは存在するのですか?

私はコードレビューをするのが大好きです:私は何かを取って、それをより良く、より速く、よりエレガントにするのが好きです。多くの静的分析ツールはすでに存在しますが、コードをよりエレガントに、読みやすく、より現代的にすることに焦点を当てているようには見えません。そこでRefurbの出番です。

Refurbは、Rustの組み込みリンターであるclippyに大きく触発されています。

改装ではないもの

Refurbはスタイル/タイプチェッカーではありません。これは、リントしてバグを見つけるための防御の最前線としてではなく、良いコードをさらに良くするためのものです。