También disponible en: English · Português · Français · العربية
Generador de .editorconfig
Genera un archivo .editorconfig y pruébalo: pega una ruta y mira qué sección aporta cada ajuste y cuáles quedaron sobrescritas.
Qué es un archivo .editorconfig
Un archivo .editorconfig le dice a todos los editores de un proyecto que se pongan de acuerdo en lo aburrido: tabuladores o espacios, cuántos, qué final de línea, si se recortan los espacios sobrantes. Vive en tu repositorio, la mayoría de los editores lo leen sin necesidad de plugin y zanja discusiones que si no se repetirían en cada revisión de código.
El formato es deliberadamente pequeño. Un encabezado de sección es un patrón entre corchetes, las líneas de debajo son asignaciones de propiedades, y el archivo que está en la raíz del proyecto se marca con root = true para que la búsqueda se detenga ahí. Eso es casi todo, y por eso la gente escribe uno en un minuto y luego pasa una hora preguntándose por qué cierto archivo no recibe los ajustes que esperaba.
Esta herramienta hace las dos mitades. Editas el archivo arriba y, debajo, le das una ruta y te dice exactamente qué sección aporta cada propiedad, porque esa es la pregunta que un .editorconfig no puede responder con solo leerlo.
Cómo se usa
- Parte del archivo que se muestra. Es un punto de partida sensato con las propiedades que quieren casi todos los proyectos. Edítalo directamente: añade secciones, cambia valores, borra lo que no necesites.
- Escribe una ruta para probar. Relativa a donde viva el .editorconfig, con barras normales. Prueba con uno de tus archivos problemáticos: ese que sospechas que no está recibiendo los ajustes que pusiste.
- Mira qué sección ha ganado. Cada propiedad aplicada aparece con el patrón que la aportó, y cada sección coincidente muestra cuántas de sus propiedades han sobrevivido. Lo que se aparte de la especificación se señala debajo.
Gana la última, y lo específico no cuenta nada
Esta es la regla que le cuesta una tarde a mucha gente. Cuando dos secciones coinciden con un archivo, la escrita más abajo aporta el valor. Lo específico que parezca el patrón no influye en absoluto: no hay puntuación, ni coincidencia más específica, nada de la maquinaria que CSS o las tablas de rutas te han enseñado a esperar.
Así que una sección amplia al final del archivo sobrescribe en silencio las cuidadosas secciones por lenguaje que hay encima. Si añades una regla general de limpieza al final de un .editorconfig largo, acabas de cambiar el comportamiento de todo lo anterior para cualquier propiedad que fijes. El comprobador de esta página enseña justo eso: cada sección coincidente indica cuántas de sus propiedades han llegado de verdad a la respuesta final.
Entre archivos la dirección se invierte, y conviene guardarlo aparte en la cabeza. El editor arranca en el archivo que estás editando y sube por el árbol de directorios, leyendo los más cercanos al final para que ganen, y se detiene en cuanto llega a uno que declara root = true. Olvida esa línea y un .editorconfig de un directorio superior —o de tu carpeta personal— seguirá aplicándose a tu proyecto.
La sintaxis de patrones no es la de gitignore
Los patrones se parecen a los de gitignore y no lo son, que es la segunda fuente fiable de sorpresas. Junto al asterisco y la interrogación de siempre, que se detienen en el separador de directorios mientras el asterisco doble no, EditorConfig tiene alternancia con llaves y algo que gitignore nunca ha tenido: un rango de enteros. El patrón file{1..3}.txt coincide con file2.txt pero no con file4.txt, y cualquiera de los límites puede ser negativo.
Ese rango tiene truco, y falla en silencio. El primer número tiene que ser menor que el segundo, así que {3..1} no es un rango y coincide literalmente con esos cinco caracteres. Nada te avisa. La misma trampa está en una llave de un solo elemento: {s1} coincide con un archivo que se llame literalmente {s1}, no con uno llamado s1, y la especificación lo dice en un paréntesis fácil de saltarse al leer.
Los corchetes son más estrictos de lo que parecen, y este caso pilló también a la implementación de referencia. La especificación dice que todo carácter dentro de los corchetes es literal, de modo que [a-c] es el conjunto de tres caracteres a, guion y c, y no coincide con b. Casi cualquier otro lenguaje de patrones del mundo lee a-c como un rango, que es justo por lo que merece la pena saber que aquí no.
Por último, que un patrón lleve barra decide hasta dónde llega. Uno que la lleva se mide desde el directorio donde está el .editorconfig; uno que no puede coincidir a cualquier profundidad por debajo. Por eso [*.py] cubre todo tu árbol mientras que [src/*.py] cubre exactamente un directorio.
Limitaciones honestas
Esta página implementa la especificación, y los editores no la implementan de forma uniforme. Las siete propiedades que hay aquí son las que define la especificación y para las que el soporte es razonablemente fiable, pero un editor puede ignorar cualquiera de ellas, y varios de los más populares necesitan un plugin antes siquiera de leer el archivo. Si un ajuste no surte efecto, comprueba que tu editor admite esa propiedad antes de dar por hecho que el archivo está mal.
El comprobador también trabaja sobre el archivo que tiene delante. Un proyecto real puede tener varios .editorconfig a distintas profundidades, y la respuesta para una ruta depende de todos ellos y de dónde se detenga la búsqueda. Aquí se modela un archivo y las reglas dentro de él, que es donde casi siempre está la parte confusa.
Algo que salió al construir esto merece contarse: la implementación de referencia y esta herramienta discrepan en las expresiones entre corchetes que contienen caracteres de patrón, y la especificación da la razón a esta. Su propio ejemplo resuelto es un patrón que la referencia falla. Es un rincón que nadie escribe a propósito, pero recuerda que los casos límite de un formato de configuración los decide lo que tu editor lleve dentro.
¿Por qué es gratis?
Todo funciona en tu navegador. Comparar una ruta con un patrón no cuesta nada en tu propia máquina, así que no hay servidor que pagar ni motivo para pedirte una cuenta.
Nada de lo que escribes se sube, se guarda ni se registra. La estructura de directorios y los nombres de archivo dicen bastante sobre una base de código privada, y la forma fiable de mantener eso en privado es no enviarlo a ninguna parte.