2011年6月15日水曜日

web2py を Eclipse で開発するための設定について③ Unresolved import対策

ちょっと間が空いてしまいましたが、web2py フレームワークのアプリケーションを Eclipse で開発するための設定について、続けて書きます。

同じ話題の過去記事
web2py を Eclipse で開発するための設定について① 手動でEclipseを設定
web2py を Eclipse で開発するための設定について② スクリプトでEclipseを設定

過去2回の記事で web2py のアプリケーション開発を Eclipse で行うための設定方法の説明をしました。今回は Eclipse のコードの編集画面で Unresolved import と表示される問題の対策を行います。

Unresolved import について

web2py アプリケーションのソースを Eclipse で開くと、コードアナライザによる Unresolved import が大量に表示される。

このままでも問題がないのだが、目障りだし、本当にコードに問題があった時に把握しづらい。

Eclipse(PyDev) ではコメント行として下のコードを入れることにより、Unresolved import のワーニング表示を無視することができる。

#@UndefinedVariable
これは通常、該当する行で Ctrl+1 (クイックフィックス)を押して、@UndefinedVariable を選択することにより挿入する。

しかし全ての行に @UndefinedVariable を挿入するには、量が多いため現実的ではない。

Unresolved import 対策について

web2py のモジュールがソース上では読み込まれないため Unresolved import が表示される問題の対応は、モジュールを読み込むという単純な対策だ。ただ対象となるモジュールの数は多いし、本当に読み込んだら問題がある。このため実行されないコードとして次のようにソースの先頭に記述する。

if 0: 
    import gluon
    global cache; cache = gluon.cache.Cache()
    global LOAD; LOAD  = gluon.compileapp.LoadFactory()
    import gluon.compileapp.local_import_aux as local_import #@UnusedImport
    from gluon.contrib.gql import GQLDB #@UnusedImport
    from gluon.dal import Field #@UnusedImport

  (長いので以下、省略)
このためのツールも公開されている。

Unresolved import 対策ツールの導入

ツールは次のページにある。

参考: neo-insert-imports

ページのツールには2種類ある。一つはコマンドラインからファイルを指定して実行するもの。もう一つは、Eclipse 内でテンプレートとして登録するものだ。今回、Eclipse のテンプレートとして登録する方を簡単に紹介する。

設定方法

  1. ダウンロードページ から、 import_static.xml というファイルをダウンロードする。
  2. テンプレートのインポート
    Eclipse メニューの
    [ウィンドウ] > [設定] をクリックすると、設定ダイアログが開く。
    ダイアログの左パネルから、
    [PyDev] > [エディタ] > [テンプレート] を選択し、[インポート] ボタンを押す。
    ファイル選択ウィンドウが開くので、import_static.xml を選択し [開く] ボタンを押す。
    import_static というモジュールがインポートされたのを確認し、ダイアログの[OK]ボタンを押す。

使い方

  1. web2py アプリケーションのソースを開き、ソースの先頭の方にカーソルを持っていく。
  2. import_static と入力してから Ctrl+スペース を押すと登録したテンプレートのコードが挿入される。

    もしくはコード補完ポップアップを使ってもよい。例えば、im と入力しコード補完ポップアップが表示されたら、import_static を探す。import_static 表示されない時は、Ctrl+スペース を押すとテンプレートから更に検索してくれる。import_static があったら選択するとコードが挿入される。

    コード補完ポップアップが表示されない時も、Ctrl+スペース を押す。

以上で Unresolved import対策の説明を終わります。個人的には、実行されないコードといってもソースコードを汚すのであまり好きな方法ではありません。しかし、単純だけど有効な方法であることは認めています。