万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Boo Language Advent Calendar 2012 20日目 Title:「pep8コマンドをBooでもやる!」

URL: http://atnd.org/events/34622

PythonのPEP8というPythonのコーディングスタイルがいい。
しかもpep8コマンドを使えば整形してくれます。

Booにもないかな?ってBooのGoogleグループで聞くと、

・元

The pep8 command uses a pretty forgiven parser and will work on most Boo code. 

regards,
/imv

・shinriyo超訳

pep8コマンドは多めに見てくれるパーサで動くー、ほとんどのBooコードで動くっちゃ。

forgivenをfortgotの過去分詞と勘違いしました。それは"forgotten"でしたね。ちなみに9つの実のうちの1つ。

こんな感じにインストールした

127 Assets/Scripts git:(master) ▶ workon pyfes2012 
(pyfes2012)Ξ ~VIRTUAL_ENV git:(master) ▶ pep8
zsh: command not found: pep8
(pyfes2012)↑127 ~VIRTUAL_ENV git:(master) ▶ pip install pep8
Downloading/unpacking pep8
  Downloading pep8-1.3.4.tar.gz (44Kb): 44Kb downloaded
  Running setup.py egg_info for package pep8
    
Requirement already satisfied (use --upgrade to upgrade): setuptools in ./lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg (from pep8)
Installing collected packages: pep8
  Running setup.py install for pep8
    
    Installing pep8 script to /Users/xxxxx/.virtualenvs/pyfes2012/bin
Successfully installed pep8
Cleaning up...
(pyfes2012)Ξ ~VIRTUAL_ENV git:(master) ▶ 

virtualenvとvirtualenvwrapperを使ってます。使い方はこの本を買おう。

実験します。
以前書いたと思われるコード
・Test.boo(元のコード)

import UnityEngine

class Test (MonoBehaviour):

    def Start ():
        a = OverloadOperator(10, 200)
        b = OverloadOperator(30, 20)
        c = a + b
        Debug.Log("a:"+a.mA+","+a.mB + " b:"+b.mA+","+b.mB + " c:"+c.mA+","+c.mB)

MacOS X版だけかもしれないが、このようにドラッグ&ドロップでパス入力が面倒くさいのでこのように入力します。

・実行!

pep8 --show-source /Users/xxxx/boo_test/Assets/Scripts/Test.boo 
    • show-sourceオプションつけるとソースの誤差が見える

あれ?自動整形はしてくれなかったっけ?
この警告どおりに直すのは面倒くさい。

「pep8 autofix」でググる
autopep8が出る。

このように"-i"オプションをつける。※つけないとコンソール上にケッカソース出るだけ

autopep8 -i /Users/xxxx/boo_test/Assets/Scripts/Test.boo

こうすれば自動に整形して上書いてくれる

・Test.boo(変更後のコード)

import UnityEngine


class Test (MonoBehaviour):

    def Start():
        a = OverloadOperator(10, 200)
        b = OverloadOperator(30, 20)
        c = a + b
        Debug.Log("a:" + a.mA + "," + a.mB + " b:" + b.mA + "," +
                  b.mB + " c:" + c.mA + "," + c.mB)

お!!!!!きちんと改行された

って、クラス名の後のスペースは無視か?


ちなみに、こんな感じ↓にしてもpep8もautopep8も無視された・・・

class Test          (MonoBehaviour):

ここのサンプルはクラス名と(の間に何もないから何もなくす!
http://oldriver.org/python/pep-0008j.html

では次へ!