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,580 @@
|
|
|
1
|
+
# C# 12 Language Features
|
|
2
|
+
|
|
3
|
+
Comprehensive guide to C# 12 features for .NET 8+ development.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Primary Constructors
|
|
8
|
+
|
|
9
|
+
Primary constructors allow defining constructor parameters directly on the class declaration, reducing boilerplate code.
|
|
10
|
+
|
|
11
|
+
### Basic Usage
|
|
12
|
+
|
|
13
|
+
```csharp
|
|
14
|
+
// Traditional approach
|
|
15
|
+
public class UserService
|
|
16
|
+
{
|
|
17
|
+
private readonly IUserRepository _repository;
|
|
18
|
+
private readonly ILogger<UserService> _logger;
|
|
19
|
+
|
|
20
|
+
public UserService(IUserRepository repository, ILogger<UserService> logger)
|
|
21
|
+
{
|
|
22
|
+
_repository = repository;
|
|
23
|
+
_logger = logger;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public async Task<User?> GetByIdAsync(Guid id)
|
|
27
|
+
{
|
|
28
|
+
_logger.LogInformation("Fetching user {UserId}", id);
|
|
29
|
+
return await _repository.FindByIdAsync(id);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// C# 12 Primary Constructor
|
|
34
|
+
public class UserService(IUserRepository repository, ILogger<UserService> logger)
|
|
35
|
+
{
|
|
36
|
+
public async Task<User?> GetByIdAsync(Guid id)
|
|
37
|
+
{
|
|
38
|
+
logger.LogInformation("Fetching user {UserId}", id);
|
|
39
|
+
return await repository.FindByIdAsync(id);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### With Dependency Injection
|
|
45
|
+
|
|
46
|
+
```csharp
|
|
47
|
+
// Service with multiple dependencies
|
|
48
|
+
public class OrderService(
|
|
49
|
+
IOrderRepository orderRepository,
|
|
50
|
+
IPaymentService paymentService,
|
|
51
|
+
INotificationService notificationService,
|
|
52
|
+
ILogger<OrderService> logger)
|
|
53
|
+
{
|
|
54
|
+
public async Task<Order> CreateOrderAsync(CreateOrderRequest request)
|
|
55
|
+
{
|
|
56
|
+
logger.LogInformation("Creating order for customer {CustomerId}", request.CustomerId);
|
|
57
|
+
|
|
58
|
+
var order = Order.Create(request.CustomerId, request.Items);
|
|
59
|
+
await orderRepository.AddAsync(order);
|
|
60
|
+
|
|
61
|
+
await paymentService.ProcessPaymentAsync(order.Id, request.PaymentDetails);
|
|
62
|
+
await notificationService.SendOrderConfirmationAsync(order);
|
|
63
|
+
|
|
64
|
+
return order;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Capturing Parameters as Fields
|
|
70
|
+
|
|
71
|
+
```csharp
|
|
72
|
+
// When you need to store a parameter
|
|
73
|
+
public class CacheService(IMemoryCache cache, TimeSpan defaultExpiration)
|
|
74
|
+
{
|
|
75
|
+
// Explicitly capture as field when needed
|
|
76
|
+
private readonly TimeSpan _defaultExpiration = defaultExpiration;
|
|
77
|
+
|
|
78
|
+
public T GetOrCreate<T>(string key, Func<T> factory)
|
|
79
|
+
{
|
|
80
|
+
return cache.GetOrCreate(key, entry =>
|
|
81
|
+
{
|
|
82
|
+
entry.AbsoluteExpirationRelativeToNow = _defaultExpiration;
|
|
83
|
+
return factory();
|
|
84
|
+
})!;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### With Record Types
|
|
90
|
+
|
|
91
|
+
```csharp
|
|
92
|
+
// Records with primary constructors (existing feature, enhanced in C# 12)
|
|
93
|
+
public record UserDto(Guid Id, string Name, string Email);
|
|
94
|
+
|
|
95
|
+
public record CreateUserCommand(string Name, string Email, string Password);
|
|
96
|
+
|
|
97
|
+
public record OrderItem(Guid ProductId, int Quantity, decimal UnitPrice)
|
|
98
|
+
{
|
|
99
|
+
public decimal Total => Quantity * UnitPrice;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Immutable record with validation
|
|
103
|
+
public record Email
|
|
104
|
+
{
|
|
105
|
+
public string Value { get; }
|
|
106
|
+
|
|
107
|
+
public Email(string value)
|
|
108
|
+
{
|
|
109
|
+
if (!value.Contains('@'))
|
|
110
|
+
throw new ArgumentException("Invalid email format", nameof(value));
|
|
111
|
+
Value = value;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Inheritance with Primary Constructors
|
|
117
|
+
|
|
118
|
+
```csharp
|
|
119
|
+
// Base class with primary constructor
|
|
120
|
+
public class Entity(Guid id)
|
|
121
|
+
{
|
|
122
|
+
public Guid Id { get; } = id;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Derived class calling base primary constructor
|
|
126
|
+
public class User(Guid id, string name, string email) : Entity(id)
|
|
127
|
+
{
|
|
128
|
+
public string Name { get; } = name;
|
|
129
|
+
public string Email { get; } = email;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Controller with base class
|
|
133
|
+
public class BaseController(ILogger logger)
|
|
134
|
+
{
|
|
135
|
+
protected void LogInfo(string message) => logger.LogInformation(message);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
public class UsersController(IUserService userService, ILogger<UsersController> logger)
|
|
139
|
+
: BaseController(logger)
|
|
140
|
+
{
|
|
141
|
+
public async Task<User?> GetById(Guid id)
|
|
142
|
+
{
|
|
143
|
+
LogInfo($"Getting user {id}");
|
|
144
|
+
return await userService.GetByIdAsync(id);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Collection Expressions
|
|
152
|
+
|
|
153
|
+
Unified syntax for creating arrays, lists, spans, and other collection types.
|
|
154
|
+
|
|
155
|
+
### Basic Collections
|
|
156
|
+
|
|
157
|
+
```csharp
|
|
158
|
+
// Arrays
|
|
159
|
+
int[] numbers = [1, 2, 3, 4, 5];
|
|
160
|
+
string[] names = ["Alice", "Bob", "Charlie"];
|
|
161
|
+
|
|
162
|
+
// Lists
|
|
163
|
+
List<int> numberList = [1, 2, 3, 4, 5];
|
|
164
|
+
List<string> nameList = ["Alice", "Bob", "Charlie"];
|
|
165
|
+
|
|
166
|
+
// Spans
|
|
167
|
+
Span<int> spanNumbers = [10, 20, 30];
|
|
168
|
+
ReadOnlySpan<char> chars = ['a', 'b', 'c'];
|
|
169
|
+
|
|
170
|
+
// Empty collections
|
|
171
|
+
int[] empty = [];
|
|
172
|
+
List<string> emptyList = [];
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Spread Operator
|
|
176
|
+
|
|
177
|
+
```csharp
|
|
178
|
+
int[] first = [1, 2, 3];
|
|
179
|
+
int[] second = [4, 5, 6];
|
|
180
|
+
|
|
181
|
+
// Combine arrays
|
|
182
|
+
int[] combined = [..first, ..second]; // [1, 2, 3, 4, 5, 6]
|
|
183
|
+
|
|
184
|
+
// Add elements with spread
|
|
185
|
+
int[] withExtras = [0, ..first, ..second, 7, 8]; // [0, 1, 2, 3, 4, 5, 6, 7, 8]
|
|
186
|
+
|
|
187
|
+
// Conditional spread
|
|
188
|
+
bool includeDefaults = true;
|
|
189
|
+
int[] defaults = [100, 200];
|
|
190
|
+
int[] result = [..first, ..(includeDefaults ? defaults : [])];
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Collection Builders
|
|
194
|
+
|
|
195
|
+
```csharp
|
|
196
|
+
// Custom collection support
|
|
197
|
+
public class CustomCollection<T> : IEnumerable<T>
|
|
198
|
+
{
|
|
199
|
+
private readonly List<T> _items = [];
|
|
200
|
+
|
|
201
|
+
public void Add(T item) => _items.Add(item);
|
|
202
|
+
public IEnumerator<T> GetEnumerator() => _items.GetEnumerator();
|
|
203
|
+
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Works with collection expressions
|
|
207
|
+
CustomCollection<int> custom = [1, 2, 3];
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Practical Examples
|
|
211
|
+
|
|
212
|
+
```csharp
|
|
213
|
+
// Method parameters
|
|
214
|
+
public void ProcessItems(params int[] items) { }
|
|
215
|
+
ProcessItems([1, 2, 3]);
|
|
216
|
+
|
|
217
|
+
// LINQ with collection expressions
|
|
218
|
+
var filtered = numbers.Where(n => [1, 3, 5].Contains(n));
|
|
219
|
+
|
|
220
|
+
// Dictionary initialization (still uses traditional syntax)
|
|
221
|
+
Dictionary<string, int> scores = new()
|
|
222
|
+
{
|
|
223
|
+
["Alice"] = 100,
|
|
224
|
+
["Bob"] = 95
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// Combining collections in expressions
|
|
228
|
+
List<User> GetUsers(List<User> admins, List<User> regular, bool includeAdmins)
|
|
229
|
+
=> [..(includeAdmins ? admins : []), ..regular];
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Alias Any Type
|
|
235
|
+
|
|
236
|
+
Type aliases for any type using the `using` directive, not just namespaces.
|
|
237
|
+
|
|
238
|
+
### Basic Type Aliases
|
|
239
|
+
|
|
240
|
+
```csharp
|
|
241
|
+
// Alias for tuples
|
|
242
|
+
using Point = (int X, int Y);
|
|
243
|
+
using Rectangle = (Point TopLeft, Point BottomRight);
|
|
244
|
+
|
|
245
|
+
public class GeometryService
|
|
246
|
+
{
|
|
247
|
+
public Point GetCenter(Rectangle rect)
|
|
248
|
+
{
|
|
249
|
+
return (
|
|
250
|
+
(rect.TopLeft.X + rect.BottomRight.X) / 2,
|
|
251
|
+
(rect.TopLeft.Y + rect.BottomRight.Y) / 2
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
public double CalculateDistance(Point a, Point b)
|
|
256
|
+
{
|
|
257
|
+
var dx = b.X - a.X;
|
|
258
|
+
var dy = b.Y - a.Y;
|
|
259
|
+
return Math.Sqrt(dx * dx + dy * dy);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Generic Type Aliases
|
|
265
|
+
|
|
266
|
+
```csharp
|
|
267
|
+
// Alias for complex generics
|
|
268
|
+
using UserCache = System.Collections.Generic.Dictionary<Guid, User>;
|
|
269
|
+
using StringList = System.Collections.Generic.List<string>;
|
|
270
|
+
using AsyncResult<T> = System.Threading.Tasks.Task<T>;
|
|
271
|
+
|
|
272
|
+
public class CacheManager
|
|
273
|
+
{
|
|
274
|
+
private readonly UserCache _cache = [];
|
|
275
|
+
|
|
276
|
+
public async AsyncResult<User?> GetOrFetchAsync(Guid id, Func<Guid, AsyncResult<User?>> fetch)
|
|
277
|
+
{
|
|
278
|
+
if (_cache.TryGetValue(id, out var user))
|
|
279
|
+
return user;
|
|
280
|
+
|
|
281
|
+
user = await fetch(id);
|
|
282
|
+
if (user is not null)
|
|
283
|
+
_cache[id] = user;
|
|
284
|
+
|
|
285
|
+
return user;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### Nullable Type Aliases
|
|
291
|
+
|
|
292
|
+
```csharp
|
|
293
|
+
// Alias for nullable types
|
|
294
|
+
using NullableInt = int?;
|
|
295
|
+
using OptionalString = string?;
|
|
296
|
+
|
|
297
|
+
public class ConfigService
|
|
298
|
+
{
|
|
299
|
+
public NullableInt GetTimeout() => 30;
|
|
300
|
+
public OptionalString GetApiKey() => Environment.GetEnvironmentVariable("API_KEY");
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Function Type Aliases
|
|
305
|
+
|
|
306
|
+
```csharp
|
|
307
|
+
// Alias for delegate types
|
|
308
|
+
using Predicate<T> = System.Func<T, bool>;
|
|
309
|
+
using AsyncPredicate<T> = System.Func<T, System.Threading.Tasks.Task<bool>>;
|
|
310
|
+
using Handler<T> = System.Action<T>;
|
|
311
|
+
|
|
312
|
+
public class FilterService
|
|
313
|
+
{
|
|
314
|
+
public List<User> Filter(List<User> users, Predicate<User> predicate)
|
|
315
|
+
=> users.Where(predicate).ToList();
|
|
316
|
+
|
|
317
|
+
public async Task<List<User>> FilterAsync(List<User> users, AsyncPredicate<User> predicate)
|
|
318
|
+
{
|
|
319
|
+
var result = new List<User>();
|
|
320
|
+
foreach (var user in users)
|
|
321
|
+
{
|
|
322
|
+
if (await predicate(user))
|
|
323
|
+
result.Add(user);
|
|
324
|
+
}
|
|
325
|
+
return result;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## Default Lambda Parameters
|
|
333
|
+
|
|
334
|
+
Lambda expressions can now have default parameter values.
|
|
335
|
+
|
|
336
|
+
### Basic Default Parameters
|
|
337
|
+
|
|
338
|
+
```csharp
|
|
339
|
+
// Lambda with defaults
|
|
340
|
+
var greet = (string name, string greeting = "Hello") => $"{greeting}, {name}!";
|
|
341
|
+
|
|
342
|
+
Console.WriteLine(greet("Alice")); // "Hello, Alice!"
|
|
343
|
+
Console.WriteLine(greet("Bob", "Hi")); // "Hi, Bob!"
|
|
344
|
+
|
|
345
|
+
// Multiple defaults
|
|
346
|
+
var formatDate = (DateTime date, string format = "yyyy-MM-dd", bool utc = false) =>
|
|
347
|
+
(utc ? date.ToUniversalTime() : date).ToString(format);
|
|
348
|
+
|
|
349
|
+
Console.WriteLine(formatDate(DateTime.Now)); // "2024-01-15"
|
|
350
|
+
Console.WriteLine(formatDate(DateTime.Now, "dd/MM/yyyy")); // "15/01/2024"
|
|
351
|
+
Console.WriteLine(formatDate(DateTime.Now, "yyyy-MM-dd", true)); // UTC date
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### In LINQ Expressions
|
|
355
|
+
|
|
356
|
+
```csharp
|
|
357
|
+
// Filter function with default
|
|
358
|
+
Func<User, string, bool> matchesSearch = (user, term = "") =>
|
|
359
|
+
string.IsNullOrEmpty(term) ||
|
|
360
|
+
user.Name.Contains(term, StringComparison.OrdinalIgnoreCase);
|
|
361
|
+
|
|
362
|
+
var users = new List<User> { /* ... */ };
|
|
363
|
+
|
|
364
|
+
// Use without search term
|
|
365
|
+
var allUsers = users.Where(u => matchesSearch(u)).ToList();
|
|
366
|
+
|
|
367
|
+
// Use with search term
|
|
368
|
+
var filtered = users.Where(u => matchesSearch(u, "john")).ToList();
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### Callback Patterns
|
|
372
|
+
|
|
373
|
+
```csharp
|
|
374
|
+
// Event handler with optional context
|
|
375
|
+
Action<string, int, string?> logEvent = (message, level = 1, context = null) =>
|
|
376
|
+
{
|
|
377
|
+
var prefix = level switch
|
|
378
|
+
{
|
|
379
|
+
1 => "INFO",
|
|
380
|
+
2 => "WARN",
|
|
381
|
+
3 => "ERROR",
|
|
382
|
+
_ => "DEBUG"
|
|
383
|
+
};
|
|
384
|
+
var ctx = context is not null ? $" [{context}]" : "";
|
|
385
|
+
Console.WriteLine($"[{prefix}]{ctx} {message}");
|
|
386
|
+
};
|
|
387
|
+
|
|
388
|
+
logEvent("Application started"); // [INFO] Application started
|
|
389
|
+
logEvent("High memory usage", 2); // [WARN] High memory usage
|
|
390
|
+
logEvent("Connection failed", 3, "Database"); // [ERROR] [Database] Connection failed
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Configuration Builders
|
|
394
|
+
|
|
395
|
+
```csharp
|
|
396
|
+
// Builder pattern with defaults
|
|
397
|
+
var createConfig = (
|
|
398
|
+
string host = "localhost",
|
|
399
|
+
int port = 5432,
|
|
400
|
+
string database = "mydb",
|
|
401
|
+
bool ssl = false) => new ConnectionConfig(host, port, database, ssl);
|
|
402
|
+
|
|
403
|
+
var defaultConfig = createConfig();
|
|
404
|
+
var productionConfig = createConfig("prod-db.example.com", ssl: true);
|
|
405
|
+
var customConfig = createConfig(port: 5433, database: "testdb");
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## Inline Arrays
|
|
411
|
+
|
|
412
|
+
Fixed-size arrays allocated inline with the containing type for performance optimization.
|
|
413
|
+
|
|
414
|
+
### Basic Inline Arrays
|
|
415
|
+
|
|
416
|
+
```csharp
|
|
417
|
+
[System.Runtime.CompilerServices.InlineArray(10)]
|
|
418
|
+
public struct Buffer10<T>
|
|
419
|
+
{
|
|
420
|
+
private T _element0;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
public class BufferExample
|
|
424
|
+
{
|
|
425
|
+
public void UseBuffer()
|
|
426
|
+
{
|
|
427
|
+
Buffer10<int> buffer = default;
|
|
428
|
+
|
|
429
|
+
// Access like a span
|
|
430
|
+
Span<int> span = buffer;
|
|
431
|
+
span[0] = 1;
|
|
432
|
+
span[1] = 2;
|
|
433
|
+
|
|
434
|
+
// Iterate
|
|
435
|
+
foreach (var item in span)
|
|
436
|
+
{
|
|
437
|
+
Console.WriteLine(item);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### Performance-Critical Scenarios
|
|
444
|
+
|
|
445
|
+
```csharp
|
|
446
|
+
[InlineArray(16)]
|
|
447
|
+
public struct Vector16
|
|
448
|
+
{
|
|
449
|
+
private float _element0;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
public class VectorMath
|
|
453
|
+
{
|
|
454
|
+
public static float DotProduct(in Vector16 a, in Vector16 b)
|
|
455
|
+
{
|
|
456
|
+
ReadOnlySpan<float> spanA = a;
|
|
457
|
+
ReadOnlySpan<float> spanB = b;
|
|
458
|
+
|
|
459
|
+
float sum = 0;
|
|
460
|
+
for (int i = 0; i < 16; i++)
|
|
461
|
+
{
|
|
462
|
+
sum += spanA[i] * spanB[i];
|
|
463
|
+
}
|
|
464
|
+
return sum;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
---
|
|
470
|
+
|
|
471
|
+
## Interceptors (Experimental)
|
|
472
|
+
|
|
473
|
+
Compile-time method interception for source generators and AOT optimization.
|
|
474
|
+
|
|
475
|
+
### Basic Concept
|
|
476
|
+
|
|
477
|
+
```csharp
|
|
478
|
+
// Note: Interceptors are experimental and require opt-in
|
|
479
|
+
// <Features>InterceptorsPreviewNamespaces=...</Features>
|
|
480
|
+
|
|
481
|
+
// Original method
|
|
482
|
+
public class Calculator
|
|
483
|
+
{
|
|
484
|
+
public int Add(int a, int b) => a + b;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// Interceptor (generated by source generator)
|
|
488
|
+
static class GeneratedInterceptors
|
|
489
|
+
{
|
|
490
|
+
[InterceptsLocation("path/to/file.cs", line: 10, character: 20)]
|
|
491
|
+
public static int Add_Intercepted(this Calculator calc, int a, int b)
|
|
492
|
+
{
|
|
493
|
+
Console.WriteLine($"Intercepted: {a} + {b}");
|
|
494
|
+
return a + b;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
---
|
|
500
|
+
|
|
501
|
+
## Best Practices
|
|
502
|
+
|
|
503
|
+
### When to Use Primary Constructors
|
|
504
|
+
|
|
505
|
+
Good Use Cases:
|
|
506
|
+
- Dependency injection in services
|
|
507
|
+
- Simple data-holding classes
|
|
508
|
+
- Classes with few dependencies
|
|
509
|
+
|
|
510
|
+
Avoid When:
|
|
511
|
+
- Complex initialization logic needed
|
|
512
|
+
- Multiple constructors with different signatures
|
|
513
|
+
- Parameters need validation or transformation
|
|
514
|
+
|
|
515
|
+
### When to Use Collection Expressions
|
|
516
|
+
|
|
517
|
+
Good Use Cases:
|
|
518
|
+
- Creating small fixed collections
|
|
519
|
+
- Combining existing collections
|
|
520
|
+
- Method parameters expecting collections
|
|
521
|
+
|
|
522
|
+
Avoid When:
|
|
523
|
+
- Building collections dynamically in loops
|
|
524
|
+
- Performance-critical large collection operations
|
|
525
|
+
|
|
526
|
+
### Type Aliases Guidelines
|
|
527
|
+
|
|
528
|
+
Good Use Cases:
|
|
529
|
+
- Complex generic types used frequently
|
|
530
|
+
- Tuple types with semantic meaning
|
|
531
|
+
- Improving code readability
|
|
532
|
+
|
|
533
|
+
Avoid When:
|
|
534
|
+
- Simple types that are already clear
|
|
535
|
+
- Types used only once or twice
|
|
536
|
+
- Would confuse rather than clarify
|
|
537
|
+
|
|
538
|
+
---
|
|
539
|
+
|
|
540
|
+
## Migration Guide
|
|
541
|
+
|
|
542
|
+
### From Traditional to Primary Constructors
|
|
543
|
+
|
|
544
|
+
```csharp
|
|
545
|
+
// Before
|
|
546
|
+
public class Service
|
|
547
|
+
{
|
|
548
|
+
private readonly IDependency _dep;
|
|
549
|
+
|
|
550
|
+
public Service(IDependency dep)
|
|
551
|
+
{
|
|
552
|
+
_dep = dep;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
public void DoWork() => _dep.Execute();
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
// After
|
|
559
|
+
public class Service(IDependency dep)
|
|
560
|
+
{
|
|
561
|
+
public void DoWork() => dep.Execute();
|
|
562
|
+
}
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
### From Object Initializers to Collection Expressions
|
|
566
|
+
|
|
567
|
+
```csharp
|
|
568
|
+
// Before
|
|
569
|
+
var list = new List<int> { 1, 2, 3 };
|
|
570
|
+
var array = new int[] { 1, 2, 3 };
|
|
571
|
+
|
|
572
|
+
// After
|
|
573
|
+
List<int> list = [1, 2, 3];
|
|
574
|
+
int[] array = [1, 2, 3];
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
Version: 2.0.0
|
|
580
|
+
Last Updated: 2026-01-06
|