Estás buscando cada llamada a .unwrap() en un código base de Rust porque por fin estás migrando a un manejo de errores adecuado. Haces grep. Obtienes 47 resultados.
Doce están en comentarios (// don't unwrap here). Ocho están en cadenas ("call unwrap() to extract"). Tres son nombres de variables (let unwrap_result = ...). ¿Las llamadas a métodos reales que querías? Sepultadas entre el ruido.
La búsqueda de texto encuentra caracteres, no significado. No puede distinguir una llamada a un método de un comentario, una variable de una cadena literal, Rust de Ruby. Solo coincide con bytes.
Octocode 0.14.0 lo soluciona. Búsqueda estructural — coincidencia de patrones impulsada por AST que realmente entiende tu código. Piensa en grep que sabe lo que está mirando. Sin herramientas adicionales que instalar. Sin archivos de configuración con los que pelear. Solo octocode grep y estás haciendo coincidir estructura, no cadenas.
Por qué la búsqueda de texto se queda corta
La búsqueda de texto trata el código como cualquier otro archivo de texto. No entiende que $VAR.unwrap() debería coincidir con una llamada a método real sobre un Result o Option — no con una subcadena escondida en un comentario de documentación.
La búsqueda estructural conoce la diferencia. Funciona sobre el Árbol de Sintaxis Abstracta — la misma representación que usa tu compilador — así que los patrones coinciden con estructuras de código reales, no con secuencias de caracteres.
Encuentras lo que buscas. Sin falsos positivos. Sin ruido. Solo el código que importa.
Conoce octocode grep
# Buscar todas las llamadas a unwrap() en Rust
octocode grep '$VAR.unwrap()' --lang rust
# Buscar patrones de constructor en JavaScript
octocode grep 'new $CLASS($$$ARGS)' --lang javascript
# Buscar patrones de manejo de errores en Go
octocode grep 'if err != nil { $$$ }' --lang go
La sintaxis de patrones es simple:
$VAR— cualquier nodo AST único (expresión, identificador, lo que sea)$$$ARGS— cero o más nodos (argumentos de función, bloques de instrucciones)- Código literal — coincidencia exacta de estructura
13 lenguajes soportados: Rust, JavaScript, TypeScript, Python, Go, Java, C/C++, PHP, Ruby, Lua, Bash, CSS, JSON.
La capacidad de reescritura
Aquí es donde se pone interesante. La búsqueda estructural no es solo para encontrar — es para refactorizar.
# Vista previa: Reemplazar unwrap() con expect() en todo tu código base
octocode grep '$FUNC.unwrap()' \
--lang rust \
--rewrite '$FUNC.expect("reason")'
# Aplicar los cambios en su lugar
octocode grep '$FUNC.unwrap()' \
--lang rust \
--rewrite '$FUNC.expect("reason")' \
--update-all
La plantilla --rewrite usa metavariables de tu patrón de búsqueda. $FUNC en la reescritura se reemplaza con lo que sea que coincidió con $FUNC en la búsqueda. Refactorización quirúrgica — precisa, automatizada y segura.
Por qué esto importa para la IA: Cuando Claude o Cursor sugiere "deberíamos reemplazar todas estas llamadas a unwrap con manejo de errores adecuado", ahora puede hacerlo realmente — no solo describir el cambio, sino generar el comando exacto para llevarlo a cabo.
Construido para agentes de IA (sin configuración adicional)
La búsqueda estructural está expuesta como una herramienta MCP llamada structural_search. Tu asistente de IA puede usarla directamente:
{
"name": "structural_search",
"description": "AST-based structural code search using ast-grep patterns"
}
Otras herramientas de búsqueda AST necesitan instalación y configuración por separado. La búsqueda estructural de Octocode funciona inmediatamente. Sin CLI de sg para instalar. Sin archivos de reglas. Sin YAML. El patrón va directamente en la consulta.
Los agentes de IA funcionan mejor con menos piezas móviles. Cada dependencia externa es un punto de fallo. Cada archivo de configuración es fricción. La búsqueda estructural en Octocode simplemente... está ahí. Lista.
Qué más hay nuevo en 0.14.0
Arquitectura de búsqueda unificada
Reescribimos el sistema de búsqueda desde cero. La indexación delta consciente de ramas significa que buscar en ramas de funcionalidades ahora fusiona correctamente los resultados con el índice principal — ves lo que hay en tu rama actual más el contexto relevante de main. La arquitectura unificada también trae cobertura de tests donde no había ninguna antes.
Más modelos de embeddings
Añadimos soporte para embeddings MPNet y JinaBERT QK — modelos de alto rendimiento que pegan por encima de su categoría de peso. Para equipos vigilando los costes de la API, estos te dan resultados de búsqueda de calidad con modelos más pequeños y rápidos.
Mejoras del servidor MCP
- Esquemas de herramientas mejorados — Mejores salidas estructuradas para el consumo por IA
- Indexación automática de repositorios — El servidor MCP ahora puede activar la indexación automáticamente cuando detecta repositorios no indexados
- Capa de transporte mejorada — Migrado al SDK oficial
rmcppara mejor estabilidad
Fiabilidad a escala
- Salidas LLM estructuradas estrictas — El modo JSON con validación asegura que las respuestas de IA se analicen correctamente
- Reintentos automáticos — Las operaciones por lotes reintentan ante fallos transitorios
- Mejor procesamiento por lotes — Eficiencia de memoria mejorada para grandes bases de código
Los comandos clear ganan más poder
El comando clear ahora soporta limpieza dirigida:
# Limpiar solo el índice de commits
octocode clear --mode commits
# Limpiar solo los datos de GraphRAG
octocode clear --mode graphrag
Pruébalo ahora
Actualiza a 0.14.0:
# Homebrew
brew upgrade octocode
# O reinstala con el instalador universal
curl -fsSL https://raw.githubusercontent.com/Muvon/octocode/master/install.sh | sh
Luego prueba la búsqueda estructural en tu código base:
# Encuentra patrones dignos de refactorizar
octocode grep 'console.log($ARG)' --lang javascript
# Comprueba lagunas en el manejo de errores
octocode grep '$VAR.unwrap()' --lang rust
# Encuentra patrones de inyección por constructor
octocode grep 'new $CLASS($$$)' --lang typescript
Preguntas frecuentes
¿Qué hace diferente a la búsqueda estructural respecto a las regex?
Las regex coinciden con caracteres. La búsqueda estructural coincide con nodos AST. $VAR.unwrap() encuentra llamadas a métodos reales, no comentarios que contengan esa cadena, no nombres de variables que casualmente incluyan "unwrap", no ejemplos de documentación. Entiende la estructura del código porque analiza el código de la misma forma que tu compilador.
¿Necesito instalar algo más?
No. La búsqueda estructural está integrada en Octocode 0.14.0. Sin herramientas CLI separadas, sin archivos de configuración, sin definiciones de reglas YAML. El comando octocode grep funciona inmediatamente después de la actualización.
¿Puedo usar esto con Claude, Cursor u otros asistentes de IA?
Sí. La búsqueda estructural está expuesta como una herramienta MCP. Cualquier asistente compatible con MCP puede llamarla directamente. El esquema de la herramienta incluye el lenguaje de patrones, así que los asistentes de IA entienden cómo construir consultas válidas.
¿Qué lenguajes están soportados?
Rust, JavaScript, TypeScript, Python, Go, Java, C/C++, PHP, Ruby, Lua, Bash, CSS y JSON. El motor subyacente usa gramáticas de Tree-sitter, así que añadir nuevos lenguajes es sencillo si necesitas uno que no esté en la lista.
¿Cómo funciona --rewrite?
La plantilla de reescritura usa metavariables de tu patrón de búsqueda. Si tu búsqueda es $FUNC.unwrap() y coincide con result.unwrap(), entonces $FUNC captura result. La reescritura $FUNC.expect("reason") se convierte en result.expect("reason"). Ejecuta con --update-all para aplicar cambios en su lugar, o sin él para previsualizar primero.
¿Es seguro ejecutarlo en código de producción?
Siempre previsualiza los cambios antes de aplicarlos. La búsqueda estructural es precisa, pero la precisión no significa que la transformación sea semánticamente correcta para tu caso de uso. Revisa la salida de --rewrite, ejecuta tus tests, haz commit a git primero. La herramienta es quirúrgica — tú sigues siendo responsable de saber qué debe lograr la cirugía.
¿Cómo es el rendimiento?
Rápido. El análisis AST ocurre a través de Tree-sitter, que está diseñado para la capacidad de respuesta del editor. Buscar en un código base de 100.000 líneas lleva segundos, no minutos. La búsqueda está paralelizada entre archivos y la indexación incremental significa que las búsquedas posteriores son más rápidas.
¿Cómo encaja esto con las otras funciones de Octocode?
La búsqueda estructural complementa la búsqueda semántica y GraphRAG. Usa búsqueda semántica cuando sabes qué buscas pero no dónde ("how does authentication work?"). Usa búsqueda estructural cuando conoces el patrón ($USER.auth($TOKEN)). Usa GraphRAG cuando necesitas entender relaciones entre archivos. Juntas cubren el espectro completo de la exploración de código.
Qué sigue
Estamos construyendo hacia una cosa: hacer que las bases de código sean totalmente comprensibles para la IA. La búsqueda estructural es la pieza más reciente, pero viene más.
Patrones de refactorización multi-archivo. Seguimiento de símbolos entre lenguajes. Integración MCP más profunda para que los asistentes de IA no solo puedan encontrar código sino transformarlo con confianza.
Si estás usando Octocode, actualiza a 0.14.0 y prueba octocode grep en tu código base. Si aún no lo estás usando — consíguelo aquí. Es código abierto, se ejecuta localmente, y es lo que usamos cada día para construir Octomind.
Octocode es de código abierto (Apache 2.0) y está disponible en github.com/Muvon/octocode. Construido por Muvon.



