小村の開発環境構築(16) Pythonのリンターフォーマッター設定

  • こんばんは!小村だよ!

  • 今日は前回やったpython系のインストールの続きをやっていくよ!

  • よろしくね!



やること

  1. python拡張機能をインストール
  2. autopep8 flake8のインストール
  3. autopep8 flake8の設定(失敗)
  4. autopep8 flake8の再設定



前提条件

  • Ubuntuにリモート接続していること(これまでの環境構築参照)



手順

python拡張機能をインストール

  • 前回やっておくべきだったけど失念してたよ!

  • VSCode拡張機能pythonをインストールします!

  • これしとかないとVSCode上でpython独自の設定とかができないよ!

f:id:kom314_prog:20210720235237p:plain



autopep8 flake8のインストール

  • 次はフォーマッタとリンター!

  • 開発するうえでフォーマッターとリンターは最初に着手したいよねー

  • というわけでautopep8 flake8をインストールするよ!

  • 参考:python PEP8 VSCodeでautopep8とflake8を適用する

pip install autopep8
pip install flake8
f:id:kom314_prog:20210720234600p:plain



autopep8 flake8の設定(失敗)


  • pylintの無効化
f:id:kom314_prog:20210721000628p:plain


  • pythonのlintingの有効化
f:id:kom314_prog:20210721001452p:plain


  • flake8の有効化
f:id:kom314_prog:20210721001558p:plain


  • ファイル保存時のlinting
f:id:kom314_prog:20210721001723p:plain


  • フォーマットのstyleをautopep8に設定
f:id:kom314_prog:20210721001849p:plain


  • 保存時の自動生計を有効化
f:id:kom314_prog:20210721002001p:plain


  • 1行文字数制限を外す
f:id:kom314_prog:20210721002934p:plain


  • 最終的に追加されたのは下図でした。半分くらいはデフォルトで設定されてたね
f:id:kom314_prog:20210721002910p:plain


import math, sys;

def example1():
    ####This is a long comment. This should be wrapped to fit within 72 characters.
    some_tuple=(   1,2, 3,'a'  );
    some_variable={'long':'Long code lines should be wrapped within 79 characters.',
    'other':[math.pi, 100,200,300,9876543210,'This is a long string that goes on'],
    'more':{'inner':'This whole logical line should be wrapped.',some_tuple:[1,
    20,300,40000,500000000,60000000000000000]}}
    return (some_tuple, some_variable)
def example2(): return {'has_key() is deprecated':True}.has_key({'f':2}.has_key(''));
class Example3(   object ):
    def __init__    ( self, bar ):
     #Comments should have a space after the hash.
     if bar : bar+=1;  bar=bar* bar   ; return bar
     else:
                    some_string = """
                       Indentation in multiline strings should not be touched.
Only actual code should be reindented.
"""
                    return (sys.path, some_string)
f:id:kom314_prog:20210721002541p:plain
f:id:kom314_prog:20210723104421p:plain


  • いや、autopep8後にflake8のlintが反応するんだが????

  • えっ、それを解消してくれる参考サイトではなかったの……?

  • 文字数制限はまぁいいとして、改行数が許せぬ……c

autopep8とflake8の再設定

  • 文句言ってても仕方ないので修正しまーす!

  • 色々回って最終的に下記設定に落ち着きました

  • 設定先もリモートタブじゃなくてワークスペースタブに変更

  • 上の設定まじで意味ないな……不要と追記しておこう。

{
    "[python]": {
      "editor.tabSize": 4,
      "editor.formatOnSave": true,
      "editor.formatOnPaste": false,
      "editor.formatOnType": false,
    },
    "python.linting.enabled": true,
    "python.linting.lintOnSave": true,
    "python.linting.pylintEnabled": false,
    "python.linting.flake8Enabled": true,
    "python.linting.flake8Args": [
        "--max-line-length=120",
    ],
    "python.formatting.provider": "autopep8",
    "python.formatting.autopep8Args": [
        "--aggressive",
        "--aggressive",
    ],
    "files.autoSave": "afterDelay",
    "files.autoSaveDelay": 10000,
}
f:id:kom314_prog:20210723114002p:plain
f:id:kom314_prog:20210723114040p:plain



  • 倍近くの行に成形されるね!

  • 上の設定と大きく変わってるのは、--aggressive2つ付けてるところかな

  • 整形後のコードを見ると、下記とかひどいので、こういうのは都度調整だね

            some_string = """
                       Indentation in multiline strings should not be touched.
Only actual code should be reindented.
"""



おわりに

  • 今日はこの辺でおわりますー!

  • すんなり言ってたらアプリ作成までやりたかったんだけどねー次に回す!

  • ではでは、ちゃお~~~!