diff --git a/.coderabbit.yaml b/.coderabbit.yaml new file mode 100644 index 00000000..60711dc9 --- /dev/null +++ b/.coderabbit.yaml @@ -0,0 +1,274 @@ +# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json +# CodeRabbit config docs: https://docs.coderabbit.ai/reference/configuration +# Defaults and examples GitHub repo: coderabbitai/awesome-coderabbit + +# General settings +language: "en-US" # Language for reviews (default: "en-US") +tone_instructions: "" # Custom tone for reviews (default: "") +enable_free_tier: false # Enable free tier features (default: true) +inheritance: false # top-level instructions (default: false) + +# preview features +early_access: true # Enable early-access features (default: false) + +# ISSUE ENRICHMENT (preview) +issue_enrichment: + auto_enrich: + enabled: false # Enable auto issue enrichment (default: true) + planning: + enabled: true # Enable generating a planning for issues (default: true) + auto_planning: + enabled: true # Enable auto-generated plans based on labels (default: true) + labels: # Triggering labels for auto-planning (default: []) + - rabbit-plan + labeling: + auto_apply_labels: false + labeling_instructions: [] + +# REVIEWS +reviews: + profile: "chill" + review_status: true + commit_status: true + fail_commit_status: false + request_changes_workflow: false + enable_prompt_for_ai_agents: true + in_progress_fortune: false + + abort_on_close: true + disable_cache: false + + # High level summary of the changes in the PR/MR description or walkthrough. + high_level_summary: false + high_level_summary_in_walkthrough: false + high_level_summary_placeholder: "@coderabbitai summary" + + # Walkthrough + collapse_walkthrough: true + changed_files_summary: false # Generate a summary of the changed files in the walkthrough. + sequence_diagrams: false # Generate sequence diagrams in the walkthrough. + estimate_code_review_effort: false # Generate review effort in walkthrough. + assess_linked_issues: true # Assess how well the changes address the linked issues in the walkthrough. + related_issues: false # Include possibly related issues in the walkthrough. + related_prs: false # Include possibly related pull requests in the walkthrough. + poem: false # Generate a poem in the walkthrough comment. + + # Automatic review scheduling + auto_review: + enabled: true + auto_incremental_review: true # Review each push (default: true) + drafts: false # Review Draft pull requests (default: false) + base_branches: + - ".*" + + # Automatic labels + # Suggest labels based on the changes in the pull request in the walkthrough. + suggested_labels: false + auto_apply_labels: false + + # Automatic reviewers + # Suggest reviewers based on the changes in the pull request in the walkthrough. + suggested_reviewers: false + auto_assign_reviewers: false + + # Automatic PR titles + auto_title_placeholder: "@coderabbitai" + auto_title_instructions: | + Use conventional commit with short (<65 chars) sentence case Subject. See Copilot instructions. + + Title strategy: + - Focus on the PRIMARY contribution or most central feature delivered in the PR + - Do NOT base the title on the last commit message + - Do NOT choose the most verbose or largest change + - Identify the core purpose or business value of the PR + - Keep titles concise and meaningful + + Requirements: + - Use lowercase for type: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert, or plan + - Subject must start with an uppercase letter + - Keep total title length ≤ 65 characters + - Use imperative mood (e.g., "Add feature" not "Added feature") + + Examples: + - `feat: Add WebSocket support` (not "Update connection manager") + - `fix: Resolve authentication timeout` (not "Fix bug in auth service") + - `docs: Improve API examples` (not "Update documentation files") + - `chore: Update dependencies` (when that's the sole purpose) + + # Path specific review instructions + path_instructions: + - path: "**/src/**" + instructions: "Ensure alignment to latest language and framework standards, and our organization's coding standards" + - path: "**/test/**" + instructions: "Focus on test coverage, edge cases, and alignment to test framework" + - path: "**/api/**" + instructions: "Ensure proper error handling and API documentation" + - path: "**/*.md" + instructions: "Check for broken links and formatting according to markdown configuration and instructions" + + # Code enhancement features + finishing_touches: + docstrings: + enabled: false # Generate docstrings for PRs/MRs (default: true) + unit_tests: + enabled: false # Generate unit tests for PRs/MRs (default: true) + + # Pre-merge validation checks + pre_merge_checks: + docstrings: # Docstring coverage check (default: warning) + mode: off + description: # PR description validation (default: warning) + mode: off + issue_assessment: # Linked issue assessment (default: warning) + mode: off + title: # PR title validation (default: warning) + mode: off + + # Files to include/exclude from reviews + path_filters: + - "**" # Include all (base) + - "!node_modules/" # NPM dependencies + - "!*-lock.json" # NPM/PNPM lock files + - "!packages.lock.json" # NuGet lock file + - "!packages/" # NuGet packages cache + - "!.jekyll-cache/" # Jekyll cache + - "!.pytest_cache/" # Python test cache + - "!.benchmarks/" # Benchmarks cache + - "!.coverage/" # Code coverage reports + - "!vendor/" # Ruby vendor and gem files + - "!Gemfile.lock" # Ruby dependencies lock + - "!.vitepress/cache/" # VitePress cache + - "!.vitepress/dist/" # VitePress build output + - "!bin/" # .NET build output + - "!obj/" # .NET build intermediate files + - "!*.g.cs" # Generated source code + - "!*.docx" # Office Word + - "!*.pptx" # Office PowerPoint + - "!*.xlsx" # Office Spreadsheets + - "!*.bak" # Backup files + - "!*.zip" # Compressed files + + # Tool integrations + tools: + + # tools: default on + actionlint: # GitHub Actions workflow static checker + enabled: true + ast-grep: # Code pattern analysis using AST + essential_rules: true + gitleaks: # Secret/credential scanner + enabled: true + github-checks: # GitHub Checks integration + enabled: true + timeout_ms: 90000 + markdownlint: # Markdown linter for consistency + enabled: true + osvScanner: # Vulnerability package scanner + enabled: true + pylint: # Python static analyzer + enabled: true + semgrep: # Security & code quality static analysis + enabled: true + shellcheck: # Shell script linter + enabled: true + yamllint: # YAML linter + enabled: true + + # tools: default off + biome: # Fast formatter, linter, and analyzer for web + enabled: false + brakeman: # Rails security vulnerability scanner + enabled: false + buf: # Protobuf linter + enabled: false + checkov: # Infrastructure-as-code static analyzer + enabled: false + checkmake: # Makefile linter + enabled: false + circleci: # CircleCI config static checker + enabled: false + clang: # C/C++ static analysis tool + enabled: false + clippy: # Rust linter + enabled: false + cppcheck: # C/C++ static analyzer + enabled: false + detekt: # Kotlin static analyzer + enabled: false + dotenvLint: # .env file linter + enabled: false + eslint: # JavaScript/TypeScript linter + enabled: false + flake8: # Python linter + enabled: false + fortitudeLint: # Fortran linter + enabled: false + golangci-lint: # Go linter runner + enabled: false + hadolint: # Dockerfile linter + enabled: false + htmlhint: # HTML linter + enabled: false + languagetool: # Grammar and style checker (30+ languages) + enabled: false + luacheck: # Lua linter + enabled: false + oxc: # JavaScript/TypeScript linter in Rust + enabled: false + phpcs: # PHP linter and coding standard checker + enabled: false + phpmd: # PHP code quality analyzer + enabled: false + phpstan: # PHP static analysis tool + enabled: false + pmd: # Java/multilanguage static analyzer + enabled: false + prismaLint: # Prisma schema linter + enabled: false + regal: # Rego linter and language server + enabled: false + ruff: # Python linter and formatter + enabled: false + rubocop: # Ruby linter and code formatter + enabled: false + shopifyThemeCheck: # Shopify Liquid theme linter + enabled: false + sqlfluff: # SQL linter + enabled: false + swiftlint: # Swift linter + enabled: false + +# CHAT FEATURES +chat: + art: false + auto_reply: true + integrations: + jira: + usage: disabled + linear: + usage: disabled + +# KNOWLEDGE BASE +knowledge_base: + opt_out: false + web_search: + enabled: true + code_guidelines: + enabled: true + filePatterns: + - "**/agents.md" + - ".github/copilot-instructions.md" + - ".github/instructions/**/*.instructions.md" + - ".github/skills/**/*skill.md" + learnings: + scope: auto + issues: + scope: auto + pull_requests: + scope: auto + mcp: + usage: auto + jira: + usage: disabled + linear: + usage: disabled diff --git a/.vscode/mcp.json b/.vscode/mcp.json new file mode 100644 index 00000000..f9052861 --- /dev/null +++ b/.vscode/mcp.json @@ -0,0 +1,36 @@ +{ + "servers": { + "cloudflare": { + "type": "stdio", + "command": "npx", + "args": [ + "mcp-remote@latest", + "https://docs.mcp.cloudflare.com/mcp" + ] + }, + "context7": { + "type": "stdio", + "command": "npx", + "args": [ + "-y", + "@upstash/context7-mcp@latest" + ] + }, + "playwright": { + "type": "stdio", + "command": "npx", + "args": [ + "-y", + "@playwright/mcp@latest" + ] + } + }, + "inputs": [ + { + "id": "codacy_account_token", + "type": "promptString", + "description": "Your personal Codacy Account API token (from app.codacy.com → Account). Required.", + "password": true + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index d4ab9939..5df0aa08 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,22 +1,33 @@ { + "github.copilot.chat.githubMcpServer.enabled": true, + "github.copilot.chat.githubMcpServer.readonly": true, + "github.copilot.chat.githubMcpServer.toolsets": [ + "default", // default: context, repos, issues, pull_requests, users + "actions", + // "projects", + "copilot", + "github_support_docs_search", + "web_search" + ], + "github.copilot.chat.tools.memory.enabled": true, "isort.args": [ "--profile", "black" ], "isort.check": true, - "isort.importStrategy": "fromEnvironment", // default: "useBundled" + "isort.importStrategy": "fromEnvironment", // default: "useBundled" "markdownlint.config": { - "default": true, // Enable all default rules - "MD013": false, // Disable line length checking entirely - "MD025": false, // Allow multiple top level headers in the same document - "MD033": { // Allow specific HTML elements + "default": true, // Enable all default rules + "MD013": false, // Disable line length checking entirely + "MD025": false, // Allow multiple top level headers in the same document + "MD033": { // Allow specific HTML elements "allowed_elements": [ "details", "summary", - "h1" // we use h1 as a Jekyll-y page title + "h1" // we use h1 as a Jekyll-y page title ] }, - "MD041": false // Allow content before first heading + "MD041": false // Allow content before first heading }, "pylint.importStrategy": "fromEnvironment", // default: "useBundled" "python.testing.pytestArgs": [ diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 94524055..6b21e7fa 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,60 +1,25 @@ { + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // Schema: https://code.visualstudio.com/docs/reference/tasks-appendix + "$schema": "vscode://schemas/tasks", "version": "2.0.0", + // defaults + "group": "none", + "presentation": { + "clear": true, + "echo": true, + "panel": "dedicated", + "focus": true, + "reveal": "always", + "revealProblems": "onProblem", + "showReuseMessage": false + }, + "problemMatcher": [], + "options": { + "cwd": "${workspaceFolder}" + }, + // tasks "tasks": [ - { - "label": "Build", - "type": "shell", - "command": "pip install -r requirements.txt && pip install -r requirements-test.txt", - "group": "build", - "problemMatcher": [] - }, - { - "label": "Test: All", - "dependsOrder": "parallel", - "dependsOn": [ - "Test: Unit (default)", - "Test: Coverage", - "Test: Performance", - "Test: Localization" - ], - "group": "test", - "problemMatcher": [] - }, - { - "label": "Test: Unit (default)", - "type": "shell", - "command": "pytest -vr A", - "group": "test", - "problemMatcher": [] - }, - { - "label": "Test: Coverage", - "type": "shell", - "command": "pytest --cov=stock_indicators --cov-report=term-missing", - "group": "none", - "problemMatcher": [] - }, - { - "label": "Test: Performance", - "type": "shell", - "command": "pytest -m performance", - "group": "none", - "problemMatcher": [] - }, - { - "label": "Test: Performance (focus)", - "type": "shell", - "command": "pytest -m \"performance and perf_focus\"", - "group": "none", - "problemMatcher": [] - }, - { - "label": "Test: Localization", - "type": "shell", - "command": "pytest -m localization -vr A", - "group": "none", - "problemMatcher": [] - }, { "label": "Install: Ruby Packages (docs)", "type": "shell", @@ -65,23 +30,17 @@ "BUNDLE_GEMFILE": "${workspaceFolder}/docs/Gemfile", "BUNDLE_PATH": "${workspaceFolder}/docs/vendor/bundle" } - }, - "group": "none", - "problemMatcher": [] + } }, { "label": "Install: Python Packages", "type": "shell", - "command": "pip install -r requirements.txt && pip install -r requirements-test.txt", - "group": "none", - "problemMatcher": [] + "command": "pip install -r requirements.txt && pip install -r requirements-test.txt" }, { "label": "Update: Python Packages", "type": "shell", - "command": "pip install -U -r requirements.txt && pip install -U -r requirements-test.txt", - "group": "none", - "problemMatcher": [] + "command": "pip install -U -r requirements.txt && pip install -U -r requirements-test.txt" }, { "label": "Update: Ruby Packages (docs)", @@ -93,9 +52,7 @@ "BUNDLE_GEMFILE": "${workspaceFolder}/docs/Gemfile", "BUNDLE_PATH": "${workspaceFolder}/docs/vendor/bundle" } - }, - "group": "none", - "problemMatcher": [] + } }, { "label": "Update: All Packages", @@ -103,9 +60,50 @@ "dependsOn": [ "Update: Python Packages", "Update: Ruby Packages (docs)" + ] + }, + { + "label": "Build", + "type": "shell", + "command": "pip install -r requirements.txt && pip install -r requirements-test.txt", + "group": "build" + }, + { + "label": "Test: All", + "dependsOrder": "parallel", + "dependsOn": [ + "Test: Unit (default)", + "Test: Coverage", + "Test: Performance", + "Test: Localization" ], - "group": "none", - "problemMatcher": [] + "group": "test" + }, + { + "label": "Test: Unit (default)", + "type": "shell", + "command": "pytest -vr A", + "group": "test" + }, + { + "label": "Test: Coverage", + "type": "shell", + "command": "pytest --cov=stock_indicators --cov-report=term-missing" + }, + { + "label": "Test: Performance", + "type": "shell", + "command": "pytest -m performance" + }, + { + "label": "Test: Performance (focus)", + "type": "shell", + "command": "pytest -m \"performance and perf_focus\"" + }, + { + "label": "Test: Localization", + "type": "shell", + "command": "pytest -m localization -vr A" }, { "label": "Run: Doc Site with LiveReload", @@ -120,9 +118,7 @@ "BUNDLE_GEMFILE": "${workspaceFolder}/docs/Gemfile", "BUNDLE_PATH": "${workspaceFolder}/docs/vendor/bundle" } - }, - "group": "none", - "problemMatcher": [] + } }, { "label": "Benchmark: JSON (prompt filename)", @@ -130,9 +126,7 @@ "command": "pytest -m performance --benchmark-json=.benchmarks/${input:benchJsonOut}", "options": { "cwd": "${workspaceFolder}" - }, - "group": "none", - "problemMatcher": [] + } }, { "label": "Benchmark: Focus JSON (prompt filename)", @@ -140,9 +134,7 @@ "command": "pytest -m \"performance and perf_focus\" --benchmark-json=.benchmarks/${input:benchJsonOut}", "options": { "cwd": "${workspaceFolder}" - }, - "group": "none", - "problemMatcher": [] + } }, { "label": "Benchmark: Autosave to .benchmarks", @@ -150,9 +142,7 @@ "command": "pytest -m performance --benchmark-autosave --benchmark-save-data", "options": { "cwd": "${workspaceFolder}" - }, - "group": "none", - "problemMatcher": [] + } }, { "label": "Benchmark: Focus Autosave to .benchmarks", @@ -160,9 +150,7 @@ "command": "pytest -m \"performance and perf_focus\" --benchmark-autosave --benchmark-save-data", "options": { "cwd": "${workspaceFolder}" - }, - "group": "none", - "problemMatcher": [] + } }, { "label": "Benchmark: List Saved Runs", @@ -170,9 +158,7 @@ "command": "pytest-benchmark list", "options": { "cwd": "${workspaceFolder}" - }, - "group": "none", - "problemMatcher": [] + } }, { "label": "Benchmark: Compare Saved Runs", @@ -180,9 +166,7 @@ "command": "pytest-benchmark compare ${input:benchBase} ${input:benchTarget}", "options": { "cwd": "${workspaceFolder}" - }, - "group": "none", - "problemMatcher": [] + } } ], "inputs": [