Skip to main content

Por qué ast-grep

Algunas convenciones son estructurales: “nunca llames a esta función aquí”, “pasa siempre esta opción”. Un modelo puede detectarlas, pero también puede pasar una por alto o imaginar otra. Una regla de ast-grep compara el árbol sintáctico, así que una coincidencia es prueba. Un hallazgo que cita una regla que coincidió en la ejecución omite la verificación del modelo y se publica. El ejemplo es un servicio de checkout con una convención: los montos son centavos enteros manejados por el helper Money, nunca floats.

Paso 1 — Escribe las reglas en el repositorio

Haz commit de un archivo de reglas en tu rama por defecto. Kodus lo lee de la rama de destino de cada pull request, así que un pull request no puede relajar las reglas con las que se verifica.
rules/money.yml
El message de cada regla es lo que el comentario cita como regla, así que escríbelo para quien lee el pull request. Escribe también el razonamiento una vez en un doc, para los casos que un patrón no puede detectar:
docs/money.md

Paso 2 — Crea el agente

New agent → Templates → Blank, y luego:
Name
Instructions

Paso 3 — Apúntalo a las reglas

En Tools → Advanced → Structural search (ast-grep rules), escribe la ruta en una sola línea:
La ayuda lista las reglas que encontró: 2 rules in rules/money.yml: no-parsefloat-amount, no-tofixed-amount. También puedes pegar el YAML inline en lugar de una ruta; las reglas viven entonces en el agente, no en el repositorio.

Paso 4 — Comentarios

Haz clic en Save.

Paso 5 — Try it

Ejecuta Try it en un pull request que agregue un parseFloat sobre un precio. El hallazgo queda kept, y su comentario cita la regla:
Un hallazgo que el agente levantó a partir de docs/money.md cita el doc en su lugar, y se descarta si la cita no está en el doc de la rama de destino.

Checklist

  • Archivo de reglas con commit en la rama por defecto
  • Cada regla tiene un id, una rule y un message legible
  • La ayuda del campo lista todas las reglas
  • Los globs cubren solo el código al que aplica la convención
  • Probado en un pull request con una violación conocida
Consulta Reglas de ast-grep para los detalles del campo.