@mytechtoday/augment-extensions 0.2.0 → 0.5.0
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.
- package/README.md +614 -39
- package/augment-extensions/coding-standards/bash/README.md +196 -0
- package/augment-extensions/coding-standards/bash/module.json +163 -0
- package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -0
- package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -0
- package/augment-extensions/coding-standards/css/README.md +40 -0
- package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/css/module.json +44 -0
- package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html/README.md +40 -0
- package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html/module.json +44 -0
- package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/README.md +194 -0
- package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html-css-js/module.json +48 -0
- package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/js/README.md +46 -0
- package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/js/module.json +49 -0
- package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/php/README.md +248 -0
- package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -0
- package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -0
- package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -0
- package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -0
- package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -0
- package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -0
- package/augment-extensions/coding-standards/php/module.json +166 -0
- package/augment-extensions/coding-standards/php/rules/api-development.md +480 -0
- package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -0
- package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -0
- package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -0
- package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -0
- package/augment-extensions/coding-standards/php/rules/documentation.md +425 -0
- package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -0
- package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -0
- package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -0
- package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -0
- package/augment-extensions/coding-standards/php/rules/performance.md +392 -0
- package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -0
- package/augment-extensions/coding-standards/php/rules/security.md +358 -0
- package/augment-extensions/coding-standards/php/rules/testing.md +403 -0
- package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -0
- package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -0
- package/augment-extensions/coding-standards/powershell/README.md +154 -0
- package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -0
- package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -0
- package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -0
- package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -0
- package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -0
- package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -0
- package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -0
- package/augment-extensions/coding-standards/powershell/module.json +165 -0
- package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -0
- package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -0
- package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -0
- package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -0
- package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -0
- package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -0
- package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -0
- package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -0
- package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -0
- package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -0
- package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -0
- package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -0
- package/augment-extensions/coding-standards/python/README.md +12 -8
- package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -0
- package/augment-extensions/coding-standards/python/module.json +8 -4
- package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -0
- package/augment-extensions/coding-standards/python/rules/documentation.md +831 -0
- package/augment-extensions/coding-standards/python/rules/error-handling.md +855 -68
- package/augment-extensions/coding-standards/python/rules/testing.md +409 -0
- package/augment-extensions/coding-standards/python/rules/tooling.md +446 -0
- package/augment-extensions/coding-standards/python/rules/type-hints.md +115 -50
- package/augment-extensions/collections/html-css-js/README.md +82 -0
- package/augment-extensions/collections/html-css-js/collection.json +41 -0
- package/augment-extensions/domain-rules/database/README.md +161 -0
- package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -0
- package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -0
- package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -0
- package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -0
- package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -0
- package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -0
- package/augment-extensions/domain-rules/database/module.json +28 -0
- package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -0
- package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -0
- package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -0
- package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -0
- package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -0
- package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -0
- package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -0
- package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -0
- package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -0
- package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -0
- package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -0
- package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -0
- package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -0
- package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -0
- package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -0
- package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/README.md +136 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/SCHEMA-VALIDATION-REPORT.md +216 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/brand-kit-example.yaml +292 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/campaign-brief-example.yaml +389 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/content-calendar-example.yaml +643 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/email-newsletter-example.md +376 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/landing-page-example.md +934 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/ppc-ad-copy-example.md +301 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/seo-blog-post-example.md +347 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/social-media-campaign-example.md +606 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/module.json +50 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/affiliate-influencer-marketing.md +593 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/asset-management.md +418 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/brand-consistency.md +210 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/content-marketing.md +337 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/conversion-optimization.md +455 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/direct-sales.md +499 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/email-marketing.md +439 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/legal-compliance.md +227 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/ppc-advertising.md +569 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/seo-optimization.md +470 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/social-media-marketing.md +414 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/universal-marketing.md +177 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/asset-inventory.schema.json +247 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/brand-kit.schema.json +326 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/campaign-brief.schema.json +342 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/color-palette.schema.json +223 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/content-template.schema.json +383 -0
- package/augment-extensions/domain-rules/mcp/README.md +150 -0
- package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -0
- package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -0
- package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -0
- package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -0
- package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -0
- package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -0
- package/augment-extensions/domain-rules/mcp/module.json +49 -0
- package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -0
- package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -0
- package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -0
- package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -0
- package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -0
- package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -0
- package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -0
- package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -0
- package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -0
- package/augment-extensions/workflows/beads/module.json +4 -3
- package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -0
- package/augment-extensions/workflows/beads-integration/README.md +143 -0
- package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -0
- package/augment-extensions/workflows/beads-integration/config/schema.json +140 -0
- package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -0
- package/augment-extensions/workflows/beads-integration/module.json +75 -0
- package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -0
- package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -0
- package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -0
- package/augment-extensions/workflows/database/README.md +195 -0
- package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -0
- package/augment-extensions/workflows/database/examples/migration-example.md +498 -0
- package/augment-extensions/workflows/database/examples/optimization-example.md +496 -0
- package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -0
- package/augment-extensions/workflows/database/module.json +42 -0
- package/augment-extensions/workflows/database/rules/data-migration.md +249 -0
- package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -0
- package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -0
- package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -0
- package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -0
- package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -0
- package/augment-extensions/workflows/database/rules/workflow.md +458 -0
- package/augment-extensions/workflows/openspec/module.json +4 -3
- package/augment-extensions/writing-standards/screenplay/README.md +300 -0
- package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -0
- package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -0
- package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -0
- package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -0
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -0
- package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -0
- package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -0
- package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -0
- package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -0
- package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -0
- package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -0
- package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -0
- package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -0
- package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -0
- package/augment-extensions/writing-standards/screenplay/module.json +124 -0
- package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -0
- package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -0
- package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -0
- package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -0
- package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -0
- package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -0
- package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -0
- package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -0
- package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -0
- package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -0
- package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -0
- package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -0
- package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -0
- package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -0
- package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -0
- package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -0
- package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -0
- package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -0
- package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -0
- package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -0
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -0
- package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -0
- package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -0
- package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -0
- package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -0
- package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -0
- package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -0
- package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -0
- package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -0
- package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -0
- package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -0
- package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -0
- package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -0
- package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -0
- package/cli/MODULES.md +302 -0
- package/cli/dist/cli.js +168 -10
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/catalog.d.ts +13 -0
- package/cli/dist/commands/catalog.d.ts.map +1 -0
- package/cli/dist/commands/catalog.js +104 -0
- package/cli/dist/commands/catalog.js.map +1 -0
- package/cli/dist/commands/gui.d.ts +6 -0
- package/cli/dist/commands/gui.d.ts.map +1 -0
- package/cli/dist/commands/gui.js +211 -0
- package/cli/dist/commands/gui.js.map +1 -0
- package/cli/dist/commands/init.d.ts.map +1 -1
- package/cli/dist/commands/init.js +12 -0
- package/cli/dist/commands/init.js.map +1 -1
- package/cli/dist/commands/install-rules.d.ts +14 -0
- package/cli/dist/commands/install-rules.d.ts.map +1 -0
- package/cli/dist/commands/install-rules.js +127 -0
- package/cli/dist/commands/install-rules.js.map +1 -0
- package/cli/dist/commands/link.d.ts.map +1 -1
- package/cli/dist/commands/link.js +9 -11
- package/cli/dist/commands/link.js.map +1 -1
- package/cli/dist/commands/list.d.ts.map +1 -1
- package/cli/dist/commands/list.js +11 -28
- package/cli/dist/commands/list.js.map +1 -1
- package/cli/dist/commands/mcp.d.ts +48 -0
- package/cli/dist/commands/mcp.d.ts.map +1 -0
- package/cli/dist/commands/mcp.js +229 -0
- package/cli/dist/commands/mcp.js.map +1 -0
- package/cli/dist/commands/self-remove.d.ts +7 -0
- package/cli/dist/commands/self-remove.d.ts.map +1 -0
- package/cli/dist/commands/self-remove.js +179 -0
- package/cli/dist/commands/self-remove.js.map +1 -0
- package/cli/dist/commands/show.d.ts +19 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +478 -63
- package/cli/dist/commands/show.js.map +1 -1
- package/cli/dist/commands/skill.d.ts +67 -0
- package/cli/dist/commands/skill.d.ts.map +1 -0
- package/cli/dist/commands/skill.js +513 -0
- package/cli/dist/commands/skill.js.map +1 -0
- package/cli/dist/commands/unlink.d.ts +6 -0
- package/cli/dist/commands/unlink.d.ts.map +1 -0
- package/cli/dist/commands/unlink.js +115 -0
- package/cli/dist/commands/unlink.js.map +1 -0
- package/cli/dist/commands/validate.d.ts +6 -0
- package/cli/dist/commands/validate.d.ts.map +1 -0
- package/cli/dist/commands/validate.js +159 -0
- package/cli/dist/commands/validate.js.map +1 -0
- package/cli/dist/types/gui.d.ts +62 -0
- package/cli/dist/types/gui.d.ts.map +1 -0
- package/cli/dist/types/gui.js +30 -0
- package/cli/dist/types/gui.js.map +1 -0
- package/cli/dist/utils/catalog-sync.d.ts +22 -0
- package/cli/dist/utils/catalog-sync.d.ts.map +1 -0
- package/cli/dist/utils/catalog-sync.js +157 -0
- package/cli/dist/utils/catalog-sync.js.map +1 -0
- package/cli/dist/utils/character-count.d.ts +56 -0
- package/cli/dist/utils/character-count.d.ts.map +1 -0
- package/cli/dist/utils/character-count.js +190 -0
- package/cli/dist/utils/character-count.js.map +1 -0
- package/cli/dist/utils/documentation-validator.d.ts +18 -0
- package/cli/dist/utils/documentation-validator.d.ts.map +1 -0
- package/cli/dist/utils/documentation-validator.js +233 -0
- package/cli/dist/utils/documentation-validator.js.map +1 -0
- package/cli/dist/utils/gui-helpers.d.ts +23 -0
- package/cli/dist/utils/gui-helpers.d.ts.map +1 -0
- package/cli/dist/utils/gui-helpers.js +159 -0
- package/cli/dist/utils/gui-helpers.js.map +1 -0
- package/cli/dist/utils/install-rules.d.ts +32 -0
- package/cli/dist/utils/install-rules.d.ts.map +1 -0
- package/cli/dist/utils/install-rules.js +375 -0
- package/cli/dist/utils/install-rules.js.map +1 -0
- package/cli/dist/utils/mcp-integration.d.ts +70 -0
- package/cli/dist/utils/mcp-integration.d.ts.map +1 -0
- package/cli/dist/utils/mcp-integration.js +292 -0
- package/cli/dist/utils/mcp-integration.js.map +1 -0
- package/cli/dist/utils/module-system.d.ts +232 -0
- package/cli/dist/utils/module-system.d.ts.map +1 -0
- package/cli/dist/utils/module-system.js +900 -0
- package/cli/dist/utils/module-system.js.map +1 -0
- package/cli/dist/utils/modules-catalog.d.ts +33 -0
- package/cli/dist/utils/modules-catalog.d.ts.map +1 -0
- package/cli/dist/utils/modules-catalog.js +163 -0
- package/cli/dist/utils/modules-catalog.js.map +1 -0
- package/cli/dist/utils/rule-install-hooks.d.ts +19 -0
- package/cli/dist/utils/rule-install-hooks.d.ts.map +1 -0
- package/cli/dist/utils/rule-install-hooks.js +224 -0
- package/cli/dist/utils/rule-install-hooks.js.map +1 -0
- package/cli/dist/utils/skill-system.d.ts +95 -0
- package/cli/dist/utils/skill-system.d.ts.map +1 -0
- package/cli/dist/utils/skill-system.js +313 -0
- package/cli/dist/utils/skill-system.js.map +1 -0
- package/modules.md +559 -105
- package/package.json +17 -6
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# PowerShell Universal Standards
|
|
2
|
+
|
|
3
|
+
Cross-cutting standards that apply to ALL PowerShell code regardless of project category.
|
|
4
|
+
|
|
5
|
+
## Core Principles
|
|
6
|
+
|
|
7
|
+
### 1. Readability First
|
|
8
|
+
- Code is read more often than written
|
|
9
|
+
- Optimize for maintainability over cleverness
|
|
10
|
+
- Use descriptive names over comments when possible
|
|
11
|
+
|
|
12
|
+
### 2. Consistency
|
|
13
|
+
- Follow established patterns within the codebase
|
|
14
|
+
- Use consistent formatting and style
|
|
15
|
+
- Maintain consistent error handling approaches
|
|
16
|
+
|
|
17
|
+
### 3. Explicit Over Implicit
|
|
18
|
+
- Prefer explicit parameter names
|
|
19
|
+
- Avoid positional parameters in scripts
|
|
20
|
+
- Use full cmdlet names in scripts (aliases OK in console)
|
|
21
|
+
|
|
22
|
+
## Script Structure
|
|
23
|
+
|
|
24
|
+
### Script Header Template
|
|
25
|
+
|
|
26
|
+
```powershell
|
|
27
|
+
<#
|
|
28
|
+
.SYNOPSIS
|
|
29
|
+
Brief description of what the script does
|
|
30
|
+
|
|
31
|
+
.DESCRIPTION
|
|
32
|
+
Detailed description of functionality, requirements, and behavior
|
|
33
|
+
|
|
34
|
+
.PARAMETER ParameterName
|
|
35
|
+
Description of each parameter
|
|
36
|
+
|
|
37
|
+
.EXAMPLE
|
|
38
|
+
Example-Command -Parameter Value
|
|
39
|
+
Description of what this example does
|
|
40
|
+
|
|
41
|
+
.NOTES
|
|
42
|
+
Author: Your Name
|
|
43
|
+
Version: 1.0.0
|
|
44
|
+
Last Modified: 2026-01-30
|
|
45
|
+
Requires: PowerShell 7.4+
|
|
46
|
+
|
|
47
|
+
.LINK
|
|
48
|
+
https://docs.microsoft.com/powershell/
|
|
49
|
+
#>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Strict Mode
|
|
53
|
+
|
|
54
|
+
**ALWAYS** enable strict mode at the beginning of scripts:
|
|
55
|
+
|
|
56
|
+
```powershell
|
|
57
|
+
#Requires -Version 7.4
|
|
58
|
+
Set-StrictMode -Version Latest
|
|
59
|
+
$ErrorActionPreference = 'Stop'
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Why:**
|
|
63
|
+
- Catches undefined variables
|
|
64
|
+
- Enforces best practices
|
|
65
|
+
- Prevents silent failures
|
|
66
|
+
|
|
67
|
+
### Script Organization
|
|
68
|
+
|
|
69
|
+
```powershell
|
|
70
|
+
#Requires -Version 7.4
|
|
71
|
+
Set-StrictMode -Version Latest
|
|
72
|
+
|
|
73
|
+
# 1. Script header (comment-based help)
|
|
74
|
+
# 2. Parameters
|
|
75
|
+
# 3. Functions (if any)
|
|
76
|
+
# 4. Main script logic
|
|
77
|
+
# 5. Cleanup (if needed)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Code Style
|
|
81
|
+
|
|
82
|
+
### Indentation
|
|
83
|
+
- **4 spaces** (not tabs)
|
|
84
|
+
- Consistent throughout file
|
|
85
|
+
|
|
86
|
+
### Brace Style
|
|
87
|
+
Use **Allman style** (opening brace on new line):
|
|
88
|
+
|
|
89
|
+
```powershell
|
|
90
|
+
# ✅ Correct
|
|
91
|
+
if ($condition)
|
|
92
|
+
{
|
|
93
|
+
Write-Output "True"
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# ❌ Incorrect
|
|
97
|
+
if ($condition) {
|
|
98
|
+
Write-Output "True"
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Line Length
|
|
103
|
+
- **Maximum 120 characters** per line
|
|
104
|
+
- Break long lines at logical points
|
|
105
|
+
- Use splatting for long parameter lists
|
|
106
|
+
|
|
107
|
+
```powershell
|
|
108
|
+
# ✅ Use splatting for readability
|
|
109
|
+
$params = @{
|
|
110
|
+
Path = 'C:\Logs\application.log'
|
|
111
|
+
Filter = '*.log'
|
|
112
|
+
Recurse = $true
|
|
113
|
+
ErrorAction = 'Stop'
|
|
114
|
+
}
|
|
115
|
+
Get-ChildItem @params
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Whitespace
|
|
119
|
+
- One blank line between functions
|
|
120
|
+
- No trailing whitespace
|
|
121
|
+
- Blank line at end of file
|
|
122
|
+
|
|
123
|
+
## Comments
|
|
124
|
+
|
|
125
|
+
### When to Comment
|
|
126
|
+
|
|
127
|
+
✅ **DO comment:**
|
|
128
|
+
- Complex algorithms or business logic
|
|
129
|
+
- Non-obvious workarounds
|
|
130
|
+
- Regex patterns
|
|
131
|
+
- Magic numbers
|
|
132
|
+
|
|
133
|
+
❌ **DON'T comment:**
|
|
134
|
+
- Obvious code
|
|
135
|
+
- What the code does (use descriptive names instead)
|
|
136
|
+
- Commented-out code (use version control)
|
|
137
|
+
|
|
138
|
+
### Comment Style
|
|
139
|
+
|
|
140
|
+
```powershell
|
|
141
|
+
# Single-line comment for brief explanations
|
|
142
|
+
|
|
143
|
+
<#
|
|
144
|
+
Multi-line comment for:
|
|
145
|
+
- Longer explanations
|
|
146
|
+
- Temporarily disabling code blocks
|
|
147
|
+
- Documentation
|
|
148
|
+
#>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Output and Logging
|
|
152
|
+
|
|
153
|
+
### Use Appropriate Streams
|
|
154
|
+
|
|
155
|
+
```powershell
|
|
156
|
+
# Information (default output)
|
|
157
|
+
Write-Output "Processing complete"
|
|
158
|
+
|
|
159
|
+
# Verbose (detailed progress)
|
|
160
|
+
Write-Verbose "Processing file: $fileName" -Verbose:$VerbosePreference
|
|
161
|
+
|
|
162
|
+
# Warning (non-fatal issues)
|
|
163
|
+
Write-Warning "File not found, using default"
|
|
164
|
+
|
|
165
|
+
# Error (fatal issues)
|
|
166
|
+
Write-Error "Cannot proceed without required file"
|
|
167
|
+
|
|
168
|
+
# Debug (troubleshooting)
|
|
169
|
+
Write-Debug "Variable value: $myVar" -Debug:$DebugPreference
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Structured Logging
|
|
173
|
+
|
|
174
|
+
```powershell
|
|
175
|
+
function Write-Log
|
|
176
|
+
{
|
|
177
|
+
[CmdletBinding()]
|
|
178
|
+
param(
|
|
179
|
+
[Parameter(Mandatory)]
|
|
180
|
+
[string]$Message,
|
|
181
|
+
|
|
182
|
+
[ValidateSet('Info', 'Warning', 'Error')]
|
|
183
|
+
[string]$Level = 'Info'
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
$timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
|
|
187
|
+
$logMessage = "[$timestamp] [$Level] $Message"
|
|
188
|
+
|
|
189
|
+
switch ($Level)
|
|
190
|
+
{
|
|
191
|
+
'Info' { Write-Output $logMessage }
|
|
192
|
+
'Warning' { Write-Warning $logMessage }
|
|
193
|
+
'Error' { Write-Error $logMessage }
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
@@ -8,10 +8,11 @@ This module provides detailed guidelines for writing clean, maintainable, and Py
|
|
|
8
8
|
|
|
9
9
|
## Key Benefits
|
|
10
10
|
|
|
11
|
-
- **Type Safety**: Comprehensive type hints usage
|
|
11
|
+
- **Type Safety**: Comprehensive type hints usage with modern syntax (PEP 484, 585, 604)
|
|
12
12
|
- **Error Handling**: Proper exception handling patterns
|
|
13
13
|
- **Code Quality**: PEP 8 compliance and best practices
|
|
14
14
|
- **Modern Python**: Python 3.10+ features and patterns
|
|
15
|
+
- **Mypy Integration**: Static type checking configuration
|
|
15
16
|
|
|
16
17
|
## Installation
|
|
17
18
|
|
|
@@ -23,22 +24,25 @@ augx link coding-standards/python
|
|
|
23
24
|
|
|
24
25
|
### Rules
|
|
25
26
|
|
|
26
|
-
- **naming-conventions.md** - PEP 8 naming standards
|
|
27
|
-
- **type-hints.md** -
|
|
27
|
+
- **naming-conventions.md** - PEP 8 naming standards (snake_case, UPPER_SNAKE_CASE, PascalCase, _private)
|
|
28
|
+
- **type-hints.md** - Modern type hints (PEP 484, 585, 604) with list[str], str | None, mypy
|
|
28
29
|
- **error-handling.md** - Exception handling patterns
|
|
29
30
|
- **best-practices.md** - General Python best practices
|
|
30
|
-
- **code-organization.md** -
|
|
31
|
+
- **code-organization.md** - Import organization (stdlib, third-party, local), class structure, module layout
|
|
32
|
+
- **async-patterns.md** - Async/await patterns with asyncio
|
|
33
|
+
- **documentation.md** - Docstring standards and documentation best practices
|
|
34
|
+
- **testing.md** - pytest testing framework, fixtures, parametrization, mocking, coverage
|
|
35
|
+
- **tooling.md** - Black (formatter), mypy (type checker), Ruff (linter), pre-commit hooks, CI/CD
|
|
31
36
|
|
|
32
37
|
### Examples
|
|
33
38
|
|
|
34
|
-
- **
|
|
35
|
-
- **error-handling-examples.md** - Exception handling examples
|
|
39
|
+
- **best-practices.py** - Comprehensive Python code examples demonstrating naming conventions, type hints, error handling, async patterns, dataclasses, enums, and modern Python features
|
|
36
40
|
|
|
37
41
|
## Character Count
|
|
38
42
|
|
|
39
|
-
~
|
|
43
|
+
~116,868 characters
|
|
40
44
|
|
|
41
45
|
## Version
|
|
42
46
|
|
|
43
|
-
1.
|
|
47
|
+
1.1.0
|
|
44
48
|
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Python Best Practices Examples
|
|
3
|
+
|
|
4
|
+
This module demonstrates Python coding best practices including:
|
|
5
|
+
- Naming conventions (PEP 8)
|
|
6
|
+
- Type hints (PEP 484, 585, 604)
|
|
7
|
+
- Error handling
|
|
8
|
+
- Async patterns
|
|
9
|
+
- Code organization
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import asyncio
|
|
15
|
+
import logging
|
|
16
|
+
from collections.abc import Callable, Iterator
|
|
17
|
+
from contextlib import contextmanager
|
|
18
|
+
from dataclasses import dataclass
|
|
19
|
+
from enum import Enum
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
from typing import Any, Protocol
|
|
22
|
+
|
|
23
|
+
# Configure logging
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# ============================================================================
|
|
28
|
+
# NAMING CONVENTIONS (PEP 8)
|
|
29
|
+
# ============================================================================
|
|
30
|
+
|
|
31
|
+
# Constants: UPPER_SNAKE_CASE
|
|
32
|
+
MAX_RETRY_ATTEMPTS = 3
|
|
33
|
+
DEFAULT_TIMEOUT = 30
|
|
34
|
+
API_BASE_URL = "https://api.example.com"
|
|
35
|
+
|
|
36
|
+
# Classes: PascalCase
|
|
37
|
+
class UserAccount:
|
|
38
|
+
"""Represents a user account"""
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
class HTTPClient:
|
|
42
|
+
"""HTTP client for API requests"""
|
|
43
|
+
pass
|
|
44
|
+
|
|
45
|
+
# Functions and variables: snake_case
|
|
46
|
+
def calculate_total_price(items: list[dict[str, Any]]) -> float:
|
|
47
|
+
"""Calculate total price from list of items"""
|
|
48
|
+
return sum(item.get("price", 0.0) for item in items)
|
|
49
|
+
|
|
50
|
+
# Private attributes: _leading_underscore
|
|
51
|
+
class BankAccount:
|
|
52
|
+
def __init__(self, account_number: str, balance: float) -> None:
|
|
53
|
+
self.account_number = account_number
|
|
54
|
+
self._balance = balance # Private attribute
|
|
55
|
+
|
|
56
|
+
def get_balance(self) -> float:
|
|
57
|
+
"""Public method to access private balance"""
|
|
58
|
+
return self._balance
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# ============================================================================
|
|
62
|
+
# TYPE HINTS (PEP 484, 585, 604)
|
|
63
|
+
# ============================================================================
|
|
64
|
+
|
|
65
|
+
# Modern collection types (Python 3.10+, PEP 585)
|
|
66
|
+
def process_user_data(
|
|
67
|
+
users: list[dict[str, Any]]
|
|
68
|
+
) -> dict[str, list[str]]:
|
|
69
|
+
"""Process user data and return grouped by role"""
|
|
70
|
+
result: dict[str, list[str]] = {}
|
|
71
|
+
for user in users:
|
|
72
|
+
role = user.get("role", "unknown")
|
|
73
|
+
if role not in result:
|
|
74
|
+
result[role] = []
|
|
75
|
+
result[role].append(user["name"])
|
|
76
|
+
return result
|
|
77
|
+
|
|
78
|
+
# Union types with | operator (Python 3.10+, PEP 604)
|
|
79
|
+
def find_user(user_id: int) -> dict[str, Any] | None:
|
|
80
|
+
"""Find user by ID, returns None if not found"""
|
|
81
|
+
# Simulated database lookup
|
|
82
|
+
return None
|
|
83
|
+
|
|
84
|
+
# Optional parameters with default values
|
|
85
|
+
def create_user(
|
|
86
|
+
username: str,
|
|
87
|
+
email: str,
|
|
88
|
+
age: int | None = None,
|
|
89
|
+
is_active: bool = True
|
|
90
|
+
) -> dict[str, Any]:
|
|
91
|
+
"""Create a new user with optional age"""
|
|
92
|
+
return {
|
|
93
|
+
"username": username,
|
|
94
|
+
"email": email,
|
|
95
|
+
"age": age,
|
|
96
|
+
"is_active": is_active
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
# Callable type hints
|
|
100
|
+
def apply_operation(
|
|
101
|
+
value: int,
|
|
102
|
+
operation: Callable[[int], int]
|
|
103
|
+
) -> int:
|
|
104
|
+
"""Apply an operation function to a value"""
|
|
105
|
+
return operation(value)
|
|
106
|
+
|
|
107
|
+
# Protocol for structural subtyping
|
|
108
|
+
class Drawable(Protocol):
|
|
109
|
+
"""Protocol for objects that can be drawn"""
|
|
110
|
+
def draw(self) -> None:
|
|
111
|
+
"""Draw the object"""
|
|
112
|
+
...
|
|
113
|
+
|
|
114
|
+
def render(obj: Drawable) -> None:
|
|
115
|
+
"""Render any drawable object"""
|
|
116
|
+
obj.draw()
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
# ============================================================================
|
|
120
|
+
# DATACLASSES
|
|
121
|
+
# ============================================================================
|
|
122
|
+
|
|
123
|
+
@dataclass
|
|
124
|
+
class User:
|
|
125
|
+
"""User model using dataclass"""
|
|
126
|
+
username: str
|
|
127
|
+
email: str
|
|
128
|
+
age: int | None = None
|
|
129
|
+
is_active: bool = True
|
|
130
|
+
|
|
131
|
+
def __post_init__(self) -> None:
|
|
132
|
+
"""Validate data after initialization"""
|
|
133
|
+
if not self.email or "@" not in self.email:
|
|
134
|
+
raise ValueError(f"Invalid email: {self.email}")
|
|
135
|
+
if self.age is not None and self.age < 0:
|
|
136
|
+
raise ValueError(f"Age cannot be negative: {self.age}")
|
|
137
|
+
|
|
138
|
+
@dataclass(frozen=True)
|
|
139
|
+
class Point:
|
|
140
|
+
"""Immutable point using frozen dataclass"""
|
|
141
|
+
x: float
|
|
142
|
+
y: float
|
|
143
|
+
|
|
144
|
+
def distance_from_origin(self) -> float:
|
|
145
|
+
"""Calculate distance from origin"""
|
|
146
|
+
return (self.x ** 2 + self.y ** 2) ** 0.5
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
# ============================================================================
|
|
150
|
+
# ENUMS
|
|
151
|
+
# ============================================================================
|
|
152
|
+
|
|
153
|
+
class UserRole(Enum):
|
|
154
|
+
"""User role enumeration"""
|
|
155
|
+
ADMIN = "admin"
|
|
156
|
+
MODERATOR = "moderator"
|
|
157
|
+
USER = "user"
|
|
158
|
+
GUEST = "guest"
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
# ============================================================================
|
|
162
|
+
# ERROR HANDLING
|
|
163
|
+
# ============================================================================
|
|
164
|
+
|
|
165
|
+
class ValidationError(Exception):
|
|
166
|
+
"""Custom exception for validation errors"""
|
|
167
|
+
pass
|
|
168
|
+
|
|
169
|
+
class UserNotFoundError(Exception):
|
|
170
|
+
"""Custom exception for user not found"""
|
|
171
|
+
pass
|
|
172
|
+
|
|
173
|
+
def validate_email(email: str) -> None:
|
|
174
|
+
"""Validate email format, raises ValidationError if invalid"""
|
|
175
|
+
if not email or "@" not in email:
|
|
176
|
+
raise ValidationError(f"Invalid email format: {email}")
|
|
177
|
+
|
|
178
|
+
def get_user_by_id(user_id: int) -> dict[str, Any]:
|
|
179
|
+
"""Get user by ID with proper error handling"""
|
|
180
|
+
try:
|
|
181
|
+
# Simulated database call
|
|
182
|
+
user = find_user(user_id)
|
|
183
|
+
if user is None:
|
|
184
|
+
raise UserNotFoundError(f"User {user_id} not found")
|
|
185
|
+
return user
|
|
186
|
+
except UserNotFoundError:
|
|
187
|
+
logger.error(f"User {user_id} not found")
|
|
188
|
+
raise
|
|
189
|
+
except Exception as e:
|
|
190
|
+
logger.exception(f"Unexpected error fetching user {user_id}")
|
|
191
|
+
raise RuntimeError(f"Failed to fetch user: {e}") from e
|
|
192
|
+
|
|
193
|
+
# Context manager for resource management
|
|
194
|
+
@contextmanager
|
|
195
|
+
def open_database_connection(db_path: str) -> Iterator[Any]:
|
|
196
|
+
"""Context manager for database connection"""
|
|
197
|
+
connection = None
|
|
198
|
+
try:
|
|
199
|
+
# Simulated connection
|
|
200
|
+
connection = f"Connection to {db_path}"
|
|
201
|
+
logger.info(f"Opened database connection: {db_path}")
|
|
202
|
+
yield connection
|
|
203
|
+
except Exception as e:
|
|
204
|
+
logger.error(f"Database error: {e}")
|
|
205
|
+
raise
|
|
206
|
+
finally:
|
|
207
|
+
if connection:
|
|
208
|
+
logger.info(f"Closed database connection: {db_path}")
|
|
209
|
+
|
|
210
|
+
# Using context manager
|
|
211
|
+
def query_database(db_path: str, query: str) -> list[dict[str, Any]]:
|
|
212
|
+
"""Query database using context manager"""
|
|
213
|
+
with open_database_connection(db_path) as conn:
|
|
214
|
+
# Execute query
|
|
215
|
+
logger.info(f"Executing query: {query}")
|
|
216
|
+
return []
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
# ============================================================================
|
|
220
|
+
# ASYNC PATTERNS
|
|
221
|
+
# ============================================================================
|
|
222
|
+
|
|
223
|
+
async def fetch_user_async(user_id: int) -> dict[str, Any] | None:
|
|
224
|
+
"""Async function to fetch user data"""
|
|
225
|
+
await asyncio.sleep(0.1) # Simulate network delay
|
|
226
|
+
return {"id": user_id, "name": f"User {user_id}"}
|
|
227
|
+
|
|
228
|
+
async def fetch_multiple_users(user_ids: list[int]) -> list[dict[str, Any]]:
|
|
229
|
+
"""Fetch multiple users concurrently"""
|
|
230
|
+
tasks = [fetch_user_async(user_id) for user_id in user_ids]
|
|
231
|
+
results = await asyncio.gather(*tasks)
|
|
232
|
+
return [user for user in results if user is not None]
|
|
233
|
+
|
|
234
|
+
async def process_with_timeout(user_id: int, timeout: float = 5.0) -> dict[str, Any] | None:
|
|
235
|
+
"""Process with timeout"""
|
|
236
|
+
try:
|
|
237
|
+
return await asyncio.wait_for(
|
|
238
|
+
fetch_user_async(user_id),
|
|
239
|
+
timeout=timeout
|
|
240
|
+
)
|
|
241
|
+
except asyncio.TimeoutError:
|
|
242
|
+
logger.warning(f"Timeout fetching user {user_id}")
|
|
243
|
+
return None
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
# ============================================================================
|
|
247
|
+
# CODE ORGANIZATION
|
|
248
|
+
# ============================================================================
|
|
249
|
+
|
|
250
|
+
class UserService:
|
|
251
|
+
"""Service class for user operations"""
|
|
252
|
+
|
|
253
|
+
def __init__(self, db_path: str) -> None:
|
|
254
|
+
self._db_path = db_path
|
|
255
|
+
self._cache: dict[int, dict[str, Any]] = {}
|
|
256
|
+
|
|
257
|
+
def get_user(self, user_id: int) -> dict[str, Any] | None:
|
|
258
|
+
"""Get user from cache or database"""
|
|
259
|
+
if user_id in self._cache:
|
|
260
|
+
return self._cache[user_id]
|
|
261
|
+
|
|
262
|
+
user = find_user(user_id)
|
|
263
|
+
if user:
|
|
264
|
+
self._cache[user_id] = user
|
|
265
|
+
return user
|
|
266
|
+
|
|
267
|
+
def create_user(self, username: str, email: str) -> dict[str, Any]:
|
|
268
|
+
"""Create a new user"""
|
|
269
|
+
validate_email(email)
|
|
270
|
+
user = {
|
|
271
|
+
"id": len(self._cache) + 1,
|
|
272
|
+
"username": username,
|
|
273
|
+
"email": email
|
|
274
|
+
}
|
|
275
|
+
self._cache[user["id"]] = user
|
|
276
|
+
return user
|
|
277
|
+
|
|
278
|
+
def clear_cache(self) -> None:
|
|
279
|
+
"""Clear the user cache"""
|
|
280
|
+
self._cache.clear()
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
# ============================================================================
|
|
284
|
+
# BEST PRACTICES EXAMPLES
|
|
285
|
+
# ============================================================================
|
|
286
|
+
|
|
287
|
+
# Use list comprehensions instead of loops
|
|
288
|
+
def get_active_users(users: list[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
289
|
+
"""Get all active users using list comprehension"""
|
|
290
|
+
return [user for user in users if user.get("is_active", False)]
|
|
291
|
+
|
|
292
|
+
# Use dict comprehensions
|
|
293
|
+
def create_user_lookup(users: list[dict[str, Any]]) -> dict[int, str]:
|
|
294
|
+
"""Create user ID to name lookup using dict comprehension"""
|
|
295
|
+
return {user["id"]: user["name"] for user in users if "id" in user}
|
|
296
|
+
|
|
297
|
+
# Use enumerate instead of range(len())
|
|
298
|
+
def print_users_with_index(users: list[str]) -> None:
|
|
299
|
+
"""Print users with index using enumerate"""
|
|
300
|
+
for index, user in enumerate(users, start=1):
|
|
301
|
+
print(f"{index}. {user}")
|
|
302
|
+
|
|
303
|
+
# Use zip for parallel iteration
|
|
304
|
+
def combine_data(names: list[str], ages: list[int]) -> list[dict[str, Any]]:
|
|
305
|
+
"""Combine parallel lists using zip"""
|
|
306
|
+
return [{"name": name, "age": age} for name, age in zip(names, ages)]
|
|
307
|
+
|
|
308
|
+
# Use pathlib instead of os.path
|
|
309
|
+
def read_config_file(config_name: str) -> str:
|
|
310
|
+
"""Read config file using pathlib"""
|
|
311
|
+
config_path = Path(__file__).parent / "config" / f"{config_name}.json"
|
|
312
|
+
if not config_path.exists():
|
|
313
|
+
raise FileNotFoundError(f"Config file not found: {config_path}")
|
|
314
|
+
return config_path.read_text()
|
|
315
|
+
|
|
316
|
+
# Use f-strings for formatting
|
|
317
|
+
def format_user_info(user: dict[str, Any]) -> str:
|
|
318
|
+
"""Format user info using f-strings"""
|
|
319
|
+
name = user.get("name", "Unknown")
|
|
320
|
+
age = user.get("age", "N/A")
|
|
321
|
+
return f"User: {name}, Age: {age}"
|
|
322
|
+
|
|
323
|
+
# Use walrus operator for assignment in expressions (Python 3.8+)
|
|
324
|
+
def process_data(data: list[str]) -> list[str]:
|
|
325
|
+
"""Process data using walrus operator"""
|
|
326
|
+
results = []
|
|
327
|
+
for item in data:
|
|
328
|
+
if (processed := item.strip().upper()):
|
|
329
|
+
results.append(processed)
|
|
330
|
+
return results
|
|
331
|
+
|
|
332
|
+
# Use match-case for pattern matching (Python 3.10+)
|
|
333
|
+
def handle_response(status_code: int) -> str:
|
|
334
|
+
"""Handle HTTP response using match-case"""
|
|
335
|
+
match status_code:
|
|
336
|
+
case 200:
|
|
337
|
+
return "Success"
|
|
338
|
+
case 404:
|
|
339
|
+
return "Not Found"
|
|
340
|
+
case 500:
|
|
341
|
+
return "Server Error"
|
|
342
|
+
case _:
|
|
343
|
+
return f"Unknown status: {status_code}"
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
# ============================================================================
|
|
347
|
+
# MAIN EXECUTION
|
|
348
|
+
# ============================================================================
|
|
349
|
+
|
|
350
|
+
def main() -> None:
|
|
351
|
+
"""Main function demonstrating best practices"""
|
|
352
|
+
# Create users
|
|
353
|
+
user1 = User(username="alice", email="alice@example.com", age=30)
|
|
354
|
+
user2 = User(username="bob", email="bob@example.com")
|
|
355
|
+
|
|
356
|
+
print(f"Created users: {user1}, {user2}")
|
|
357
|
+
|
|
358
|
+
# Use service
|
|
359
|
+
service = UserService(db_path="users.db")
|
|
360
|
+
new_user = service.create_user("charlie", "charlie@example.com")
|
|
361
|
+
print(f"Created user via service: {new_user}")
|
|
362
|
+
|
|
363
|
+
# Demonstrate async
|
|
364
|
+
async def run_async_example() -> None:
|
|
365
|
+
users = await fetch_multiple_users([1, 2, 3])
|
|
366
|
+
print(f"Fetched users: {users}")
|
|
367
|
+
|
|
368
|
+
asyncio.run(run_async_example())
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
if __name__ == "__main__":
|
|
372
|
+
main()
|
|
373
|
+
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "python-standards",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"displayName": "Python Coding Standards",
|
|
5
|
-
"description": "Comprehensive Python coding standards including naming conventions, type hints, and error handling",
|
|
5
|
+
"description": "Comprehensive Python coding standards including naming conventions, type hints (PEP 484, 585, 604), and error handling",
|
|
6
6
|
"type": "coding-standards",
|
|
7
7
|
"author": "Augment Extensions",
|
|
8
8
|
"license": "MIT",
|
|
9
9
|
"augment": {
|
|
10
|
-
"characterCount":
|
|
10
|
+
"characterCount": 116868,
|
|
11
11
|
"priority": "medium",
|
|
12
12
|
"category": "coding-standards"
|
|
13
13
|
},
|
|
@@ -18,9 +18,13 @@
|
|
|
18
18
|
"tags": [
|
|
19
19
|
"python",
|
|
20
20
|
"pep8",
|
|
21
|
+
"pep484",
|
|
22
|
+
"pep585",
|
|
23
|
+
"pep604",
|
|
21
24
|
"type-hints",
|
|
22
25
|
"error-handling",
|
|
23
|
-
"best-practices"
|
|
26
|
+
"best-practices",
|
|
27
|
+
"mypy"
|
|
24
28
|
]
|
|
25
29
|
}
|
|
26
30
|
|