@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,335 @@
|
|
|
1
|
+
use std::fs;
|
|
2
|
+
use std::process::Command;
|
|
3
|
+
use tempfile::TempDir;
|
|
4
|
+
|
|
5
|
+
#[test]
|
|
6
|
+
fn test_outline_format_no_cross_file_interference() {
|
|
7
|
+
// Create a temporary directory for test files
|
|
8
|
+
let temp_dir = TempDir::new().expect("Failed to create temp dir");
|
|
9
|
+
let temp_path = temp_dir.path();
|
|
10
|
+
|
|
11
|
+
// Create file1.rs with specific content and line numbers
|
|
12
|
+
let file1_content = r#"// File 1 - Test file with overlapping line numbers
|
|
13
|
+
use std::collections::HashMap;
|
|
14
|
+
|
|
15
|
+
fn main() {
|
|
16
|
+
println!("File 1 main function");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
fn calculate_score(items: &[i32]) -> i32 {
|
|
20
|
+
let mut total = 0;
|
|
21
|
+
for item in items {
|
|
22
|
+
total += item;
|
|
23
|
+
if total > 100 {
|
|
24
|
+
println!("Score is high: {}", total);
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
println!("Current score: {}", total);
|
|
28
|
+
}
|
|
29
|
+
total
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
fn process_data(data: Vec<String>) -> HashMap<String, usize> {
|
|
33
|
+
let mut result = HashMap::new();
|
|
34
|
+
for entry in data {
|
|
35
|
+
let count = result.entry(entry).or_insert(0);
|
|
36
|
+
*count += 1;
|
|
37
|
+
}
|
|
38
|
+
result
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
fn handle_request() {
|
|
42
|
+
println!("Handling request in file 1");
|
|
43
|
+
let data = vec!["test".to_string(), "example".to_string()];
|
|
44
|
+
let processed = process_data(data);
|
|
45
|
+
println!("Processed: {:?}", processed);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
impl MyStruct {
|
|
49
|
+
fn new() -> Self {
|
|
50
|
+
MyStruct {
|
|
51
|
+
value: 0,
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
fn calculate(&self) -> i32 {
|
|
56
|
+
self.value * 2
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
struct MyStruct {
|
|
61
|
+
value: i32,
|
|
62
|
+
}"#;
|
|
63
|
+
|
|
64
|
+
// Create file2.rs with overlapping line numbers (same line structure)
|
|
65
|
+
let file2_content = r#"// File 2 - Test file with overlapping line numbers
|
|
66
|
+
use std::vec::Vec;
|
|
67
|
+
|
|
68
|
+
fn main() {
|
|
69
|
+
println!("File 2 main function");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
fn calculate_average(numbers: &[f64]) -> f64 {
|
|
73
|
+
let mut sum = 0.0;
|
|
74
|
+
for num in numbers {
|
|
75
|
+
sum += num;
|
|
76
|
+
if sum > 1000.0 {
|
|
77
|
+
println!("Sum is very large: {}", sum);
|
|
78
|
+
return sum / numbers.len() as f64;
|
|
79
|
+
}
|
|
80
|
+
println!("Current sum: {}", sum);
|
|
81
|
+
}
|
|
82
|
+
sum / numbers.len() as f64
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
fn process_input(input: String) -> Vec<String> {
|
|
86
|
+
let mut tokens = Vec::new();
|
|
87
|
+
for word in input.split_whitespace() {
|
|
88
|
+
tokens.push(word.to_string());
|
|
89
|
+
}
|
|
90
|
+
tokens
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
fn handle_response() {
|
|
94
|
+
println!("Handling response in file 2");
|
|
95
|
+
let input = "test example data".to_string();
|
|
96
|
+
let tokens = process_input(input);
|
|
97
|
+
println!("Tokens: {:?}", tokens);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
impl DataProcessor {
|
|
101
|
+
fn new() -> Self {
|
|
102
|
+
DataProcessor {
|
|
103
|
+
buffer: Vec::new(),
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
fn calculate(&self) -> usize {
|
|
108
|
+
self.buffer.len()
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
struct DataProcessor {
|
|
113
|
+
buffer: Vec<String>,
|
|
114
|
+
}"#;
|
|
115
|
+
|
|
116
|
+
let file1_path = temp_path.join("file1.rs");
|
|
117
|
+
let file2_path = temp_path.join("file2.rs");
|
|
118
|
+
|
|
119
|
+
fs::write(&file1_path, file1_content).expect("Failed to write file1.rs");
|
|
120
|
+
fs::write(&file2_path, file2_content).expect("Failed to write file2.rs");
|
|
121
|
+
|
|
122
|
+
// Run probe with outline format
|
|
123
|
+
let output = Command::new("cargo")
|
|
124
|
+
.args([
|
|
125
|
+
"run",
|
|
126
|
+
"--",
|
|
127
|
+
"search",
|
|
128
|
+
"calculate",
|
|
129
|
+
temp_path.to_str().unwrap(),
|
|
130
|
+
"--format",
|
|
131
|
+
"outline",
|
|
132
|
+
])
|
|
133
|
+
.current_dir(env!("CARGO_MANIFEST_DIR"))
|
|
134
|
+
.output()
|
|
135
|
+
.expect("Failed to run probe");
|
|
136
|
+
|
|
137
|
+
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
138
|
+
|
|
139
|
+
// Debug: print the output for troubleshooting
|
|
140
|
+
if !output.status.success() {
|
|
141
|
+
println!("Command failed with status: {}", output.status);
|
|
142
|
+
println!("STDOUT:\n{}", stdout);
|
|
143
|
+
println!("STDERR:\n{}", String::from_utf8_lossy(&output.stderr));
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
assert!(output.status.success(), "Command should succeed");
|
|
147
|
+
|
|
148
|
+
// Check that both files show their complete function structures
|
|
149
|
+
// File 1 should show both calculate_score and calculate methods
|
|
150
|
+
assert!(
|
|
151
|
+
stdout.contains("fn calculate_score(items: &[i32]) -> i32"),
|
|
152
|
+
"File 1 should show calculate_score function. Output: {}",
|
|
153
|
+
stdout
|
|
154
|
+
);
|
|
155
|
+
assert!(
|
|
156
|
+
stdout.contains("fn calculate(&self) -> i32"),
|
|
157
|
+
"File 1 should show calculate method. Output: {}",
|
|
158
|
+
stdout
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
// File 2 should show both calculate_average and calculate methods (despite overlapping line numbers)
|
|
162
|
+
assert!(
|
|
163
|
+
stdout.contains("fn calculate_average(numbers: &[f64]) -> f64"),
|
|
164
|
+
"File 2 should show calculate_average function. Output: {}",
|
|
165
|
+
stdout
|
|
166
|
+
);
|
|
167
|
+
assert!(
|
|
168
|
+
stdout.contains("fn calculate(&self) -> usize"),
|
|
169
|
+
"File 2 should show calculate method with different signature. Output: {}",
|
|
170
|
+
stdout
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
// Both files should appear in the output
|
|
174
|
+
assert!(
|
|
175
|
+
stdout.contains("file1.rs"),
|
|
176
|
+
"Output should contain file1.rs"
|
|
177
|
+
);
|
|
178
|
+
assert!(
|
|
179
|
+
stdout.contains("file2.rs"),
|
|
180
|
+
"Output should contain file2.rs"
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
// Verify that both files show their complete implementations
|
|
184
|
+
// File 1: calculate_score should show lines 8-18 (approximate)
|
|
185
|
+
assert!(
|
|
186
|
+
stdout.contains("8 fn calculate_score(items: &[i32]) -> i32"),
|
|
187
|
+
"File 1 should show line 8 with calculate_score"
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
// File 2: calculate_average should show lines 8-18 (same line numbers as file1, but different content)
|
|
191
|
+
assert!(
|
|
192
|
+
stdout.contains("8 fn calculate_average(numbers: &[f64]) -> f64"),
|
|
193
|
+
"File 2 should show line 8 with calculate_average"
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
// Ensure we have multiple results (at least 4: 2 functions + 2 methods)
|
|
197
|
+
if let Some(found_line) = stdout.lines().find(|line| line.starts_with("Found")) {
|
|
198
|
+
// Extract the number from "Found X search results"
|
|
199
|
+
if let Some(num_str) = found_line.split_whitespace().nth(1) {
|
|
200
|
+
if let Ok(count) = num_str.parse::<usize>() {
|
|
201
|
+
assert!(
|
|
202
|
+
count >= 4,
|
|
203
|
+
"Should find at least 4 results. Found: {} results. Output: {}",
|
|
204
|
+
count,
|
|
205
|
+
stdout
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
} else {
|
|
210
|
+
panic!("Could not find results count line in output: {}", stdout);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
#[test]
|
|
215
|
+
fn test_outline_format_ellipsis_per_file() {
|
|
216
|
+
// Create a temporary directory for test files
|
|
217
|
+
let temp_dir = TempDir::new().expect("Failed to create temp dir");
|
|
218
|
+
let temp_path = temp_dir.path();
|
|
219
|
+
|
|
220
|
+
// Create files with println statements that will trigger ellipsis
|
|
221
|
+
let file1_content = r#"fn main() {
|
|
222
|
+
println!("File 1 main");
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Many lines to create gaps
|
|
226
|
+
// Line 6
|
|
227
|
+
// Line 7
|
|
228
|
+
// Line 8
|
|
229
|
+
// Line 9
|
|
230
|
+
// Line 10
|
|
231
|
+
// Line 11
|
|
232
|
+
// Line 12
|
|
233
|
+
// Line 13
|
|
234
|
+
// Line 14
|
|
235
|
+
// Line 15
|
|
236
|
+
// Line 16
|
|
237
|
+
// Line 17
|
|
238
|
+
// Line 18
|
|
239
|
+
// Line 19
|
|
240
|
+
// Line 20
|
|
241
|
+
|
|
242
|
+
fn another_function() {
|
|
243
|
+
println!("File 1 another");
|
|
244
|
+
}"#;
|
|
245
|
+
|
|
246
|
+
let file2_content = r#"fn main() {
|
|
247
|
+
println!("File 2 main");
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Many lines to create gaps
|
|
251
|
+
// Line 6
|
|
252
|
+
// Line 7
|
|
253
|
+
// Line 8
|
|
254
|
+
// Line 9
|
|
255
|
+
// Line 10
|
|
256
|
+
// Line 11
|
|
257
|
+
// Line 12
|
|
258
|
+
// Line 13
|
|
259
|
+
// Line 14
|
|
260
|
+
// Line 15
|
|
261
|
+
// Line 16
|
|
262
|
+
// Line 17
|
|
263
|
+
// Line 18
|
|
264
|
+
// Line 19
|
|
265
|
+
// Line 20
|
|
266
|
+
|
|
267
|
+
fn another_function() {
|
|
268
|
+
println!("File 2 another");
|
|
269
|
+
}"#;
|
|
270
|
+
|
|
271
|
+
let file1_path = temp_path.join("file1.rs");
|
|
272
|
+
let file2_path = temp_path.join("file2.rs");
|
|
273
|
+
|
|
274
|
+
fs::write(&file1_path, file1_content).expect("Failed to write file1.rs");
|
|
275
|
+
fs::write(&file2_path, file2_content).expect("Failed to write file2.rs");
|
|
276
|
+
|
|
277
|
+
// Run probe with outline format
|
|
278
|
+
let output = Command::new("cargo")
|
|
279
|
+
.args([
|
|
280
|
+
"run",
|
|
281
|
+
"--",
|
|
282
|
+
"search",
|
|
283
|
+
"println",
|
|
284
|
+
temp_path.to_str().unwrap(),
|
|
285
|
+
"--format",
|
|
286
|
+
"outline",
|
|
287
|
+
])
|
|
288
|
+
.current_dir(env!("CARGO_MANIFEST_DIR"))
|
|
289
|
+
.output()
|
|
290
|
+
.expect("Failed to run probe");
|
|
291
|
+
|
|
292
|
+
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
293
|
+
|
|
294
|
+
assert!(output.status.success(), "Command should succeed");
|
|
295
|
+
|
|
296
|
+
// Each file should show ellipsis independently
|
|
297
|
+
// Count the number of "..." (ellipsis) in the output
|
|
298
|
+
let ellipsis_count = stdout.matches("...").count();
|
|
299
|
+
|
|
300
|
+
// With 2 files, each having a gap, we should see at least 2 ellipsis
|
|
301
|
+
assert!(
|
|
302
|
+
ellipsis_count >= 2,
|
|
303
|
+
"Should show ellipsis in both files independently. Found {} ellipsis. Output: {}",
|
|
304
|
+
ellipsis_count,
|
|
305
|
+
stdout
|
|
306
|
+
);
|
|
307
|
+
|
|
308
|
+
// Both files should appear
|
|
309
|
+
assert!(
|
|
310
|
+
stdout.contains("file1.rs"),
|
|
311
|
+
"Output should contain file1.rs"
|
|
312
|
+
);
|
|
313
|
+
assert!(
|
|
314
|
+
stdout.contains("file2.rs"),
|
|
315
|
+
"Output should contain file2.rs"
|
|
316
|
+
);
|
|
317
|
+
|
|
318
|
+
// Both files should show their println statements
|
|
319
|
+
assert!(
|
|
320
|
+
stdout.contains("println!(\"File 1 main\")"),
|
|
321
|
+
"Should show File 1 main println"
|
|
322
|
+
);
|
|
323
|
+
assert!(
|
|
324
|
+
stdout.contains("println!(\"File 2 main\")"),
|
|
325
|
+
"Should show File 2 main println"
|
|
326
|
+
);
|
|
327
|
+
assert!(
|
|
328
|
+
stdout.contains("println!(\"File 1 another\")"),
|
|
329
|
+
"Should show File 1 another println"
|
|
330
|
+
);
|
|
331
|
+
assert!(
|
|
332
|
+
stdout.contains("println!(\"File 2 another\")"),
|
|
333
|
+
"Should show File 2 another println"
|
|
334
|
+
);
|
|
335
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
use std::process::Command;
|
|
2
|
+
|
|
3
|
+
#[test]
|
|
4
|
+
fn test_outline_format_preserves_keywords_in_truncated_arrays() {
|
|
5
|
+
// Run probe search with outline format on a file known to have large arrays with keywords
|
|
6
|
+
let output = Command::new("./target/release/probe")
|
|
7
|
+
.args([
|
|
8
|
+
"search",
|
|
9
|
+
"stemming",
|
|
10
|
+
"./src/search/tokenization.rs",
|
|
11
|
+
"--format",
|
|
12
|
+
"outline",
|
|
13
|
+
])
|
|
14
|
+
.output()
|
|
15
|
+
.expect("Failed to execute probe command");
|
|
16
|
+
|
|
17
|
+
let stdout = String::from_utf8(output.stdout).expect("Invalid UTF-8 in output");
|
|
18
|
+
|
|
19
|
+
// The output should contain the keyword "stemming" even in truncated arrays
|
|
20
|
+
assert!(
|
|
21
|
+
stdout.contains("stemming"),
|
|
22
|
+
"Output should contain 'stemming' keyword even in truncated arrays"
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
// The output should show truncation with "..."
|
|
26
|
+
assert!(
|
|
27
|
+
stdout.contains("..."),
|
|
28
|
+
"Output should show truncation with ellipsis"
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
// The output should have reasonable length (not thousands of lines like before)
|
|
32
|
+
let line_count = stdout.lines().count();
|
|
33
|
+
assert!(
|
|
34
|
+
line_count < 200,
|
|
35
|
+
"Output should be truncated to reasonable size, got {} lines",
|
|
36
|
+
line_count
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
#[test]
|
|
41
|
+
fn test_outline_format_highlights_keywords_in_comments() {
|
|
42
|
+
// Test that keywords are highlighted in function signatures and comments
|
|
43
|
+
let output = Command::new("./target/release/probe")
|
|
44
|
+
.args([
|
|
45
|
+
"search",
|
|
46
|
+
"stem",
|
|
47
|
+
"./src/search/tokenization.rs",
|
|
48
|
+
"--format",
|
|
49
|
+
"outline",
|
|
50
|
+
])
|
|
51
|
+
.output()
|
|
52
|
+
.expect("Failed to execute probe command");
|
|
53
|
+
|
|
54
|
+
let stdout = String::from_utf8(output.stdout).expect("Invalid UTF-8 in output");
|
|
55
|
+
|
|
56
|
+
// Should contain the function name with highlighting (though we can't test ANSI codes easily)
|
|
57
|
+
assert!(
|
|
58
|
+
stdout.contains("tokenize_and_stem"),
|
|
59
|
+
"Should contain function name with stem keyword"
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
// Should contain comment lines with the keyword
|
|
63
|
+
assert!(
|
|
64
|
+
stdout.contains("apply stemming"),
|
|
65
|
+
"Should contain comment with stemming keyword"
|
|
66
|
+
);
|
|
67
|
+
}
|