Convenciones¶
Comentarios¶
Al mínimo. Un comentario sobrevive solo si dice algo que el código no puede:
- Una decisión contraintuitiva que alguien "arreglaría".
findTagEnddevuelve-1en vez detext.length; devolver el final del documento parece más tolerante y es mucho peor. - Un orden que es el bug.
::tiene que comprobarse antes que:enFRAMEWORK_PREFIXES; ordenar ese array alfabéticamente rompe Alpine en silencio. - Un guardia que parece redundante y es rendimiento.
text[i] === '{'antes deskipDjangoBlockcorre una vez por carácter sobre documentos enteros. - Dónde vive una responsabilidad a propósito, y por qué no está en el sitio más evidente.
Todo lo demás fuera: narrativas de cabecera, docstrings que repiten el nombre del campo, y la historia del bug que cada línea defiende. Eso va en el mensaje del commit — se lee una vez, cuando hace falta.
En ficheros de test, cero. Si un test necesita un comentario para entenderse, el nombre del test está mal; arregla el nombre.
Mensajes de commit¶
Cuenta el bug y su consecuencia. Es lo que alguien necesita cuando un git blame
le deja en una línea que no entiende.
Fuera el recuento de tests (ya lo dice el CI), las re-explicaciones de un diagnóstico que diste en un commit anterior, y las listas de cada subcaso. Diez commits no deberían necesitar doscientas líneas de cuerpo entre todos.
Conventional commits. Sin atribución a IA ni trailers de coautoría.
Código¶
Factorías de regex, nunca constantes compartidas. Una regex /g arrastra
lastIndex mutable; una instancia compartida deja que la iteración de un
llamante corrompa el cursor de otro.
Un solo lector canónico por pregunta. Dos lectores de la misma sintaxis
divergen, y la divergencia es invisible hasta que una entrada concreta llega
solo a uno de ellos. Los tags y atributos se leen por tag-scanner.ts, y por
nada más.
Offsets dentro del núcleo, Position en la frontera. La aritmética de
líneas se rompe con tags multilínea.
Los atributos de framework no son props. @click, ::class, x-on:, hx-
y v- son de Alpine, HTMX y Vue. Django no los ve, así que no deben reportarse
como prop desconocida ni pueden satisfacer una obligatoria.
Documentos¶
README.md y CHANGELOG.md se quedan en la raíz: el Marketplace lee el README
de la raíz del paquete y nada más, y GitHub renderiza los dos ahí. El material
de referencia vive en docs/ y queda excluido del .vsix.
Las imágenes del README tienen que ser URLs absolutas de
raw.githubusercontent.com. El Marketplace no resuelve rutas relativas, e
images/ no viaja en el paquete.