機略戦記

Maneuver warfare

Atom + python3.5 type hinting

はじめに

Python3.5以降に導入されたType HintsをAtomで便利に使うための設定についてのメモしておきます。

前提

Type Hintsはプログラムの処理内容に影響を与えない。 その代わり、mypy( mypy - Optional Static Typing for Python )などの静的解析ツールを使って、アノテーション通りの型が渡されているかチェックする事が出来る。

やりたい事

AtomでType Hintsを含むコードを書く時に、

  1. アノテーションと矛盾するコードを書いたらその場で警告を出して欲しい。
  2. Type Hintsを含むコードを正しくSyntax highlightして欲しい。

やり方

要約だけ先に書いておくと、

  1. は、linter-mypy 入れたら出来ました。
  2. は、magicpython 入れたら出来ました。

結果としてこんな感じになりました。

f:id:Shinya_131:20171011231739p:plain

1. Type hintsに基づいた警告をその場で出す。

Linter ( AtomLinter )という便利なツールがあり、このツールを使うと現在editしているソースコードが'規約'に違反していないかチェックして、違反していれば警告を出してくれる。どんな'規約'に従ってチェックをしてくれるのかと言うと、そこはLinter-pluginと呼ばれるplugin次第で色々チェックできて、例えば linter-python-pep8 であれば、PEP8に違反していないかチェックしてくれる。

LinterのMypy pluginを入れれば型アノテーションに対するチェックが出来る。

atom.io

2. Type Hintsを含むコードを正しくSyntax highlightする。

とても残念な事に、Atomに標準で入っているlanguage-pythonが提供するsyntax highlightはType Hintsに対応していない。( ※2017/10/11現在 )

この問題は、language-pythonのISSUE上で2015年6月から議論されている。

Support for Type Hints (PEP484) · Issue #94 · atom/language-python · GitHub

とりあえず結論としては、MagicPythonをインストールしましょう。

atom.io

補足と感想

Atom: language-pythonのType hints対応について: タイトルしか読んでないけど「デフォルトでMagicPython使うようにしよう」みたいな議論が起きてそうです。Replace language-python with MagicPython by 1st1 · Pull Request #13877 · atom/atom · GitHub

Type Hintsについて: 関数の戻り値を説明する時、「listが返る。listの要素としてはstrもしくはNoneが入る」とコメントするより-> List[Optional[str]]と書くほうがずっと簡潔で正確で、しかも機械でチェックする事も出来てとても便利ですね。