在我的日常工作中,我主要花时间在 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
类......我继续深入挖掘......等等......
问题是,这是一个非常低效和缓慢的过程(手动“遵循”类层次结构并一路打开每个文件)。
所以问题是 - 是否有一种简单的方法/UI 工具(或其他可视化解决方案)可以解析特定项目中的 Python 代码并可视化类层次结构,然后我可以通过“单击”我有兴趣阅读的特定类轻松检查关于?
请注意,我知道 IPython shell,但它似乎不像可视化显示工具那样用户友好。
例如,F-Script
在 Objective-C/iOS/Mac 编程的世界中,它不仅提供了一个 shell(很像 python 或 IPython shell),而且为开发人员提供了一种可视化的方式来内省类层次结构。
参考截图:-
那么是否有一个类层次结构可视化工具(专门针对 Python,但如果它是通用的并且可以用于不同的语言就更好了)???在阅读开源代码时,你有什么方法可以有效地加快速度???
更新
根据下面的建议,我尝试了ctags
vim 插件taglist
,并且能够:TlistOpen
像这样在 vim 中打开一个侧缓冲区:-
这看起来真的很酷,因为:TlistOpen
现在基本上向我展示了我当前打开的缓冲区中可用的所有类和函数。
我现在的问题是,当我尝试Ctrl]在光标打开时执行此操作时TemplateView
,出现以下错误:-
我究竟做错了什么?是因为我的 django 源代码在一个virtualenv
?或者我需要做些什么来让ctags
/ taglist
“意识到”django源代码?