Saltar a contenido

views/

La barra lateral: el árbol de componentes, sus distintivos y el webview de detalle.

component-tree.ts

Construye un trie de N niveles a partir de los tags punteados, así que atoms.forms.input anida tres. Un nodo puede ser carpeta y componente a la vez — la convención de índice de Cotton hace que button/index.html sea <c-button />, o sea que button puede tener hijos y ser componente él mismo.

El filtro por tag vive aquí, no en la caja que lo edita. matchesFilter compara contra el tag punteado completo, que es por lo que atoms y button llegan los dos a atoms.button. Déjalo así: comparar solo con la etiqueta de la fila rompería toda búsqueda punteada.

setFilter dispara una reconstrucción completa y no un refresco quirúrgico, porque el conjunto de coincidencias cambia de estructura y hay que recorrer de nuevo los items cacheados.

tree-decorations.ts

Los distintivos cuelgan de un esquema de URI cotton: a través de FileDecorationProvider. Es la única forma de colorear una fila del árbol por severidad — TreeItem no tiene API para eso.

Un componente muestra un solo número: el recuento de su severidad más alta, con tope 9+. El desglose completo va en la descripción de la fila.

component-detail.ts y source-highlight.ts

Un webview y su resaltador. El resaltador está hecho a mano y sin dependencias porque la gramática es pequeña y acotada: tres delimitadores de Django, pares de tag y atributo HTML, y el vocabulario de anotaciones.

Escapa todo lo que emite y corre con los scripts deshabilitados. Los tramos de atributo salen de scanTagAttributes, así que el panel clasifica :size y ::class igual que los diagnósticos.

Añadir cosas al árbol

Los items se cachean por ruta completa en _items, que es lo que hace posibles los refrescos quirúrgicos con fire(item) — VS Code solo actualiza items que él mismo emitió. Si añades un tipo de item nuevo, tiene que entrar en esa caché o sus refrescos se ignorarán en silencio.