Una extensión completa de Visual Studio Code para el lenguaje SphereScript (.scp), orientada a Sphere X: resaltado de sintaxis, formateo automático, IntelliSense (hover / autocompletado / outline / go-to-definition) y diagnósticos en vivo.
✨ Características
🎨 Resaltado de Sintaxis
Secciones, triggers, propiedades, funciones, flags y keywords del lenguaje, con scopes TextMate granulares por subsistema (cobjbase, cchar, citem, cclient, etc.).
- Indentación inteligente (
IF/ELSE/ENDIF, FOR*/ENDFOR, WHILE/ENDWHILE, BEGIN/END, DORAND/DOSWITCH/ENDDO)
- Mayúsculas automáticas en keywords (preservando strings, comentarios y secciones
[BOOK]/[MENU]/[SCROLL]/[TIP]/[COMMENT])
- Regex precompiladas y procesamiento de keywords por lotes
- Configurable:
tabSize, indentStyle (tabs/spaces)
🧠 IntelliSense (nuevo en v4)
- Hover con firma, descripción y ejemplo por símbolo
- Autocompletado contextual: triggers tras
@, secciones tras [, props/funciones/flags genéricos
- Document Symbols (outline): cada
[CHARDEF c_x], [ITEMDEF i_x], [FUNCTION f_x], [EVENTS e_x] con sus ON=@TRIGGER hijos
- Go to Definition en identificadores
f_*, c_*, i_*, t_*, d_*, ... a lo largo del workspace
🔍 Diagnósticos en vivo
- Bloques
IF/FOR/WHILE/BEGIN/DORAND/DOSWITCH desbalanceados
END* sin apertura previa
- Secciones sin clave (
[CHARDEF] vs [CHARDEF c_man])
- Triggers desconocidos (
ON=@FOO)
📝 Snippets ampliados
Plantillas chardef, itemdef, function, events, dialog, on, timer, timerf, timerfms, target, tag, var, local, además de los bucles for* y bloques try*/dorand/doswitch previos.
⚙️ Configuración
Todos los ajustes viven bajo el namespace scpFormatter.* y pueden modificarse en Settings (UI) o en settings.json.
| Setting |
Tipo |
Valor por defecto |
Rango / valores |
Descripción |
scpFormatter.indentStyle |
string |
"tabs" |
"tabs" | "spaces" |
Estilo de indentación al formatear. |
scpFormatter.tabSize |
integer |
1 |
1 – 8 |
Número de tabs/espacios por nivel de indentación. Las opciones del editor (editor.tabSize, editor.insertSpaces) tienen prioridad cuando se invoca el formatter. |
scpFormatter.maxLineLength |
integer |
0 |
0 – 200 |
Límite de longitud de línea (0 = sin límite). Reservado para futuros warnings. |
scpFormatter.diagnostics.enable |
boolean |
true |
true | false |
Activa el linter en vivo (bloques desbalanceados, END* huérfanos, triggers desconocidos, secciones sin clave…). |
scpFormatter.debug |
boolean |
true |
true | false |
Activa logs de depuración en la consola del Extension Host y un toast informativo al activar la extensión. Pónlo a false si te molesta el ruido. |
Además, la extensión declara configurationDefaults para el lenguaje scp, de modo que al instalarla el editor adopta:
"[scp]": {
"editor.defaultFormatter": "Izoard.spherescript-syntax-highlight-formatter",
"editor.formatOnSave": true,
"editor.tabSize": 1,
"editor.insertSpaces": false
}
Ejemplo de settings.json
Como todos los valores anteriores ya son los defaults declarados por la extensión, lo habitual es no poner nada y dejar que actúen tal cual:
{
// Vacío — los defaults de la extensión producen el estilo SphereScript clásico:
// • tabs reales (no espacios)
// • 1 tab por nivel de indentación
// • formatOnSave activado para .scp
// • linter en vivo y debug activos
}
Si solo quieres que los tabs se rendericen más anchos (sin cambiar el formato, que sigue insertando un \t por nivel), añade únicamente:
{
"[scp]": {
"editor.tabSize": 4, // ancho visual del tab; el formato sigue siendo 1 tab por nivel
"editor.formatOnSave": true,
},
}
Y solo si quieres apartarte de los defaults (p. ej. usar espacios o desactivar el debug toast):
{
"scpFormatter.indentStyle": "spaces",
"scpFormatter.tabSize": 4,
"scpFormatter.debug": false
}
[!NOTE]
¿Por qué no aparece editor.defaultFormatter en los ejemplos?
Porque la extensión lo declara en configurationDefaults, así que VS Code lo adopta automáticamente al instalarla. Solo necesitas fijarlo manualmente si:
- Tenías instalada otra extensión SCP previa y VS Code recuerda su formatter.
- Quieres dejar la intención explícita en
.vscode/settings.json del repo para que el equipo no dependa de los defaults.
En esos casos:
{
"[scp]": {
"editor.defaultFormatter": "Izoard.spherescript-syntax-highlight-formatter",
},
}
📋 Atajos
| Acción |
Atajo |
| Formatear documento |
Shift+Alt+F |
| Ver Problemas |
Ctrl+Shift+M |
🛠️ Desarrollo
pnpm install
# F5 dentro de VS Code para abrir Extension Host
pnpm test
npx vsce package
📄 Licencia
MIT — ver LICENSE.md.
🤝 Contribuir
- Fork el proyecto
- Crea tu Feature Branch (
git checkout -b feature/AmazingFeature)
- Commit tus cambios (
git commit -m 'Add some AmazingFeature')
- Push al Branch (
git push origin feature/AmazingFeature)
- Abre un Pull Request
🔗 Basado en extensiones
Esta extensión ha sido desarrollada para brindar soporte a Berks Worlds en Sphere X.
Basada en las extensiones:
¡Disfruta programando en SphereScript! 🎯