Puntos de extensión del plugin RunJS (documentación de ctx / snippets / mapeo de escenas)
Cuando un plugin añade o extiende las capacidades de RunJS, se recomienda registrar el "mapeo de contexto / documentación de ctx / código de ejemplo" a través de los puntos de extensión oficiales. Esto garantiza que:
- El CodeEditor pueda ofrecer autocompletado para
ctx.xxx.yyy. - La IA de codificación pueda obtener referencias estructuradas de la API de
ctxy ejemplos.
Este capítulo presenta dos puntos de extensión:
registerRunJSContextContribution(...)registerRunJSSnippet(...)
1. registerRunJSContextContribution
Se utiliza para registrar "contribuciones" (contributions) de RunJS. Sus usos típicos incluyen:
- Añadir o sobrescribir mapeos en
RunJSContextRegistry(modelClass->RunJSContext, incluyendoscenes). - Extender
RunJSDocMeta(descripciones/ejemplos/plantillas de completado para la API dectx) paraFlowRunJSContexto un RunJSContext personalizado.
Descripción del comportamiento
- Las contribuciones se ejecutan de forma unificada durante la fase
setupRunJSContexts(). - Si
setupRunJSContexts()ya se ha completado, las registros tardíos se ejecutarán inmediatamente (sin necesidad de reiniciar el setup). - Cada contribución se ejecutará como máximo una vez para cada
RunJSVersion.
Ejemplo: Añadir un contexto de modelo donde se puede escribir JS
2. registerRunJSSnippet
Se utiliza para registrar fragmentos de código de ejemplo (snippets) para RunJS, que sirven para:
- Autocompletado de snippets en el CodeEditor.
- Material de referencia/ejemplo para la IA de codificación (filtrable por escena/versión/idioma).
Recomendación de nomenclatura para ref
Se sugiere utilizar: plugin/<nombreDelPlugin>/<tema>, por ejemplo:
plugin/plugin-my/fooplugin/plugin-my/api-request-example
Evite conflictos con los espacios de nombres global/* o scene/* del núcleo (core).
Estrategia de conflictos
- Por defecto, no se sobrescriben los
refexistentes (devuelvefalse, pero no lanza un error). - Si necesita sobrescribir, pase explícitamente
{ override: true }.
Ejemplo: Registrar un snippet
3. Mejores prácticas
- Mantenimiento por capas de documentación + snippets:
RunJSDocMeta: Descripciones/plantillas de completado (cortas, estructuradas).- Snippets: Ejemplos largos (reutilizables, filtrables por escena/versión).
- Evitar prompts excesivamente largos: Los ejemplos no deben ser demasiados; priorice "plantillas mínimas ejecutables".
- Prioridad de escena: Si su código JS se ejecuta principalmente en escenarios como formularios o tablas, asegúrese de completar correctamente el campo
scenespara mejorar la relevancia del autocompletado y los ejemplos.
4. Ocultar autocompletado basado en el ctx real: hidden(ctx)
Ciertas API de ctx dependen fuertemente del escenario (por ejemplo, ctx.popup solo está disponible cuando hay una ventana emergente o un cajón abierto). Cuando desee ocultar estas API no disponibles durante el autocompletado, puede definir hidden(ctx) para la entrada correspondiente en RunJSDocMeta:
- Si devuelve
true: Oculta el nodo actual y su subárbol. - Si devuelve
string[]: Oculta subrutas específicas bajo el nodo actual (permite devolver varias rutas; las rutas son relativas; oculta el subárbol por coincidencia de prefijo).
hidden(ctx) admite async: usted puede usar await ctx.getVar('ctx.xxx') para decidir (a discreción del desarrollador). Se recomienda que sea rápido y sin efectos secundarios (no realice peticiones de red).
Ejemplo: Mostrar el autocompletado de ctx.popup.* solo cuando exista popup.uid.
Ejemplo: La ventana emergente está disponible pero se ocultan algunas subrutas (solo rutas relativas; por ejemplo, ocultar record y parent.record).
Nota: El CodeEditor siempre habilita el filtrado de autocompletado basado en el ctx real (fail-open, no lanza errores).

