@crownpeak/dqm-react-component-dev-mcp 1.2.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 +138 -0
- package/data/.env.example +22 -0
- package/data/.gitattributes +47 -0
- package/data/.glfrc.json +7 -0
- package/data/.husky/pre-commit +5 -0
- package/data/.nvmrc +1 -0
- package/data/CHANGELOG.md +75 -0
- package/data/CODE_OF_CONDUCT.md +129 -0
- package/data/CONTRIBUTING.md +203 -0
- package/data/DOCS-STRUCTURE.md +307 -0
- package/data/I18N.md +292 -0
- package/data/LICENSE +22 -0
- package/data/README.md +315 -0
- package/data/SECURITY.md +125 -0
- package/data/WIKI-DEPLOYMENT.md +348 -0
- package/data/docs/AI-FEATURES.md +610 -0
- package/data/docs/API-REFERENCE.md +1022 -0
- package/data/docs/AUTHENTICATION.md +301 -0
- package/data/docs/BACKEND-API.md +468 -0
- package/data/docs/DEVELOPMENT.md +375 -0
- package/data/docs/EXAMPLES.md +622 -0
- package/data/docs/MCP-SERVER.md +307 -0
- package/data/docs/MIGRATION-GUIDE.md +367 -0
- package/data/docs/NPM-PUBLISH.md +193 -0
- package/data/docs/QUICKSTART.md +206 -0
- package/data/docs/REDIS-SETUP.md +162 -0
- package/data/docs/SERVER.md +228 -0
- package/data/docs/TROUBLESHOOTING.md +657 -0
- package/data/docs/WIDGET-GUIDE.md +638 -0
- package/data/docs/WIKI-HOME.md +58 -0
- package/data/docs/WIKI-SIDEBAR.md +39 -0
- package/data/package.json +171 -0
- package/data/playwright.config.ts +64 -0
- package/data/probe/.cargo/config.toml +10 -0
- package/data/probe/.claude/commands/performance-review.md +15 -0
- package/data/probe/.clinerules +288 -0
- package/data/probe/.dockerignore +57 -0
- package/data/probe/.githooks/post-commit +11 -0
- package/data/probe/.githooks/pre-commit +99 -0
- package/data/probe/.githooks/pre-commit-vow +9 -0
- package/data/probe/.prompts/engineer.md +41 -0
- package/data/probe/.roomodes +28 -0
- package/data/probe/.windsurfrules +0 -0
- package/data/probe/BASH_TOOL_SUMMARY.md +148 -0
- package/data/probe/BENCHMARKING.md +256 -0
- package/data/probe/CLAUDE.md +226 -0
- package/data/probe/CODE_OF_CONDUCT.md +128 -0
- package/data/probe/CONTRIBUTING.md +193 -0
- package/data/probe/Cargo.toml +120 -0
- package/data/probe/Cross.toml +10 -0
- package/data/probe/DOCKER-README.md +224 -0
- package/data/probe/Dockerfile +32 -0
- package/data/probe/ENHANCED_DEBUG_TELEMETRY.md +188 -0
- package/data/probe/LICENSE +201 -0
- package/data/probe/Makefile +210 -0
- package/data/probe/README.md +824 -0
- package/data/probe/SECURITY.md +67 -0
- package/data/probe/WINDOWS-GUIDE.md +294 -0
- package/data/probe/benches/parsing_benchmarks.rs +370 -0
- package/data/probe/benches/search_benchmarks.rs +599 -0
- package/data/probe/benches/simd_benchmarks.rs +372 -0
- package/data/probe/benches/timing_benchmarks.rs +287 -0
- package/data/probe/build-windows.bat +229 -0
- package/data/probe/codex-config/config.toml +6 -0
- package/data/probe/docs/PERFORMANCE_OPTIMIZATION.md +161 -0
- package/data/probe/examples/cache_demo.rs +46 -0
- package/data/probe/examples/chat/.dockerignore +37 -0
- package/data/probe/examples/chat/ChatSessionManager.js +295 -0
- package/data/probe/examples/chat/Dockerfile +98 -0
- package/data/probe/examples/chat/LICENSE +201 -0
- package/data/probe/examples/chat/LOCAL_IMAGE_SUPPORT.md +195 -0
- package/data/probe/examples/chat/MCP_INTEGRATION.md +400 -0
- package/data/probe/examples/chat/README.md +338 -0
- package/data/probe/examples/chat/TRACING.md +226 -0
- package/data/probe/examples/chat/appTracer.js +968 -0
- package/data/probe/examples/chat/auth.js +76 -0
- package/data/probe/examples/chat/bin/probe-chat.js +13 -0
- package/data/probe/examples/chat/build.js +104 -0
- package/data/probe/examples/chat/cancelRequest.js +84 -0
- package/data/probe/examples/chat/demo-agentic-image-flow.js +88 -0
- package/data/probe/examples/chat/demo-local-images.js +128 -0
- package/data/probe/examples/chat/fileSpanExporter.js +181 -0
- package/data/probe/examples/chat/implement/README.md +228 -0
- package/data/probe/examples/chat/implement/backends/AiderBackend.js +750 -0
- package/data/probe/examples/chat/implement/backends/BaseBackend.js +276 -0
- package/data/probe/examples/chat/implement/backends/ClaudeCodeBackend.js +767 -0
- package/data/probe/examples/chat/implement/backends/MockBackend.js +237 -0
- package/data/probe/examples/chat/implement/backends/registry.js +85 -0
- package/data/probe/examples/chat/implement/core/BackendManager.js +567 -0
- package/data/probe/examples/chat/implement/core/ImplementTool.js +354 -0
- package/data/probe/examples/chat/implement/core/config.js +428 -0
- package/data/probe/examples/chat/implement/core/timeouts.js +58 -0
- package/data/probe/examples/chat/implement/core/utils.js +496 -0
- package/data/probe/examples/chat/implement/types/BackendTypes.js +126 -0
- package/data/probe/examples/chat/index.js +669 -0
- package/data/probe/examples/chat/mcpServer.js +341 -0
- package/data/probe/examples/chat/npm/LICENSE +15 -0
- package/data/probe/examples/chat/npm/README.md +168 -0
- package/data/probe/examples/chat/npm/bin/probe-chat.js +156 -0
- package/data/probe/examples/chat/npm/index.js +259 -0
- package/data/probe/examples/chat/npm/package.json +54 -0
- package/data/probe/examples/chat/package.json +102 -0
- package/data/probe/examples/chat/probeChat.js +456 -0
- package/data/probe/examples/chat/probeTool.js +491 -0
- package/data/probe/examples/chat/storage/JsonChatStorage.js +476 -0
- package/data/probe/examples/chat/telemetry.js +281 -0
- package/data/probe/examples/chat/test/integration/chatFlows.test.js +320 -0
- package/data/probe/examples/chat/test/integration/toolCalling.test.js +471 -0
- package/data/probe/examples/chat/test/mocks/mockLLMProvider.js +269 -0
- package/data/probe/examples/chat/test/test-backends.js +90 -0
- package/data/probe/examples/chat/test/testUtils.js +530 -0
- package/data/probe/examples/chat/test/unit/backendTimeout.test.js +161 -0
- package/data/probe/examples/chat/test/unit/packageFiles.test.js +120 -0
- package/data/probe/examples/chat/test/verify-tests.js +118 -0
- package/data/probe/examples/chat/test-agentic-image-loading.js +294 -0
- package/data/probe/examples/chat/test-ai-sdk-telemetry.js +204 -0
- package/data/probe/examples/chat/test-chat-tracing.js +38 -0
- package/data/probe/examples/chat/test-direct-function.js +49 -0
- package/data/probe/examples/chat/test-file-size-validation.js +103 -0
- package/data/probe/examples/chat/test-full-mcp-integration.js +258 -0
- package/data/probe/examples/chat/test-github-context.txt +12 -0
- package/data/probe/examples/chat/test-hierarchy.js +203 -0
- package/data/probe/examples/chat/test-image-spans.js +37 -0
- package/data/probe/examples/chat/test-local-image-reading.js +176 -0
- package/data/probe/examples/chat/test-mcp-integration.js +136 -0
- package/data/probe/examples/chat/test-mcp-probe-server.js +161 -0
- package/data/probe/examples/chat/test-mcp-with-ai.js +279 -0
- package/data/probe/examples/chat/test-multiple-allowed-dirs.js +111 -0
- package/data/probe/examples/chat/test-probe-mcp-server.js +110 -0
- package/data/probe/examples/chat/test-security-validation.js +145 -0
- package/data/probe/examples/chat/test-simple-tracing.js +32 -0
- package/data/probe/examples/chat/test-trace-verification.js +235 -0
- package/data/probe/examples/chat/test-tracing.js +114 -0
- package/data/probe/examples/chat/tokenCounter.js +419 -0
- package/data/probe/examples/chat/tokenUsageDisplay.js +134 -0
- package/data/probe/examples/chat/webServer.js +1103 -0
- package/data/probe/examples/reranker/Cargo.toml +33 -0
- package/data/probe/examples/reranker/DEBUG_OUTPUT_ANALYSIS.md +71 -0
- package/data/probe/examples/reranker/MODELS.md +66 -0
- package/data/probe/examples/reranker/MODEL_COMPARISON.md +60 -0
- package/data/probe/examples/reranker/MULTI_MODEL_ANALYSIS.md +176 -0
- package/data/probe/examples/reranker/PERFORMANCE_SUMMARY.md +156 -0
- package/data/probe/examples/reranker/README.md +347 -0
- package/data/probe/examples/reranker/RUST_BERT_COMPARISON.md +82 -0
- package/data/probe/examples/reranker/TOKENIZATION_GUIDE.md +120 -0
- package/data/probe/examples/reranker/check_rust_tokenizer.py +108 -0
- package/data/probe/examples/reranker/convert_to_torchscript.py +109 -0
- package/data/probe/examples/reranker/debug_scoring.py +189 -0
- package/data/probe/examples/reranker/debug_tokenization.py +154 -0
- package/data/probe/examples/reranker/download_models.sh +73 -0
- package/data/probe/examples/reranker/requirements.txt +13 -0
- package/data/probe/examples/reranker/run_comprehensive_benchmark.sh +83 -0
- package/data/probe/examples/reranker/rust_bert_test/Cargo.toml +12 -0
- package/data/probe/examples/reranker/rust_bert_test/README.md +54 -0
- package/data/probe/examples/reranker/simple_test.py +50 -0
- package/data/probe/examples/reranker/test_all_models.sh +63 -0
- package/data/probe/examples/reranker/test_bert_results.sh +44 -0
- package/data/probe/examples/reranker/test_cross_encoder.py +334 -0
- package/data/probe/examples/reranker/test_cross_encoder.sh +80 -0
- package/data/probe/examples/reranker/test_exact_comparison.py +151 -0
- package/data/probe/examples/reranker/test_parallel_performance.sh +56 -0
- package/data/probe/examples/reranker/test_scores.py +132 -0
- package/data/probe/install.ps1 +508 -0
- package/data/probe/install.sh +460 -0
- package/data/probe/npm/CLONE_METHOD_EXAMPLES.md +596 -0
- package/data/probe/npm/CONTEXT_COMPACTION.md +303 -0
- package/data/probe/npm/DELEGATE_TOOL_README.md +166 -0
- package/data/probe/npm/MAID_INTEGRATION.md +313 -0
- package/data/probe/npm/MCP_INTEGRATION_SUMMARY.md +241 -0
- package/data/probe/npm/README.md +824 -0
- package/data/probe/npm/bin/.gitignore +7 -0
- package/data/probe/npm/bin/.gitkeep +0 -0
- package/data/probe/npm/bin/README.md +12 -0
- package/data/probe/npm/bin/probe +167 -0
- package/data/probe/npm/docs/CLAUDE_CODE_INTEGRATION.md +414 -0
- package/data/probe/npm/docs/CODEX_INTEGRATION.md +502 -0
- package/data/probe/npm/docs/EDIT_CREATE_TOOLS.md +233 -0
- package/data/probe/npm/docs/RETRY_AND_FALLBACK.md +674 -0
- package/data/probe/npm/example-usage.js +335 -0
- package/data/probe/npm/examples/multi-engine-demo.js +117 -0
- package/data/probe/npm/examples/probe-agent-cli.js +113 -0
- package/data/probe/npm/examples/test-agent-edit.js +114 -0
- package/data/probe/npm/examples/test-edit-create.js +120 -0
- package/data/probe/npm/examples/test-edit-direct.js +114 -0
- package/data/probe/npm/index.d.ts +744 -0
- package/data/probe/npm/jest.config.js +52 -0
- package/data/probe/npm/package.json +117 -0
- package/data/probe/npm/scripts/build-agent.cjs +75 -0
- package/data/probe/npm/scripts/build-cjs.js +124 -0
- package/data/probe/npm/scripts/build-mcp.cjs +36 -0
- package/data/probe/npm/scripts/postinstall.js +216 -0
- package/data/probe/npm/test-codex-e2e.js +78 -0
- package/data/probe/npm/test-download-lock.js +109 -0
- package/data/probe/npm/test-grep-security.js +94 -0
- package/data/probe/npm/test-grep-simplified.js +63 -0
- package/data/probe/npm/test-grep.js +51 -0
- package/data/probe/npm/tests/README.md +96 -0
- package/data/probe/npm/tests/agent-compact-history.test.js +174 -0
- package/data/probe/npm/tests/allow-tests-default.test.js +151 -0
- package/data/probe/npm/tests/contextCompactor.test.js +498 -0
- package/data/probe/npm/tests/delegate-config.test.js +353 -0
- package/data/probe/npm/tests/delegate-integration.test.js +348 -0
- package/data/probe/npm/tests/extractor-integration.test.js +162 -0
- package/data/probe/npm/tests/extractor.test.js +317 -0
- package/data/probe/npm/tests/fixtures/sampleDiagrams.js +267 -0
- package/data/probe/npm/tests/integration/claude-code-auto-fallback.spec.js +148 -0
- package/data/probe/npm/tests/integration/claude-code-multi-step.spec.js +127 -0
- package/data/probe/npm/tests/integration/claude-code-tool-events.spec.js +163 -0
- package/data/probe/npm/tests/integration/codex-auto-fallback.spec.js +191 -0
- package/data/probe/npm/tests/integration/codex-tool-events.spec.js +147 -0
- package/data/probe/npm/tests/integration/examplesChatMcp.test.js +402 -0
- package/data/probe/npm/tests/integration/mcpDotenvSupport.test.js +174 -0
- package/data/probe/npm/tests/integration/mcpErrorHandling.test.js +566 -0
- package/data/probe/npm/tests/integration/mcpRobustness.test.js +564 -0
- package/data/probe/npm/tests/integration/mcpStdoutPurity.test.js +355 -0
- package/data/probe/npm/tests/integration/probeAgentMcp.test.js +398 -0
- package/data/probe/npm/tests/integration/retryFallback.test.js +368 -0
- package/data/probe/npm/tests/integration/schema-in-initial-message.test.js +318 -0
- package/data/probe/npm/tests/integration/schema-validation-loop-prevention.test.js +244 -0
- package/data/probe/npm/tests/integration/schemaRetryLogic.test.js +94 -0
- package/data/probe/npm/tests/integration/validationFlow.test.js +329 -0
- package/data/probe/npm/tests/manual/test-codex-basic.js +110 -0
- package/data/probe/npm/tests/mcp/mcpClientManager.test.js +614 -0
- package/data/probe/npm/tests/mcp/mcpConfig.test.js +359 -0
- package/data/probe/npm/tests/mcp/mcpXmlBridge.test.js +436 -0
- package/data/probe/npm/tests/mcp/mockMcpServer.js +510 -0
- package/data/probe/npm/tests/mcp-strict-syntax.test.js +319 -0
- package/data/probe/npm/tests/mermaidQuoteEscaping.test.js +214 -0
- package/data/probe/npm/tests/nestedQuoteFix.test.js +40 -0
- package/data/probe/npm/tests/setup.js +46 -0
- package/data/probe/npm/tests/unit/allowed-tools.test.js +513 -0
- package/data/probe/npm/tests/unit/attempt-completion-closing-tag-in-content.test.js +188 -0
- package/data/probe/npm/tests/unit/attemptCompletionJsonFix.test.js +238 -0
- package/data/probe/npm/tests/unit/attemptCompletionJsonIssue.test.js +128 -0
- package/data/probe/npm/tests/unit/backtickAutoFix.test.js +35 -0
- package/data/probe/npm/tests/unit/bash-probe-agent-integration.test.js +389 -0
- package/data/probe/npm/tests/unit/bash-simple-commands.test.js +324 -0
- package/data/probe/npm/tests/unit/bash-tool-comprehensive.test.js +371 -0
- package/data/probe/npm/tests/unit/bash-tool-integration.test.js +310 -0
- package/data/probe/npm/tests/unit/bash-tool.test.js +341 -0
- package/data/probe/npm/tests/unit/completion-prompt.test.js +379 -0
- package/data/probe/npm/tests/unit/cwd-path-options.test.js +287 -0
- package/data/probe/npm/tests/unit/delegate-limits.test.js +422 -0
- package/data/probe/npm/tests/unit/direct-content-attempt-completion.test.js +235 -0
- package/data/probe/npm/tests/unit/edit-create-tools.test.js +609 -0
- package/data/probe/npm/tests/unit/enhancedMermaidValidation.test.js +577 -0
- package/data/probe/npm/tests/unit/extract-content.test.js +83 -0
- package/data/probe/npm/tests/unit/extract-multiple-targets.test.js +89 -0
- package/data/probe/npm/tests/unit/fallbackManager.test.js +442 -0
- package/data/probe/npm/tests/unit/githubCompatibilityValidation.test.js +258 -0
- package/data/probe/npm/tests/unit/imageConfig.test.js +149 -0
- package/data/probe/npm/tests/unit/imagePathResolution.test.js +345 -0
- package/data/probe/npm/tests/unit/json-fixing-agent.test.js +238 -0
- package/data/probe/npm/tests/unit/json-validation-enhanced-errors.test.js +199 -0
- package/data/probe/npm/tests/unit/jsonValidationInfiniteLoopFix.test.js +228 -0
- package/data/probe/npm/tests/unit/maidIntegration.test.js +139 -0
- package/data/probe/npm/tests/unit/maxIterationsWarning.test.js +195 -0
- package/data/probe/npm/tests/unit/mermaidEdgeLabelFix.test.js +161 -0
- package/data/probe/npm/tests/unit/mermaidHtmlEntities.test.js +76 -0
- package/data/probe/npm/tests/unit/mermaidInfiniteLoopFix.test.js +64 -0
- package/data/probe/npm/tests/unit/mermaidValidation.test.js +723 -0
- package/data/probe/npm/tests/unit/mermaidValidationVisorExample.test.js +309 -0
- package/data/probe/npm/tests/unit/probe-agent-clone-realistic.test.js +643 -0
- package/data/probe/npm/tests/unit/probe-agent-clone.test.js +476 -0
- package/data/probe/npm/tests/unit/probe-agent-delegate.test.js +400 -0
- package/data/probe/npm/tests/unit/probe-agent-model-option.test.js +118 -0
- package/data/probe/npm/tests/unit/probeTool-security.test.js +283 -0
- package/data/probe/npm/tests/unit/readImageTool.test.js +418 -0
- package/data/probe/npm/tests/unit/retryManager.test.js +317 -0
- package/data/probe/npm/tests/unit/schema-aware-reminders.test.js +288 -0
- package/data/probe/npm/tests/unit/schemaDefinitionDetection.test.js +115 -0
- package/data/probe/npm/tests/unit/schemaUtils.test.js +1268 -0
- package/data/probe/npm/tests/unit/simpleTelemetry.test.js +282 -0
- package/data/probe/npm/tests/unit/simplified-attempt-completion.test.js +274 -0
- package/data/probe/npm/tests/unit/single-quote-json-bug.test.js +231 -0
- package/data/probe/npm/tests/unit/subgraphAutoFix.test.js +110 -0
- package/data/probe/npm/tests/unit/system-prompt.test.js +32 -0
- package/data/probe/npm/tests/unit/types-probe-agent-options.test.js +42 -0
- package/data/probe/npm/tests/unit/xmlParsing.test.js +720 -0
- package/data/probe/npm/tsconfig.json +21 -0
- package/data/probe/result1.txt +19 -0
- package/data/probe/result2.txt +26 -0
- package/data/probe/scripts/benchmark.sh +270 -0
- package/data/probe/scripts/cache_memory_analysis.rs +844 -0
- package/data/probe/scripts/claude-hook-wrapper.sh +56 -0
- package/data/probe/site/.env.example +10 -0
- package/data/probe/site/DEPLOYMENT.md +86 -0
- package/data/probe/site/README.md +183 -0
- package/data/probe/site/adding-languages.md +135 -0
- package/data/probe/site/ai-chat.md +427 -0
- package/data/probe/site/ai-integration.md +1488 -0
- package/data/probe/site/blog/agentic-flow-custom-xml-protocol.md +407 -0
- package/data/probe/site/blog/index.md +118 -0
- package/data/probe/site/blog/v0.6.0-release.md +426 -0
- package/data/probe/site/blog.md +8 -0
- package/data/probe/site/changelog.md +200 -0
- package/data/probe/site/cli-mode.md +437 -0
- package/data/probe/site/code-extraction.md +436 -0
- package/data/probe/site/contributing/README.md +9 -0
- package/data/probe/site/contributing/documentation-cross-references.md +215 -0
- package/data/probe/site/contributing/documentation-maintenance.md +275 -0
- package/data/probe/site/contributing/documentation-structure.md +75 -0
- package/data/probe/site/documentation-cross-references.md +215 -0
- package/data/probe/site/documentation-guide.md +132 -0
- package/data/probe/site/documentation-maintenance.md +275 -0
- package/data/probe/site/features.md +147 -0
- package/data/probe/site/how-it-works.md +118 -0
- package/data/probe/site/index.md +175 -0
- package/data/probe/site/index.md.bak +133 -0
- package/data/probe/site/installation.md +235 -0
- package/data/probe/site/integrations/docker.md +248 -0
- package/data/probe/site/integrations/github-actions.md +413 -0
- package/data/probe/site/language-support-overview.md +168 -0
- package/data/probe/site/mcp-integration.md +587 -0
- package/data/probe/site/mcp-server.md +304 -0
- package/data/probe/site/navigation-structure.md +76 -0
- package/data/probe/site/nodejs-sdk.md +798 -0
- package/data/probe/site/output-formats.md +625 -0
- package/data/probe/site/package.json +21 -0
- package/data/probe/site/public/_headers +28 -0
- package/data/probe/site/public/_redirects +11 -0
- package/data/probe/site/quick-start.md +289 -0
- package/data/probe/site/search-functionality.md +291 -0
- package/data/probe/site/search-reference.md +291 -0
- package/data/probe/site/supported-languages.md +215 -0
- package/data/probe/site/use-cases/README.md +8 -0
- package/data/probe/site/use-cases/advanced-cli.md +253 -0
- package/data/probe/site/use-cases/ai-code-editors.md +239 -0
- package/data/probe/site/use-cases/building-ai-tools.md +529 -0
- package/data/probe/site/use-cases/cli-ai-workflows.md +285 -0
- package/data/probe/site/use-cases/deploying-probe-web-interface.md +255 -0
- package/data/probe/site/use-cases/integrating-probe-into-ai-code-editors.md +161 -0
- package/data/probe/site/use-cases/nodejs-sdk.md +596 -0
- package/data/probe/site/use-cases/team-chat.md +350 -0
- package/data/probe/site/web-interface.md +434 -0
- package/data/probe/site/wrangler.toml +9 -0
- package/data/probe/test-api-key.sh +1 -0
- package/data/probe/test-probe-implementation/hello.js +7 -0
- package/data/probe/test_cases/demonstrate_early_termination_issues.sh +176 -0
- package/data/probe/test_cases/early_termination_issues.rs +533 -0
- package/data/probe/test_data/test_nested_struct.go +26 -0
- package/data/probe/tests/README.md +286 -0
- package/data/probe/tests/README_search_determinism_tests.md +116 -0
- package/data/probe/tests/adjacent_comment_test.rs +152 -0
- package/data/probe/tests/apostrophe_handling_tests.rs +132 -0
- package/data/probe/tests/block_filtering_with_ast_tests.rs +669 -0
- package/data/probe/tests/block_merging_tests.rs +396 -0
- package/data/probe/tests/c_outline_format_tests.rs +2179 -0
- package/data/probe/tests/cache_invalidation_issues.rs.disabled +682 -0
- package/data/probe/tests/cache_order_tests.rs +147 -0
- package/data/probe/tests/cache_query_scoping_tests.rs +221 -0
- package/data/probe/tests/cli_tests.rs +680 -0
- package/data/probe/tests/comment_context_integration_test.rs +240 -0
- package/data/probe/tests/common.rs +33 -0
- package/data/probe/tests/complex_block_merging_tests.rs +599 -0
- package/data/probe/tests/complex_query_block_filtering_tests.rs +422 -0
- package/data/probe/tests/control_flow_closing_braces_test.rs +91 -0
- package/data/probe/tests/cpp_outline_format_tests.rs +1507 -0
- package/data/probe/tests/csharp_outline_format_tests.rs +941 -0
- package/data/probe/tests/elastic_query_integration_tests.rs +922 -0
- package/data/probe/tests/extract_command_tests.rs +1848 -0
- package/data/probe/tests/extract_deduplication_tests.rs +146 -0
- package/data/probe/tests/extract_input_file_tests.rs +84 -0
- package/data/probe/tests/extract_prompt_tests.rs +102 -0
- package/data/probe/tests/filename_search_tests.rs +96 -0
- package/data/probe/tests/fixtures/user/AssemblyInfo.cs +3 -0
- package/data/probe/tests/github_extract_tests.rs +234 -0
- package/data/probe/tests/go_comment_test.rs +253 -0
- package/data/probe/tests/go_outline_format_tests.rs +2587 -0
- package/data/probe/tests/go_path_resolver_tests.rs +96 -0
- package/data/probe/tests/html_outline_format_tests.rs +637 -0
- package/data/probe/tests/integration_tests.rs +837 -0
- package/data/probe/tests/ip_whitelist_test.rs +148 -0
- package/data/probe/tests/java_outline_format_tests.rs +1611 -0
- package/data/probe/tests/javascript_extract_tests.rs +315 -0
- package/data/probe/tests/javascript_outline_format_tests.rs +1464 -0
- package/data/probe/tests/json_format_tests.rs +436 -0
- package/data/probe/tests/json_schema_validation_tests.rs +450 -0
- package/data/probe/tests/lib_usage.rs +60 -0
- package/data/probe/tests/line_comment_context_extension_test.rs +459 -0
- package/data/probe/tests/line_map_cache_tests.rs +114 -0
- package/data/probe/tests/markdown_integration_tests.rs +190 -0
- package/data/probe/tests/mocks/test_ip_whitelist.go +11 -0
- package/data/probe/tests/mocks/test_object.js +27 -0
- package/data/probe/tests/mocks/test_struct.go +50 -0
- package/data/probe/tests/multi_keyword_pattern_tests.rs +464 -0
- package/data/probe/tests/multi_language_syntax_integration_tests.rs +218 -0
- package/data/probe/tests/multiple_capture_groups_tests.rs +169 -0
- package/data/probe/tests/negative_compound_word_tests.rs +246 -0
- package/data/probe/tests/nested_symbol_extraction_tests.rs +99 -0
- package/data/probe/tests/outline_cross_file_interference_test.rs +335 -0
- package/data/probe/tests/outline_keyword_preservation_test.rs +67 -0
- package/data/probe/tests/output_format_edge_cases_tests.rs +693 -0
- package/data/probe/tests/parallel_extraction_tests.rs +178 -0
- package/data/probe/tests/parallel_search_tests.rs +355 -0
- package/data/probe/tests/path_resolver_tests.rs +698 -0
- package/data/probe/tests/php_outline_format_extended_tests.rs +928 -0
- package/data/probe/tests/php_outline_format_tests.rs +768 -0
- package/data/probe/tests/property_tests.proptest-regressions +9 -0
- package/data/probe/tests/property_tests.rs +118 -0
- package/data/probe/tests/python_outline_format_tests.rs +1538 -0
- package/data/probe/tests/query_command_json_tests.rs +438 -0
- package/data/probe/tests/query_command_tests.rs +232 -0
- package/data/probe/tests/query_command_xml_tests.rs +569 -0
- package/data/probe/tests/quoted_term_with_negative_keyword_tests.rs +216 -0
- package/data/probe/tests/required_terms_filename_tests.rs +116 -0
- package/data/probe/tests/ruby_outline_format_tests.rs +1011 -0
- package/data/probe/tests/rust_line_comment_context_test.rs +151 -0
- package/data/probe/tests/rust_outline_format_enhanced_tests.rs +725 -0
- package/data/probe/tests/rust_outline_format_tests.rs +843 -0
- package/data/probe/tests/schemas/xml_output_schema.xsd +38 -0
- package/data/probe/tests/search_determinism_tests.rs +451 -0
- package/data/probe/tests/search_hints_tests.rs +253 -0
- package/data/probe/tests/special_character_escaping_tests.rs +417 -0
- package/data/probe/tests/stemming_compound_word_filtering_tests.rs +535 -0
- package/data/probe/tests/strict_elastic_syntax_tests.rs +404 -0
- package/data/probe/tests/swift_outline_format_tests.rs +3319 -0
- package/data/probe/tests/symbols_tests.rs +166 -0
- package/data/probe/tests/test_file.rs +45 -0
- package/data/probe/tests/test_tokenize.rs +28 -0
- package/data/probe/tests/timeout_tests.rs +82 -0
- package/data/probe/tests/tokenization_tests.rs +195 -0
- package/data/probe/tests/tokenized_block_filtering_tests.rs +174 -0
- package/data/probe/tests/typescript_extract_tests.rs +214 -0
- package/data/probe/tests/typescript_outline_format_tests.rs +2188 -0
- package/data/probe/tests/xml_format_tests.rs +568 -0
- package/data/probe/tests/xml_schema_validation_tests.rs +497 -0
- package/data/scripts/postinstall.mjs +9 -0
- package/data/scripts/set-version.js +0 -0
- package/data/scripts/wiki-build.sh +111 -0
- package/data/scripts/wiki-deploy.sh +73 -0
- package/data/serve.json +12 -0
- package/data/test/demo-dynamic.html +134 -0
- package/data/test/demo-esm.html +105 -0
- package/data/test/demo-iife.html +78 -0
- package/data/tsconfig.json +7 -0
- package/data/vite.server.ts +483 -0
- package/data/vitest.config.ts +40 -0
- package/data/wiki/Home.md +58 -0
- package/data/wiki/_Sidebar.md +39 -0
- package/docs-mcp.config.json +20 -0
- package/package.json +56 -0
- package/src/config.js +111 -0
- package/src/index.js +395 -0
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
// Test Cases for Early Termination Validation Issues
|
|
2
|
+
// This file contains examples of code structures that could be missed
|
|
3
|
+
// by the current early termination optimizations in the probe codebase
|
|
4
|
+
|
|
5
|
+
use std::collections::HashMap;
|
|
6
|
+
use serde::{Serialize, Deserialize};
|
|
7
|
+
|
|
8
|
+
// TEST CASE 1: Multiline Function Signature with Generic Constraints
|
|
9
|
+
// Issue: If target lines are [15-20] but function signature spans lines 10-14,
|
|
10
|
+
// AST filtering might skip this entire function node
|
|
11
|
+
pub fn complex_database_query<T, U, E>(
|
|
12
|
+
connection: &mut DatabaseConnection,
|
|
13
|
+
query_params: QueryParameters<T>,
|
|
14
|
+
result_transformer: impl Fn(RawResult) -> Result<U, E> + Send + Sync,
|
|
15
|
+
retry_config: RetryConfiguration
|
|
16
|
+
) -> Result<Vec<U>, DatabaseError<E>>
|
|
17
|
+
where
|
|
18
|
+
T: Serialize + Clone + Send + 'static,
|
|
19
|
+
U: Deserialize<'static> + Clone + Debug,
|
|
20
|
+
E: std::error::Error + Send + Sync + 'static
|
|
21
|
+
{
|
|
22
|
+
// If search targets these implementation lines but misses the signature above,
|
|
23
|
+
// the semantic context of the function's purpose is lost
|
|
24
|
+
let mut results = Vec::new();
|
|
25
|
+
let mut retry_count = 0;
|
|
26
|
+
|
|
27
|
+
loop {
|
|
28
|
+
match connection.execute_query(&query_params) {
|
|
29
|
+
Ok(raw_results) => {
|
|
30
|
+
for raw_result in raw_results {
|
|
31
|
+
match result_transformer(raw_result) {
|
|
32
|
+
Ok(transformed) => results.push(transformed),
|
|
33
|
+
Err(transform_error) => {
|
|
34
|
+
return Err(DatabaseError::TransformationFailed(transform_error));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
Err(db_error) if retry_count < retry_config.max_retries => {
|
|
41
|
+
retry_count += 1;
|
|
42
|
+
std::thread::sleep(retry_config.delay);
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
Err(db_error) => return Err(DatabaseError::QueryFailed(db_error)),
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
Ok(results)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// TEST CASE 2: Complex Trait Implementation with Associated Types
|
|
53
|
+
// Issue: The trait bounds and where clauses might place the actual implementation
|
|
54
|
+
// outside the initially estimated line ranges
|
|
55
|
+
impl<T, R> DataProcessor<T> for ComplexProcessor<T, R>
|
|
56
|
+
where
|
|
57
|
+
T: Clone + Debug + Send + Sync + 'static,
|
|
58
|
+
R: ProcessingResult<T> + Clone + Debug,
|
|
59
|
+
T::Error: From<ProcessingError>,
|
|
60
|
+
R::Output: Serialize + DeserializeOwned
|
|
61
|
+
{
|
|
62
|
+
type Output = ProcessedData<T, R>;
|
|
63
|
+
type Error = ComplexProcessingError<T::Error>;
|
|
64
|
+
|
|
65
|
+
// This implementation might be missed if line range filtering
|
|
66
|
+
// doesn't account for the trait bounds above
|
|
67
|
+
async fn process_batch(
|
|
68
|
+
&self,
|
|
69
|
+
input: Vec<T>,
|
|
70
|
+
config: ProcessingConfig
|
|
71
|
+
) -> Result<Self::Output, Self::Error> {
|
|
72
|
+
let mut processed_items = Vec::new();
|
|
73
|
+
let processing_context = self.create_context(&config)?;
|
|
74
|
+
|
|
75
|
+
for item in input {
|
|
76
|
+
let result = self.process_single_item(item, &processing_context).await?;
|
|
77
|
+
processed_items.push(result);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
Ok(ProcessedData {
|
|
81
|
+
items: processed_items,
|
|
82
|
+
metadata: processing_context.extract_metadata(),
|
|
83
|
+
processing_time: processing_context.elapsed(),
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Additional methods that form semantic units with the above
|
|
88
|
+
fn validate_input(&self, input: &[T]) -> Result<(), Self::Error> {
|
|
89
|
+
// Validation logic that's semantically related to process_batch
|
|
90
|
+
// but might be in a different "line range" from the perspective of early termination
|
|
91
|
+
for (index, item) in input.iter().enumerate() {
|
|
92
|
+
if !self.is_valid_item(item) {
|
|
93
|
+
return Err(ComplexProcessingError::InvalidInput {
|
|
94
|
+
index,
|
|
95
|
+
item: item.clone()
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
Ok(())
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// TEST CASE 3: Macro-Generated Code with Dynamic Patterns
|
|
104
|
+
// Issue: Macro expansions create nodes at unexpected line ranges
|
|
105
|
+
macro_rules! generate_service_endpoints {
|
|
106
|
+
(
|
|
107
|
+
$(
|
|
108
|
+
$service_name:ident {
|
|
109
|
+
$(
|
|
110
|
+
$method:ident($($param:ident: $param_type:ty),*) -> $return_type:ty
|
|
111
|
+
=> $endpoint:expr
|
|
112
|
+
),*
|
|
113
|
+
}
|
|
114
|
+
),*
|
|
115
|
+
) => {
|
|
116
|
+
$( // Each service generates multiple functions
|
|
117
|
+
pub mod $service_name {
|
|
118
|
+
use super::*;
|
|
119
|
+
|
|
120
|
+
$( // Each method becomes a function
|
|
121
|
+
pub async fn $method(
|
|
122
|
+
client: &HttpClient,
|
|
123
|
+
$($param: $param_type),*
|
|
124
|
+
) -> Result<$return_type, ApiError> {
|
|
125
|
+
let url = format!("{}{}", client.base_url(), $endpoint);
|
|
126
|
+
let response = client
|
|
127
|
+
.post(&url)
|
|
128
|
+
.json(&serde_json::json!({
|
|
129
|
+
$(stringify!($param): $param),*
|
|
130
|
+
}))
|
|
131
|
+
.send()
|
|
132
|
+
.await?;
|
|
133
|
+
|
|
134
|
+
if response.status().is_success() {
|
|
135
|
+
Ok(response.json().await?)
|
|
136
|
+
} else {
|
|
137
|
+
Err(ApiError::RequestFailed(response.status()))
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
)*
|
|
141
|
+
}
|
|
142
|
+
)*
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// The macro expansion below creates many functions, but if AST filtering
|
|
147
|
+
// targets specific lines within the expansion, it might miss the broader context
|
|
148
|
+
generate_service_endpoints! {
|
|
149
|
+
user_service {
|
|
150
|
+
create_user(name: String, email: String) -> User => "/users",
|
|
151
|
+
get_user(id: u64) -> User => "/users/{id}",
|
|
152
|
+
update_user(id: u64, data: UserUpdateData) -> User => "/users/{id}",
|
|
153
|
+
delete_user(id: u64) -> () => "/users/{id}",
|
|
154
|
+
list_users(page: u32, limit: u32) -> Vec<User> => "/users"
|
|
155
|
+
},
|
|
156
|
+
auth_service {
|
|
157
|
+
login(username: String, password: String) -> AuthToken => "/auth/login",
|
|
158
|
+
refresh_token(token: String) -> AuthToken => "/auth/refresh",
|
|
159
|
+
logout(token: String) -> () => "/auth/logout",
|
|
160
|
+
validate_token(token: String) -> bool => "/auth/validate"
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// TEST CASE 4: Documentation with Embedded Code Examples
|
|
165
|
+
/// A complex service that demonstrates various patterns that might be missed
|
|
166
|
+
/// by early termination optimizations.
|
|
167
|
+
///
|
|
168
|
+
/// # Usage Examples
|
|
169
|
+
///
|
|
170
|
+
/// Basic usage:
|
|
171
|
+
/// ```rust
|
|
172
|
+
/// let service = ComplexService::new(config);
|
|
173
|
+
/// let result = service.process_data(input).await?;
|
|
174
|
+
/// ```
|
|
175
|
+
///
|
|
176
|
+
/// Advanced usage with custom transformers:
|
|
177
|
+
/// ```rust
|
|
178
|
+
/// let service = ComplexService::builder()
|
|
179
|
+
/// .with_custom_transformer(|data| {
|
|
180
|
+
/// // Complex transformation logic
|
|
181
|
+
/// transform_data_with_validation(data)
|
|
182
|
+
/// })
|
|
183
|
+
/// .with_retry_policy(RetryPolicy::exponential_backoff())
|
|
184
|
+
/// .with_timeout(Duration::from_secs(30))
|
|
185
|
+
/// .build()?;
|
|
186
|
+
///
|
|
187
|
+
/// let processed = service
|
|
188
|
+
/// .process_batch(input_data)
|
|
189
|
+
/// .with_context("batch_processing")
|
|
190
|
+
/// .await?;
|
|
191
|
+
/// ```
|
|
192
|
+
///
|
|
193
|
+
/// Error handling patterns:
|
|
194
|
+
/// ```rust
|
|
195
|
+
/// match service.process_data(risky_input).await {
|
|
196
|
+
/// Ok(result) => handle_success(result),
|
|
197
|
+
/// Err(ProcessingError::ValidationFailed(details)) => {
|
|
198
|
+
/// log::warn!("Validation failed: {:?}", details);
|
|
199
|
+
/// fallback_processing(risky_input).await?
|
|
200
|
+
/// },
|
|
201
|
+
/// Err(ProcessingError::TimeoutError) => {
|
|
202
|
+
/// log::error!("Processing timed out");
|
|
203
|
+
/// Err(ServiceError::ProcessingTimeout)
|
|
204
|
+
/// },
|
|
205
|
+
/// Err(other_error) => {
|
|
206
|
+
/// log::error!("Unexpected error: {:?}", other_error);
|
|
207
|
+
/// Err(ServiceError::UnexpectedError(other_error))
|
|
208
|
+
/// }
|
|
209
|
+
/// }
|
|
210
|
+
/// ```
|
|
211
|
+
pub struct ComplexService<T, R> {
|
|
212
|
+
processor: Arc<dyn DataProcessor<T, Output = R> + Send + Sync>,
|
|
213
|
+
config: ServiceConfiguration,
|
|
214
|
+
metrics: Arc<Mutex<ServiceMetrics>>,
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// The implementation methods below might be missed if the search targets
|
|
218
|
+
// the documentation examples above, but AST filtering only considers
|
|
219
|
+
// the method implementation line ranges
|
|
220
|
+
impl<T, R> ComplexService<T, R>
|
|
221
|
+
where
|
|
222
|
+
T: Send + Sync + 'static,
|
|
223
|
+
R: Send + Sync + 'static
|
|
224
|
+
{
|
|
225
|
+
/// Creates a new service instance with the provided configuration.
|
|
226
|
+
/// This method demonstrates how semantic relationships can span multiple
|
|
227
|
+
/// "optimization boundaries" in the current early termination logic.
|
|
228
|
+
pub fn new(config: ServiceConfiguration) -> Result<Self, ServiceCreationError> {
|
|
229
|
+
let processor = Self::create_default_processor(&config)?;
|
|
230
|
+
let metrics = Arc::new(Mutex::new(ServiceMetrics::new()));
|
|
231
|
+
|
|
232
|
+
Ok(ComplexService {
|
|
233
|
+
processor,
|
|
234
|
+
config,
|
|
235
|
+
metrics,
|
|
236
|
+
})
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/// Process data with comprehensive error handling and metrics collection.
|
|
240
|
+
/// This method contains patterns that might be split across different
|
|
241
|
+
/// line ranges from an AST filtering perspective.
|
|
242
|
+
pub async fn process_data(
|
|
243
|
+
&self,
|
|
244
|
+
input: ProcessingInput<T>
|
|
245
|
+
) -> Result<ProcessingOutput<R>, ProcessingError> {
|
|
246
|
+
let start_time = Instant::now();
|
|
247
|
+
let processing_id = Uuid::new_v4();
|
|
248
|
+
|
|
249
|
+
// Pre-processing validation - might be in different "optimization zone"
|
|
250
|
+
self.validate_processing_input(&input)
|
|
251
|
+
.map_err(|e| ProcessingError::ValidationFailed {
|
|
252
|
+
processing_id,
|
|
253
|
+
details: e.to_string()
|
|
254
|
+
})?;
|
|
255
|
+
|
|
256
|
+
// Main processing logic - could be separated by line range filtering
|
|
257
|
+
let processing_context = ProcessingContext::new(processing_id, &self.config);
|
|
258
|
+
let intermediate_result = self
|
|
259
|
+
.processor
|
|
260
|
+
.process_with_context(input, processing_context)
|
|
261
|
+
.await
|
|
262
|
+
.map_err(|e| ProcessingError::ProcessorFailed {
|
|
263
|
+
processing_id,
|
|
264
|
+
source: e
|
|
265
|
+
})?;
|
|
266
|
+
|
|
267
|
+
// Post-processing and metrics - might be in yet another "zone"
|
|
268
|
+
let final_result = self
|
|
269
|
+
.apply_post_processing_rules(intermediate_result)
|
|
270
|
+
.await?;
|
|
271
|
+
|
|
272
|
+
self.update_processing_metrics(processing_id, start_time.elapsed())
|
|
273
|
+
.await;
|
|
274
|
+
|
|
275
|
+
Ok(final_result)
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Helper methods that form semantic units but might be missed
|
|
279
|
+
// by line-range-based early termination
|
|
280
|
+
fn validate_processing_input(
|
|
281
|
+
&self,
|
|
282
|
+
input: &ProcessingInput<T>
|
|
283
|
+
) -> Result<(), ValidationError> {
|
|
284
|
+
// Validation logic that's semantically connected to process_data
|
|
285
|
+
// but might be filtered out if not in the target line ranges
|
|
286
|
+
if input.data.is_empty() {
|
|
287
|
+
return Err(ValidationError::EmptyInput);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if input.data.len() > self.config.max_batch_size {
|
|
291
|
+
return Err(ValidationError::BatchTooLarge {
|
|
292
|
+
size: input.data.len(),
|
|
293
|
+
max_allowed: self.config.max_batch_size
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
Ok(())
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
async fn apply_post_processing_rules(
|
|
301
|
+
&self,
|
|
302
|
+
intermediate: IntermediateResult<R>
|
|
303
|
+
) -> Result<ProcessingOutput<R>, ProcessingError> {
|
|
304
|
+
// Post-processing logic that completes the semantic picture
|
|
305
|
+
// but might be separated from the main processing logic
|
|
306
|
+
// by AST node boundary calculations
|
|
307
|
+
let mut output = ProcessingOutput::from_intermediate(intermediate);
|
|
308
|
+
|
|
309
|
+
for rule in &self.config.post_processing_rules {
|
|
310
|
+
output = rule.apply(output).await?;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
output.finalize_with_metadata(&self.config);
|
|
314
|
+
Ok(output)
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// TEST CASE 5: Complex Generic Constraints That Span Multiple Lines
|
|
319
|
+
// Issue: The where clause and generic bounds might be considered separate
|
|
320
|
+
// from the implementation by simple line intersection checks
|
|
321
|
+
pub struct GenericRepository<T, K, E>
|
|
322
|
+
where
|
|
323
|
+
T: Entity<Key = K> + Serialize + DeserializeOwned + Clone + Debug + Send + Sync + 'static,
|
|
324
|
+
K: EntityKey + Hash + Eq + Clone + Debug + Send + Sync + 'static,
|
|
325
|
+
E: RepositoryError + From<DatabaseError> + Send + Sync + 'static,
|
|
326
|
+
T::QueryBuilder: QueryBuilder<T, K> + Send + Sync,
|
|
327
|
+
T::Validator: EntityValidator<T> + Send + Sync,
|
|
328
|
+
{
|
|
329
|
+
connection_pool: Arc<ConnectionPool>,
|
|
330
|
+
query_cache: Arc<RwLock<HashMap<K, CachedQuery<T>>>>,
|
|
331
|
+
validation_rules: Vec<Box<dyn ValidationRule<T> + Send + Sync>>,
|
|
332
|
+
metrics_collector: Option<Arc<dyn MetricsCollector + Send + Sync>>,
|
|
333
|
+
_phantom: PhantomData<(T, K, E)>,
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// The implementation methods might be missed if the search focuses on specific
|
|
337
|
+
// method bodies but the generic constraints above define the semantic context
|
|
338
|
+
impl<T, K, E> GenericRepository<T, K, E>
|
|
339
|
+
where
|
|
340
|
+
T: Entity<Key = K> + Serialize + DeserializeOwned + Clone + Debug + Send + Sync + 'static,
|
|
341
|
+
K: EntityKey + Hash + Eq + Clone + Debug + Send + Sync + 'static,
|
|
342
|
+
E: RepositoryError + From<DatabaseError> + Send + Sync + 'static,
|
|
343
|
+
T::QueryBuilder: QueryBuilder<T, K> + Send + Sync,
|
|
344
|
+
T::Validator: EntityValidator<T> + Send + Sync,
|
|
345
|
+
{
|
|
346
|
+
// This method's implementation might be targeted by search, but without
|
|
347
|
+
// the generic constraints context above, the semantic meaning is incomplete
|
|
348
|
+
pub async fn find_with_complex_criteria(
|
|
349
|
+
&self,
|
|
350
|
+
criteria: ComplexQueryCriteria<T, K>
|
|
351
|
+
) -> Result<PaginatedResult<T>, E> {
|
|
352
|
+
// Method implementation that relies heavily on the generic constraints
|
|
353
|
+
// defined above but might be filtered separately by line range optimization
|
|
354
|
+
let query_builder = T::QueryBuilder::new();
|
|
355
|
+
let validated_criteria = T::Validator::validate_query_criteria(&criteria)
|
|
356
|
+
.map_err(|validation_error| E::from(DatabaseError::ValidationFailed(validation_error)))?;
|
|
357
|
+
|
|
358
|
+
let paginated_query = query_builder
|
|
359
|
+
.with_criteria(validated_criteria)
|
|
360
|
+
.with_pagination(criteria.pagination.clone())
|
|
361
|
+
.with_ordering(criteria.sort_options.clone())
|
|
362
|
+
.build()?;
|
|
363
|
+
|
|
364
|
+
let results = self.execute_paginated_query(paginated_query).await?;
|
|
365
|
+
Ok(results)
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// TEST CASE 6: Nested Module Structure with Cross-References
|
|
370
|
+
pub mod complex_nested_structure {
|
|
371
|
+
use super::*;
|
|
372
|
+
|
|
373
|
+
pub mod data_access {
|
|
374
|
+
use super::*;
|
|
375
|
+
|
|
376
|
+
// This function references types and functions defined in other modules
|
|
377
|
+
// Early termination might miss these cross-module dependencies
|
|
378
|
+
pub async fn load_user_with_permissions(
|
|
379
|
+
user_id: u64,
|
|
380
|
+
repository: &impl UserRepository,
|
|
381
|
+
permission_service: &impl PermissionService
|
|
382
|
+
) -> Result<UserWithPermissions, DataAccessError> {
|
|
383
|
+
// The function body references external services and types
|
|
384
|
+
// If search targets this implementation but misses the service interfaces,
|
|
385
|
+
// the complete semantic picture is lost
|
|
386
|
+
let user = repository.find_by_id(user_id).await?
|
|
387
|
+
.ok_or(DataAccessError::UserNotFound(user_id))?;
|
|
388
|
+
|
|
389
|
+
let permissions = permission_service
|
|
390
|
+
.get_user_permissions(user_id)
|
|
391
|
+
.await
|
|
392
|
+
.map_err(DataAccessError::PermissionServiceError)?;
|
|
393
|
+
|
|
394
|
+
let role_permissions = permission_service
|
|
395
|
+
.get_role_permissions(&user.role)
|
|
396
|
+
.await
|
|
397
|
+
.map_err(DataAccessError::PermissionServiceError)?;
|
|
398
|
+
|
|
399
|
+
Ok(UserWithPermissions {
|
|
400
|
+
user,
|
|
401
|
+
direct_permissions: permissions,
|
|
402
|
+
role_permissions,
|
|
403
|
+
computed_at: Utc::now(),
|
|
404
|
+
})
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
pub mod business_logic {
|
|
409
|
+
use super::*;
|
|
410
|
+
use super::data_access::*;
|
|
411
|
+
|
|
412
|
+
// This service uses the data access functions above
|
|
413
|
+
// but might be considered in a separate "optimization zone"
|
|
414
|
+
pub struct UserManagementService {
|
|
415
|
+
user_repository: Arc<dyn UserRepository + Send + Sync>,
|
|
416
|
+
permission_service: Arc<dyn PermissionService + Send + Sync>,
|
|
417
|
+
audit_logger: Arc<dyn AuditLogger + Send + Sync>,
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
impl UserManagementService {
|
|
421
|
+
// This method creates semantic relationships with the data_access module
|
|
422
|
+
// but early termination might not capture these relationships
|
|
423
|
+
pub async fn update_user_with_permission_check(
|
|
424
|
+
&self,
|
|
425
|
+
user_id: u64,
|
|
426
|
+
updates: UserUpdateRequest,
|
|
427
|
+
requesting_user_id: u64
|
|
428
|
+
) -> Result<User, UserManagementError> {
|
|
429
|
+
// Load the requesting user with permissions (cross-module dependency)
|
|
430
|
+
let requesting_user = load_user_with_permissions(
|
|
431
|
+
requesting_user_id,
|
|
432
|
+
self.user_repository.as_ref(),
|
|
433
|
+
self.permission_service.as_ref()
|
|
434
|
+
).await
|
|
435
|
+
.map_err(UserManagementError::DataAccessError)?;
|
|
436
|
+
|
|
437
|
+
// Permission check logic that spans multiple semantic boundaries
|
|
438
|
+
if !requesting_user.can_modify_user(user_id) {
|
|
439
|
+
self.audit_logger.log_unauthorized_access(
|
|
440
|
+
requesting_user_id,
|
|
441
|
+
"update_user",
|
|
442
|
+
user_id
|
|
443
|
+
).await;
|
|
444
|
+
return Err(UserManagementError::InsufficientPermissions);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// The actual update logic references many external components
|
|
448
|
+
let updated_user = self.user_repository
|
|
449
|
+
.update(user_id, updates)
|
|
450
|
+
.await
|
|
451
|
+
.map_err(UserManagementError::RepositoryError)?;
|
|
452
|
+
|
|
453
|
+
self.audit_logger.log_user_update(
|
|
454
|
+
requesting_user_id,
|
|
455
|
+
user_id,
|
|
456
|
+
&updates
|
|
457
|
+
).await;
|
|
458
|
+
|
|
459
|
+
Ok(updated_user)
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
// Dummy types and traits for compilation
|
|
466
|
+
trait Entity {
|
|
467
|
+
type Key;
|
|
468
|
+
type QueryBuilder;
|
|
469
|
+
type Validator;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
trait EntityKey {}
|
|
473
|
+
trait RepositoryError {}
|
|
474
|
+
trait EntityValidator<T> {
|
|
475
|
+
fn validate_query_criteria<K>(criteria: &ComplexQueryCriteria<T, K>) -> Result<(), String>;
|
|
476
|
+
}
|
|
477
|
+
trait QueryBuilder<T, K> {
|
|
478
|
+
fn new() -> Self;
|
|
479
|
+
fn with_criteria(self, criteria: ValidatedCriteria<T, K>) -> Self;
|
|
480
|
+
fn with_pagination(self, pagination: PaginationOptions) -> Self;
|
|
481
|
+
fn with_ordering(self, sort: SortOptions) -> Self;
|
|
482
|
+
fn build(self) -> Result<PaginatedQuery<T>, DatabaseError>;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
// Additional supporting types...
|
|
486
|
+
struct DatabaseConnection;
|
|
487
|
+
struct QueryParameters<T>(T);
|
|
488
|
+
struct RetryConfiguration { max_retries: u32, delay: std::time::Duration }
|
|
489
|
+
struct DatabaseError<E>(E);
|
|
490
|
+
struct RawResult;
|
|
491
|
+
struct ProcessedData<T, R> { items: Vec<T>, metadata: String, processing_time: std::time::Duration }
|
|
492
|
+
struct ProcessingConfig;
|
|
493
|
+
struct ComplexProcessingError<E>(E);
|
|
494
|
+
struct ProcessingContext;
|
|
495
|
+
struct HttpClient { base_url: String }
|
|
496
|
+
struct ApiError;
|
|
497
|
+
struct ServiceConfiguration { max_batch_size: usize, post_processing_rules: Vec<PostProcessingRule> }
|
|
498
|
+
struct ServiceMetrics;
|
|
499
|
+
struct ServiceCreationError;
|
|
500
|
+
struct ProcessingInput<T> { data: Vec<T> }
|
|
501
|
+
struct ProcessingOutput<R>(R);
|
|
502
|
+
struct ProcessingError;
|
|
503
|
+
struct ValidationError;
|
|
504
|
+
struct IntermediateResult<R>(R);
|
|
505
|
+
struct PostProcessingRule;
|
|
506
|
+
struct ConnectionPool;
|
|
507
|
+
struct CachedQuery<T>(T);
|
|
508
|
+
trait ValidationRule<T> {}
|
|
509
|
+
trait MetricsCollector {}
|
|
510
|
+
struct ComplexQueryCriteria<T, K> { pagination: PaginationOptions, sort_options: SortOptions, _phantom: PhantomData<(T, K)> }
|
|
511
|
+
struct PaginatedResult<T>(Vec<T>);
|
|
512
|
+
struct ValidatedCriteria<T, K>(PhantomData<(T, K)>);
|
|
513
|
+
struct PaginationOptions;
|
|
514
|
+
struct SortOptions;
|
|
515
|
+
struct PaginatedQuery<T>(T);
|
|
516
|
+
struct DataAccessError;
|
|
517
|
+
trait UserRepository {
|
|
518
|
+
async fn find_by_id(&self, id: u64) -> Result<Option<User>, DatabaseError<String>>;
|
|
519
|
+
async fn update(&self, id: u64, updates: UserUpdateRequest) -> Result<User, DatabaseError<String>>;
|
|
520
|
+
}
|
|
521
|
+
trait PermissionService {
|
|
522
|
+
async fn get_user_permissions(&self, user_id: u64) -> Result<Vec<Permission>, String>;
|
|
523
|
+
async fn get_role_permissions(&self, role: &str) -> Result<Vec<Permission>, String>;
|
|
524
|
+
}
|
|
525
|
+
struct UserWithPermissions { user: User, direct_permissions: Vec<Permission>, role_permissions: Vec<Permission>, computed_at: chrono::DateTime<chrono::Utc> }
|
|
526
|
+
struct User { role: String }
|
|
527
|
+
struct Permission;
|
|
528
|
+
struct UserManagementError;
|
|
529
|
+
struct UserUpdateRequest;
|
|
530
|
+
trait AuditLogger {
|
|
531
|
+
async fn log_unauthorized_access(&self, user_id: u64, action: &str, target_id: u64);
|
|
532
|
+
async fn log_user_update(&self, requesting_user_id: u64, target_user_id: u64, updates: &UserUpdateRequest);
|
|
533
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"net/http"
|
|
5
|
+
|
|
6
|
+
"github.com/gin-gonic/gin"
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
func HandleNotFound(c *gin.Context) {
|
|
10
|
+
c.JSON(http.StatusNotFound, ErrorResponse{
|
|
11
|
+
Errors: []struct {
|
|
12
|
+
Title string `json:"title"`
|
|
13
|
+
Detail string `json:"detail"`
|
|
14
|
+
}{{Title: "Not Found", Detail: "Model price not found"}},
|
|
15
|
+
})
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type ErrorResponse struct {
|
|
19
|
+
Errors interface{} `json:"errors"`
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
func main() {
|
|
23
|
+
r := gin.Default()
|
|
24
|
+
r.NoRoute(HandleNotFound)
|
|
25
|
+
r.Run()
|
|
26
|
+
}
|