¿Software para buscar a través de sus propias bibliotecas de código fuente?

Escribo/modifico código en múltiples formatos de archivo como Python, MySQL, Perl, HTML, CSS, PHP, JavaScript, AutoHotkey, etc.

A menudo busco en mi biblioteca personal de código fuente ejemplos de sintaxis o lógica compleja para reutilizarlos en código nuevo. A veces busco cadenas crípticas como =~, porque estoy buscando una expresión regular en particular en uno de mis programas Perl.

A veces busco código existente usando Copernic , pero desafortunadamente solo puede buscar palabras e ignora automáticamente cualquier sintaxis de programación. También carece de codificación de color de sintaxis de lenguaje de programación.

Mi pregunta es: ¿Cómo busca en sus propias bibliotecas de código fuente? ¿Qué software es bueno para esto? Copernic es imperfecto, pero sigue siendo la mejor herramienta que he encontrado para este propósito.

Las soluciones grep y similares a grep son buenas, pero estoy más interesado en programas con una interfaz de usuario y disponibles en Windows.

Uso Total Commander (también puedes usar Double Commander], que es gratis) y presiono ALT+ F7para buscar. Por supuesto, obtengo muchas más funciones que solo buscar desde TC, y nunca uso el Explorador de Windows.
También puede probar Search Monkey , aunque tiene más funciones para Linux que para Windows.

Respuestas (6)

El motor de búsqueda de código fuente (SCSE) de Semantic Designs utiliza escáneres específicos del idioma para dividir cada archivo fuente en sus lexemas constituyentes, indexa todo y luego proporciona una búsqueda basada en GUI en la base del código en términos de elementos del idioma.

Esto tiene la ventaja de ignorar los espacios en blanco (específicos del idioma) y los comentarios en las búsquedas, excepto donde desee incluirlos, pudiendo buscar números y cadenas en términos de sus valores reales de forma independiente del idioma en lugar de una variante de texto específica. , etc. La indexación permite realizar búsquedas en millones de líneas y decenas de miles de archivos casi al instante.

Por el contrario, una solución similar a grep, que utiliza un FSA extremadamente rápido, abrirá y leerá todos los archivos en algún directorio raíz. Hacer que grep ignore todos los archivos que no son texto puede ser difícil si hay muchas extensiones o no hay extensiones. Abrir decenas de miles de archivos y leerlos con grep lleva mucho tiempo (decenas de segundos). Obtiene muchos falsos positivos porque escanea el código del programa y los comentarios. No puede ignorar fácilmente los espacios en blanco (saltos de línea o comentarios) en una expresión regular, por lo que son difíciles de escribir.

En resumen, SCSE busca más rápido que grep, utilizando consultas que son más fáciles de escribir, con menos resultados falsos positivos.

  • Indexa archivos de acuerdo con lexemas específicos del idioma
  • Las consultas se pueden establecer en una combinación de entidades genéricas del idioma ("identificador") o específicas del idioma ("cadena de imágenes" en COBOL)
  • Las consultas omiten espacios en blanco y comentarios
  • Menos falsos positivos, búsqueda mucho más rápida que grep
  • La capacidad de registro permite registrar coincidencias
  • Haga clic en los resultados para ver el texto encontrado en la fuente del archivo
  • Se puede configurar para iniciar el editor en archivos encontrados en ubicaciones encontradas
  • Indexer se ejecuta en Windows; los resultados se pueden compartir entre varios usuarios
  • La GUI basada en Java se ejecuta en Windows y Linux

Captura de pantalla de la búsqueda en la base de código de Linux

Divulgación completa: soy el director en Semantic Designs

Yo uso grep . Mientras almaceno todo mi código en la misma ruta en mi sistema de archivos, abro mi shell de Linux (pero eso también funcionará a través de cygwin en Windows) y cd al directorio.

Grep es una herramienta de búsqueda de texto muy sofisticada que puede buscar todo tipo de texto y no tiene límite para lo que desea buscar.

Tu =~sería buscado así:

grep -r "=~" .

Mientras que .hace referencia al directorio actual, -rhace que la búsqueda sea recursiva. Entonces, si tiene sus programas agrupados por idioma, puede ingresar a su directorio perl y buscar solo allí.

grep tiene desventajas, la primera sería la velocidad. No tiene un índice, por lo que cada búsqueda recorre secuencialmente todo su código hasta que se encuentra algo. En general, tengo una idea aproximada de dónde estaría el código específico que busco, por lo que solo reviso los directorios apropiados.

Otro inconveniente es la complejidad. Para volverte bueno con este enfoque, necesitarás pasar algún tiempo con ellos.

grep se vuelve más y más útil cuantos más comandos de linux/unix conoce. Por ejemplo, podría usar findpara encontrar todos los archivos que desea (como todos los archivos perl) y luego usarlos greppara saber si hay algo allí. Yo (como desarrollador de Java) a veces necesito buscar un archivo de clase dentro de un jar, pero tengo millones de jars por ahí y no sé dónde está. Así que tengo una línea de comando que encuentra archivos jar, enumera su contenido y genera solo aquellos que tienen el archivo requerido. Podría usar la misma técnica para buscar también a través del contenido de los archivos, etc.

Entonces, para este problema específico: grep. Pero en general recomiendo toda la cadena de herramientas que viene con tu Unix.

Tiendo a usar Agent Ransack para esto.

  • Libre
  • Microsoft Windows XP (SP3)/2003/Vista/2008/7/2012/8/8.1
  • Admite expresiones regulares en el nombre del archivo y el texto de la consulta
  • Vista previa de la línea coincidente de los archivos dentro de la ventana de búsqueda
  • Opciones para exportar resultados y guardar criterios de búsqueda

Captura de pantalla

Captura de pantalla de la ventana Agent Ransack

Puedes probar CodeSearch ya que está hecho específicamente para tal propósito. Las características incluyen:

  • multiplataforma
  • Fuente abierta
  • Indexa sus archivos de código fuente para una búsqueda más rápida
  • Admite expresiones regulares
  • Admite la búsqueda de sintaxis de código
  • Tiene un paquete Emacs para que pueda ejecutarlo desde dentro de su editor

Aquí hay algunas herramientas útiles:

  • ack que es una herramienta como grep, optimizada para programadores,
  • rak es un reemplazo de grep en Ruby puro,
  • grin puede ayudar a buscar directorios llenos de código fuente (basado en Python),
  • Silver Searcher es una herramienta para buscar código (un clon de Ack, pero desde entonces los conjuntos de características han divergido ligeramente).
Vale la pena mencionar que grin es compatible con python re completo y, de forma predeterminada, omite los directorios .git, .svn, etc.

He aprendido a depender en gran medida de la búsqueda rápida y el reemplazo de Link

Al principio era muy escéptico sobre esto porque la interfaz de usuario se ve muy antigua (2003, funciona con Windows 10), pero después de usarlo varias veces me di cuenta de que el programa era la respuesta a todos mis problemas y se puede usar para todo tipo de propósitos

  • buscar y/o reemplazar
  • en todos los tipos de archivos
  • en varias subcarpetas
  • freeware para licencia privada
  • licencia comercial 25€
  • búsqueda rápida
  • declaraciones de ruta de archivo, archivo y (múltiples) líneas
  • guardar sesión de búsqueda
  • iniciar varias sesiones de búsqueda simultáneas

ingrese la descripción de la imagen aquí