Tools, mit denen Entwickler die Klassenhierarchie schneller lesen können

Während meiner täglichen Arbeit beschäftige ich mich hauptsächlich mit Python / Django und Objective-C / CocoaTouch und js / jQuery.

Mein bevorzugter Redakteur istvim für Python / Django und js / jQuery undxcode für Objective-C / CocoaTouch.

Einer der Engpässe bei meiner Entwicklungsgeschwindigkeit ist die Geschwindigkeit, mit der ich vorhandenen Code lese, insbesondere Open-Source-Bibliotheken, die ich verwende.

Wenn ich zum Beispiel in Python / Django auf einige neue Funktionen stoße, die von Django-Entwicklern eingeführt wurden, werde ich neugierig und beginne, die Codebasis manuell zu erkunden. Wenn zum Beispiel klassenbasierte Ansichten ab Django 1.3 eingeführt wurden, beziehen Sie sich auf:https://docs.djangoproject.com/de/dev/topics/class-based-views/ - Ich werde den gezeigten Beispielcode überprüfen:

<code>from django.views.generic import TemplateView

class AboutView(TemplateView):
    template_name = "about.html"
</code>

Und probiere es an einem meiner Projekte aus. Noch wichtiger ist, ich bin gespannt, was sich hinter den Kulissen abspielt, also werde ich mich mit dem Quellcode befassen.

<code># 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
</code>

Von hier aus werde ich es rückwärts in die Datei django / views / generic / base.py verfolgen und herausfinden, was genauTemplateView Klasse macht: -

<code>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)
</code>

Und hier ist es zeigt, dassTemplateView Klasse erbt vonTemplateResponseMixin undView Klassen ... und ich grabe weiter ... und so weiter ...

Das Problem ist, dass dies ein äußerst ineffizienter und langsamer Prozess ist (Klassenhierarchien manuell zu "folgen" und jede Datei auf dem Weg zu öffnen).

Die Frage ist also: Gibt es einen einfachen Weg / ein UI-Tool (oder eine andere visuelle Lösung), das Python-Code in einem bestimmten Projekt analysiert und Klassenhierarchien visualisiert, die ich dann einfach überprüfen kann, indem ich auf eine bestimmte Klasse "klicke", die ich lesen möchte? Über?

Hinweis Ich kenne die IPython-Shell, aber das scheint nicht so benutzerfreundlich wie ein visuelles Anzeigetool zu sein.

Zum Beispiel gibt esF-Script in der Welt der Objective-C / iOS / Mac-Programmierung, die nicht nur eine Shell (ähnlich wie Python oder IPython-Shell) bereitstellt, sondern Entwicklern eine visuelle Möglichkeit bietet, Klassenhierarchien zu überprüfen.

Referenz-Screenshot: -

Gibt es ein Visualisierungstool für Klassenhierarchien (speziell für Python, aber noch besser, wenn es generisch ist und für verschiedene Sprachen verwendet werden kann)? Was sind Ihre Methoden, um beim Lesen von Open Source-Quellcode effizient auf den neuesten Stand zu kommen?

AKTUALISIERTE

Per Hinweis unten habe ich es ausprobiertctags und Vim Plugintaglist und ich konnte verwenden:TlistOpen So öffnen Sie einen Seitenpuffer in vim:

Das sieht so richtig geil aus:TlistOpen Jetzt werden im Wesentlichen alle Klassen und Funktionen angezeigt, die in meinem derzeit geöffneten Puffer verfügbar sind.

Mein Problem ist jetzt, wenn ich es versucheStrg] während mein Cursor eingeschaltet istTemplateViewIch erhalte die folgende Fehlermeldung: -

Was mache ich falsch? Liegt es daran, dass mein Django-Quellcode in einervirtualenv? Oder gibt es etwas Spezielles, das ich machen muss?ctags/taglist "kennen" Sie den Django-Quellcode?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage