Herramientas para ayudar a los desarrolladores a leer la jerarquía de clases más rápido

Principalmente paso tiempo en Python / Django y Objective-C / CocoaTouch y js / jQuery en el curso de mi trabajo diario.

Mi editor preferido es vim para Python / Django y js / jQuery y xcode para Objective-C / CocoaTouch.

Uno de los cuellos de botella en mi velocidad de desarrollo es el ritmo en el que leo el código existente, en particular las bibliotecas de código abierto que utilizo.

En Python / Django, por ejemplo, cuando encuentro algunas características nuevas introducidas por los desarrolladores de django, siento curiosidad y comienzo a explorar el código base manualmente. Por ejemplo, cuando se introdujeron vistas basadas en clases desde django 1.3 en adelante, referencia – https://docs.djangoproject.com/en/dev/topics/class-based-views/ – Veré el código de ejemplo que se muestra:

 from django.views.generic import TemplateView class AboutView(TemplateView): template_name = "about.html" 

Y pruébalo en uno de mis proyectos. Lo que es más importante, tengo curiosidad por lo que sucede detrás de la escena, por lo que profundizaré en el código fuente:

 # 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 

Desde aquí, lo rastrearé hacia atrás hasta el archivo django / views / generic / base.py y descubriré exactamente qué hace la clase 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) 

Y aquí se muestra que TemplateView clase TemplateView hereda de las clases TemplateResponseMixin y View … y continúo investigando más … y así sucesivamente …

El problema es que este es un proceso extremadamente ineficiente y lento (para “seguir” las jerarquías de clase manualmente y abrir cada archivo a lo largo del camino).

Entonces, la pregunta es: ¿existe una forma fácil / herramienta de interfaz de usuario (u otra solución visual) que analice el código Python en un proyecto particular y visualice jerarquías de clases que luego puedo inspeccionar fácilmente haciendo “clic” en una clase específica que me interesa leer? ¿acerca de?

Tenga en cuenta que conozco el shell de IPython, pero no parece tan fácil de usar como una herramienta de visualización.

Por ejemplo, hay F-Script en el mundo de la progtwigción de Objective-C / iOS / Mac, que no solo proporciona un shell (como Python o IPython shell), sino que también proporciona una forma visual para que los desarrolladores miren introspectivamente las jerarquías de clases.

Captura de pantalla de referencia: –

introduzca la descripción de la imagen aquí

Entonces, ¿existe una herramienta de visualización de jerarquía de clases (específicamente para Python, pero incluso mejor si es genérica y se puede usar para diferentes idiomas)? ¿Cuáles son sus métodos para ponerse al día de manera eficiente al leer el código fuente de fuente abierta?

ACTUALIZADO

Según el siguiente consejo, probé ctags y vim plugin taglist y pude utilizar :TlistOpen para abrir un búfer lateral en vim como este:

introduzca la descripción de la imagen aquí

Esto se ve realmente genial como :TlistOpen ahora esencialmente me muestra todas las clases y funciones que están disponibles en mi búfer abierto actualmente.

Mi problema ahora es que cuando bash hacer Ctrl ] mientras mi cursor está en TemplateView , aparece el siguiente error:

introduzca la descripción de la imagen aquí

¿Qué estoy haciendo mal? ¿Es porque mi código fuente de django está en un virtualenv ? ¿O hay algo específico que debo hacer para que ctags / taglist “conozcan” el código fuente de django?

Las tags son un muy buen comienzo. (Hay demasiadas cosas por todas partes, así que solo te proporcionaré una palabra clave adicional para buscar: ctags).

En Vim, termina (en el caso básico) con Ctrl +] para ir a una definición de clase / función y Ctrl + T para regresar.

El editor IDLE incluido con Python tiene un navegador de clases efectivo que navega de manera eficiente todo en un módulo dado. Creo que no sería difícil modificar esa herramienta para navegar por una jerarquía de clases completa con la ayuda del módulo de inspección y el módulo pyclbr .

He estado usando ctags exuberantes con taglist para vim. Use ctrl ] para saltar a la definición de clase en la ventana actual, ctrl w ] para saltar a la definición en una ventana dividida.

Puede instalar ctags exuberantes a través de homebrew:

 brew install ctags 

Asegúrese de usar el instalado en /usr/local/bin por homebrew, no los ctags antiguos en /usr/bin .

También es útil poner --python-kinds=-vi en ~/.ctags para omitir las variables de indexación e importar archivos de Python.

Otra alternativa sería utilizar una variante de cscope o pyscope aunque debe tener su vim comstackdo con la opción cscope habilitada.