В основном я трачу время на 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 ), но и предоставляет визуальный способ для разработчикам проанализировать иерархию классов.
Справочный снимок экрана:-
Итак, существует ли средство визуализации иерархии классов -(специально для Python, но еще лучше, если оно универсально и может использоваться для разных языков )??? Каковы ваши методы повышения скорости при чтении открытого исходного кода???
ОБНОВЛЕНО
В соответствии с приведенным ниже советом я попробовал ctags
и плагин vim taglist
, и я смог использовать :TlistOpen
, чтобы открыть боковой буфер в vim, как это:-
Это выглядит действительно круто, поскольку :TlistOpen
теперь по существу показывает мне все классы и функции, доступные в моем открытом буфере.
Теперь моя проблема заключается в том, что когда я пытаюсь выполнить Ctrl] , пока мой курсор находится на TemplateView
, я получаю следующую ошибку:-
Что я делаю неправильно? Это потому, что мой исходный код django находится в virtualenv
? Или есть что-то конкретное, что мне нужно сделать, чтобы ctags
/ taglist
«знали» об исходном коде django?