feat: refactor replacements.json structure to eliminate duplication #8
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
projectssectionChanges Made
Core Refactoring
_auto_discovered.projectsandproject_names.replacementsby consolidating into a singleprojectssection with rich metadata (folder, display_name, pronunciation)migrate_replacements_format()function to automatically convert old configurations to new format on first loadload_replacements()- Now includes migration logic and returns new default structureauto_add_project_to_replacements()- Writes to singleprojectssectionget_project_pronunciation()- Reads fromprojects[name].pronunciationapply_project_name_replacement()- Usesprojects[name].display_nameapply_command_replacement()- AccessescommandsandpatternsdirectlyDefault Configuration
Documentation
Testing Performed
Migration Path
Existing users' configurations will be automatically migrated when ccnotify loads the replacements file for the first time after this update. The migration preserves all existing data while reorganizing it into the cleaner structure.
Example of New Structure
{ "projects": { "ccnotify": { "folder": "-Users-helmi-code-ccnotify", "display_name": "CCNotify", "pronunciation": "CC notify" } }, "commands": { "ls": "list", "rm": "remove" }, "patterns": [ { "pattern": "npm run (\\w+)", "replacement": "N P M run {1}" } ] }