MadDataPro
MadDataPro es una extensión de Visual Studio Code para explorar y visualizar ficheros mainframe (COBOL / EBCDIC) y para integrar la navegación desde JCL hacia esos ficheros locales. Está pensada para desarrolladores que trabajan con JCL y datasets (DSN) y quieren abrir y revisar ficheros mainframe locales directamente desde VS Code.
Resumen
- Nombre del paquete:
mad-data-pro
- Display name:
MadDataPro
- Versión: 1.0.0
- Publisher:
MadcapSoftware
- Descripción: Visualiza archivos mainframe (COBOL, EBCDIC) y ábrelos directamente desde JCL.
Esta extensión ofrece:
- Un editor personalizado (
Mainframe Data Editor
) para visualizar ficheros mainframe.
- Soporte para abrir ficheros a partir de nombres DSN detectados en ficheros JCL.
- Un panel/árbol (Explorer view) llamado
MadDataPro JCL Structure
que muestra pasos (STEP) y DDs detectados en el JCL.
- Un panel webview opcional para renderizar la estructura JCL de forma interactiva.
- CodeLens en líneas JCL donde se detecta un DSN para acciones rápidas (Abrir / Copiar).
- Validaciones/diagnósticos básicos del JCL (longitud de DSN, espacios en DSN o DISP no estándar).
Características en detalle
Editor personalizado
La extensión registra un customEditor
con viewType
madDataPro.mainframeEditor
que se usa para abrir ficheros mainframe con una visualización especial. Puedes abrir ficheros mediante comandos o desde el árbol JCL.
Integración con JCL
Al abrir o cambiar un archivo con lenguaje jcl
, la extensión:
- Analiza su contenido para detectar pasos (STEP) y DDs.
- Crea una estructura que se muestra en la vista
MadDataPro JCL Structure
del Explorador.
- Añade CodeLens encima de las líneas con DSN detectado para acciones "Abrir en MadData" y "Copiar DSN".
- Publica diagnósticos (warnings/errors) en el panel de Problemas si detecta DSN muy largos, espacios en DSN o DISP no estándar.
- Opcionalmente abre un panel webview con la estructura JCL para navegación y acciones.
Árbol (Explorer view)
La vista MadDataPro JCL Structure
muestra:
- Cada paso (STEP) como nodo expandible.
- Dentro de cada paso, sus DDs con el DSN detectado (si lo hay) y, si el DD tiene SYSIN, un sub-nodo con el contenido.
- Menú contextual para abrir o copiar el DSN.
Webview panel
Un panel (webview) con interfaz HTML/JS que muestra los pasos y DDs de forma interactiva. Desde ahí podrás copiar DSNs o pedir abrirlos en el editor personalizado.
Comandos disponibles
Estos comandos se encuentran en package.json
y están registrados por la extensión:
madDataPro.openDsnInEditor
— Abrir un DSN en el editor personalizado. Si se invoca sin argumento lee el DSN en la posición del cursor (archivo JCL). También copia el DSN al portapapeles.
madDataPro.openMainframeFile
— Abrir un fichero manualmente (diálogo de selección de fichero) y visualizarlo con el editor personalizado.
madDataPro.copyDsn
— Copiar un DSN al portapapeles (útil desde el árbol o CodeLens).
madDataPro.openDsnFromTree
— Abrir DSN desde el árbol sin añadir sufijo.
madDataPro.openDsnFromTreeWithExtension
— Abrir DSN desde el árbol y añadir el sufijo configurado (madDataPro.extensionSuffix
).
madDataPro.copyDsnAtCursor
— Copiar el DSN donde esté el cursor en un archivo JCL.
madDataPro.setBasePath
— Pedir por UI la ruta base (madDataPro.basePath
) y guardarla en la configuración global de VS Code.
madDataPro.setExtensionSuffix
— Pedir por UI qué sufijo usar al abrir DSNs desde el árbol (por ejemplo .DAT
).
madDataPro.showJclStructure
— Mostrar/actualizar el panel webview con la estructura del JCL y dar indicaciones para ver la vista en Explorer.
madDataPro.revealJclStep
— Comando interno para centrar el editor activo en la línea de un STEP (usado por la vista).
Keybindings incluidos por defecto (puedes cambiarlos):
Ctrl+Alt+O
— madDataPro.openDsnInEditor
(sólo en archivos JCL)
Ctrl+Alt+J
— madDataPro.showJclStructure
Activación (activationEvents principales):
onCustomEditor:madDataPro.mainframeEditor
onLanguage:jcl
onCommand:madDataPro.openDsnInEditor
onView:madDataPro.jclStructure
Configuración
La extensión expone las siguientes opciones en la sección de configuración madDataPro
:
madDataPro.basePath
(string)
- Descripción: "La ruta base desde la que se intentarán abrir los ficheros (DSN)."
- Ejemplo:
D:\\Trabajo
(en Windows usa backslashes)
- Uso: Cuando pides "Abrir DSN" la extensión concatena
basePath\\<DSN>
y abre ese fichero en el editor personalizado.
madDataPro.extensionSuffix
(string)
- Descripción: "Sufijo/ extensión que se añadirá al nombre de fichero al abrir desde el árbol (por ejemplo: .DAT)"
- Valor por defecto:
.DAT
- Uso: si un DD tiene DSN
FOO.BAR
, y extensionSuffix
es .DAT
, se intentará abrir FOO.BAR.DAT
en basePath
.
madDataPro.autoOpenJclPanel
(boolean)
- Descripción: "Si está activo, la pestaña 'MadDataPro JCL Structure' se abrirá automáticamente al abrir un archivo JCL."
- Valor por defecto:
false
Cómo modificarlo desde VS Code: abrir la paleta (Ctrl+Shift+P) -> "Preferences: Open Settings (JSON)" o usar el UI de configuración y buscar MadDataPro
.
También hay comandos para actualizar basePath
y extensionSuffix
desde UI sin editar el settings.json manualmente (madDataPro.setBasePath
, madDataPro.setExtensionSuffix
).
Uso rápido
- Configura
madDataPro.basePath
con la ruta local donde están tus ficheros mainframe.
- Abre un fichero JCL en VS Code (extensiones
.jcl
o .jcllib
).
- Usa el CodeLens encima de una línea con DSN para "Abrir en MadData" o "Copiar DSN".
- Abre la vista
MadDataPro JCL Structure
en el Explorador para navegar por pasos y DDs.
- Desde la vista puedes abrir el archivo relacionado o copiar su DSN. Usa el sufijo configurado si necesitas añadir la extensión (por ejemplo
.DAT
).
Compilar, probar y empaquetar
Requisitos: Node.js y npm instalados. VS Code (se recomienda >= 1.80.0 por la propiedad engines
en package.json
).
Instala dependencias y compila TypeScript:
npm install
npm run compile
Para compilar en modo watch durante desarrollo:
npm run watch
Tests (si existen):
npm test
Empaquetado y publicación en Visual Studio Marketplace (resumen):
- Regístrate y crea un publisher en https://marketplace.visualstudio.com/manage
- Genera un Personal Access Token (PAT) con el scope necesario para publicar extensiones.
- Puedes usar la herramienta oficial
@vscode/vsce
para empaquetar y publicar. Ejemplo con PowerShell:
# instalar la herramienta globalmente (si no la tienes)
npm install -g @vscode/vsce
# crear paquete .vsix
vsce package
# publicar (usa --pat o configura VSCE_PAT environment variable)
vsce publish --pat <YOUR_PERSONAL_ACCESS_TOKEN>
Alternativa con npx (no instalar globalmente):
npx @vscode/vsce package
npx @vscode/vsce publish --pat <YOUR_PERSONAL_ACCESS_TOKEN>
Nota: package.json
ya contiene vscode:prepublish
que llama a npm run compile
antes de publicar.
Depuración / Troubleshooting
- Asegúrate de que
madDataPro.basePath
está configurado y que los ficheros existen con los nombres esperados.
- Las rutas en Windows usan
\\
en settings.json o puedes usar /
en la mayoría de los casos, pero la extensión concatena rutas con \\
internamente (uso de vscode.Uri.file()
).
- Para ver logs: abre "Help > Toggle Developer Tools" o en la paleta ejecuta "Developer: Open Webview Developer Tools" mientras el webview esté abierto. También puedes ver la salida en la consola del host de la extensión (Output panel -> Extension Host).
- Si una acción falla al abrir un fichero, revisa el mensaje de error que muestra la extensión y confirma el
basePath
y el nombre final (DSN + sufijo si aplica).
Estructura interna (técnica)
src/extension.ts
— punto de entrada. Registra providers, comandos, CodeLens, la vista de árbol y el webview panel.
src/MainframeEditor.ts
— proveedor del custom editor (visualización de ficheros mainframe).
src/jclUtils.ts
— analizador/parsing de JCL que detecta steps, DDs, DSNs, SYSINs, etc.
src/comp3*
, src/pic*
, src/parseCobolChecks.ts
— utilidades y comprobaciones relacionadas con PIC/COMP-3 y parseo de COBOL (herramientas auxiliares para análisis de ficheros/mainframe).
media/
— recursos para el webview (scripts, imágenes, etc.).
Contribuciones
Si quieres contribuir, crea un issue o un PR. Recomendaciones:
- Mantén el estilo TypeScript del proyecto.
- Añade tests para nuevas funciones en la carpeta
test/
.
- Ejecuta
npm run compile
y npm test
antes de enviar un PR.
Licencia
Incluye aquí la licencia adecuada antes de publicar (por ejemplo MIT). Si aún no decidiste una licencia, añádela al repositorio como LICENSE
.
Notas finales
Este README describe la funcionalidad actual (código en src/extension.ts
y package.json
). Si vas a publicar el paquete, verifica package.json
(campo publisher
) y que la cuenta del publisher existe en el Marketplace.
Si quieres, puedo:
- Añadir un
CHANGELOG.md
básico para el primer release.
- Preparar una acción de GitHub Actions para publicar automáticamente.
- Generar capturas de pantalla para el Marketplace y actualizar
README.md
con imágenes.
Dime qué prefieres que haga a continuación.