2012-04-28 7 views
7

私は毎日の仕事の中でPython/DjangoとObjective-C/CocoaTouchとjs/jQueryにほとんど時間を費やしています。開発者がクラス階層をより速く読むのに役立つツール

私の選択したエディタは、Python/Djangoとjs/jQueryの場合はvim、Objective-C/CocoaTouchの場合はxcodeです。

私の開発スピードのボトルネックの1つは、既存のコード、特に私が使用するオープンソースライブラリを読むペースです。

たとえば、Python/Djangoでは、django開発者が導入したいくつかの新機能に遭遇したときに私は興味があり、手動でコードベースを調べ始めます。たとえば、クラスベースのビューは以降のDjango 1.3から導入されたとき、参照 - - https://docs.djangoproject.com/en/dev/topics/class-based-views/私は、コード例に示すチェックアウトします:

from django.views.generic import TemplateView 

class AboutView(TemplateView): 
    template_name = "about.html" 

をそして、私のプロジェクトのひとつでそれを試してみてください。さらに重要なことは、私は舞台裏で何が起こるのかについての好奇心、私はソースコードに掘るだろう -

# django/views/generic/__init__.py file 

from django.views.generic.base import View, TemplateView, RedirectView 
from django.views.generic.dates import (ArchiveIndexView, YearArchiveView, MonthArchiveView, 
            WeekArchiveView, DayArchiveView, TodayArchiveView, 
            DateDetailView) 
from django.views.generic.detail import DetailView 
from django.views.generic.edit import FormView, CreateView, UpdateView, DeleteView 
from django.views.generic.list import ListView 


class GenericViewError(Exception): 
    """A problem in a generic view.""" 
    pass 

ここから、私はbase.py /ジャンゴ/ビュー/一般的なファイルに後方にそれをトレースしますそしてTemplateViewクラスはまったく同じものを見つける: -

class TemplateView(TemplateResponseMixin, View): 
    """ 
    A view that renders a template. 
    """ 
    def get_context_data(self, **kwargs): 
     return { 
      'params': kwargs 
     } 

    def get(self, request, *args, **kwargs): 
     context = self.get_context_data(**kwargs) 
     return self.render_to_response(context) 

そして、ここではそれが

...ように TemplateViewクラスは TemplateResponseMixinViewクラスから継承...と私はさらに掘り続け...とすることを示しているのです

問題は、これは非常に効率が悪く、処理が遅い(クラス階層を手動で "追跡して、各ファイルを途中で開く")ことです。

したがって、特定のプロジェクトでPythonコードを解析し、特定のクラスを「クリック」することで簡単に検査できるクラス階層を視覚化する、簡単な方法/ UIツール(または他の視覚的ソリューション)私は読むことに興味がありますか?

ノート私はIPythonシェルを認識していますが、それは視覚的な表示ツールとしてユーザーフレンドリーではないようです。

例えば、Objective-C/iOS/Macプログラミングの世界ではF-Scriptがあります。これは、シェル(PythonやIPythonシェルに似ています)を提供するだけでなく、開発者がクラス階層をイントロスペクトするための視覚的な方法を提供します。

リファレンススクリーンショット: -

enter image description here

だから、クラス階層の可視化ツール(Python用には具体的には、それは一般的なだと異なる言語のために使用することができる場合であっても良い)があり???オープンソースのソースコードを読むときに効率的に起きるあなたの方法は何ですか?以下のアドバイスパー

を更新し

、私はctagsとvimのプラグインtaglistを試してみたし、私はこのようなvimの中でサイドバッファを開く:TlistOpenを使用することができた: -

enter image description here

:TlistOpenは、現在開いているバッファで利用できるすべてのクラスと関数を基本的に示しているので、これは本当にクールです。私のカーソルがTemplateView上にある間

私の問題は、今私はCtrlキー]を行うにしようとしたときということですが、私は次のエラーを取得する: -

enter image description here

私が間違って何をしているのですか?私のdjangoのソースコードがvirtualenvにあるからですか?または、私が行う必要のある具体的なものがありますctags/taglist "ジャンク"のソースコードを "認識"していますか?

+1

スタックオーバーフローのためには構築的ではありませんが、http://programmers.stackexchange.comの話題はかなりあります。 –

+0

Ok。どのように移行するのですか? –

+0

(私は@Kay Zhuの推薦するように)奇妙なctagsを試して、あなたの現在のenv/virtualenvのソースからタグを生成するコマンド/スクリプトがあると思います。 – cerberos

答えて

4

タグは本当に良いスタートです。

Vimでは、(基本的な場合)Ctrl +]で終了します。(これは、あまりにも多くのものがその上にあるので、検索するキーワードは1つだけです。をクラス/関数定義に移動し、Ctrl + Tを返します。

+0

先端に感謝します。 –

+0

Chrisさん、 'Ctrl +]をしようとしたときにエラーが発生しました。 –

+0

非常に手動のプロセスですが、それを動作させるように管理しました。あなたは、python virtualenvのコンテキストでctags/taglistプラグインの使用についてもっと知りたいですか?リファレンス - http://stackoverflow.com/questions/10362085/ctags-with-taglist-in-vim-and-python-virtualenv –

3

私はexuberant ctagsを使用しており、vimにはtaglistが使用されています。分割ウィンドウで定義にジャンプし] wがCTRL、現在のウィンドウでクラス定義にジャンプするCTRL]を使用してください。

あなたは自作経由であふれんばかりのctagsをインストールすることができます。

brew install ctags 

は自作で/usr/local/binに設置1、いない/usr/binの古いctagsを使用してください。

--python-kinds=-vi~/.ctagsに設定すると、インデックス変数をスキップしてPythonファイルをインポートすると便利です。

cscopeまたはpyscopeの亜種を使用することもできますが、vimにcscopeオプションが有効になっている必要があります。

+0

こんにちは、私は 'ctags'とvimプラグイン' taglist'をインストールしました。それは有望に見えますが、私は 'virtualenv'を使っていますので、' ctags'と 'taglist'がブラウズしたいクラスを見つけることができるかどうかに影響しますか?上記の質問を私が見ているエラーで更新する... –

+1

@CalvinChengはい、 'ctags -R'を使用して、' virtualenv'ディレクトリの親ディレクトリと同じ 'pwd'にあることを覚えておいてください: ) –

3

Pythonに含まれているIDLEエディタには、特定のモジュール内のすべてを効率的にナビゲートするan effective class browserがあります。 とpyclbr moduleの助けを借りて完全なクラス階層をナビゲートするために、そのツールを変更することは難しくないと思います。

+1

こんにちはRaymond!フィレンツェのEuroPython 2011からあなたを覚えています。 ここで私の質問にあなたの応答を見てうれしい!クール! –

関連する問題