Skip to main content

golem-fix-missing-ns

Validate that all module input/output IDs are properly namespaced. Triggers on: - "check my modules for missing ns" - "find missing ns in modules" - "validate module namespaces" Do not trigger on: - when the user is not working inside a golem app

Ir a la instalación

Datos de origen

Repositorio
ThinkR-open/golem
Última actividad en el origen
15 de mayo de 2026 a las 10:09
Idioma detectado de SKILL.md
inglés
Estrellas
945
Forks
136

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
golem-fix-missing-ns
description
Validate that all module input/output IDs are properly namespaced. Triggers on: - "check my modules for missing ns" - "find missing ns in modules" - "validate module namespaces" Do not trigger on: - when the user is not working inside a golem app
# Check for Missing `ns()` in Modules Validate that all module input/output IDs are properly namespaced. ## Why Namespacing Matters In Shiny modules, all input and output IDs must be namespaced using the `ns()` function. This prevents ID conflicts when the same module is used multiple times in an app. ## Correct vs Incorrect ### ✅ Correct ```r mod_analytics_ui <- function(id) { ns <- NS(id) tagList( selectInput( ns("type_filter"), label = NULL, choices = c("All", "None") ) ) } ``` ### ❌ Incorrect ```r mod_analytics_ui <- function(id) { ns <- NS(id) tagList( selectInput( "type_filter", # Missing ns()! label = NULL, choices = c("All", "None") ) ) } ``` ## What to Check ### In Module UI Functions - All input IDs: `textInput()`, `selectInput()`, `actionButton()`, etc. - All output IDs: `plotOutput()`, `tableOutput()`, `uiOutput()`, etc. - All input control IDs used in `ns()` calls ### In Module Server Functions - JavaScript handler IDs that reference the module namespace - `observeEvent(input$...)` references - `output$...` definitions - `renderUI()` generated element IDs ### Places to Look - Any file starting with `mod_` in the `R/` directory - Both UI and server functions within modules ## How Claude Checks 1. **Locate all IDs** in module files (files starting with `mod_`) - Search for common patterns: `Input()`, `Output()`, input/output IDs 2. **Verify namespacing** by checking each ID is wrapped in `ns()` - Exception: Only the first `NS(id)` definition doesn't need wrapping 3. **Report findings** - If all IDs are properly namespaced: ✅ All good - If missing IDs found: ❌ List them and ask for permission to fix 4. **Fix if approved** - Wrap missing IDs in `ns()` - Preserve code structure and formatting ## Common Mistakes | Mistake | Fix | |---------|-----| | `selectInput("myid", ...)` | `selectInput(ns("myid"), ...)` | | `plotOutput("plot")` | `plotOutput(ns("plot"))` | | `observeEvent(input$button)` | `observeEvent(input$submit, ...)` with ID properly namespaced | | `uiOutput("dynamic")` | `uiOutput(ns("dynamic"))` | ## When to Run - After creating or modifying module UI functions - Before running `devtools::check()` - When adding new inputs/outputs to modules - Before deploying to production ## Example Workflow ``` User: Check my modules for missing ns() Claude: 1. Scans all mod_*.R files 2. Identifies 3 missing ns() wrappings 3. Shows the issues with line numbers 4. Asks: "Should I fix these?" User: Yes, fix them Claude: - Updates the files - Runs the check again to verify - Confirms: "All fixed! ✅" ``` ## Notes - This check is for UI and reactive server code, not data processing functions - Only module files (`mod_*.R`) need this check - Regular functions (`fct_*.R`, `utils_*.R`) don't need namespace wrapping - Module server functions are called with the module ID, which handles the namespacing
Ver en GitHub