VS Code extension para trabajar más rápido con proyectos React:
- 🔗 CSS Pointer: ve desde
className/iden JSX/TSX directo a la definición en tus archivos CSS. - 🧩 React Props Sync: sincroniza automáticamente las props de componentes React entre la definición y todas sus referencias en el proyecto.
Desde un archivo:
export function Button() {
return <button className="primary-button" id="main-cta">Click</button>;
}La extensión:
-
Detecta
className="primary-button"yid="main-cta". -
Busca en tus archivos CSS (según los globs configurados).
-
Te permite:
- Go to Definition (F12) sobre el nombre de la clase/id.
- Ver un hover con el bloque CSS completo.
Ejemplo de CSS objetivo:
.primary-button {
padding: 0.75rem 1.25rem;
border-radius: 999px;
}
#main-cta {
font-weight: 600;
}- Atributos:
className,class,id. - Archivos: por defecto cualquier
**/*.css, excluyendonode_modules.
Configuración (vía settings.json):
Te ayuda a mantener la definición del componente y sus usos sincronizados.
Si tienes:
// RequestServiceView.tsx
function RequestServiceView({ user, fuerte, suerte }) {
// ...
}
export default RequestServiceView;Y en otro archivo:
<Route
path="/solicitarServicio"
element={<RequestServiceView user={user} />}
/>Al guardar el archivo de la definición:
- La extensión ve que
RequestServiceViewtiene props:user,fuerte,suerte. - Busca todos los usos
<RequestServiceView ... />. - Añade las props faltantes con un TODO:
<Route
path="/solicitarServicio"
element={
<RequestServiceView
user={user}
fuerte={/* TODO: completar */}
suerte={/* TODO: completar */}
/>
}
/>Antes de aplicar los cambios, muestra un diálogo de confirmación.
Si editas un uso:
<RequestForm user={user} juan={user} />Y tienes una definición:
const RequestForm = ({ user }) => { ... };
// o
function RequestForm({ user }) { ... }Al guardar:
-
La extensión detecta que en el uso hay una prop nueva:
juan. -
Busca la definición del componente (
RequestForm). -
Actualiza la definición:
const RequestForm = ({ user, juan }) => { ... }
-
Propaga la nueva prop a otros usos
<RequestForm />que no la tengan.
También con diálogo de confirmación antes de tocar nada.
Definiciones tipo:
// function
function MyComponent({ foo, bar }) {
// ...
}
export function MyComponent({ foo, bar }) {
// ...
}
export default function MyComponent({ foo, bar }) {
// ...
}
// arrow
const MyComponent = ({ foo, bar }) => {
// ...
};
export const MyComponent = ({ foo, bar }) => {
// ...
};
export default const MyComponent = ({ foo, bar }) => {
// (poco común, pero cae igual)
};Usos tipo:
<MyComponent foo={1} bar={2} />
<MyComponent foo={foo} />
<Route element={<MyComponent foo={foo} />} />-
No entiende props no destructuradas:
function MyComponent(props) { ... } // no soportado
-
No entiende definiciones súper dinámicas o fábrica de componentes raras.
-
No “borra” props automáticamente si las quitas de un uso/definición (solo añade).
-
Clona el repo:
git clone https://github.com/juandarn/vscode-css-pointer.git cd vscode-css-pointer -
Instala dependencias:
npm install
-
Compila en modo watch mientras desarrollas:
npm run watch
-
Arranca en modo extensión:
- Abre esta carpeta en VS Code.
- Ve a Run and Debug.
- Selecciona la configuración:
Run Extension. - Dale a
▶️ (F5).
Se abrirá una nueva ventana de VS Code (“Extension Development Host”). Ahí es donde puedes abrir tu proyecto React y probar:
- Hovers y F12 sobre clases/id.
- Ediciones de componentes y props para ver la sincronización.
En settings.json:
{
"reactSirius.styleSearchGlobs": [
"**/*.{css,scss,sass,less,styl}"
],
"reactSirius.styleSearchExclude": "**/node_modules/**"
}En el futuro se podrán agregar opciones como:
- Activar/desactivar auto-sync de props.
- Cambiar la plantilla del TODO (
/* TODO: completar */,undefined, etc.). - Limitar los archivos donde se busca (
src/**, etc.).
-
El análisis está basado en regex, no en un parser completo de TypeScript/JSX:
- Es rápido y simple, pero no perfecto.
- En casos complejos podría no detectar todos los patrones.
-
Archivos de test se ignoran:
*.test.*,*.spec.*, carpetas__tests__,tests,test.
-
No toca nada dentro de
node_modules.
Se usa SemVer clásico:
0.1.0– primera versión usable.0.1.x– bugfixes y mejoras pequeñas.0.2.0– nuevas features compatibles.1.0.0– cuando ya esté más estable y probada en varios proyectos realistas.
Cualquier idea o PR es bienvenida. Algunas ideas futuras:
- Soporte para props no destructuradas (
props.foo). - Integración con TypeScript para sugerir tipos.
- Mejor UI para mostrar el diff de cambios antes de aplicar.
- Soporte para otros frameworks/librerías que usen JSX-like.
{ "reactSirius.styleSearchGlobs": ["**/*.{css,scss,sass,less,styl}"], "reactSirius.styleSearchExclude": "**/node_modules/**" }