piapia123
es

Formateador de código VBScript

Formato

Todo se ejecuta en tu navegador: no se sube nada

Entrada
Arrastra un archivo aquí para cargarlo
Resultado

Reindenta el código VBScript. La profundidad se calcula emparejando palabras clave de bloque: `Sub`, `If … End If`, `For … Next`, `Do … Loop`, `Select Case … End Select`. ⚠️ Conviene decir una cosa con claridad: esta página no tiene árbol de sintaxis. Las otras siete herramientas de formato de lenguajes de este sitio (Python, Ruby, Java, C, C#, PHP, Perl) sí analizan tu código con tree-sitter, y el analizador da los límites de bloque. VBScript no puede: no existe una gramática hecha. Las colecciones públicas de gramáticas de tree-sitter no lo incluyen, y la única gramática de VBA en npm es un complemento nativo que no corre en un navegador. Así que aquí se recurre al emparejamiento de palabras clave. Es mucho mejor que contar llaves: reconoce palabras clave falsas dentro de cadenas y comentarios (`"End If"` no cierra nada), reconoce el `If` de una sola línea (`If x Then y = 1` no tiene `End If`) y entiende las continuaciones con `_` al final. Pero no puede responder a preguntas como «¿a qué bloque pertenece esta `}`». Con código que ya es sintácticamente incorrecto, el sangrado de aquí puede no coincidir con tu intención, mientras que en los otros siete los límites de bloque siguen viniendo del analizador. Esto se dice tal cual, sin esconderlo. ⚠️ Solo cambia el espacio al principio de cada línea; ni un carácter del interior. Las continuaciones, las cadenas y los comentarios no se tocan nunca. La ventaja es que no descarga nada (los otros siete traen un archivo de gramática de entre unos cientos de KB y 5 MB), así que funciona en cuanto la abres.

Funciones

  • Sangra emparejando Sub / Function / If / For / Do / While / Select Case / With / Class
  • Reconoce el If de una sola línea (`If x Then y = 1` no abre un bloque)
  • Las palabras clave dentro de cadenas y comentarios no se emparejan
  • Las líneas continuadas con `_` al final se conservan tal como están
  • Solo cambia el espacio inicial; ni un carácter del interior de la línea
  • Sangrado con 2 espacios, 4 espacios o tabulador
  • Palabras clave sin distinguir mayúsculas (como el propio VBScript)
  • Salida con resaltado de sintaxis
  • Se ejecuta entero en tu dispositivo: no se sube nada y no hay gramática que descargar

Cómo se usa

  1. Pega el código en el panel izquierdo
  2. Elige el ancho del sangrado
  3. Pulsa Ctrl/⌘ + Enter o haz clic en «Ejecutar»
  4. Copia el resultado

Preguntas frecuentes

¿Es lo mismo que los formateadores de Python / Java de este sitio?
No, y la diferencia de capacidad es real, así que la digo sin rodeos. Aquellos usan tree-sitter para construir un árbol de sintaxis, y la profundidad de cada línea sale de la estructura gramatical a la que pertenece: el analizador sabe qué `}` cierra qué bloque. Para VBScript no existe una gramática utilizable (las colecciones públicas de tree-sitter no lo incluyen, y la única gramática de VBA en npm es un complemento nativo que no corre en un navegador), así que esta usa emparejamiento de palabras clave: reconoce pares como `If … End If` y `For … Next` y de ahí deduce la profundidad. La diferencia se nota con código sintácticamente incorrecto: un árbol de sintaxis sigue diciéndote dónde está el límite del bloque, mientras que el emparejamiento de palabras clave solo te dice cuál es la primera palabra de la línea. Así que si el código ya está mal formado, el sangrado de aquí puede no coincidir con tu intención.
Mi código usa If de una sola línea, ¿se va a descolocar?
No. En VBScript, `If x Then y = 1` no tiene `End If`; tratarlo como apertura de bloque empujaría cada línea siguiente más y más adentro. El criterio aquí es si la línea termina en `Then`: `If x Then` abre un bloque y `If x Then y = 1` no. Una forma como `If x Then ' nota` sigue contando como bloque: el comentario se quita antes de decidir.
¿Pueden tomarse por estructura las palabras clave dentro de cadenas y comentarios?
No. Antes de ninguna decisión estructural se quitan los comentarios y se entienden los literales de cadena: el `End If` de `s = "End If"` no es una palabra clave, y `' End Sub` es un comentario de línea entera. Las comillas dobles dentro de una cadena (`"he said ""hi"""`) se tratan como una sola comilla escapada, según la regla del propio VBScript, así que la cadena no termina antes de tiempo.
¿Va a cambiar lo que hace mi código?
No. Solo se toca el espacio en blanco al principio de cada línea: ni un carácter del interior, ni reordenación, ni reajuste de ancho, ni borrado de líneas, nada dentro de cadenas ni comentarios. Las líneas continuadas con `_` al final se conservan enteras, porque ese sangrado es tuyo y rehacerlo partiría una sentencia en dos. Por lo mismo, no puede añadir sintaxis que falte. Es una herramienta de sangrado, no de reparación.

Herramientas relacionadas