moai-adk 0.34.0__py3-none-any.whl → 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- moai_adk/__main__.py +136 -5
- moai_adk/astgrep/__init__.py +37 -0
- moai_adk/astgrep/analyzer.py +522 -0
- moai_adk/astgrep/models.py +124 -0
- moai_adk/astgrep/rules.py +179 -0
- moai_adk/cli/commands/analyze.py +11 -2
- moai_adk/cli/commands/doctor.py +7 -1
- moai_adk/cli/commands/init.py +321 -11
- moai_adk/cli/commands/language.py +7 -1
- moai_adk/cli/commands/rank.py +449 -0
- moai_adk/cli/commands/status.py +7 -1
- moai_adk/cli/commands/switch.py +325 -0
- moai_adk/cli/commands/update.py +296 -23
- moai_adk/cli/prompts/init_prompts.py +362 -66
- moai_adk/cli/prompts/translations/__init__.py +573 -0
- moai_adk/cli/ui/prompts.py +61 -2
- moai_adk/cli/worktree/cli.py +106 -1
- moai_adk/cli/worktree/manager.py +155 -0
- moai_adk/core/config/unified.py +244 -63
- moai_adk/core/credentials.py +264 -0
- moai_adk/core/error_recovery_system.py +22 -4
- moai_adk/core/git/conflict_detector.py +10 -1
- moai_adk/core/git/event_detector.py +16 -5
- moai_adk/core/integration/engine.py +2 -2
- moai_adk/core/integration/integration_tester.py +5 -5
- moai_adk/core/language_config_resolver.py +9 -3
- moai_adk/core/merge/analyzer.py +509 -324
- moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
- moai_adk/core/migration/backup_manager.py +54 -4
- moai_adk/core/migration/file_migrator.py +174 -2
- moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
- moai_adk/core/migration/version_detector.py +123 -19
- moai_adk/core/migration/version_migrator.py +44 -9
- moai_adk/core/model_allocator.py +241 -0
- moai_adk/core/project/backup_utils.py +12 -2
- moai_adk/core/project/initializer.py +44 -87
- moai_adk/core/project/phase_executor.py +95 -33
- moai_adk/core/project/validator.py +16 -1
- moai_adk/core/quality/trust_checker.py +30 -10
- moai_adk/core/rollback_manager.py +60 -25
- moai_adk/core/template/backup.py +88 -6
- moai_adk/core/template/config.py +33 -9
- moai_adk/core/template/merger.py +34 -8
- moai_adk/core/template/processor.py +334 -11
- moai_adk/core/template_engine.py +10 -1
- moai_adk/core/template_variable_synchronizer.py +16 -2
- moai_adk/core/version_sync.py +54 -6
- moai_adk/foundation/__init__.py +1 -20
- moai_adk/foundation/testing.py +1 -1
- moai_adk/loop/__init__.py +54 -0
- moai_adk/loop/controller.py +305 -0
- moai_adk/loop/feedback.py +230 -0
- moai_adk/loop/state.py +209 -0
- moai_adk/loop/storage.py +220 -0
- moai_adk/lsp/__init__.py +70 -0
- moai_adk/lsp/client.py +320 -0
- moai_adk/lsp/models.py +261 -0
- moai_adk/lsp/protocol.py +404 -0
- moai_adk/lsp/server_manager.py +248 -0
- moai_adk/project/configuration.py +8 -1
- moai_adk/py.typed +0 -0
- moai_adk/ralph/__init__.py +37 -0
- moai_adk/ralph/engine.py +307 -0
- moai_adk/rank/__init__.py +21 -0
- moai_adk/rank/auth.py +425 -0
- moai_adk/rank/client.py +557 -0
- moai_adk/rank/config.py +147 -0
- moai_adk/rank/hook.py +1503 -0
- moai_adk/rank/py.typed +0 -0
- moai_adk/statusline/__init__.py +3 -0
- moai_adk/statusline/enhanced_output_style_detector.py +5 -5
- moai_adk/statusline/main.py +20 -1
- moai_adk/statusline/memory_collector.py +268 -0
- moai_adk/statusline/renderer.py +54 -38
- moai_adk/tag_system/__init__.py +48 -0
- moai_adk/tag_system/atomic_ops.py +117 -0
- moai_adk/tag_system/linkage.py +335 -0
- moai_adk/tag_system/parser.py +176 -0
- moai_adk/tag_system/validator.py +200 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +19 -3
- moai_adk/templates/.claude/agents/moai/builder-command.md +62 -16
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +21 -5
- moai_adk/templates/.claude/agents/moai/expert-backend.md +103 -39
- moai_adk/templates/.claude/agents/moai/expert-debug.md +9 -3
- moai_adk/templates/.claude/agents/moai/expert-devops.md +16 -14
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +45 -31
- moai_adk/templates/.claude/agents/moai/expert-performance.md +13 -9
- moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +19 -3
- moai_adk/templates/.claude/agents/moai/expert-testing.md +13 -9
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-docs.md +10 -5
- moai_adk/templates/.claude/agents/moai/manager-git.md +99 -27
- moai_adk/templates/.claude/agents/moai/manager-project.md +87 -7
- moai_adk/templates/.claude/agents/moai/manager-quality.md +22 -5
- moai_adk/templates/.claude/agents/moai/manager-spec.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +45 -14
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +16 -3
- moai_adk/templates/.claude/commands/moai/0-project.md +239 -1185
- moai_adk/templates/.claude/commands/moai/1-plan.md +383 -363
- moai_adk/templates/.claude/commands/moai/2-run.md +254 -347
- moai_adk/templates/.claude/commands/moai/3-sync.md +174 -100
- moai_adk/templates/.claude/commands/moai/9-feedback.md +49 -33
- moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
- moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
- moai_adk/templates/.claude/commands/moai/fix.md +264 -0
- moai_adk/templates/.claude/commands/moai/loop.md +363 -0
- moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +37 -81
- moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
- moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
- moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
- moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +24 -28
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +14 -14
- moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
- moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
- moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +15 -13
- moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +125 -25
- moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
- moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
- moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
- moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
- moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +5 -5
- moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +30 -18
- moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
- moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
- moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +93 -61
- moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +165 -70
- moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
- moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
- moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +86 -3
- moai_adk/templates/.claude/output-styles/moai/yoda.md +2 -2
- moai_adk/templates/.claude/settings.json +154 -77
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -198
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +169 -323
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +226 -320
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +43 -222
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +75 -219
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +103 -463
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +118 -339
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +74 -377
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +205 -182
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +32 -22
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +640 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +425 -71
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +325 -143
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +96 -316
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +116 -294
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +121 -650
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +37 -730
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +14 -18
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +86 -270
- moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +76 -582
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1239 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +1136 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +82 -436
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +65 -542
- moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +889 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +32 -405
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +114 -293
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +83 -307
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +179 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +42 -279
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +94 -556
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1608 -0
- moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +1323 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +108 -358
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +84 -482
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1154 -0
- moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +1087 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +106 -610
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1106 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +1024 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +51 -265
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +106 -442
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +88 -457
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +75 -283
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +97 -252
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +64 -240
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +90 -287
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +200 -206
- moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +75 -330
- moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +100 -340
- moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +113 -326
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +71 -302
- moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +101 -412
- moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +96 -327
- moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +103 -428
- moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +96 -446
- moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +193 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +225 -423
- moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +211 -314
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +15 -43
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +119 -316
- moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +96 -203
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +201 -388
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +191 -1344
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +287 -1194
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +262 -1192
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +227 -1222
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
- moai_adk/templates/.git-hooks/pre-push +162 -59
- moai_adk/templates/.github/workflows/ci-universal.yml +934 -133
- moai_adk/templates/.gitignore +65 -107
- moai_adk/templates/.lsp.json +152 -0
- moai_adk/templates/.mcp.json +2 -20
- moai_adk/templates/.moai/announcements/en.json +18 -0
- moai_adk/templates/.moai/announcements/ja.json +18 -0
- moai_adk/templates/.moai/announcements/ko.json +18 -0
- moai_adk/templates/.moai/announcements/zh.json +18 -0
- moai_adk/templates/.moai/config/config.yaml +8 -2
- moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
- moai_adk/templates/.moai/config/sections/language.yaml +2 -2
- moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
- moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
- moai_adk/templates/.moai/config/sections/project.yaml +2 -2
- moai_adk/templates/.moai/config/sections/quality.yaml +43 -5
- moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
- moai_adk/templates/.moai/config/sections/system.yaml +46 -1
- moai_adk/templates/.moai/config/sections/user.yaml +1 -1
- moai_adk/templates/.moai/config/statusline-config.yaml +2 -2
- moai_adk/templates/.moai/llm-configs/glm.json +22 -0
- moai_adk/templates/CLAUDE.ja.md +343 -0
- moai_adk/templates/CLAUDE.ko.md +343 -0
- moai_adk/templates/CLAUDE.md +200 -499
- moai_adk/templates/CLAUDE.zh.md +343 -0
- moai_adk/utils/common.py +37 -0
- moai_adk/version.py +1 -1
- moai_adk-1.1.0.dist-info/METADATA +2443 -0
- moai_adk-1.1.0.dist-info/RECORD +701 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/entry_points.txt +2 -0
- moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
- moai_adk/core/config/auto_spec_config.py +0 -340
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
- moai_adk/core/spec/confidence_scoring.py +0 -680
- moai_adk/core/spec/ears_template_engine.py +0 -1247
- moai_adk/core/spec/quality_validator.py +0 -687
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +0 -670
- moai_adk/templates/.claude/agents/moai/expert-database.md +0 -777
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +0 -1041
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +0 -458
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +0 -1607
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +0 -789
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +0 -469
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +0 -1032
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +0 -438
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +0 -402
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +0 -607
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +0 -300
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +0 -537
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -175
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -411
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
- moai_adk/templates/.moai/config/questions/_schema.yaml +0 -151
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +0 -251
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +0 -108
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +0 -81
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +0 -634
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +0 -170
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +0 -87
- moai_adk/templates/.moai/scripts/setup-glm.py +0 -136
- moai_adk-0.34.0.dist-info/METADATA +0 -2999
- moai_adk-0.34.0.dist-info/RECORD +0 -463
- moai_adk-0.34.0.dist-info/licenses/LICENSE +0 -21
- /moai_adk/foundation/{git.py → git/__init__.py} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,692 @@
|
|
|
1
|
+
# Refactoring Patterns
|
|
2
|
+
|
|
3
|
+
> Sub-module: Specific refactoring techniques with implementation details
|
|
4
|
+
> Complexity: Intermediate to Advanced
|
|
5
|
+
> Time: 15+ minutes per pattern
|
|
6
|
+
> Dependencies: Python 3.8+, Rope, AST
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
This module provides detailed implementation patterns for common refactoring operations, complete with code examples, risk assessments, and best practices.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Extract Method
|
|
15
|
+
|
|
16
|
+
### Purpose
|
|
17
|
+
|
|
18
|
+
Break down long methods into smaller, more manageable pieces that each handle a single responsibility.
|
|
19
|
+
|
|
20
|
+
### When to Use
|
|
21
|
+
|
|
22
|
+
- Method exceeds 30-50 lines
|
|
23
|
+
- Method has multiple responsibilities
|
|
24
|
+
- Method complexity (cyclomatic) > 10
|
|
25
|
+
- Method requires comments to understand
|
|
26
|
+
|
|
27
|
+
### Implementation
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
# Before: Long method with multiple responsibilities
|
|
31
|
+
def process_order(order):
|
|
32
|
+
# Validate order
|
|
33
|
+
if not order.items:
|
|
34
|
+
raise ValueError("Empty order")
|
|
35
|
+
for item in order.items:
|
|
36
|
+
if item.quantity <= 0:
|
|
37
|
+
raise ValueError(f"Invalid quantity for {item.name}")
|
|
38
|
+
|
|
39
|
+
# Calculate total
|
|
40
|
+
total = 0
|
|
41
|
+
for item in order.items:
|
|
42
|
+
total += item.price * item.quantity
|
|
43
|
+
|
|
44
|
+
# Apply discount
|
|
45
|
+
if order.customer.is_vip:
|
|
46
|
+
total *= 0.9
|
|
47
|
+
|
|
48
|
+
# Save to database
|
|
49
|
+
db.execute("INSERT INTO orders ...", order)
|
|
50
|
+
for item in order.items:
|
|
51
|
+
db.execute("INSERT INTO order_items ...", item)
|
|
52
|
+
|
|
53
|
+
# Send notification
|
|
54
|
+
email.send(order.customer.email, "Order confirmed")
|
|
55
|
+
|
|
56
|
+
return total
|
|
57
|
+
|
|
58
|
+
# After: Extracted methods with clear responsibilities
|
|
59
|
+
def process_order(order):
|
|
60
|
+
validate_order(order)
|
|
61
|
+
total = calculate_order_total(order)
|
|
62
|
+
apply_vip_discount(order)
|
|
63
|
+
save_order_to_database(order)
|
|
64
|
+
send_order_notification(order)
|
|
65
|
+
return total
|
|
66
|
+
|
|
67
|
+
def validate_order(order):
|
|
68
|
+
"""Validate order items and quantities."""
|
|
69
|
+
if not order.items:
|
|
70
|
+
raise ValueError("Empty order")
|
|
71
|
+
for item in order.items:
|
|
72
|
+
if item.quantity <= 0:
|
|
73
|
+
raise ValueError(f"Invalid quantity for {item.name}")
|
|
74
|
+
|
|
75
|
+
def calculate_order_total(order):
|
|
76
|
+
"""Calculate total price for order items."""
|
|
77
|
+
return sum(item.price * item.quantity for item in order.items)
|
|
78
|
+
|
|
79
|
+
def apply_vip_discount(order):
|
|
80
|
+
"""Apply VIP customer discount if applicable."""
|
|
81
|
+
if order.customer.is_vip:
|
|
82
|
+
order.total *= 0.9
|
|
83
|
+
|
|
84
|
+
def save_order_to_database(order):
|
|
85
|
+
"""Persist order and items to database."""
|
|
86
|
+
db.execute("INSERT INTO orders ...", order)
|
|
87
|
+
for item in order.items:
|
|
88
|
+
db.execute("INSERT INTO order_items ...", item)
|
|
89
|
+
|
|
90
|
+
def send_order_notification(order):
|
|
91
|
+
"""Send order confirmation email to customer."""
|
|
92
|
+
email.send(order.customer.email, "Order confirmed")
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Risk Assessment
|
|
96
|
+
|
|
97
|
+
- Risk Level: Low to Medium
|
|
98
|
+
- Potential Issues:
|
|
99
|
+
- Variable scope changes
|
|
100
|
+
- Parameter passing complexity
|
|
101
|
+
- Test coverage needs
|
|
102
|
+
|
|
103
|
+
### Best Practices
|
|
104
|
+
|
|
105
|
+
1. Choose descriptive method names that explain what the method does
|
|
106
|
+
2. Extract methods that are at the same level of abstraction
|
|
107
|
+
3. Limit extracted methods to 5-10 lines when possible
|
|
108
|
+
4. Keep parameter count under 5
|
|
109
|
+
5. Ensure extracted method is reusable and testable
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Extract Variable
|
|
114
|
+
|
|
115
|
+
### Purpose
|
|
116
|
+
|
|
117
|
+
Replace complex expressions with well-named variables to improve code readability.
|
|
118
|
+
|
|
119
|
+
### When to Use
|
|
120
|
+
|
|
121
|
+
- Complex conditional expressions
|
|
122
|
+
- Repeated calculations
|
|
123
|
+
- Long boolean expressions
|
|
124
|
+
- Nested function calls
|
|
125
|
+
|
|
126
|
+
### Implementation
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
# Before: Complex expressions inline
|
|
130
|
+
if user.age >= 18 and user.has_valid_id and user.registration_date >= datetime.now() - timedelta(days=30):
|
|
131
|
+
grant_access(user)
|
|
132
|
+
|
|
133
|
+
if order.total > 100 and order.customer.is_vip and order.shipping_address.country == "US":
|
|
134
|
+
apply_free_shipping(order)
|
|
135
|
+
|
|
136
|
+
# After: Extracted variables with clear names
|
|
137
|
+
is_adult = user.age >= 18
|
|
138
|
+
has_valid_identification = user.has_valid_id
|
|
139
|
+
registered_recently = user.registration_date >= datetime.now() - timedelta(days=30)
|
|
140
|
+
|
|
141
|
+
if is_adult and has_valid_identification and registered_recently:
|
|
142
|
+
grant_access(user)
|
|
143
|
+
|
|
144
|
+
meets_free_shipping_threshold = order.total > 100
|
|
145
|
+
is_vip_customer = order.customer.is_vip
|
|
146
|
+
ships_domestically = order.shipping_address.country == "US"
|
|
147
|
+
|
|
148
|
+
if meets_free_shipping_threshold and is_vip_customer and ships_domestically:
|
|
149
|
+
apply_free_shipping(order)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Risk Assessment
|
|
153
|
+
|
|
154
|
+
- Risk Level: Low
|
|
155
|
+
- Potential Issues:
|
|
156
|
+
- Variable naming (choosing good names is critical)
|
|
157
|
+
- Scope management
|
|
158
|
+
|
|
159
|
+
### Best Practices
|
|
160
|
+
|
|
161
|
+
1. Use verbs and nouns that describe what/why, not just how
|
|
162
|
+
2. Extract boolean expressions into variables that read like sentences
|
|
163
|
+
3. Avoid one-time-use variables that don't improve clarity
|
|
164
|
+
4. Keep extracted variables close to their usage
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Inline Variable
|
|
169
|
+
|
|
170
|
+
### Purpose
|
|
171
|
+
|
|
172
|
+
Remove unnecessary variables that don't improve readability.
|
|
173
|
+
|
|
174
|
+
### When to Use
|
|
175
|
+
|
|
176
|
+
- Variables used only once
|
|
177
|
+
- Simple expressions that don't need explanation
|
|
178
|
+
- Variables with no clear purpose
|
|
179
|
+
|
|
180
|
+
### Implementation
|
|
181
|
+
|
|
182
|
+
```python
|
|
183
|
+
# Before: Unnecessary intermediate variable
|
|
184
|
+
def calculate_price(base_price, tax_rate):
|
|
185
|
+
final_price = base_price * (1 + tax_rate)
|
|
186
|
+
return final_price
|
|
187
|
+
|
|
188
|
+
# After: Inline the variable
|
|
189
|
+
def calculate_price(base_price, tax_rate):
|
|
190
|
+
return base_price * (1 + tax_rate)
|
|
191
|
+
|
|
192
|
+
# Before: Variable used only once
|
|
193
|
+
message = "Hello, " + user.name
|
|
194
|
+
print(message)
|
|
195
|
+
|
|
196
|
+
# After: Inline directly
|
|
197
|
+
print("Hello, " + user.name)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Risk Assessment
|
|
201
|
+
|
|
202
|
+
- Risk Level: Low
|
|
203
|
+
- Potential Issues:
|
|
204
|
+
- Reduced debugging capabilities
|
|
205
|
+
- Less descriptive code if overused
|
|
206
|
+
|
|
207
|
+
### Best Practices
|
|
208
|
+
|
|
209
|
+
1. Keep variables that add semantic meaning
|
|
210
|
+
2. Inline only when expression is simple and clear
|
|
211
|
+
3. Consider debugging needs before inlining
|
|
212
|
+
4. Don't inline if it reduces readability
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Reorganize Imports
|
|
217
|
+
|
|
218
|
+
### Purpose
|
|
219
|
+
|
|
220
|
+
Clean up and organize import statements for better maintainability.
|
|
221
|
+
|
|
222
|
+
### When to Use
|
|
223
|
+
|
|
224
|
+
- Import statements scattered throughout file
|
|
225
|
+
- Unused imports present
|
|
226
|
+
- Imports not grouped logically
|
|
227
|
+
- Conflicting import aliases
|
|
228
|
+
|
|
229
|
+
### Implementation
|
|
230
|
+
|
|
231
|
+
```python
|
|
232
|
+
# Before: Disorganized imports
|
|
233
|
+
import os
|
|
234
|
+
import sys
|
|
235
|
+
from datetime import datetime
|
|
236
|
+
from myapp.models import User
|
|
237
|
+
import json
|
|
238
|
+
from myapp.utils import calculate_total
|
|
239
|
+
from collections import defaultdict
|
|
240
|
+
|
|
241
|
+
# After: Organized imports (PEP 8 style)
|
|
242
|
+
# Standard library imports
|
|
243
|
+
import json
|
|
244
|
+
import os
|
|
245
|
+
import sys
|
|
246
|
+
from collections import defaultdict
|
|
247
|
+
from datetime import datetime
|
|
248
|
+
|
|
249
|
+
# Third-party imports
|
|
250
|
+
import requests
|
|
251
|
+
|
|
252
|
+
# Local application imports
|
|
253
|
+
from myapp.models import User
|
|
254
|
+
from myapp.utils import calculate_total
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Risk Assessment
|
|
258
|
+
|
|
259
|
+
- Risk Level: Low
|
|
260
|
+
- Potential Issues:
|
|
261
|
+
- Circular import issues
|
|
262
|
+
- Breaking changes in import order
|
|
263
|
+
|
|
264
|
+
### Best Practices
|
|
265
|
+
|
|
266
|
+
1. Group imports: standard library, third-party, local
|
|
267
|
+
2. Sort within each group alphabetically
|
|
268
|
+
3. Use separate blank line between groups
|
|
269
|
+
4. Remove unused imports
|
|
270
|
+
5. Use explicit imports over wildcards
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Rename Method/Variable
|
|
275
|
+
|
|
276
|
+
### Purpose
|
|
277
|
+
|
|
278
|
+
Improve code clarity by using descriptive names that explain purpose.
|
|
279
|
+
|
|
280
|
+
### When to Use
|
|
281
|
+
|
|
282
|
+
- Names don't describe what something does
|
|
283
|
+
- Names use abbreviations or jargon
|
|
284
|
+
- Names are too generic (data, info, temp)
|
|
285
|
+
- Names conflict with domain language
|
|
286
|
+
|
|
287
|
+
### Implementation
|
|
288
|
+
|
|
289
|
+
```python
|
|
290
|
+
# Before: Non-descriptive names
|
|
291
|
+
def calc(d):
|
|
292
|
+
return d * 1.1
|
|
293
|
+
|
|
294
|
+
def proc(u, o):
|
|
295
|
+
if u.v:
|
|
296
|
+
o.s = True
|
|
297
|
+
return o
|
|
298
|
+
|
|
299
|
+
# After: Descriptive names
|
|
300
|
+
def calculate_price_with_tax(base_price):
|
|
301
|
+
return base_price * 1.1
|
|
302
|
+
|
|
303
|
+
def process_order(user, order):
|
|
304
|
+
if user.is_verified:
|
|
305
|
+
order.status = OrderStatus.PROCESSED
|
|
306
|
+
return order
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Risk Assessment
|
|
310
|
+
|
|
311
|
+
- Risk Level: Low to Medium
|
|
312
|
+
- Potential Issues:
|
|
313
|
+
- Breaking changes in public APIs
|
|
314
|
+
- References in other files/modules
|
|
315
|
+
- Serialization/deserialization issues
|
|
316
|
+
|
|
317
|
+
### Best Practices
|
|
318
|
+
|
|
319
|
+
1. Use verbs for methods (calculate, process, validate)
|
|
320
|
+
2. Use nouns for variables and classes
|
|
321
|
+
3. Follow language naming conventions (snake_case for Python)
|
|
322
|
+
4. Rename across entire codebase consistently
|
|
323
|
+
5. Update documentation and comments
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Replace Magic Numbers with Constants
|
|
328
|
+
|
|
329
|
+
### Purpose
|
|
330
|
+
|
|
331
|
+
Replace literal values with named constants for better maintainability.
|
|
332
|
+
|
|
333
|
+
### When to Use
|
|
334
|
+
|
|
335
|
+
- Numbers appear directly in code
|
|
336
|
+
- Values have specific business meaning
|
|
337
|
+
- Numbers repeated in multiple places
|
|
338
|
+
- Values need to be changed frequently
|
|
339
|
+
|
|
340
|
+
### Implementation
|
|
341
|
+
|
|
342
|
+
```python
|
|
343
|
+
# Before: Magic numbers
|
|
344
|
+
def calculate_shipping_cost(weight):
|
|
345
|
+
if weight < 5:
|
|
346
|
+
return 10
|
|
347
|
+
elif weight < 20:
|
|
348
|
+
return 20
|
|
349
|
+
else:
|
|
350
|
+
return 35
|
|
351
|
+
|
|
352
|
+
def apply_discount(total):
|
|
353
|
+
if total > 100:
|
|
354
|
+
return total * 0.9
|
|
355
|
+
return total
|
|
356
|
+
|
|
357
|
+
# After: Named constants
|
|
358
|
+
FREE_SHIPPING_WEIGHT_THRESHOLD = 5
|
|
359
|
+
STANDARD_SHIPPING_WEIGHT_THRESHOLD = 20
|
|
360
|
+
LIGHT_SHIPPING_COST = 10
|
|
361
|
+
STANDARD_SHIPPING_COST = 20
|
|
362
|
+
HEAVY_SHIPPING_COST = 35
|
|
363
|
+
|
|
364
|
+
DISCOUNT_THRESHOLD = 100
|
|
365
|
+
DISCOUNT_PERCENTAGE = 0.9
|
|
366
|
+
|
|
367
|
+
def calculate_shipping_cost(weight):
|
|
368
|
+
if weight < FREE_SHIPPING_WEIGHT_THRESHOLD:
|
|
369
|
+
return LIGHT_SHIPPING_COST
|
|
370
|
+
elif weight < STANDARD_SHIPPING_WEIGHT_THRESHOLD:
|
|
371
|
+
return STANDARD_SHIPPING_COST
|
|
372
|
+
else:
|
|
373
|
+
return HEAVY_SHIPPING_COST
|
|
374
|
+
|
|
375
|
+
def apply_discount(total):
|
|
376
|
+
if total > DISCOUNT_THRESHOLD:
|
|
377
|
+
return total * DISCOUNT_PERCENTAGE
|
|
378
|
+
return total
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### Risk Assessment
|
|
382
|
+
|
|
383
|
+
- Risk Level: Low
|
|
384
|
+
- Potential Issues:
|
|
385
|
+
- Global namespace pollution
|
|
386
|
+
- Finding good constant names
|
|
387
|
+
|
|
388
|
+
### Best Practices
|
|
389
|
+
|
|
390
|
+
1. Use UPPER_SNAKE_CASE for constants
|
|
391
|
+
2. Group related constants together
|
|
392
|
+
3. Add comments explaining business logic
|
|
393
|
+
4. Consider using enums for related constants
|
|
394
|
+
5. Place constants at module level or in config class
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## Simplify Conditional Expressions
|
|
399
|
+
|
|
400
|
+
### Purpose
|
|
401
|
+
|
|
402
|
+
Reduce complexity of conditional logic for better readability.
|
|
403
|
+
|
|
404
|
+
### When to Use
|
|
405
|
+
|
|
406
|
+
- Nested if statements
|
|
407
|
+
- Complex boolean expressions
|
|
408
|
+
- Repeated condition checks
|
|
409
|
+
- Guard clauses missing
|
|
410
|
+
|
|
411
|
+
### Implementation
|
|
412
|
+
|
|
413
|
+
```python
|
|
414
|
+
# Before: Nested conditionals
|
|
415
|
+
def calculate_discount(user, order):
|
|
416
|
+
if user:
|
|
417
|
+
if user.is_active:
|
|
418
|
+
if order.total > 100:
|
|
419
|
+
if user.is_vip:
|
|
420
|
+
return 0.2
|
|
421
|
+
else:
|
|
422
|
+
return 0.1
|
|
423
|
+
else:
|
|
424
|
+
return 0
|
|
425
|
+
else:
|
|
426
|
+
return 0
|
|
427
|
+
else:
|
|
428
|
+
return 0
|
|
429
|
+
|
|
430
|
+
# After: Guard clauses and early returns
|
|
431
|
+
def calculate_discount(user, order):
|
|
432
|
+
if not user or not user.is_active:
|
|
433
|
+
return 0
|
|
434
|
+
|
|
435
|
+
if order.total <= 100:
|
|
436
|
+
return 0
|
|
437
|
+
|
|
438
|
+
return 0.2 if user.is_vip else 0.1
|
|
439
|
+
|
|
440
|
+
# Before: Complex boolean expression
|
|
441
|
+
if (user.age >= 18 and user.has_valid_id and user.country == "US") or \
|
|
442
|
+
(user.age >= 21 and user.country == "EU") or \
|
|
443
|
+
(user.is_vip and user.age >= 16):
|
|
444
|
+
grant_access(user)
|
|
445
|
+
|
|
446
|
+
# After: Extract to helper method
|
|
447
|
+
def is_eligible_for_access(user):
|
|
448
|
+
if user.is_vip and user.age >= 16:
|
|
449
|
+
return True
|
|
450
|
+
|
|
451
|
+
if user.country == "US":
|
|
452
|
+
return user.age >= 18 and user.has_valid_id
|
|
453
|
+
|
|
454
|
+
if user.country == "EU":
|
|
455
|
+
return user.age >= 21
|
|
456
|
+
|
|
457
|
+
return False
|
|
458
|
+
|
|
459
|
+
if is_eligible_for_access(user):
|
|
460
|
+
grant_access(user)
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### Risk Assessment
|
|
464
|
+
|
|
465
|
+
- Risk Level: Low to Medium
|
|
466
|
+
- Potential Issues:
|
|
467
|
+
- Logic changes if not careful
|
|
468
|
+
- Test coverage needs
|
|
469
|
+
|
|
470
|
+
### Best Practices
|
|
471
|
+
|
|
472
|
+
1. Use guard clauses to reduce nesting
|
|
473
|
+
2. Extract complex conditions to named methods
|
|
474
|
+
3. Use early returns to handle edge cases
|
|
475
|
+
4. Prefer polymorphism over complex conditionals
|
|
476
|
+
5. Keep boolean expressions simple and readable
|
|
477
|
+
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
## Decompose Conditional
|
|
481
|
+
|
|
482
|
+
### Purpose
|
|
483
|
+
|
|
484
|
+
Extract complex conditional logic into separate methods.
|
|
485
|
+
|
|
486
|
+
### When to Use
|
|
487
|
+
|
|
488
|
+
- Complex if/else statements
|
|
489
|
+
- Conditionals with business rules
|
|
490
|
+
- Repeated conditional logic
|
|
491
|
+
- Hard-to-test conditions
|
|
492
|
+
|
|
493
|
+
### Implementation
|
|
494
|
+
|
|
495
|
+
```python
|
|
496
|
+
# Before: Complex conditional logic
|
|
497
|
+
def calculate_shipping_cost(order):
|
|
498
|
+
if order.weight < 5 and order.destination.country == "US":
|
|
499
|
+
return 5.0
|
|
500
|
+
elif order.weight < 5 and order.destination.country != "US":
|
|
501
|
+
return 15.0
|
|
502
|
+
elif order.weight >= 5 and order.weight < 20 and order.destination.country == "US":
|
|
503
|
+
return 10.0
|
|
504
|
+
elif order.weight >= 5 and order.weight < 20 and order.destination.country != "US":
|
|
505
|
+
return 25.0
|
|
506
|
+
else:
|
|
507
|
+
return 50.0
|
|
508
|
+
|
|
509
|
+
# After: Decomposed into helper methods
|
|
510
|
+
def calculate_shipping_cost(order):
|
|
511
|
+
if is_light_weight(order):
|
|
512
|
+
return get_domestic_cost() if is_domestic(order) else get_international_cost(order.weight)
|
|
513
|
+
elif is_medium_weight(order):
|
|
514
|
+
return get_domestic_cost() * 2 if is_domestic(order) else get_international_cost(order.weight)
|
|
515
|
+
else:
|
|
516
|
+
return get_heavy_weight_cost()
|
|
517
|
+
|
|
518
|
+
def is_light_weight(order):
|
|
519
|
+
return order.weight < 5
|
|
520
|
+
|
|
521
|
+
def is_medium_weight(order):
|
|
522
|
+
return 5 <= order.weight < 20
|
|
523
|
+
|
|
524
|
+
def is_domestic(order):
|
|
525
|
+
return order.destination.country == "US"
|
|
526
|
+
|
|
527
|
+
def get_domestic_cost():
|
|
528
|
+
return 5.0
|
|
529
|
+
|
|
530
|
+
def get_international_cost(weight):
|
|
531
|
+
return 15.0 if weight < 5 else 25.0
|
|
532
|
+
|
|
533
|
+
def get_heavy_weight_cost():
|
|
534
|
+
return 50.0
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### Risk Assessment
|
|
538
|
+
|
|
539
|
+
- Risk Level: Medium
|
|
540
|
+
- Potential Issues:
|
|
541
|
+
- Increased method count
|
|
542
|
+
- Performance considerations (method calls)
|
|
543
|
+
|
|
544
|
+
### Best Practices
|
|
545
|
+
|
|
546
|
+
1. Name condition methods to read like sentences
|
|
547
|
+
2. Keep helper methods private (leading underscore)
|
|
548
|
+
3. Extract repeated logic into reusable methods
|
|
549
|
+
4. Test each condition method independently
|
|
550
|
+
5. Document business rules clearly
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
## Extract Class
|
|
555
|
+
|
|
556
|
+
### Purpose
|
|
557
|
+
|
|
558
|
+
Extract functionality from a large class into separate, focused classes.
|
|
559
|
+
|
|
560
|
+
### When to Use
|
|
561
|
+
|
|
562
|
+
- Class has multiple responsibilities
|
|
563
|
+
- Class grows too large (> 300 lines)
|
|
564
|
+
- Class has low cohesion
|
|
565
|
+
- Class can be divided into logical components
|
|
566
|
+
|
|
567
|
+
### Implementation
|
|
568
|
+
|
|
569
|
+
```python
|
|
570
|
+
# Before: Large class with multiple responsibilities
|
|
571
|
+
class OrderProcessor:
|
|
572
|
+
def __init__(self):
|
|
573
|
+
self.db = Database()
|
|
574
|
+
self.email_sender = EmailSender()
|
|
575
|
+
self.payment_gateway = PaymentGateway()
|
|
576
|
+
|
|
577
|
+
def process_order(self, order):
|
|
578
|
+
# Validate
|
|
579
|
+
self.validate_order(order)
|
|
580
|
+
# Process payment
|
|
581
|
+
self.process_payment(order)
|
|
582
|
+
# Save to database
|
|
583
|
+
self.save_order(order)
|
|
584
|
+
# Send email
|
|
585
|
+
self.send_confirmation(order)
|
|
586
|
+
|
|
587
|
+
def validate_order(self, order):
|
|
588
|
+
# Validation logic
|
|
589
|
+
pass
|
|
590
|
+
|
|
591
|
+
def process_payment(self, order):
|
|
592
|
+
# Payment logic
|
|
593
|
+
pass
|
|
594
|
+
|
|
595
|
+
def save_order(self, order):
|
|
596
|
+
# Database logic
|
|
597
|
+
pass
|
|
598
|
+
|
|
599
|
+
def send_confirmation(self, order):
|
|
600
|
+
# Email logic
|
|
601
|
+
pass
|
|
602
|
+
|
|
603
|
+
# After: Separated concerns into different classes
|
|
604
|
+
class OrderValidator:
|
|
605
|
+
def validate(self, order):
|
|
606
|
+
# Validation logic
|
|
607
|
+
pass
|
|
608
|
+
|
|
609
|
+
class OrderRepository:
|
|
610
|
+
def __init__(self, db):
|
|
611
|
+
self.db = db
|
|
612
|
+
|
|
613
|
+
def save(self, order):
|
|
614
|
+
# Database logic
|
|
615
|
+
pass
|
|
616
|
+
|
|
617
|
+
class OrderConfirmationService:
|
|
618
|
+
def __init__(self, email_sender):
|
|
619
|
+
self.email_sender = email_sender
|
|
620
|
+
|
|
621
|
+
def send_confirmation(self, order):
|
|
622
|
+
# Email logic
|
|
623
|
+
pass
|
|
624
|
+
|
|
625
|
+
class OrderProcessor:
|
|
626
|
+
def __init__(self, validator, repository, confirmation_service, payment_gateway):
|
|
627
|
+
self.validator = validator
|
|
628
|
+
self.repository = repository
|
|
629
|
+
self.confirmation_service = confirmation_service
|
|
630
|
+
self.payment_gateway = payment_gateway
|
|
631
|
+
|
|
632
|
+
def process_order(self, order):
|
|
633
|
+
self.validator.validate(order)
|
|
634
|
+
self.payment_gateway.process_payment(order)
|
|
635
|
+
self.repository.save(order)
|
|
636
|
+
self.confirmation_service.send_confirmation(order)
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
### Risk Assessment
|
|
640
|
+
|
|
641
|
+
- Risk Level: High
|
|
642
|
+
- Potential Issues:
|
|
643
|
+
- Breaking dependencies
|
|
644
|
+
- Interface changes
|
|
645
|
+
- Testing complexity
|
|
646
|
+
- Refactoring cascades
|
|
647
|
+
|
|
648
|
+
### Best Practices
|
|
649
|
+
|
|
650
|
+
1. Identify clear responsibility boundaries
|
|
651
|
+
2. Use dependency injection for collaboration
|
|
652
|
+
3. Maintain clear interfaces between classes
|
|
653
|
+
4. Update all references to extracted functionality
|
|
654
|
+
5. Test thoroughly before and after extraction
|
|
655
|
+
|
|
656
|
+
---
|
|
657
|
+
|
|
658
|
+
## Best Practices Summary
|
|
659
|
+
|
|
660
|
+
1. Understand the code before refactoring
|
|
661
|
+
2. Write tests first (TDD approach)
|
|
662
|
+
3. Make small, incremental changes
|
|
663
|
+
4. Run tests after each change
|
|
664
|
+
5. Commit frequently for easy rollback
|
|
665
|
+
6. Update documentation and comments
|
|
666
|
+
7. Consider team conventions and style
|
|
667
|
+
8. Profile performance before and after
|
|
668
|
+
9. Communicate changes to team
|
|
669
|
+
10. Review refactoring with peers
|
|
670
|
+
|
|
671
|
+
---
|
|
672
|
+
|
|
673
|
+
## Resources
|
|
674
|
+
|
|
675
|
+
### Tools
|
|
676
|
+
|
|
677
|
+
- Rope: Automated Python refactoring
|
|
678
|
+
- PyCharm: Built-in refactoring tools
|
|
679
|
+
- VS Code: Refactoring extensions
|
|
680
|
+
- Black: Code formatting
|
|
681
|
+
|
|
682
|
+
### References
|
|
683
|
+
|
|
684
|
+
- Refactoring Guru: https://refactoring.guru/
|
|
685
|
+
- Martin Fowler's Refactoring Book
|
|
686
|
+
- Clean Code by Robert C. Martin
|
|
687
|
+
- Working Effectively with Legacy Code by Michael Feathers
|
|
688
|
+
|
|
689
|
+
---
|
|
690
|
+
|
|
691
|
+
Sub-module: `modules/refactoring/patterns.md`
|
|
692
|
+
Related: [ai-workflows.md](./ai-workflows.md) | [../smart-refactoring.md](../smart-refactoring.md)
|