diff --git a/app/RSpade/Commands/Rsx/Module_Create_Command.php b/app/RSpade/Commands/Rsx/Module_Create_Command.php index 520b7548c..096dc20db 100755 --- a/app/RSpade/Commands/Rsx/Module_Create_Command.php +++ b/app/RSpade/Commands/Rsx/Module_Create_Command.php @@ -13,7 +13,7 @@ class Module_Create_Command extends Command * * @var string */ - protected $signature = 'rsx:app:module:create + protected $signature = 'rsx:app:module:create {name : Module name (lowercase with underscores)}'; /** @@ -21,7 +21,7 @@ class Module_Create_Command extends Command * * @var string */ - protected $description = 'Create a new RSX application module with default index feature'; + protected $description = 'Create a new module (top-level section with shared layout). Example: frontend, admin'; /** * Execute the console command. diff --git a/app/RSpade/Commands/Rsx/Module_Feature_Create_Command.php b/app/RSpade/Commands/Rsx/Module_Feature_Create_Command.php index 7f39f5660..d1e7dcb0f 100755 --- a/app/RSpade/Commands/Rsx/Module_Feature_Create_Command.php +++ b/app/RSpade/Commands/Rsx/Module_Feature_Create_Command.php @@ -12,7 +12,7 @@ class Module_Feature_Create_Command extends Command * * @var string */ - protected $signature = 'rsx:app:module:feature:create + protected $signature = 'rsx:app:module:feature:create {module : Module name (must exist)} {feature : Feature name (lowercase with underscores)}'; @@ -21,7 +21,7 @@ class Module_Feature_Create_Command extends Command * * @var string */ - protected $description = 'Create a new feature within an RSX module'; + protected $description = 'Create a feature (CRUD page group) within a module. Example: clients, tasks'; /** * Execute the console command. @@ -47,7 +47,14 @@ class Module_Feature_Create_Command extends Command // Check if module exists $module_path = base_path("rsx/app/{$module_name}"); if (!is_dir($module_path)) { - $this->error("Module '{$module_name}' does not exist. Create it first with: php artisan rsx:app:module:create {$module_name}"); + $this->error("Module '{$module_name}' does not exist."); + $this->line(''); + $this->line('NOMENCLATURE:'); + $this->line(' Module = Top-level section with shared layout (e.g., frontend, admin)'); + $this->line(' Feature = CRUD page group within a module (e.g., clients, tasks)'); + $this->line(''); + $this->line('Create the module first:'); + $this->info(" php artisan rsx:app:module:create {$module_name}"); return 1; } diff --git a/app/RSpade/Commands/Rsx/Submodule_Create_Command.php b/app/RSpade/Commands/Rsx/Submodule_Create_Command.php index a0dbf57e7..8a95d754c 100755 --- a/app/RSpade/Commands/Rsx/Submodule_Create_Command.php +++ b/app/RSpade/Commands/Rsx/Submodule_Create_Command.php @@ -21,7 +21,7 @@ class Submodule_Create_Command extends Command * * @var string */ - protected $description = 'Create a new submodule within an RSX module with embedded layout and default index feature'; + protected $description = 'Create a submodule (page group with own layout within a module). Example: settings within frontend'; /** * Execute the console command. @@ -47,7 +47,14 @@ class Submodule_Create_Command extends Command // Check if module exists $module_path = base_path("rsx/app/{$module_name}"); if (!is_dir($module_path)) { - $this->error("Module '{$module_name}' does not exist. Create it first with: php artisan rsx:app:module:create {$module_name}"); + $this->error("Module '{$module_name}' does not exist."); + $this->line(''); + $this->line('NOMENCLATURE:'); + $this->line(' Module = Top-level section with shared layout (e.g., frontend, admin)'); + $this->line(' Submodule = Page group with own layout within a module (e.g., settings within frontend)'); + $this->line(''); + $this->line('Create the module first:'); + $this->info(" php artisan rsx:app:module:create {$module_name}"); return 1; } diff --git a/app/RSpade/Commands/Rsx/Submodule_Feature_Create_Command.php b/app/RSpade/Commands/Rsx/Submodule_Feature_Create_Command.php index e3140d3f9..1caa93e98 100755 --- a/app/RSpade/Commands/Rsx/Submodule_Feature_Create_Command.php +++ b/app/RSpade/Commands/Rsx/Submodule_Feature_Create_Command.php @@ -22,7 +22,7 @@ class Submodule_Feature_Create_Command extends Command * * @var string */ - protected $description = 'Create a new feature within an RSX submodule'; + protected $description = 'Create a feature (CRUD page group) within a submodule'; /** * Execute the console command. @@ -54,14 +54,24 @@ class Submodule_Feature_Create_Command extends Command // Check if module exists $module_path = base_path("rsx/app/{$module_name}"); if (!is_dir($module_path)) { - $this->error("Module '{$module_name}' does not exist. Create it first with: php artisan rsx:app:module:create {$module_name}"); + $this->error("Module '{$module_name}' does not exist."); + $this->line(''); + $this->line('Create the module first:'); + $this->info(" php artisan rsx:app:module:create {$module_name}"); return 1; } // Check if submodule exists $submodule_path = "{$module_path}/{$submodule_name}"; if (!is_dir($submodule_path)) { - $this->error("Submodule '{$submodule_name}' does not exist. Create it first with: php artisan rsx:app:submodule:create {$module_name} {$submodule_name}"); + $this->error("Submodule '{$submodule_name}' does not exist in module '{$module_name}'."); + $this->line(''); + $this->line('NOMENCLATURE:'); + $this->line(' Submodule = Page group with own layout within a module'); + $this->line(' Feature = CRUD page group within a submodule'); + $this->line(''); + $this->line('Create the submodule first:'); + $this->info(" php artisan rsx:app:submodule:create {$module_name} {$submodule_name}"); return 1; } diff --git a/app/RSpade/Commands/Rsx/Submodule_Subfeature_Create_Command.php b/app/RSpade/Commands/Rsx/Submodule_Subfeature_Create_Command.php index d4df16a37..7b192f639 100755 --- a/app/RSpade/Commands/Rsx/Submodule_Subfeature_Create_Command.php +++ b/app/RSpade/Commands/Rsx/Submodule_Subfeature_Create_Command.php @@ -23,7 +23,7 @@ class Submodule_Subfeature_Create_Command extends Command * * @var string */ - protected $description = 'Create a new subfeature within an RSX submodule feature'; + protected $description = 'Create a subfeature (individual CRUD operation like edit, view) within a feature'; /** * Execute the console command. diff --git a/app/RSpade/Core/Bundle/Rsx_Bundle_Abstract.php b/app/RSpade/Core/Bundle/Rsx_Bundle_Abstract.php index 29071014c..86e979446 100755 --- a/app/RSpade/Core/Bundle/Rsx_Bundle_Abstract.php +++ b/app/RSpade/Core/Bundle/Rsx_Bundle_Abstract.php @@ -267,6 +267,10 @@ abstract class Rsx_Bundle_Abstract $rsxapp_data['is_auth'] = Session::is_logged_in(); $rsxapp_data['ajax_disable_batching'] = config('rsx.development.ajax_disable_batching', false); + // Add current params (always set to reduce state variations) + $current_params = \App\RSpade\Core\Rsx::get_current_params(); + $rsxapp_data['params'] = $current_params ?? []; + // Add user, site, and csrf data from session $rsxapp_data['user'] = Session::get_user(); $rsxapp_data['site'] = Session::get_site(); diff --git a/app/RSpade/Core/Dispatch/Dispatcher.php b/app/RSpade/Core/Dispatch/Dispatcher.php index a6a16ed8d..592292bdf 100755 --- a/app/RSpade/Core/Dispatch/Dispatcher.php +++ b/app/RSpade/Core/Dispatch/Dispatcher.php @@ -246,7 +246,7 @@ class Dispatcher Debugger::console_debug('DISPATCH', 'Matched route to ' . $handler_class . '::' . $handler_method . ' params: ' . json_encode($params)); // Set current controller and action in Rsx for tracking - \App\RSpade\Core\Rsx::_set_current_controller_action($handler_class, $handler_method); + \App\RSpade\Core\Rsx::_set_current_controller_action($handler_class, $handler_method, $params); // Load and validate handler class static::__load_handler_class($handler_class); @@ -574,7 +574,7 @@ class Dispatcher } // Set current controller and action for tracking - Rsx::_set_current_controller_action($class_name, $method_name); + Rsx::_set_current_controller_action($class_name, $method_name, $params); // Check if this is a controller (all methods are static) if (static::__is_controller($class_name)) { diff --git a/app/RSpade/Core/Rsx.php b/app/RSpade/Core/Rsx.php index 3613240fb..c1951ebbf 100755 --- a/app/RSpade/Core/Rsx.php +++ b/app/RSpade/Core/Rsx.php @@ -35,13 +35,20 @@ class Rsx */ protected static $current_action = null; + /** + * Current request params + * @var array|null + */ + protected static $current_params = null; + /** * Set the current controller and action being executed * * @param string $controller_class The controller class name * @param string $action_method The action method name + * @param array $params Optional request params to store */ - public static function _set_current_controller_action($controller_class, $action_method) + public static function _set_current_controller_action($controller_class, $action_method, array $params = []) { // Extract just the class name without namespace $parts = explode('\\', $controller_class); @@ -49,6 +56,7 @@ class Rsx static::$current_controller = $class_name; static::$current_action = $action_method; + static::$current_params = $params; } /** @@ -71,6 +79,16 @@ class Rsx return static::$current_action; } + /** + * Get the current request params + * + * @return array|null The current request params or null if not set + */ + public static function get_current_params() + { + return static::$current_params; + } + /** * Clear the current controller and action tracking */ @@ -78,6 +96,7 @@ class Rsx { static::$current_controller = null; static::$current_action = null; + static::$current_params = null; } /** diff --git a/app/RSpade/man/module_organization.txt b/app/RSpade/man/module_organization.txt new file mode 100755 index 000000000..b9d4ae9d4 --- /dev/null +++ b/app/RSpade/man/module_organization.txt @@ -0,0 +1,234 @@ +MODULE_ORGANIZATION(3) RSX Framework Manual MODULE_ORGANIZATION(3) + +NAME + Module Organization - RSX application structure and nomenclature + +SYNOPSIS + php artisan rsx:app:module:create + php artisan rsx:app:module:feature:create + php artisan rsx:app:submodule:create + php artisan rsx:app:submodule:feature:create + php artisan rsx:app:submodule:subfeature:create + +DESCRIPTION + RSX applications organize code into a hierarchical structure: + Module > Submodule > Feature > Subfeature + + This structure enforces clear separation of concerns and predictable + file organization for both developers and AI assistants. + +NOMENCLATURE + + Module + Top-level section with shared layout and common UI elements. + + Examples: frontend, admin, api + + Rule: If pages share a layout, they belong in the same module. + + Created with: rsx:app:module:create + + Structure: + rsx/app/frontend/ + frontend_bundle.php + frontend_layout.blade.php + frontend_index_controller.php + frontend_index.blade.php + ... + + Submodule + Group of pages within a module with its own embedded layout. + + Examples: settings within frontend, reports within admin + + Rule: If pages within a module need their own layout and common + navigation, create a submodule. + + Created with: rsx:app:submodule:create + + Structure: + rsx/app/frontend/settings/ + frontend_settings_layout.blade.php + frontend_settings.scss + frontend_settings_index_controller.php + ... + + Feature + CRUD page group for a specific entity or concept. + + Examples: clients, tasks, users, projects + + Rule: If pages perform CRUD operations on a single entity type, + they are a feature group. + + Created with: + rsx:app:module:feature:create + rsx:app:submodule:feature:create + + Structure: + rsx/app/frontend/clients/ + frontend_clients_controller.php + frontend_clients.blade.php + frontend_clients.js + frontend_clients.scss + + Subfeature + Individual CRUD operation within a feature. + + Examples: edit, view, delete, export + + Rule: Each distinct operation on an entity is a subfeature. + + Created with: + rsx:app:submodule:subfeature:create + + Structure: + rsx/app/frontend/settings/profile/edit/ + frontend_settings_profile_edit_controller.php + frontend_settings_profile_edit.blade.php + frontend_settings_profile_edit.js + frontend_settings_profile_edit.scss + +EXAMPLES + + Basic Module with Feature + Structure: frontend/clients/edit + Hierarchy: module, feature, subfeature + + Commands: + php artisan rsx:app:module:create frontend + php artisan rsx:app:module:feature:create frontend clients + (edit subfeature created automatically with clients feature) + + Module with Submodule + Structure: frontend/settings/profile/edit + Hierarchy: module, submodule, feature, subfeature + + Commands: + php artisan rsx:app:module:create frontend + php artisan rsx:app:submodule:create frontend settings + php artisan rsx:app:submodule:feature:create frontend settings profile + php artisan rsx:app:submodule:subfeature:create frontend settings profile edit + + Simple Admin Module + Structure: admin/sites + Hierarchy: module, feature + + Commands: + php artisan rsx:app:module:create admin + php artisan rsx:app:module:feature:create admin sites + +DIRECTORY STRUCTURE + + Module Level + rsx/app/{module}/ + {module}_bundle.php - Asset bundle definition + {module}_layout.blade.php - Shared layout for module + {module}_index_controller.php + {module}_index.blade.php + {module}_index.js + {module}_index.scss + + Feature Level + rsx/app/{module}/{feature}/ + {module}_{feature}_controller.php + {module}_{feature}.blade.php + {module}_{feature}.js + {module}_{feature}.scss + + Submodule Level + rsx/app/{module}/{submodule}/ + {module}_{submodule}_layout.blade.php - Embedded layout + {module}_{submodule}.scss + {module}_{submodule}_index_controller.php + ... + + Subfeature Level + rsx/app/{module}/{submodule}/{feature}/{subfeature}/ + {module}_{submodule}_{feature}_{subfeature}_controller.php + {module}_{submodule}_{feature}_{subfeature}.blade.php + {module}_{submodule}_{feature}_{subfeature}.js + {module}_{submodule}_{feature}_{subfeature}.scss + +ROUTING + + Routes are automatically generated from the hierarchy: + + Module index: /{module} + Module feature: /{module}/{feature} + Submodule index: /{module}/{submodule} + Submodule feature: /{module}/{submodule}/{feature} + Submodule subfeature: /{module}/{submodule}/{feature}/{subfeature} + + Controllers use #[Route] attributes to define routes: + + #[Route('/{module}/{feature}', name: 'module.feature.index')] + public static function index(Request $request, array $params = []) + +DECISION GUIDE + + When creating new pages, ask: + + 1. Does it share a layout with existing pages? + YES -> Add to existing module + NO -> Create new module + + 2. Does it need its own layout within a module? + YES -> Create submodule + NO -> Create feature in module + + 3. Is it a CRUD operation group? + YES -> Create feature + NO -> May need submodule or different organization + + 4. Is it a single CRUD operation? + YES -> Create subfeature + NO -> Create feature with multiple subfeatures + +COMMON MISTAKES + + Creating Module Instead of Feature + WRONG: php artisan rsx:app:module:create tasks + RIGHT: php artisan rsx:app:module:feature:create frontend tasks + + Reason: tasks shares the frontend layout, so it's a feature not a module. + + Creating Feature Before Module + WRONG: php artisan rsx:app:module:feature:create tasks edit + RIGHT: php artisan rsx:app:module:create frontend + php artisan rsx:app:module:feature:create frontend tasks + + Error: "Module 'tasks' does not exist" + + Solution: Create the module first, then add features to it. + + Confusing Submodule with Feature + Submodule: Has embedded layout, groups related features + Feature: CRUD page group, uses parent layout + + Use submodule for: Settings, Reports, Admin sections + Use feature for: Clients, Tasks, Users, Projects + +NAMING CONVENTIONS + + All names use lowercase with underscores only: [a-z_]+ + + Valid: frontend, client_portal, user_management + Invalid: Frontend, client-portal, userManagement, User_Management + +FILE NAMING + + All files follow predictable patterns: + + Controller: {prefix}_controller.php + View: {prefix}.blade.php + JavaScript: {prefix}.js + SCSS: {prefix}.scss + Layout: {prefix}_layout.blade.php + Bundle: {prefix}_bundle.php + + Where prefix is: {module}_{submodule}_{feature}_{subfeature} + (omitting parts not applicable) + +SEE ALSO + rsx_architecture(3), routing(3), bundle_api(3), controller(3) diff --git a/app/RSpade/resource/vscode_extension/out/definition_provider.js b/app/RSpade/resource/vscode_extension/out/definition_provider.js index 272bc106d..6b855f533 100644 --- a/app/RSpade/resource/vscode_extension/out/definition_provider.js +++ b/app/RSpade/resource/vscode_extension/out/definition_provider.js @@ -154,6 +154,15 @@ class RspadeDefinitionProvider { if (routeResult) { return routeResult; } + // Check for config() pattern - works in PHP and Blade files + if (['php', 'blade', 'html'].includes(languageId) || + fileName.endsWith('.php') || + fileName.endsWith('.blade.php')) { + const configResult = await this.handleConfigPattern(document, position); + if (configResult) { + return configResult; + } + } // Check for href="/" pattern in Blade/Jqhtml files if (fileName.endsWith('.blade.php') || fileName.endsWith('.jqhtml')) { const hrefResult = await this.handleHrefPattern(document, position); @@ -283,6 +292,101 @@ class RspadeDefinitionProvider { } return undefined; } + /** + * Handle config() pattern in PHP and Blade files + * Detects patterns like: + * - config('rsx.default_user.email') + * - config("app.name") + * + * Searches in both system/config/ and rsx/resource/config/ + * (rsx/resource/config/ takes precedence) + */ + async handleConfigPattern(document, position) { + const line = document.lineAt(position.line).text; + // Match config('key.path') or config("key.path") + const configPattern = /config\s*\(\s*(['"])([a-zA-Z0-9_.]+)\1\s*\)/g; + let match; + while ((match = configPattern.exec(line)) !== null) { + const fullMatch = match[0]; + const configKey = match[2]; // e.g., "rsx.default_user.email" + const keyStart = match.index + match[0].indexOf(configKey); + const keyEnd = keyStart + configKey.length; + // Check if cursor is on the config key + if (position.character >= keyStart && position.character < keyEnd) { + // Parse the config key + const keyParts = configKey.split('.'); + const configFile = keyParts[0]; // e.g., "rsx" + const nestedPath = keyParts.slice(1); // e.g., ["default_user", "email"] + // Get the RSpade project root + const rspade_root = this.find_rspade_root(); + if (!rspade_root) { + return undefined; + } + // Search for config file (prioritize rsx/resource/config/) + const rsxConfigPath = path.join(rspade_root, 'rsx', 'resource', 'config', `${configFile}.php`); + const systemConfigPath = path.join(rspade_root, 'system', 'config', `${configFile}.php`); + let configFilePath; + // Check rsx/resource/config first + if (fs.existsSync(rsxConfigPath)) { + configFilePath = rsxConfigPath; + } + else if (fs.existsSync(systemConfigPath)) { + configFilePath = systemConfigPath; + } + if (!configFilePath) { + return undefined; + } + // Read the config file + try { + const configContent = fs.readFileSync(configFilePath, 'utf8'); + // Find the line containing the nested key + const location = this.findConfigKeyInFile(configContent, nestedPath, configFilePath); + if (location) { + this.clear_status_bar(); + return location; + } + // If we can't find the specific key, just return the file + const fileUri = vscode.Uri.file(configFilePath); + const filePosition = new vscode.Position(0, 0); + this.clear_status_bar(); + return new vscode.Location(fileUri, filePosition); + } + catch (error) { + console.error('Error reading config file:', error); + return undefined; + } + } + } + return undefined; + } + /** + * Find a nested config key in a PHP config file + * Returns the location of the key definition if found + */ + findConfigKeyInFile(content, nestedPath, filePath) { + if (nestedPath.length === 0) { + // No nested path, return start of file + const fileUri = vscode.Uri.file(filePath); + return new vscode.Location(fileUri, new vscode.Position(0, 0)); + } + // Split content into lines + const lines = content.split('\n'); + // Search for the key in the file + // For nested keys like ["default_user", "email"], we need to find: + // 1. First, find 'default_user' => [ + // 2. Then find 'email' => value + // Simple approach: search for the last key in quotes + const targetKey = nestedPath[nestedPath.length - 1]; + const keyPattern = new RegExp(`['"]${targetKey}['"]\\s*=>`, 'i'); + for (let i = 0; i < lines.length; i++) { + if (keyPattern.test(lines[i])) { + const fileUri = vscode.Uri.file(filePath); + const position = new vscode.Position(i, 0); + return new vscode.Location(fileUri, position); + } + } + return undefined; + } /** * Handle href="/" pattern in Blade/Jqhtml files * Detects when cursor is on "/" within href attribute diff --git a/app/RSpade/resource/vscode_extension/out/definition_provider.js.map b/app/RSpade/resource/vscode_extension/out/definition_provider.js.map index 7ba8e27a6..d61292b31 100644 --- a/app/RSpade/resource/vscode_extension/out/definition_provider.js.map +++ b/app/RSpade/resource/vscode_extension/out/definition_provider.js.map @@ -1 +1 @@ -{"version":3,"file":"definition_provider.js","sourceRoot":"","sources":["../src/definition_provider.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"definition_provider.js","sourceRoot":"","sources":["../src/definition_provider.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/app/RSpade/resource/vscode_extension/package.json b/app/RSpade/resource/vscode_extension/package.json index 60ee12511..3749a7a2b 100755 --- a/app/RSpade/resource/vscode_extension/package.json +++ b/app/RSpade/resource/vscode_extension/package.json @@ -2,7 +2,7 @@ "name": "rspade-framework", "displayName": "RSpade Framework Support", "description": "VS Code extension for RSpade framework with code folding, formatting, and namespace management", - "version": "0.1.212", + "version": "0.1.214", "publisher": "rspade", "engines": { "vscode": "^1.74.0" diff --git a/app/RSpade/resource/vscode_extension/rspade-framework.vsix b/app/RSpade/resource/vscode_extension/rspade-framework.vsix old mode 100755 new mode 100644 index dd0849436..e0958ebc5 Binary files a/app/RSpade/resource/vscode_extension/rspade-framework.vsix and b/app/RSpade/resource/vscode_extension/rspade-framework.vsix differ diff --git a/app/RSpade/resource/vscode_extension/src/definition_provider.ts b/app/RSpade/resource/vscode_extension/src/definition_provider.ts index 09ef9b3dd..58176876c 100755 --- a/app/RSpade/resource/vscode_extension/src/definition_provider.ts +++ b/app/RSpade/resource/vscode_extension/src/definition_provider.ts @@ -160,6 +160,16 @@ export class RspadeDefinitionProvider implements vscode.DefinitionProvider { return routeResult; } + // Check for config() pattern - works in PHP and Blade files + if (['php', 'blade', 'html'].includes(languageId) || + fileName.endsWith('.php') || + fileName.endsWith('.blade.php')) { + const configResult = await this.handleConfigPattern(document, position); + if (configResult) { + return configResult; + } + } + // Check for href="/" pattern in Blade/Jqhtml files if (fileName.endsWith('.blade.php') || fileName.endsWith('.jqhtml')) { const hrefResult = await this.handleHrefPattern(document, position); @@ -304,6 +314,126 @@ export class RspadeDefinitionProvider implements vscode.DefinitionProvider { return undefined; } + /** + * Handle config() pattern in PHP and Blade files + * Detects patterns like: + * - config('rsx.default_user.email') + * - config("app.name") + * + * Searches in both system/config/ and rsx/resource/config/ + * (rsx/resource/config/ takes precedence) + */ + private async handleConfigPattern( + document: vscode.TextDocument, + position: vscode.Position + ): Promise { + const line = document.lineAt(position.line).text; + + // Match config('key.path') or config("key.path") + const configPattern = /config\s*\(\s*(['"])([a-zA-Z0-9_.]+)\1\s*\)/g; + let match; + + while ((match = configPattern.exec(line)) !== null) { + const fullMatch = match[0]; + const configKey = match[2]; // e.g., "rsx.default_user.email" + const keyStart = match.index + match[0].indexOf(configKey); + const keyEnd = keyStart + configKey.length; + + // Check if cursor is on the config key + if (position.character >= keyStart && position.character < keyEnd) { + // Parse the config key + const keyParts = configKey.split('.'); + const configFile = keyParts[0]; // e.g., "rsx" + const nestedPath = keyParts.slice(1); // e.g., ["default_user", "email"] + + // Get the RSpade project root + const rspade_root = this.find_rspade_root(); + if (!rspade_root) { + return undefined; + } + + // Search for config file (prioritize rsx/resource/config/) + const rsxConfigPath = path.join(rspade_root, 'rsx', 'resource', 'config', `${configFile}.php`); + const systemConfigPath = path.join(rspade_root, 'system', 'config', `${configFile}.php`); + + let configFilePath: string | undefined; + + // Check rsx/resource/config first + if (fs.existsSync(rsxConfigPath)) { + configFilePath = rsxConfigPath; + } else if (fs.existsSync(systemConfigPath)) { + configFilePath = systemConfigPath; + } + + if (!configFilePath) { + return undefined; + } + + // Read the config file + try { + const configContent = fs.readFileSync(configFilePath, 'utf8'); + + // Find the line containing the nested key + const location = this.findConfigKeyInFile(configContent, nestedPath, configFilePath); + if (location) { + this.clear_status_bar(); + return location; + } + + // If we can't find the specific key, just return the file + const fileUri = vscode.Uri.file(configFilePath); + const filePosition = new vscode.Position(0, 0); + this.clear_status_bar(); + return new vscode.Location(fileUri, filePosition); + + } catch (error) { + console.error('Error reading config file:', error); + return undefined; + } + } + } + + return undefined; + } + + /** + * Find a nested config key in a PHP config file + * Returns the location of the key definition if found + */ + private findConfigKeyInFile( + content: string, + nestedPath: string[], + filePath: string + ): vscode.Location | undefined { + if (nestedPath.length === 0) { + // No nested path, return start of file + const fileUri = vscode.Uri.file(filePath); + return new vscode.Location(fileUri, new vscode.Position(0, 0)); + } + + // Split content into lines + const lines = content.split('\n'); + + // Search for the key in the file + // For nested keys like ["default_user", "email"], we need to find: + // 1. First, find 'default_user' => [ + // 2. Then find 'email' => value + + // Simple approach: search for the last key in quotes + const targetKey = nestedPath[nestedPath.length - 1]; + const keyPattern = new RegExp(`['"]${targetKey}['"]\\s*=>`, 'i'); + + for (let i = 0; i < lines.length; i++) { + if (keyPattern.test(lines[i])) { + const fileUri = vscode.Uri.file(filePath); + const position = new vscode.Position(i, 0); + return new vscode.Location(fileUri, position); + } + } + + return undefined; + } + /** * Handle href="/" pattern in Blade/Jqhtml files * Detects when cursor is on "/" within href attribute diff --git a/docs/CLAUDE.dist.md b/docs/CLAUDE.dist.md index 35246e15d..57a57c6e5 100644 --- a/docs/CLAUDE.dist.md +++ b/docs/CLAUDE.dist.md @@ -663,6 +663,8 @@ rsx:app:module:feature:create # /m/f rsx:app:component:create --name=x # Component ``` +**Nomenclature**: Module (top-level section with shared layout), Submodule (page group within module), Feature (CRUD group), Subfeature (individual CRUD operation). Example: `frontend/clients/edit` = module, feature, subfeature. + ### Development ```bash @@ -1085,6 +1087,19 @@ class DataService { | rsx:app:submodule:create | Submodule + layout | /m/s | | rsx:app:component:create --name=x | jqhtml component | N/A | +**Nomenclature**: +- **Module**: Top-level section sharing layout and common UI (frontend, admin) +- **Submodule**: Group of pages within a module (settings within frontend) +- **Feature**: CRUD page group (clients, tasks, users) +- **Subfeature**: Individual CRUD operation (edit, view, delete) + +**Examples**: +- `frontend/clients/edit` = module, feature, subfeature +- `frontend/settings/profile/edit` = module, submodule, feature, subfeature +- `admin/sites` = module, feature + +**Rule of thumb**: If it shares a layout, it's a module. If it's a group of pages within a module, it's a submodule. If it's CRUD operations, it's feature + subfeatures. + ### Migration Commands ```bash