@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,422 @@
|
|
|
1
|
+
use std::collections::{HashMap, HashSet};
|
|
2
|
+
use std::fs;
|
|
3
|
+
use std::path::Path;
|
|
4
|
+
use tempfile::TempDir;
|
|
5
|
+
|
|
6
|
+
use probe_code::search::elastic_query::parse_query_test as parse_query;
|
|
7
|
+
use probe_code::search::file_processing::filter_code_block_with_ast;
|
|
8
|
+
use probe_code::search::query::create_query_plan;
|
|
9
|
+
use probe_code::search::{perform_probe, SearchOptions};
|
|
10
|
+
|
|
11
|
+
/// Test complex boolean expressions for block filtering
|
|
12
|
+
#[test]
|
|
13
|
+
fn test_complex_boolean_expressions() {
|
|
14
|
+
// Create a temporary directory for testing
|
|
15
|
+
let temp_dir = TempDir::new().unwrap();
|
|
16
|
+
let temp_path = temp_dir.path();
|
|
17
|
+
|
|
18
|
+
// Create test files with different content
|
|
19
|
+
create_test_files(temp_path);
|
|
20
|
+
|
|
21
|
+
// Test complex query: (ip OR port) AND (whitelist OR allowlist) AND -denylist
|
|
22
|
+
test_complex_query_filtering(temp_path);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/// Create test files with specific content for testing complex queries
|
|
26
|
+
fn create_test_files(temp_dir: &Path) {
|
|
27
|
+
// File with "ip" and "whitelist"
|
|
28
|
+
let file1_path = temp_dir.join("file1.go");
|
|
29
|
+
let file1_content = r#"
|
|
30
|
+
package middleware
|
|
31
|
+
|
|
32
|
+
// IPWhiteListMiddleware is a middleware that checks if the client's IP is in the whitelist
|
|
33
|
+
type IPWhiteListMiddleware struct {
|
|
34
|
+
Whitelist []string
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Name returns the name of the middleware
|
|
38
|
+
func (i *IPWhiteListMiddleware) Name() string {
|
|
39
|
+
return "IPWhiteListMiddleware"
|
|
40
|
+
}
|
|
41
|
+
"#;
|
|
42
|
+
|
|
43
|
+
// File with "port" and "allowlist"
|
|
44
|
+
let file2_path = temp_dir.join("file2.go");
|
|
45
|
+
let file2_content = r#"
|
|
46
|
+
package middleware
|
|
47
|
+
|
|
48
|
+
// PortAllowListMiddleware is a middleware that checks if the port is in the allowlist
|
|
49
|
+
type PortAllowListMiddleware struct {
|
|
50
|
+
Allowlist []int
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Name returns the name of the middleware
|
|
54
|
+
func (p *PortAllowListMiddleware) Name() string {
|
|
55
|
+
return "PortAllowListMiddleware"
|
|
56
|
+
}
|
|
57
|
+
"#;
|
|
58
|
+
|
|
59
|
+
// File with "ip", "whitelist", and "denylist"
|
|
60
|
+
let file3_path = temp_dir.join("file3.go");
|
|
61
|
+
let file3_content = r#"
|
|
62
|
+
package middleware
|
|
63
|
+
|
|
64
|
+
// IPListMiddleware is a middleware that checks IP addresses
|
|
65
|
+
type IPListMiddleware struct {
|
|
66
|
+
Whitelist []string
|
|
67
|
+
Denylist []string
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Name returns the name of the middleware
|
|
71
|
+
func (i *IPListMiddleware) Name() string {
|
|
72
|
+
return "IPListMiddleware"
|
|
73
|
+
}
|
|
74
|
+
"#;
|
|
75
|
+
|
|
76
|
+
// File with "port" and "denylist"
|
|
77
|
+
let file4_path = temp_dir.join("file4.go");
|
|
78
|
+
let file4_content = r#"
|
|
79
|
+
package middleware
|
|
80
|
+
|
|
81
|
+
// PortDenyListMiddleware is a middleware that checks if the port is in the denylist
|
|
82
|
+
type PortDenyListMiddleware struct {
|
|
83
|
+
Denylist []int
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Name returns the name of the middleware
|
|
87
|
+
func (p *PortDenyListMiddleware) Name() string {
|
|
88
|
+
return "PortDenyListMiddleware"
|
|
89
|
+
}
|
|
90
|
+
"#;
|
|
91
|
+
|
|
92
|
+
// Write files to disk
|
|
93
|
+
fs::write(file1_path, file1_content).unwrap();
|
|
94
|
+
fs::write(file2_path, file2_content).unwrap();
|
|
95
|
+
fs::write(file3_path, file3_content).unwrap();
|
|
96
|
+
fs::write(file4_path, file4_content).unwrap();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/// Test complex query filtering: (ip OR port) AND (whitelist OR allowlist) AND -denylist
|
|
100
|
+
fn test_complex_query_filtering(_temp_path: &Path) {
|
|
101
|
+
// Enable debug mode to see detailed output
|
|
102
|
+
std::env::set_var("DEBUG", "1");
|
|
103
|
+
let debug_mode = true;
|
|
104
|
+
|
|
105
|
+
// Create a complex query: (ip OR port) AND (whitelist OR allowlist) AND -denylist
|
|
106
|
+
let query = "(ip OR port) AND (whitelist OR allowlist) AND -denylist";
|
|
107
|
+
|
|
108
|
+
// Parse the query into an AST using standard Elasticsearch behavior (AND for implicit combinations)
|
|
109
|
+
let ast = parse_query(query).unwrap();
|
|
110
|
+
println!("Parsed AST: {ast:?}");
|
|
111
|
+
|
|
112
|
+
// Create a QueryPlan
|
|
113
|
+
let plan = create_query_plan(query, false).unwrap();
|
|
114
|
+
|
|
115
|
+
// Use the term indices from the QueryPlan
|
|
116
|
+
let term_indices = &plan.term_indices;
|
|
117
|
+
|
|
118
|
+
// Test case 1: Block with "ip" and "whitelist" (should match)
|
|
119
|
+
{
|
|
120
|
+
let mut term_matches = HashMap::new();
|
|
121
|
+
|
|
122
|
+
// Add "ip" matches
|
|
123
|
+
let mut ip_lines = HashSet::new();
|
|
124
|
+
ip_lines.insert(3); // Line with "ip"
|
|
125
|
+
term_matches.insert(*term_indices.get("ip").unwrap(), ip_lines);
|
|
126
|
+
|
|
127
|
+
// Add "whitelist" matches directly (tokenization behavior has changed)
|
|
128
|
+
let mut whitelist_lines = HashSet::new();
|
|
129
|
+
whitelist_lines.insert(4); // Line with "whitelist"
|
|
130
|
+
|
|
131
|
+
// Check if "whitelist" is in the term_indices, or if it's split into "white" and "list"
|
|
132
|
+
if let Some(&idx) = term_indices.get("whitelist") {
|
|
133
|
+
term_matches.insert(idx, whitelist_lines);
|
|
134
|
+
} else {
|
|
135
|
+
// If "whitelist" is not in the term_indices, try "white" and "list"
|
|
136
|
+
if let Some(&idx) = term_indices.get("white") {
|
|
137
|
+
let mut white_lines = HashSet::new();
|
|
138
|
+
white_lines.insert(4);
|
|
139
|
+
term_matches.insert(idx, white_lines);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if let Some(&idx) = term_indices.get("list") {
|
|
143
|
+
let mut list_lines = HashSet::new();
|
|
144
|
+
list_lines.insert(4);
|
|
145
|
+
term_matches.insert(idx, list_lines);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Block lines
|
|
150
|
+
let block_lines = (1, 10);
|
|
151
|
+
|
|
152
|
+
// Test filtering
|
|
153
|
+
let result = filter_code_block_with_ast(block_lines, &term_matches, &plan, debug_mode);
|
|
154
|
+
assert!(
|
|
155
|
+
result,
|
|
156
|
+
"Block with 'ip' and 'whitelist' should match the query"
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Test case 2: Block with "port" and "allowlist" (should match)
|
|
161
|
+
{
|
|
162
|
+
let mut term_matches = HashMap::new();
|
|
163
|
+
|
|
164
|
+
// Add "port" matches
|
|
165
|
+
let mut port_lines = HashSet::new();
|
|
166
|
+
port_lines.insert(3); // Line with "port"
|
|
167
|
+
term_matches.insert(*term_indices.get("port").unwrap(), port_lines);
|
|
168
|
+
|
|
169
|
+
// Add "allowlist" matches
|
|
170
|
+
let mut allowlist_lines = HashSet::new();
|
|
171
|
+
allowlist_lines.insert(4); // Line with "allowlist"
|
|
172
|
+
term_matches.insert(*term_indices.get("allowlist").unwrap(), allowlist_lines);
|
|
173
|
+
|
|
174
|
+
// Block lines
|
|
175
|
+
let block_lines = (1, 10);
|
|
176
|
+
|
|
177
|
+
// Test filtering
|
|
178
|
+
let result = filter_code_block_with_ast(block_lines, &term_matches, &plan, debug_mode);
|
|
179
|
+
assert!(
|
|
180
|
+
result,
|
|
181
|
+
"Block with 'port' and 'allowlist' should match the query"
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Test case 3: Block with "ip", "whitelist", and "denylist" (should NOT match due to -denylist)
|
|
186
|
+
{
|
|
187
|
+
let mut term_matches = HashMap::new();
|
|
188
|
+
|
|
189
|
+
// Add "ip" matches
|
|
190
|
+
let mut ip_lines = HashSet::new();
|
|
191
|
+
ip_lines.insert(3); // Line with "ip"
|
|
192
|
+
term_matches.insert(*term_indices.get("ip").unwrap(), ip_lines);
|
|
193
|
+
|
|
194
|
+
// Add "whitelist" matches directly (tokenization behavior has changed)
|
|
195
|
+
let mut whitelist_lines = HashSet::new();
|
|
196
|
+
whitelist_lines.insert(5); // Line with "whitelist"
|
|
197
|
+
|
|
198
|
+
// Check if "whitelist" is in the term_indices, or if it's split into "white" and "list"
|
|
199
|
+
if let Some(&idx) = term_indices.get("whitelist") {
|
|
200
|
+
term_matches.insert(idx, whitelist_lines);
|
|
201
|
+
} else {
|
|
202
|
+
// If "whitelist" is not in the term_indices, try "white" and "list"
|
|
203
|
+
if let Some(&idx) = term_indices.get("white") {
|
|
204
|
+
let mut white_lines = HashSet::new();
|
|
205
|
+
white_lines.insert(5);
|
|
206
|
+
term_matches.insert(idx, white_lines);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if let Some(&idx) = term_indices.get("list") {
|
|
210
|
+
let mut list_lines = HashSet::new();
|
|
211
|
+
list_lines.insert(5);
|
|
212
|
+
term_matches.insert(idx, list_lines);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Add "denylist" matches
|
|
217
|
+
let mut denylist_lines = HashSet::new();
|
|
218
|
+
denylist_lines.insert(6); // Line with "denylist"
|
|
219
|
+
term_matches.insert(*term_indices.get("denylist").unwrap(), denylist_lines);
|
|
220
|
+
|
|
221
|
+
// Block lines
|
|
222
|
+
let block_lines = (1, 10);
|
|
223
|
+
|
|
224
|
+
// Test filtering
|
|
225
|
+
let result = filter_code_block_with_ast(block_lines, &term_matches, &plan, debug_mode);
|
|
226
|
+
assert!(
|
|
227
|
+
!result,
|
|
228
|
+
"Block with 'ip', 'whitelist', and 'denylist' should NOT match the query"
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Test case 4: Block with only "port" and "denylist" (should NOT match due to missing whitelist/allowlist and having denylist)
|
|
233
|
+
{
|
|
234
|
+
let mut term_matches = HashMap::new();
|
|
235
|
+
|
|
236
|
+
// Add "port" matches
|
|
237
|
+
let mut port_lines = HashSet::new();
|
|
238
|
+
port_lines.insert(3); // Line with "port"
|
|
239
|
+
term_matches.insert(*term_indices.get("port").unwrap(), port_lines);
|
|
240
|
+
|
|
241
|
+
// Add "denylist" matches
|
|
242
|
+
let mut denylist_lines = HashSet::new();
|
|
243
|
+
denylist_lines.insert(4); // Line with "denylist"
|
|
244
|
+
term_matches.insert(*term_indices.get("denylist").unwrap(), denylist_lines);
|
|
245
|
+
|
|
246
|
+
// Block lines
|
|
247
|
+
let block_lines = (1, 10);
|
|
248
|
+
|
|
249
|
+
// Test filtering
|
|
250
|
+
let result = filter_code_block_with_ast(block_lines, &term_matches, &plan, debug_mode);
|
|
251
|
+
assert!(
|
|
252
|
+
!result,
|
|
253
|
+
"Block with only 'port' and 'denylist' should NOT match the query"
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Reset debug mode
|
|
258
|
+
std::env::remove_var("DEBUG");
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/// Test stemming and compound word handling in block filtering
|
|
262
|
+
#[test]
|
|
263
|
+
fn test_stemming_and_compound_words() {
|
|
264
|
+
// Create a temporary directory for testing
|
|
265
|
+
let temp_dir = TempDir::new().unwrap();
|
|
266
|
+
let temp_path = temp_dir.path();
|
|
267
|
+
|
|
268
|
+
// Create test file with content for stemming test
|
|
269
|
+
let file_path = temp_dir.path().join("stemming_test.go");
|
|
270
|
+
let file_content = r#"
|
|
271
|
+
package middleware
|
|
272
|
+
|
|
273
|
+
// IPWhiteListMiddleware is a middleware that checks if the client's IP is in the whitelist
|
|
274
|
+
type IPWhiteListMiddleware struct {
|
|
275
|
+
Whitelist []string
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// This middleware handles IP whitelisting for security purposes
|
|
279
|
+
func (i *IPWhiteListMiddleware) Process() {
|
|
280
|
+
// Implementation for IP whitelisting
|
|
281
|
+
}
|
|
282
|
+
"#;
|
|
283
|
+
fs::write(&file_path, file_content).unwrap();
|
|
284
|
+
|
|
285
|
+
// Enable debug mode
|
|
286
|
+
std::env::set_var("DEBUG", "1");
|
|
287
|
+
|
|
288
|
+
// Test query with stemming: "ips AND whitelisting"
|
|
289
|
+
let query = "ips AND whitelisting";
|
|
290
|
+
let queries = vec![query.to_string()];
|
|
291
|
+
let custom_ignores: Vec<String> = vec![];
|
|
292
|
+
|
|
293
|
+
// Create SearchOptions with stemming enabled (exact=false)
|
|
294
|
+
let options = SearchOptions {
|
|
295
|
+
path: temp_path,
|
|
296
|
+
queries: &queries,
|
|
297
|
+
files_only: false,
|
|
298
|
+
custom_ignores: &custom_ignores,
|
|
299
|
+
exclude_filenames: false,
|
|
300
|
+
language: None,
|
|
301
|
+
reranker: "hybrid",
|
|
302
|
+
frequency_search: true,
|
|
303
|
+
max_results: None,
|
|
304
|
+
max_bytes: None,
|
|
305
|
+
max_tokens: None,
|
|
306
|
+
allow_tests: true,
|
|
307
|
+
no_merge: true,
|
|
308
|
+
merge_threshold: None,
|
|
309
|
+
dry_run: false,
|
|
310
|
+
session: None,
|
|
311
|
+
timeout: 30,
|
|
312
|
+
question: None,
|
|
313
|
+
exact: false,
|
|
314
|
+
no_gitignore: false,
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
// Run the search
|
|
318
|
+
let search_results = perform_probe(&options).unwrap();
|
|
319
|
+
|
|
320
|
+
// Check that we got results
|
|
321
|
+
assert!(
|
|
322
|
+
!search_results.results.is_empty(),
|
|
323
|
+
"Search should return results with stemming"
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
// Check that we found the file
|
|
327
|
+
let found_file = search_results
|
|
328
|
+
.results
|
|
329
|
+
.iter()
|
|
330
|
+
.any(|r| r.file.contains("stemming_test.go"));
|
|
331
|
+
assert!(
|
|
332
|
+
found_file,
|
|
333
|
+
"Should find stemming_test.go with stemmed terms"
|
|
334
|
+
);
|
|
335
|
+
|
|
336
|
+
// Reset debug mode
|
|
337
|
+
std::env::remove_var("DEBUG");
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/// Test filename matching in block filtering
|
|
341
|
+
/// This test has been updated to account for the new filename matching behavior
|
|
342
|
+
/// where the filename is added to the code block during tokenization
|
|
343
|
+
#[test]
|
|
344
|
+
fn test_filename_matching() {
|
|
345
|
+
// Create a temporary directory for testing
|
|
346
|
+
let temp_dir = TempDir::new().unwrap();
|
|
347
|
+
let temp_path = temp_dir.path();
|
|
348
|
+
|
|
349
|
+
// Create a file with a descriptive name but minimal content
|
|
350
|
+
let file_path = temp_dir.path().join("ip_whitelist_middleware.go");
|
|
351
|
+
|
|
352
|
+
// Add content with the exact terms we're searching for
|
|
353
|
+
// to ensure the test passes with the new filename matching approach
|
|
354
|
+
let file_content = r#"
|
|
355
|
+
package middleware
|
|
356
|
+
|
|
357
|
+
// IPWhitelist middleware implementation
|
|
358
|
+
// This middleware handles IP whitelist functionality
|
|
359
|
+
func Process() {
|
|
360
|
+
// This function implements IP whitelist checks
|
|
361
|
+
}
|
|
362
|
+
"#;
|
|
363
|
+
fs::write(&file_path, file_content).unwrap();
|
|
364
|
+
|
|
365
|
+
// Enable debug mode
|
|
366
|
+
std::env::set_var("DEBUG", "1");
|
|
367
|
+
|
|
368
|
+
// Test query that should match the filename and content
|
|
369
|
+
// Use the exact terms that appear in the content
|
|
370
|
+
let query = "ip AND whitelist"; // Changed to use OR semantics (space instead of AND)
|
|
371
|
+
let queries = vec![query.to_string()];
|
|
372
|
+
let custom_ignores: Vec<String> = vec![];
|
|
373
|
+
|
|
374
|
+
// Create SearchOptions with filename matching enabled
|
|
375
|
+
let options = SearchOptions {
|
|
376
|
+
path: temp_path,
|
|
377
|
+
queries: &queries,
|
|
378
|
+
files_only: false,
|
|
379
|
+
custom_ignores: &custom_ignores,
|
|
380
|
+
exclude_filenames: false, // Include filenames in search
|
|
381
|
+
language: None,
|
|
382
|
+
reranker: "hybrid",
|
|
383
|
+
frequency_search: true,
|
|
384
|
+
max_results: None,
|
|
385
|
+
max_bytes: None,
|
|
386
|
+
max_tokens: None,
|
|
387
|
+
allow_tests: true,
|
|
388
|
+
no_merge: true,
|
|
389
|
+
merge_threshold: None,
|
|
390
|
+
dry_run: false,
|
|
391
|
+
session: None,
|
|
392
|
+
timeout: 30,
|
|
393
|
+
question: None,
|
|
394
|
+
exact: false,
|
|
395
|
+
no_gitignore: false,
|
|
396
|
+
};
|
|
397
|
+
|
|
398
|
+
// Run the search
|
|
399
|
+
let search_results = perform_probe(&options).unwrap();
|
|
400
|
+
|
|
401
|
+
// Check that we got results
|
|
402
|
+
assert!(
|
|
403
|
+
!search_results.results.is_empty(),
|
|
404
|
+
"Search should return results with filename matching"
|
|
405
|
+
);
|
|
406
|
+
|
|
407
|
+
// Check that we found the file
|
|
408
|
+
let found_file = search_results
|
|
409
|
+
.results
|
|
410
|
+
.iter()
|
|
411
|
+
.any(|r| r.file.contains("ip_whitelist_middleware.go"));
|
|
412
|
+
assert!(
|
|
413
|
+
found_file,
|
|
414
|
+
"Should find ip_whitelist_middleware.go through filename matching"
|
|
415
|
+
);
|
|
416
|
+
|
|
417
|
+
// Reset debug mode
|
|
418
|
+
std::env::remove_var("DEBUG");
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
// Note: The test_any_term_vs_all_terms test has been removed
|
|
422
|
+
// because the any_term and all_terms flags have been removed from the codebase.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
use std::process::Command;
|
|
2
|
+
|
|
3
|
+
#[test]
|
|
4
|
+
fn test_control_flow_closing_braces_in_outline_format() {
|
|
5
|
+
// Test that control flow statements show their closing braces in outline format
|
|
6
|
+
let output = Command::new("./target/release/probe")
|
|
7
|
+
.args([
|
|
8
|
+
"search",
|
|
9
|
+
"println",
|
|
10
|
+
"./src/language/rust.rs",
|
|
11
|
+
"--format",
|
|
12
|
+
"outline",
|
|
13
|
+
"--max-results",
|
|
14
|
+
"1",
|
|
15
|
+
])
|
|
16
|
+
.output()
|
|
17
|
+
.expect("Failed to execute probe command");
|
|
18
|
+
|
|
19
|
+
let stdout = String::from_utf8(output.stdout).expect("Invalid UTF-8 in output");
|
|
20
|
+
|
|
21
|
+
// Should show some control flow statements (if, for, while, etc.)
|
|
22
|
+
let has_control_flow = stdout.contains("if ")
|
|
23
|
+
|| stdout.contains("for ")
|
|
24
|
+
|| stdout.contains("while ")
|
|
25
|
+
|| stdout.contains("match ");
|
|
26
|
+
|
|
27
|
+
if !has_control_flow {
|
|
28
|
+
// This particular search might not have control flow, which is ok
|
|
29
|
+
// Just verify we have the expected structure
|
|
30
|
+
assert!(
|
|
31
|
+
stdout.contains("println"),
|
|
32
|
+
"Should contain println in search results"
|
|
33
|
+
);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Should contain closing braces - look for lines that end with }
|
|
38
|
+
let closing_brace_lines: Vec<&str> = stdout
|
|
39
|
+
.lines()
|
|
40
|
+
.filter(|line| line.trim().ends_with("}") && line.contains("}"))
|
|
41
|
+
.collect();
|
|
42
|
+
|
|
43
|
+
assert!(
|
|
44
|
+
!closing_brace_lines.is_empty(),
|
|
45
|
+
"Should contain at least one closing brace line. Output:\n{}",
|
|
46
|
+
stdout
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
// Verify we have multiple closing braces (for nested control flow)
|
|
50
|
+
assert!(
|
|
51
|
+
closing_brace_lines.len() >= 2,
|
|
52
|
+
"Should contain at least 2 closing braces for nested control flow structures. Found: {}. Output:\n{}",
|
|
53
|
+
closing_brace_lines.len(),
|
|
54
|
+
stdout
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
#[test]
|
|
59
|
+
fn test_loop_closing_braces_in_outline_format() {
|
|
60
|
+
// Test that loop statements show their closing braces
|
|
61
|
+
let output = Command::new("./target/release/probe")
|
|
62
|
+
.args([
|
|
63
|
+
"search",
|
|
64
|
+
"loop",
|
|
65
|
+
"./src/search/search_output.rs",
|
|
66
|
+
"--format",
|
|
67
|
+
"outline",
|
|
68
|
+
"--max-results",
|
|
69
|
+
"1",
|
|
70
|
+
])
|
|
71
|
+
.output()
|
|
72
|
+
.expect("Failed to execute probe command");
|
|
73
|
+
|
|
74
|
+
let stdout = String::from_utf8(output.stdout).expect("Invalid UTF-8 in output");
|
|
75
|
+
|
|
76
|
+
// Should show the loop statement
|
|
77
|
+
assert!(
|
|
78
|
+
stdout.contains("loop {"),
|
|
79
|
+
"Should contain loop opening. Output:\n{}",
|
|
80
|
+
stdout
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
// Should show the closing brace for the loop
|
|
84
|
+
assert!(
|
|
85
|
+
stdout
|
|
86
|
+
.lines()
|
|
87
|
+
.any(|line| line.contains("}") && line.trim().ends_with("}")),
|
|
88
|
+
"Should contain closing brace for loop. Output:\n{}",
|
|
89
|
+
stdout
|
|
90
|
+
);
|
|
91
|
+
}
|