Configuración del Editor y rust-analyzer
Configura VS Code (o Cursor) con rust-analyzer para una navegación rápida, expansión de macros y ejecuciones de pruebas en programas de Solana/Anchor.
Receta
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
rustup component add rust-analyzer
code --install-extension rust-lang.rust-analyzerEsenciales de .vscode/settings.json:
{
"rust-analyzer.cargo.extraEnv": {},
"rust-analyzer.check.command": "clippy",
"editor.formatOnSave": true
}Cuándo usar esto:
- Saltar a la definición entre módulos
#[program]de Anchor. - Errores en línea antes de los ciclos de compilación de
anchor build. - Renombrar cuentas e instrucciones de forma segura.
- Ejecutar
cargo testpara analizadores fuera de la cadena junto a los programas.
Ejemplo de Trabajo
# Fijar Rust en la raíz del repositorio
cat > rust-toolchain.toml <<'EOF'
[toolchain]
channel = "1.91.1"
components = ["rustfmt", "clippy", "rust-analyzer"]
EOF
rustup show active-toolchain
# Abrir espacio de trabajo de Anchor
cd my_anchor_program
code .
# En el editor: abrir programs/my_program/src/lib.rs
# rust-analyzer debería indexar después de que "cargo metadata" se completesettings.json del espacio de trabajo:
{
"rust-analyzer.linkedProjects": ["programs/my_program/Cargo.toml"],
"rust-analyzer.cargo.buildScripts.enable": true,
"[rust]": {
"editor.defaultFormatter": "rust-lang.rust-analyzer"
}
}Lo que esto demuestra:
rust-toolchain.tomlfija la versión 1.91.1 para la paridad del analizador y la CLI.linkedProjectsayuda a los monorepos donde la raíz puede no ser un crate de Rust.buildScripts.enableresuelve el código generado por el script de compilación deanchor-syn.
Análisis Profundo
Cómo Funciona
- rust-analyzer ejecuta
cargo checkal guardar para obtener retroalimentación rápida. - Las macros procedurales (
#[program],#[account]) requieren la salida del script de compilación. - Los crates fuera de la cadena en
tests/oclients/pueden ser miembros separados del espacio de trabajo. - Formatea con
rustfmtconsistente con la CI decargo fmt.
Extensiones Recomendadas
| Extensión | Propósito |
|---|---|
| rust-analyzer | LSP para Rust |
| Even Better TOML | Edición de Anchor.toml |
| Error Lens | Diagnósticos en línea |
| crates | Sugerencias de versión para Cargo.toml |
Notas de bash
# Reiniciar la caché del analizador cuando las macros fallan
rm -rf target/debug/incremental
cargo clean && anchor buildTrampas
- Analizador atascado en la herramienta incorrecta - conflicto entre estable y la versión fijada 1.91.1. Solución: confirmar
rust-toolchain.toml; recargar ventana. - Errores de macro en lib.rs - scripts de compilación no ejecutados. Solución: habilitar
buildScripts; ejecutaranchor builduna vez. - Abrir la carpeta raíz incorrecta - abrir la raíz del espacio de trabajo de Anchor, no solo la subcarpeta
programs/*. Solución: abrir la raíz del repositorio conAnchor.toml. - División WSL vs Windows - analizador en ruta de Windows, cargo en WSL. Solución: abrir el proyecto completamente dentro del entorno remoto de WSL.
target/enorme para indexar - IDE lento. Solución: excluirtarget/en la configuración del observador de archivos.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| IntelliJ Rust | Tienda JetBrains | Estándar de VS Code/Cursor |
vim + rust-analyzer | Centrado en terminal | Enseñar a nuevos empleados |
Editor zed | LSP ligero | Depuración de macros de Anchor inmadura |
Solo CLI cargo check | Minimalismo de CI | Desarrollo diario de funciones |
Preguntas Frecuentes
¿Por qué no se resuelven los tipos `#[account]`?
Ejecuta anchor build una vez para que se generen los artefactos de proc-macro; asegúrate de que linkedProjects apunte al crate del programa.
¿Debo usar la versión nightly de rust-analyzer?
No, empareja la fijación estable 1.91.1 para la compatibilidad con programas de Solana.
¿Cómo formato al guardar?
Habilita editor.formatOnSave con rust-analyzer como formateador predeterminado de Rust.
¿Puede rust-analyzer ejecutar pruebas de anchor?
Usa la terminal integrada para anchor test; el analizador se enfoca en la velocidad de cargo check.
¿Qué pasa con el código cliente de TypeScript?
Usa ESLint/servicio de lenguaje de TypeScript en app/ - separado de rust-analyzer.
¿Cómo soluciono el alto uso de CPU?
Excluye target/, limita los miembros del espacio de trabajo, deshabilita características no utilizadas en Cargo.toml.
¿Cursor difiere de VS Code?
Se aplican la misma extensión rust-analyzer y configuración.
¿Cómo depuro programas en la cadena?
Usa registros msg! y pruebas LiteSVM; la depuración paso a paso nativa es limitada en comparación con Rust fuera de la cadena.
¿Debería ejecutarse clippy en el analizador?
Opcional - check.command: clippy es más estricto pero más lento que check.
¿Cómo comparto la configuración?
Confirma .vscode/settings.json y rust-toolchain.toml para la consistencia del equipo.
Relacionado
- Gestión de Versiones (agave-install / avm) - La fijación de Rust complementa la cadena de herramientas
- Construcción de Programas (cargo build-sbf) - bucle de compilación completo
- Descripción General de la Cadena de Herramientas - mapa de la pila
- Conceptos Básicos de Pruebas - flujo de trabajo de pruebas
Versiones de la pila: Esta página fue escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, y LiteSVM 0.6.x.