7

在我的日常工作中,我主要花时间在 Python/Django 和 Objective-C/CocoaTouch 和 js/jQuery 上。

我选择的编辑器是vimPython/Django 和 js/jQuery 以及xcodeObjective-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类继承自TemplateResponseMixinView类......我继续深入挖掘......等等......

问题是,这是一个非常低效和缓慢的过程(手动“遵循”类层次结构并一路打开每个文件)。

所以问题是 - 是否有一种简单的方法/UI 工具(或其他可视化解决方案)可以解析特定项目中的 Python 代码并可视化类层次结构,然后我可以通过“单击”我有兴趣阅读的特定类轻松检查关于?

请注意,我知道 IPython shell,但它似乎不像可视化显示工具那样用户友好。

例如,F-Script在 Objective-C/iOS/Mac 编程的世界中,它不仅提供了一个 shell(很像 python 或 IPython shell),而且为开发人员提供了一种可视化的方式来内省类层次结构。

参考截图:-

在此处输入图像描述

那么是否有一个类层次结构可视化工具(专门针对 Python,但如果它是通用的并且可以用于不同的语言就更好了)???在阅读开源代码时,你有什么方法可以有效地加快速度???

更新

根据下面的建议,我尝试了ctagsvim 插件taglist,并且能够:TlistOpen像这样在 vim 中打开一个侧缓冲区:-

在此处输入图像描述

这看起来真的很酷,因为:TlistOpen现在基本上向我展示了我当前打开的缓冲区中可用的所有类和函数。

我现在的问题是,当我尝试Ctrl]在光标打开时执行此操作时TemplateView,出现以下错误:-

在此处输入图像描述

我究竟做错了什么?是因为我的 django 源代码在一个virtualenv?或者我需要做些什么来让ctags/ taglist“意识到”django源代码?

4

3 回答 3

4

标签确实是一个很好的开始。(上面的东西太多了,所以我只会为您提供一个额外的关键字供您搜索:ctags。)

在 Vim 中,最终(在基本情况下)Ctrl+]转到类/函数定义并Ctrl+T返回。

于 2012-04-28T08:03:50.760 回答
3

我一直在为 vim使用带有taglist的exuberant ctags 。用于跳转到当前窗口中的类定义,跳转到拆分窗口中的定义。ctrl]ctrlw]

你可以通过 homebrew 安装 exuberant ctags:

brew install ctags

一定要使用/usr/local/binhomebrew 安装的那个,而不是旧ctags/usr/bin.

跳过 Python 文件的索引变量和导入也很有帮助--python-kinds=-vi~/.ctags

另一种选择是使用的变体,cscope或者pyscope尽管您必须在cscope启用选项的情况下编译您的 vim。

于 2012-04-28T08:14:55.163 回答
3

Python 附带的 IDLE 编辑器有一个有效的类浏览器,可以有效地导航给定模块中的所有内容。我相信在检查模块pyclbr 模块的帮助下,修改该工具以导航完整的类层次结构并不难。

于 2012-04-28T08:22:48.347 回答