2016/10/29(土) [n年前の日記]
#1 [python] Atomエディタにlinter-pylintをインストールしてみたり
Pythonスクリプトの文法チェックをしてくれる pylint というツールがあるのだけど。その pylint をAtomエディタから常時呼び出して結果を表示してくれる、Atom拡張の linter-pylint をインストールしてみたり。環境は Windows10 x64 + Atom 1.11.2。
_linter-pylint
_steelbrain/linter: A Base Linter with Cow Powers
動作には、python、pylint の他に、linter なるAtom拡張も必要らしい。
ちなみに、pylint のインストール方法は、 _2016/10/10の日記 にメモってある。手元のバージョンは以下。
linter と linter-pylint は、Atom の設定ウインドウ?からインストールできる。
これで、何か作業をするたび、下のほうに「この行の書き方、Python文化的にはおかしいぜ」と表示されるようになった。
_linter-pylint
_steelbrain/linter: A Base Linter with Cow Powers
動作には、python、pylint の他に、linter なるAtom拡張も必要らしい。
ちなみに、pylint のインストール方法は、 _2016/10/10の日記 にメモってある。手元のバージョンは以下。
> pylint --version pylint 1.6.4, astroid 1.4.8 Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)]
linter と linter-pylint は、Atom の設定ウインドウ?からインストールできる。
- Ctrl+, を押すか、あるいは Ctrl+Shift+P を押してから「settings view: open」を選べば設定ウインドウ(settings)が開く。
- 左のほうで「Install」を選んで、「linter pylint」とか打ち込めば色々出てくるので、「linter」と「linter-pylint」をインストール。
これで、何か作業をするたび、下のほうに「この行の書き方、Python文化的にはおかしいぜ」と表示されるようになった。
◎ ちょっと厳し過ぎる。 :
これで、書き方がよろしくなさそうなところを教えてもらえるようになったけど。
自作スクリプトを開いてみたら、膨大な警告数で。「なんだこの書き方は!」と何百行も文句を言われてゲンナリしてきた。スクリプトの行数より、pylintが出力した警告のほうが、行数が多い。
例えば…。
_C0103 で、「1文字の変数名はダメだ!」と怒られる。「x = event.pos().x()」と書くだけで怒られちゃうのはキツイ。しかも pylint はグローバル変数相当を認識してくれないようで、そのへん全部「コレ、定数だろ? 定数は全部大文字で書かないとダメだろ!」と怒られる。いや、それ、定数じゃねえよ…。
W0401で、「ワイルドカード(*)で import しちゃダメだ!」と怒られる。「from PySide.QtCore import *」と書くだけで怒られちゃう。
W0602で、「global hoge って書かれてるけど hoge なんて用意されてねえよ!」と怒られる。そもそもグローバル変数相当が認識できてなくて全部定数扱いされてるものだから、global を指定しても全部無いものとして扱われるようで。
W0603で、「そもそも global を使うんじゃねえ!」と怒られる。いや…限界有るだろ…。何が何でもグローバル変数を使うな、と言うなら、各事例はこう書き直せ、てなサンプルでも提示してよ…。
_W0613 で、「使ってない引数があるぞ!」と怒られる。…PySideのWidgetの、事前に用意された、イベントを取る各メソッドの中で、与えられた引数を使わずに処理する場面もたまに出てくるわけで。どうしろと。
W0614で、「お前、ワイルドカード(*)で import したよな? コレとコレとコレとコレと…使ってねえだろ!」と怒られる。…そんなこと言われても。 _PySide.QtCore と _PySide.QtGui だけでもコレだけクラスがあるわけで、コレを全部人力で選別・列挙していけというのかと。どう考えても人力ではなくツール作って自動化すべきだけど、たぶん実際に記述していったらそこだけで長々とした記述になるだろうに。お前、Java になるつもりなの?
E1101が、ちょっとよく分からない。
自作スクリプトを開いてみたら、膨大な警告数で。「なんだこの書き方は!」と何百行も文句を言われてゲンナリしてきた。スクリプトの行数より、pylintが出力した警告のほうが、行数が多い。
例えば…。
_C0103 で、「1文字の変数名はダメだ!」と怒られる。「x = event.pos().x()」と書くだけで怒られちゃうのはキツイ。しかも pylint はグローバル変数相当を認識してくれないようで、そのへん全部「コレ、定数だろ? 定数は全部大文字で書かないとダメだろ!」と怒られる。いや、それ、定数じゃねえよ…。
W0401で、「ワイルドカード(*)で import しちゃダメだ!」と怒られる。「from PySide.QtCore import *」と書くだけで怒られちゃう。
W0602で、「global hoge って書かれてるけど hoge なんて用意されてねえよ!」と怒られる。そもそもグローバル変数相当が認識できてなくて全部定数扱いされてるものだから、global を指定しても全部無いものとして扱われるようで。
W0603で、「そもそも global を使うんじゃねえ!」と怒られる。いや…限界有るだろ…。何が何でもグローバル変数を使うな、と言うなら、各事例はこう書き直せ、てなサンプルでも提示してよ…。
_W0613 で、「使ってない引数があるぞ!」と怒られる。…PySideのWidgetの、事前に用意された、イベントを取る各メソッドの中で、与えられた引数を使わずに処理する場面もたまに出てくるわけで。どうしろと。
W0614で、「お前、ワイルドカード(*)で import したよな? コレとコレとコレとコレと…使ってねえだろ!」と怒られる。…そんなこと言われても。 _PySide.QtCore と _PySide.QtGui だけでもコレだけクラスがあるわけで、コレを全部人力で選別・列挙していけというのかと。どう考えても人力ではなくツール作って自動化すべきだけど、たぶん実際に記述していったらそこだけで長々とした記述になるだろうに。お前、Java になるつもりなの?
E1101が、ちょっとよく分からない。
zoomfit_btn.clicked.connect(self.zoom_fit)てな行で、「E1101 Instance of 'Signal' has no 'connect' member」と怒られてるけど…。 _All codes - PyLint Messages にも説明が無いし。何を怒ってるんだろう…?
◎ ある程度無視するように設定。 :
ということで、こういった警告だらけでは、かえって分かりにくくなりそうなので、無視することにする。
ソースの最初のほうに以下を追加。
このように書いておけば、指定した種類の警告を無視する状態になる。
でも、W0613 あたりは残しておきたいのだけど…。しかし常時表示されていては、警告を出す意味が無いというか、肝心なところを見逃すだろうし…。
そもそも PySide が「addItem()」みたいなメソッド名をつけてるのに、自分が書く部分では「add_item()」みたいな命名規則を強要されるのは…なんだかなあ…。
ソースの最初のほうに以下を追加。
# pylint: disable-msg=C0103,W0401,W0602,W0603,W0613,W0614,E1101あるいは以下。
# pylint: disable=C0103,W0401,W0602,W0603,W0613,W0614,E1101
このように書いておけば、指定した種類の警告を無視する状態になる。
でも、W0613 あたりは残しておきたいのだけど…。しかし常時表示されていては、警告を出す意味が無いというか、肝心なところを見逃すだろうし…。
そもそも PySide が「addItem()」みたいなメソッド名をつけてるのに、自分が書く部分では「add_item()」みたいな命名規則を強要されるのは…なんだかなあ…。
[ ツッコむ ]
以上です。