Инструменты, помогающие разработчикам быстрее читать иерархию классов

В основном я трачу время на Python/Django и Objective -C/CocoaTouch и js/jQuery в ходе моей повседневной работы.

Я предпочитаю редактор vimдля Python/Django и js/jQuery и xcodeдля Objective -C/CocoaTouch.

Одним из узких мест в моей скорости разработки является скорость, с которой я читаю существующий код, особенно библиотеки с открытым исходным кодом, которые я использую.

Например, в 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

Отсюда,Я проследю его в обратном направлении до файла django/views/generic/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наследуется от классов TemplateResponseMixinи View... и я продолжаю копать дальше... и так далее...

Проблема в том, что это чрезвычайно неэффективный и медленный процесс ("следовать" иерархии классов вручную и открывать каждый файл по пути ).

Итак, вопрос -в том, существует ли простой способ/инструмент пользовательского интерфейса (или другое визуальное решение ), которое анализирует код Python в конкретном проекте и визуализирует иерархии классов, которые я могу затем легко проверить, «щелкнув» о конкретном классе, о котором мне интересно читать?

Обратите внимание , что я знаю об оболочке IPython, но она не кажется такой -удобной для пользователя, как средство визуального отображения.

Например, есть F-Scriptв мире программирования Objective -C/iOS/Mac, который не только предоставляет оболочку (, очень похожую на оболочку python или IPython ), но и предоставляет визуальный способ для разработчикам проанализировать иерархию классов.

Справочный снимок экрана:-

enter image description here

Итак, существует ли средство визуализации иерархии классов -(специально для Python, но еще лучше, если оно универсально и может использоваться для разных языков )??? Каковы ваши методы повышения скорости при чтении открытого исходного кода???

ОБНОВЛЕНО

В соответствии с приведенным ниже советом я попробовал ctagsи плагин vim taglist, и я смог использовать :TlistOpen, чтобы открыть боковой буфер в vim, как это:-

enter image description here

Это выглядит действительно круто, поскольку :TlistOpenтеперь по существу показывает мне все классы и функции, доступные в моем открытом буфере.

Теперь моя проблема заключается в том, что когда я пытаюсь выполнить Ctrl] , пока мой курсор находится на TemplateView, я получаю следующую ошибку:-

enter image description here

Что я делаю неправильно? Это потому, что мой исходный код django находится в virtualenv? Или есть что-то конкретное, что мне нужно сделать, чтобы ctags/ taglist«знали» об исходном коде django?

7
задан Calvin Cheng 28 April 2012 в 08:41
поделиться