codevault 1.8.4 → 1.8.5
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 +3 -2
- package/dist/chunking/token-counter.d.ts.map +1 -1
- package/dist/chunking/token-counter.js +16 -10
- package/dist/chunking/token-counter.js.map +1 -1
- package/dist/cli/commands/index-cmd.d.ts.map +1 -1
- package/dist/cli/commands/index-cmd.js +108 -97
- package/dist/cli/commands/index-cmd.js.map +1 -1
- package/dist/cli/commands/interactive-config.d.ts.map +1 -1
- package/dist/cli/commands/interactive-config.js +40 -3
- package/dist/cli/commands/interactive-config.js.map +1 -1
- package/dist/cli/commands/search-cmd.d.ts.map +1 -1
- package/dist/cli/commands/search-cmd.js +11 -7
- package/dist/cli/commands/search-cmd.js.map +1 -1
- package/dist/cli/commands/search-with-code-cmd.d.ts.map +1 -1
- package/dist/cli/commands/search-with-code-cmd.js +3 -1
- package/dist/cli/commands/search-with-code-cmd.js.map +1 -1
- package/dist/cli/utils.d.ts +56 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +98 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/config/constants.d.ts +4 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +2 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/context/packs.d.ts.map +1 -1
- package/dist/context/packs.js +3 -1
- package/dist/context/packs.js.map +1 -1
- package/dist/core/IndexerEngine.d.ts +2 -0
- package/dist/core/IndexerEngine.d.ts.map +1 -1
- package/dist/core/IndexerEngine.js +34 -26
- package/dist/core/IndexerEngine.js.map +1 -1
- package/dist/core/SearchService.d.ts +1 -0
- package/dist/core/SearchService.d.ts.map +1 -1
- package/dist/core/SearchService.js +18 -12
- package/dist/core/SearchService.js.map +1 -1
- package/dist/core/batch-indexer.d.ts.map +1 -1
- package/dist/core/batch-indexer.js +5 -13
- package/dist/core/batch-indexer.js.map +1 -1
- package/dist/core/indexing/IndexFinalizationStage.d.ts.map +1 -1
- package/dist/core/indexing/IndexFinalizationStage.js +21 -2
- package/dist/core/indexing/IndexFinalizationStage.js.map +1 -1
- package/dist/core/indexing/IndexState.d.ts +3 -8
- package/dist/core/indexing/IndexState.d.ts.map +1 -1
- package/dist/core/indexing/IndexState.js.map +1 -1
- package/dist/core/indexing/PersistManager.d.ts +1 -1
- package/dist/core/indexing/PersistManager.d.ts.map +1 -1
- package/dist/core/indexing/PersistManager.js +17 -17
- package/dist/core/indexing/PersistManager.js.map +1 -1
- package/dist/core/search/HybridFusion.d.ts +0 -1
- package/dist/core/search/HybridFusion.d.ts.map +1 -1
- package/dist/core/search/HybridFusion.js +2 -14
- package/dist/core/search/HybridFusion.js.map +1 -1
- package/dist/core/search/ResultMapper.d.ts +0 -1
- package/dist/core/search/ResultMapper.d.ts.map +1 -1
- package/dist/core/search/ResultMapper.js +2 -13
- package/dist/core/search/ResultMapper.js.map +1 -1
- package/dist/core/search/SearchContextManager.d.ts +3 -0
- package/dist/core/search/SearchContextManager.d.ts.map +1 -1
- package/dist/core/search/SearchContextManager.js +15 -2
- package/dist/core/search/SearchContextManager.js.map +1 -1
- package/dist/core/search.d.ts.map +1 -1
- package/dist/core/search.js +9 -4
- package/dist/core/search.js.map +1 -1
- package/dist/languages/rules.d.ts.map +1 -1
- package/dist/languages/rules.js +14 -5
- package/dist/languages/rules.js.map +1 -1
- package/dist/mcp/schemas.d.ts +2 -2
- package/dist/mcp-server.d.ts +1 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +32 -21
- package/dist/mcp-server.js.map +1 -1
- package/dist/providers/base.d.ts +3 -2
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +3 -1
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/chat-llm.d.ts +2 -2
- package/dist/providers/chat-llm.d.ts.map +1 -1
- package/dist/providers/chat-llm.js +4 -1
- package/dist/providers/chat-llm.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +4 -1
- package/dist/providers/openai.js.map +1 -1
- package/dist/ranking/api-reranker.d.ts.map +1 -1
- package/dist/ranking/api-reranker.js +27 -8
- package/dist/ranking/api-reranker.js.map +1 -1
- package/dist/ranking/symbol-boost.d.ts.map +1 -1
- package/dist/ranking/symbol-boost.js +4 -11
- package/dist/ranking/symbol-boost.js.map +1 -1
- package/dist/search/bm25.d.ts +10 -0
- package/dist/search/bm25.d.ts.map +1 -1
- package/dist/search/bm25.js +16 -0
- package/dist/search/bm25.js.map +1 -1
- package/dist/storage/encrypted-chunks.d.ts +3 -0
- package/dist/storage/encrypted-chunks.d.ts.map +1 -1
- package/dist/storage/encrypted-chunks.js +108 -16
- package/dist/storage/encrypted-chunks.js.map +1 -1
- package/dist/synthesis/conversational-synthesizer.d.ts +2 -1
- package/dist/synthesis/conversational-synthesizer.d.ts.map +1 -1
- package/dist/synthesis/conversational-synthesizer.js +6 -1
- package/dist/synthesis/conversational-synthesizer.js.map +1 -1
- package/dist/synthesis/prompt-builder.d.ts.map +1 -1
- package/dist/synthesis/prompt-builder.js +40 -13
- package/dist/synthesis/prompt-builder.js.map +1 -1
- package/dist/synthesis/synthesizer.d.ts.map +1 -1
- package/dist/synthesis/synthesizer.js +14 -2
- package/dist/synthesis/synthesizer.js.map +1 -1
- package/dist/tests/api-reranker.test.d.ts +2 -0
- package/dist/tests/api-reranker.test.d.ts.map +1 -0
- package/dist/tests/api-reranker.test.js +575 -0
- package/dist/tests/api-reranker.test.js.map +1 -0
- package/dist/tests/bm25.test.d.ts +2 -0
- package/dist/tests/bm25.test.d.ts.map +1 -0
- package/dist/tests/bm25.test.js +340 -0
- package/dist/tests/bm25.test.js.map +1 -0
- package/dist/tests/chunking/file-grouper.test.d.ts +2 -0
- package/dist/tests/chunking/file-grouper.test.d.ts.map +1 -0
- package/dist/tests/chunking/file-grouper.test.js +495 -0
- package/dist/tests/chunking/file-grouper.test.js.map +1 -0
- package/dist/tests/chunking/semantic-chunker.test.d.ts +2 -0
- package/dist/tests/chunking/semantic-chunker.test.d.ts.map +1 -0
- package/dist/tests/chunking/semantic-chunker.test.js +509 -0
- package/dist/tests/chunking/semantic-chunker.test.js.map +1 -0
- package/dist/tests/chunking/token-counter.test.d.ts +2 -0
- package/dist/tests/chunking/token-counter.test.d.ts.map +1 -0
- package/dist/tests/chunking/token-counter.test.js +441 -0
- package/dist/tests/chunking/token-counter.test.js.map +1 -0
- package/dist/tests/cli/ask-cmd.test.d.ts +2 -0
- package/dist/tests/cli/ask-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/ask-cmd.test.js +152 -0
- package/dist/tests/cli/ask-cmd.test.js.map +1 -0
- package/dist/tests/cli/chat-cmd.test.d.ts +2 -0
- package/dist/tests/cli/chat-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/chat-cmd.test.js +118 -0
- package/dist/tests/cli/chat-cmd.test.js.map +1 -0
- package/dist/tests/cli/config-cmd.test.d.ts +2 -0
- package/dist/tests/cli/config-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/config-cmd.test.js +226 -0
- package/dist/tests/cli/config-cmd.test.js.map +1 -0
- package/dist/tests/cli/context.test.d.ts +2 -0
- package/dist/tests/cli/context.test.d.ts.map +1 -0
- package/dist/tests/cli/context.test.js +158 -0
- package/dist/tests/cli/context.test.js.map +1 -0
- package/dist/tests/cli/index-cmd.test.d.ts +2 -0
- package/dist/tests/cli/index-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/index-cmd.test.js +89 -0
- package/dist/tests/cli/index-cmd.test.js.map +1 -0
- package/dist/tests/cli/index.test.d.ts +2 -0
- package/dist/tests/cli/index.test.d.ts.map +1 -0
- package/dist/tests/cli/index.test.js +167 -0
- package/dist/tests/cli/index.test.js.map +1 -0
- package/dist/tests/cli/info-cmd.test.d.ts +2 -0
- package/dist/tests/cli/info-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/info-cmd.test.js +47 -0
- package/dist/tests/cli/info-cmd.test.js.map +1 -0
- package/dist/tests/cli/interactive-config.test.d.ts +2 -0
- package/dist/tests/cli/interactive-config.test.d.ts.map +1 -0
- package/dist/tests/cli/interactive-config.test.js +30 -0
- package/dist/tests/cli/interactive-config.test.js.map +1 -0
- package/dist/tests/cli/mcp-cmd.test.d.ts +2 -0
- package/dist/tests/cli/mcp-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/mcp-cmd.test.js +47 -0
- package/dist/tests/cli/mcp-cmd.test.js.map +1 -0
- package/dist/tests/cli/search-cmd.test.d.ts +2 -0
- package/dist/tests/cli/search-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/search-cmd.test.js +120 -0
- package/dist/tests/cli/search-cmd.test.js.map +1 -0
- package/dist/tests/cli/search-with-code-cmd.test.d.ts +2 -0
- package/dist/tests/cli/search-with-code-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/search-with-code-cmd.test.js +140 -0
- package/dist/tests/cli/search-with-code-cmd.test.js.map +1 -0
- package/dist/tests/cli/update-cmd.test.d.ts +2 -0
- package/dist/tests/cli/update-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/update-cmd.test.js +75 -0
- package/dist/tests/cli/update-cmd.test.js.map +1 -0
- package/dist/tests/cli/utils.test.d.ts +2 -0
- package/dist/tests/cli/utils.test.d.ts.map +1 -0
- package/dist/tests/cli/utils.test.js +119 -0
- package/dist/tests/cli/utils.test.js.map +1 -0
- package/dist/tests/cli/watch-cmd.test.d.ts +2 -0
- package/dist/tests/cli/watch-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/watch-cmd.test.js +84 -0
- package/dist/tests/cli/watch-cmd.test.js.map +1 -0
- package/dist/tests/cli-ui.test.d.ts +2 -0
- package/dist/tests/cli-ui.test.d.ts.map +1 -0
- package/dist/tests/cli-ui.test.js +608 -0
- package/dist/tests/cli-ui.test.js.map +1 -0
- package/dist/tests/codemap-io.test.d.ts +2 -0
- package/dist/tests/codemap-io.test.d.ts.map +1 -0
- package/dist/tests/codemap-io.test.js +992 -0
- package/dist/tests/codemap-io.test.js.map +1 -0
- package/dist/tests/config/apply-env.test.d.ts +2 -0
- package/dist/tests/config/apply-env.test.d.ts.map +1 -0
- package/dist/tests/config/apply-env.test.js +717 -0
- package/dist/tests/config/apply-env.test.js.map +1 -0
- package/dist/tests/config/constants.test.d.ts +2 -0
- package/dist/tests/config/constants.test.d.ts.map +1 -0
- package/dist/tests/config/constants.test.js +406 -0
- package/dist/tests/config/constants.test.js.map +1 -0
- package/dist/tests/config/loader.test.d.ts +2 -0
- package/dist/tests/config/loader.test.d.ts.map +1 -0
- package/dist/tests/config/loader.test.js +716 -0
- package/dist/tests/config/loader.test.js.map +1 -0
- package/dist/tests/config/resolver.test.d.ts +2 -0
- package/dist/tests/config/resolver.test.d.ts.map +1 -0
- package/dist/tests/config/resolver.test.js +402 -0
- package/dist/tests/config/resolver.test.js.map +1 -0
- package/dist/tests/config/types.test.d.ts +2 -0
- package/dist/tests/config/types.test.d.ts.map +1 -0
- package/dist/tests/config/types.test.js +460 -0
- package/dist/tests/config/types.test.js.map +1 -0
- package/dist/tests/context-packs.test.d.ts +2 -0
- package/dist/tests/context-packs.test.d.ts.map +1 -0
- package/dist/tests/context-packs.test.js +826 -0
- package/dist/tests/context-packs.test.js.map +1 -0
- package/dist/tests/conversational-synthesizer.test.d.ts +2 -0
- package/dist/tests/conversational-synthesizer.test.d.ts.map +1 -0
- package/dist/tests/conversational-synthesizer.test.js +595 -0
- package/dist/tests/conversational-synthesizer.test.js.map +1 -0
- package/dist/tests/database.test.d.ts +2 -0
- package/dist/tests/database.test.d.ts.map +1 -0
- package/dist/tests/database.test.js +965 -0
- package/dist/tests/database.test.js.map +1 -0
- package/dist/tests/encrypted-chunks.test.d.ts +2 -0
- package/dist/tests/encrypted-chunks.test.d.ts.map +1 -0
- package/dist/tests/encrypted-chunks.test.js +1470 -0
- package/dist/tests/encrypted-chunks.test.js.map +1 -0
- package/dist/tests/hybrid.test.d.ts +2 -0
- package/dist/tests/hybrid.test.d.ts.map +1 -0
- package/dist/tests/hybrid.test.js +456 -0
- package/dist/tests/hybrid.test.js.map +1 -0
- package/dist/tests/indexer/ChangeQueue.test.d.ts +12 -0
- package/dist/tests/indexer/ChangeQueue.test.d.ts.map +1 -0
- package/dist/tests/indexer/ChangeQueue.test.js +441 -0
- package/dist/tests/indexer/ChangeQueue.test.js.map +1 -0
- package/dist/tests/indexer/ProviderManager.test.d.ts +12 -0
- package/dist/tests/indexer/ProviderManager.test.d.ts.map +1 -0
- package/dist/tests/indexer/ProviderManager.test.js +290 -0
- package/dist/tests/indexer/ProviderManager.test.js.map +1 -0
- package/dist/tests/indexer/WatchService.test.d.ts +14 -0
- package/dist/tests/indexer/WatchService.test.d.ts.map +1 -0
- package/dist/tests/indexer/WatchService.test.js +667 -0
- package/dist/tests/indexer/WatchService.test.js.map +1 -0
- package/dist/tests/indexer/merkle.test.d.ts +11 -0
- package/dist/tests/indexer/merkle.test.d.ts.map +1 -0
- package/dist/tests/indexer/merkle.test.js +497 -0
- package/dist/tests/indexer/merkle.test.js.map +1 -0
- package/dist/tests/indexer/update.test.d.ts +10 -0
- package/dist/tests/indexer/update.test.d.ts.map +1 -0
- package/dist/tests/indexer/update.test.js +317 -0
- package/dist/tests/indexer/update.test.js.map +1 -0
- package/dist/tests/indexer/watch.test.d.ts +8 -0
- package/dist/tests/indexer/watch.test.d.ts.map +1 -0
- package/dist/tests/indexer/watch.test.js +95 -0
- package/dist/tests/indexer/watch.test.js.map +1 -0
- package/dist/tests/integration/index-search.integration.test.js +1 -0
- package/dist/tests/integration/index-search.integration.test.js.map +1 -1
- package/dist/tests/languages.test.d.ts +2 -0
- package/dist/tests/languages.test.d.ts.map +1 -0
- package/dist/tests/languages.test.js +575 -0
- package/dist/tests/languages.test.js.map +1 -0
- package/dist/tests/logger-redaction.test.d.ts +2 -0
- package/dist/tests/logger-redaction.test.d.ts.map +1 -0
- package/dist/tests/logger-redaction.test.js +48 -0
- package/dist/tests/logger-redaction.test.js.map +1 -0
- package/dist/tests/logger.test.d.ts +2 -0
- package/dist/tests/logger.test.d.ts.map +1 -0
- package/dist/tests/logger.test.js +468 -0
- package/dist/tests/logger.test.js.map +1 -0
- package/dist/tests/markdown-formatter.test.d.ts +2 -0
- package/dist/tests/markdown-formatter.test.d.ts.map +1 -0
- package/dist/tests/markdown-formatter.test.js +453 -0
- package/dist/tests/markdown-formatter.test.js.map +1 -0
- package/dist/tests/mcp/tools/use-context-pack.test.d.ts +7 -0
- package/dist/tests/mcp/tools/use-context-pack.test.d.ts.map +1 -0
- package/dist/tests/mcp/tools/use-context-pack.test.js +505 -0
- package/dist/tests/mcp/tools/use-context-pack.test.js.map +1 -0
- package/dist/tests/mutex.test.d.ts +2 -0
- package/dist/tests/mutex.test.d.ts.map +1 -0
- package/dist/tests/mutex.test.js +489 -0
- package/dist/tests/mutex.test.js.map +1 -0
- package/dist/tests/path-helpers.test.d.ts +2 -0
- package/dist/tests/path-helpers.test.d.ts.map +1 -0
- package/dist/tests/path-helpers.test.js +332 -0
- package/dist/tests/path-helpers.test.js.map +1 -0
- package/dist/tests/prompt-builder.test.d.ts +2 -0
- package/dist/tests/prompt-builder.test.d.ts.map +1 -0
- package/dist/tests/prompt-builder.test.js +417 -0
- package/dist/tests/prompt-builder.test.js.map +1 -0
- package/dist/tests/providers/base.test.d.ts +2 -0
- package/dist/tests/providers/base.test.d.ts.map +1 -0
- package/dist/tests/providers/base.test.js +299 -0
- package/dist/tests/providers/base.test.js.map +1 -0
- package/dist/tests/providers/chat-llm.test.d.ts +2 -0
- package/dist/tests/providers/chat-llm.test.d.ts.map +1 -0
- package/dist/tests/providers/chat-llm.test.js +435 -0
- package/dist/tests/providers/chat-llm.test.js.map +1 -0
- package/dist/tests/providers/index.test.d.ts +2 -0
- package/dist/tests/providers/index.test.d.ts.map +1 -0
- package/dist/tests/providers/index.test.js +204 -0
- package/dist/tests/providers/index.test.js.map +1 -0
- package/dist/tests/providers/mock.test.d.ts +2 -0
- package/dist/tests/providers/mock.test.d.ts.map +1 -0
- package/dist/tests/providers/mock.test.js +225 -0
- package/dist/tests/providers/mock.test.js.map +1 -0
- package/dist/tests/providers/openai.test.d.ts +2 -0
- package/dist/tests/providers/openai.test.d.ts.map +1 -0
- package/dist/tests/providers/openai.test.js +408 -0
- package/dist/tests/providers/openai.test.js.map +1 -0
- package/dist/tests/providers/token-counter.test.d.ts +2 -0
- package/dist/tests/providers/token-counter.test.d.ts.map +1 -0
- package/dist/tests/providers/token-counter.test.js +247 -0
- package/dist/tests/providers/token-counter.test.js.map +1 -0
- package/dist/tests/rate-limiter.test.js +392 -1
- package/dist/tests/rate-limiter.test.js.map +1 -1
- package/dist/tests/scope.test.d.ts +2 -0
- package/dist/tests/scope.test.d.ts.map +1 -0
- package/dist/tests/scope.test.js +529 -0
- package/dist/tests/scope.test.js.map +1 -0
- package/dist/tests/simple-lru.test.js +377 -0
- package/dist/tests/simple-lru.test.js.map +1 -1
- package/dist/tests/symbol-boost.test.js +730 -10
- package/dist/tests/symbol-boost.test.js.map +1 -1
- package/dist/tests/symbols-extract.test.d.ts +2 -0
- package/dist/tests/symbols-extract.test.d.ts.map +1 -0
- package/dist/tests/symbols-extract.test.js +536 -0
- package/dist/tests/symbols-extract.test.js.map +1 -0
- package/dist/tests/symbols-graph.test.d.ts +2 -0
- package/dist/tests/symbols-graph.test.d.ts.map +1 -0
- package/dist/tests/symbols-graph.test.js +656 -0
- package/dist/tests/symbols-graph.test.js.map +1 -0
- package/dist/tests/synthesizer.test.d.ts +2 -0
- package/dist/tests/synthesizer.test.d.ts.map +1 -0
- package/dist/tests/synthesizer.test.js +381 -0
- package/dist/tests/synthesizer.test.js.map +1 -0
- package/dist/types/context-pack.d.ts +3 -3
- package/dist/utils/logger.d.ts +5 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +149 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/mutex.d.ts +7 -2
- package/dist/utils/mutex.d.ts.map +1 -1
- package/dist/utils/mutex.js +31 -7
- package/dist/utils/mutex.js.map +1 -1
- package/dist/utils/path-helpers.d.ts.map +1 -1
- package/dist/utils/path-helpers.js +5 -2
- package/dist/utils/path-helpers.js.map +1 -1
- package/dist/utils/simple-lru.d.ts +6 -0
- package/dist/utils/simple-lru.d.ts.map +1 -1
- package/dist/utils/simple-lru.js +26 -0
- package/dist/utils/simple-lru.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { findSemanticSubdivisions, findLastCompleteBoundary, extractSignature, extractLinesBeforeNode, extractParentContext, getLineNumber, analyzeNodeForChunking, batchAnalyzeNodes, yieldStatementChunks } from '../../chunking/semantic-chunker.js';
|
|
4
|
+
function makeNode(type, children = [], startIndex = 0, endIndex = 0) {
|
|
5
|
+
return {
|
|
6
|
+
type,
|
|
7
|
+
startIndex,
|
|
8
|
+
endIndex,
|
|
9
|
+
childCount: children.length,
|
|
10
|
+
child: (idx) => children[idx] ?? null
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
// Base profile without token counting (character-based)
|
|
14
|
+
const charProfile = {
|
|
15
|
+
maxTokens: 1000,
|
|
16
|
+
optimalTokens: 500,
|
|
17
|
+
minChunkTokens: 50,
|
|
18
|
+
maxChunkTokens: 800,
|
|
19
|
+
overlapTokens: 100,
|
|
20
|
+
optimalChars: 2000,
|
|
21
|
+
minChunkChars: 100,
|
|
22
|
+
maxChunkChars: 1600,
|
|
23
|
+
overlapChars: 200,
|
|
24
|
+
dimensions: 1536,
|
|
25
|
+
useTokens: false,
|
|
26
|
+
tokenizerType: 'estimate'
|
|
27
|
+
};
|
|
28
|
+
// Profile with token counting
|
|
29
|
+
const tokenProfile = {
|
|
30
|
+
...charProfile,
|
|
31
|
+
useTokens: true,
|
|
32
|
+
tokenCounter: (text) => Math.ceil(text.length / 4) // 4 chars per token
|
|
33
|
+
};
|
|
34
|
+
// -------------------------------------------------------------------
|
|
35
|
+
// Tests for findSemanticSubdivisions
|
|
36
|
+
// -------------------------------------------------------------------
|
|
37
|
+
test('findSemanticSubdivisions returns empty array for null node', () => {
|
|
38
|
+
const rule = { subdivisionTypes: { class: ['method'] } };
|
|
39
|
+
const subs = findSemanticSubdivisions(null, rule);
|
|
40
|
+
assert.deepEqual(subs, []);
|
|
41
|
+
});
|
|
42
|
+
test('findSemanticSubdivisions returns empty array for null rule', () => {
|
|
43
|
+
const node = makeNode('class');
|
|
44
|
+
const subs = findSemanticSubdivisions(node, null);
|
|
45
|
+
assert.deepEqual(subs, []);
|
|
46
|
+
});
|
|
47
|
+
test('findSemanticSubdivisions returns empty when no subdivisionTypes defined', () => {
|
|
48
|
+
const child = makeNode('method');
|
|
49
|
+
const parent = makeNode('class', [child]);
|
|
50
|
+
const rule = {};
|
|
51
|
+
const subs = findSemanticSubdivisions(parent, rule);
|
|
52
|
+
assert.deepEqual(subs, []);
|
|
53
|
+
});
|
|
54
|
+
test('findSemanticSubdivisions returns empty when node type not in subdivisionTypes', () => {
|
|
55
|
+
const child = makeNode('method');
|
|
56
|
+
const parent = makeNode('interface', [child]);
|
|
57
|
+
const rule = { subdivisionTypes: { class: ['method'] } };
|
|
58
|
+
const subs = findSemanticSubdivisions(parent, rule);
|
|
59
|
+
assert.deepEqual(subs, []);
|
|
60
|
+
});
|
|
61
|
+
test('findSemanticSubdivisions finds direct children matching subdivision types', () => {
|
|
62
|
+
const method1 = makeNode('method');
|
|
63
|
+
const method2 = makeNode('method');
|
|
64
|
+
const parent = makeNode('class', [method1, method2]);
|
|
65
|
+
const rule = { subdivisionTypes: { class: ['method'] } };
|
|
66
|
+
const subs = findSemanticSubdivisions(parent, rule);
|
|
67
|
+
assert.equal(subs.length, 2);
|
|
68
|
+
assert.equal(subs[0], method1);
|
|
69
|
+
assert.equal(subs[1], method2);
|
|
70
|
+
});
|
|
71
|
+
test('findSemanticSubdivisions finds nested subdivision candidates', () => {
|
|
72
|
+
const method = makeNode('method');
|
|
73
|
+
const body = makeNode('class_body', [method]);
|
|
74
|
+
const parent = makeNode('class', [body]);
|
|
75
|
+
const rule = { subdivisionTypes: { class: ['method'] } };
|
|
76
|
+
const subs = findSemanticSubdivisions(parent, rule);
|
|
77
|
+
assert.equal(subs.length, 1);
|
|
78
|
+
assert.equal(subs[0], method);
|
|
79
|
+
});
|
|
80
|
+
test('findSemanticSubdivisions does not include root node itself', () => {
|
|
81
|
+
const root = makeNode('method');
|
|
82
|
+
const rule = { subdivisionTypes: { method: ['method'] } };
|
|
83
|
+
const subs = findSemanticSubdivisions(root, rule);
|
|
84
|
+
assert.equal(subs.length, 0);
|
|
85
|
+
});
|
|
86
|
+
test('findSemanticSubdivisions stops recursion when match found', () => {
|
|
87
|
+
const innerMethod = makeNode('method');
|
|
88
|
+
const outerMethod = makeNode('method', [innerMethod]);
|
|
89
|
+
const parent = makeNode('class', [outerMethod]);
|
|
90
|
+
const rule = { subdivisionTypes: { class: ['method'] } };
|
|
91
|
+
const subs = findSemanticSubdivisions(parent, rule);
|
|
92
|
+
// Should only find outerMethod, not recurse into it
|
|
93
|
+
assert.equal(subs.length, 1);
|
|
94
|
+
assert.equal(subs[0], outerMethod);
|
|
95
|
+
});
|
|
96
|
+
test('findSemanticSubdivisions handles multiple subdivision types', () => {
|
|
97
|
+
const method = makeNode('method_definition');
|
|
98
|
+
const field = makeNode('field_declaration');
|
|
99
|
+
const parent = makeNode('class_declaration', [method, field]);
|
|
100
|
+
const rule = { subdivisionTypes: { class_declaration: ['method_definition', 'field_declaration'] } };
|
|
101
|
+
const subs = findSemanticSubdivisions(parent, rule);
|
|
102
|
+
assert.equal(subs.length, 2);
|
|
103
|
+
});
|
|
104
|
+
// -------------------------------------------------------------------
|
|
105
|
+
// Tests for findLastCompleteBoundary
|
|
106
|
+
// -------------------------------------------------------------------
|
|
107
|
+
test('findLastCompleteBoundary finds closing brace boundary', () => {
|
|
108
|
+
const code = 'function foo() {\n return 1;\n}\nfunction bar() {';
|
|
109
|
+
const result = findLastCompleteBoundary(code, 40);
|
|
110
|
+
// Should find the } followed by newline
|
|
111
|
+
assert.ok(result > 0);
|
|
112
|
+
assert.ok(result <= 40);
|
|
113
|
+
assert.ok(code.substring(0, result).trim().endsWith('}'));
|
|
114
|
+
});
|
|
115
|
+
test('findLastCompleteBoundary finds semicolon boundary', () => {
|
|
116
|
+
const code = 'const a = 1;\nconst b = 2;\nconst c = 3';
|
|
117
|
+
const result = findLastCompleteBoundary(code, 25);
|
|
118
|
+
// Should find semicolon boundary
|
|
119
|
+
assert.ok(result > 0);
|
|
120
|
+
assert.ok(result <= 25);
|
|
121
|
+
});
|
|
122
|
+
test('findLastCompleteBoundary finds newline boundary as fallback', () => {
|
|
123
|
+
const code = 'line1\nline2\nline3';
|
|
124
|
+
const result = findLastCompleteBoundary(code, 10);
|
|
125
|
+
// Should find newline
|
|
126
|
+
assert.ok(result > 0);
|
|
127
|
+
assert.ok(result <= 10);
|
|
128
|
+
});
|
|
129
|
+
test('findLastCompleteBoundary returns maxSize when no boundary found', () => {
|
|
130
|
+
const code = 'abcdefghijklmnopqrstuvwxyz';
|
|
131
|
+
const result = findLastCompleteBoundary(code, 10);
|
|
132
|
+
assert.equal(result, 10);
|
|
133
|
+
});
|
|
134
|
+
test('findLastCompleteBoundary handles empty code', () => {
|
|
135
|
+
const result = findLastCompleteBoundary('', 10);
|
|
136
|
+
assert.equal(result, 10);
|
|
137
|
+
});
|
|
138
|
+
test('findLastCompleteBoundary handles code shorter than maxSize', () => {
|
|
139
|
+
const code = 'const a = 1;';
|
|
140
|
+
const result = findLastCompleteBoundary(code, 100);
|
|
141
|
+
// Should find the semicolon
|
|
142
|
+
assert.ok(result <= code.length);
|
|
143
|
+
});
|
|
144
|
+
// -------------------------------------------------------------------
|
|
145
|
+
// Tests for extractSignature
|
|
146
|
+
// -------------------------------------------------------------------
|
|
147
|
+
test('extractSignature extracts function signature before brace', () => {
|
|
148
|
+
const source = 'function calculate(a, b) {\n return a + b;\n}';
|
|
149
|
+
const node = makeNode('function', [], 0, source.length);
|
|
150
|
+
const sig = extractSignature(node, source);
|
|
151
|
+
assert.equal(sig, 'function calculate(a, b) {');
|
|
152
|
+
});
|
|
153
|
+
test('extractSignature handles class signature', () => {
|
|
154
|
+
const source = 'class MyClass extends Base {\n constructor() {}\n}';
|
|
155
|
+
const node = makeNode('class', [], 0, source.length);
|
|
156
|
+
const sig = extractSignature(node, source);
|
|
157
|
+
assert.equal(sig, 'class MyClass extends Base {');
|
|
158
|
+
});
|
|
159
|
+
test('extractSignature returns first line when no brace found', () => {
|
|
160
|
+
const source = 'const value = 42\nconst other = 43';
|
|
161
|
+
const node = makeNode('declaration', [], 0, 16);
|
|
162
|
+
const sig = extractSignature(node, source);
|
|
163
|
+
assert.equal(sig, 'const value = 42');
|
|
164
|
+
});
|
|
165
|
+
test('extractSignature handles arrow functions', () => {
|
|
166
|
+
const source = 'const fn = (x) => {\n return x * 2;\n}';
|
|
167
|
+
const node = makeNode('arrow_function', [], 0, source.length);
|
|
168
|
+
const sig = extractSignature(node, source);
|
|
169
|
+
assert.equal(sig, 'const fn = (x) => {');
|
|
170
|
+
});
|
|
171
|
+
test('extractSignature handles single-line code', () => {
|
|
172
|
+
const source = 'const x = 1;';
|
|
173
|
+
const node = makeNode('declaration', [], 0, source.length);
|
|
174
|
+
const sig = extractSignature(node, source);
|
|
175
|
+
assert.equal(sig, 'const x = 1;');
|
|
176
|
+
});
|
|
177
|
+
// -------------------------------------------------------------------
|
|
178
|
+
// Tests for extractLinesBeforeNode
|
|
179
|
+
// -------------------------------------------------------------------
|
|
180
|
+
test('extractLinesBeforeNode returns specified number of lines', () => {
|
|
181
|
+
const source = 'line1\nline2\nline3\nline4\nfunction start()';
|
|
182
|
+
// Node starts at position after 'line1\nline2\nline3\nline4\n' (24 chars)
|
|
183
|
+
const node = makeNode('function', [], 24, source.length);
|
|
184
|
+
const lines = extractLinesBeforeNode(node, source, 2);
|
|
185
|
+
// The function takes 'line1\nline2\nline3\nline4\n' (before the node)
|
|
186
|
+
// splits by \n = ['line1', 'line2', 'line3', 'line4', ''] (note empty string after last \n)
|
|
187
|
+
// takes last 2: ['line4', '']
|
|
188
|
+
// joins with \n: 'line4\n' + '' = 'line4\n'
|
|
189
|
+
// Wait, this isn't right. Let me recalculate:
|
|
190
|
+
// Before node (index 24): 'line1\nline2\nline3\nline4\n'
|
|
191
|
+
// Split by \n: ['line1', 'line2', 'line3', 'line4', '']
|
|
192
|
+
// Slice(-2): ['line4', '']
|
|
193
|
+
// Join with \n: 'line4\n'
|
|
194
|
+
assert.equal(lines, 'line4\n');
|
|
195
|
+
});
|
|
196
|
+
test('extractLinesBeforeNode handles fewer lines than requested', () => {
|
|
197
|
+
const source = 'line1\nfunction start()';
|
|
198
|
+
// Node at index 6 (after 'line1\n')
|
|
199
|
+
const node = makeNode('function', [], 6, source.length);
|
|
200
|
+
const lines = extractLinesBeforeNode(node, source, 5);
|
|
201
|
+
// Before node: 'line1\n'
|
|
202
|
+
// Split: ['line1', '']
|
|
203
|
+
// Slice(-5): ['line1', '']
|
|
204
|
+
// Join: 'line1\n'
|
|
205
|
+
assert.equal(lines, 'line1\n');
|
|
206
|
+
});
|
|
207
|
+
test('extractLinesBeforeNode handles node at start', () => {
|
|
208
|
+
const source = 'function start() {}';
|
|
209
|
+
const node = makeNode('function', [], 0, source.length);
|
|
210
|
+
const lines = extractLinesBeforeNode(node, source, 2);
|
|
211
|
+
assert.equal(lines, '');
|
|
212
|
+
});
|
|
213
|
+
test('extractLinesBeforeNode handles empty source', () => {
|
|
214
|
+
const node = makeNode('function', [], 0, 0);
|
|
215
|
+
const lines = extractLinesBeforeNode(node, '', 2);
|
|
216
|
+
assert.equal(lines, '');
|
|
217
|
+
});
|
|
218
|
+
// -------------------------------------------------------------------
|
|
219
|
+
// Tests for getLineNumber
|
|
220
|
+
// -------------------------------------------------------------------
|
|
221
|
+
test('getLineNumber returns 1 for offset 0', () => {
|
|
222
|
+
const source = 'line1\nline2\nline3';
|
|
223
|
+
assert.equal(getLineNumber(0, source), 1);
|
|
224
|
+
});
|
|
225
|
+
test('getLineNumber returns correct line for middle of file', () => {
|
|
226
|
+
const source = 'line1\nline2\nline3';
|
|
227
|
+
// 'line1\n' is 6 chars, so offset 6 is start of line 2
|
|
228
|
+
assert.equal(getLineNumber(6, source), 2);
|
|
229
|
+
});
|
|
230
|
+
test('getLineNumber returns correct line for end of file', () => {
|
|
231
|
+
const source = 'line1\nline2\nline3';
|
|
232
|
+
assert.equal(getLineNumber(source.length, source), 3);
|
|
233
|
+
});
|
|
234
|
+
test('getLineNumber handles empty source', () => {
|
|
235
|
+
assert.equal(getLineNumber(0, ''), 1);
|
|
236
|
+
});
|
|
237
|
+
test('getLineNumber handles single line', () => {
|
|
238
|
+
const source = 'single line content';
|
|
239
|
+
assert.equal(getLineNumber(10, source), 1);
|
|
240
|
+
});
|
|
241
|
+
// -------------------------------------------------------------------
|
|
242
|
+
// Tests for extractParentContext
|
|
243
|
+
// -------------------------------------------------------------------
|
|
244
|
+
test('extractParentContext returns signature and line numbers', () => {
|
|
245
|
+
const source = 'function foo() {\n return 1;\n}';
|
|
246
|
+
const node = makeNode('function', [], 0, source.length);
|
|
247
|
+
const ctx = extractParentContext(node, source);
|
|
248
|
+
assert.equal(ctx.signature, 'function foo() {');
|
|
249
|
+
assert.equal(ctx.startLine, 1);
|
|
250
|
+
assert.equal(ctx.endLine, 3);
|
|
251
|
+
});
|
|
252
|
+
test('extractParentContext handles multi-line class', () => {
|
|
253
|
+
const source = 'class MyClass {\n method1() {}\n method2() {}\n}';
|
|
254
|
+
const node = makeNode('class', [], 0, source.length);
|
|
255
|
+
const ctx = extractParentContext(node, source);
|
|
256
|
+
assert.equal(ctx.signature, 'class MyClass {');
|
|
257
|
+
assert.equal(ctx.startLine, 1);
|
|
258
|
+
assert.equal(ctx.endLine, 4);
|
|
259
|
+
});
|
|
260
|
+
// -------------------------------------------------------------------
|
|
261
|
+
// Tests for analyzeNodeForChunking
|
|
262
|
+
// -------------------------------------------------------------------
|
|
263
|
+
test('analyzeNodeForChunking identifies small node as single chunk', async () => {
|
|
264
|
+
const source = 'const x = 1;';
|
|
265
|
+
const node = makeNode('declaration', [], 0, source.length);
|
|
266
|
+
const rule = {};
|
|
267
|
+
const analysis = await analyzeNodeForChunking(node, source, rule, charProfile);
|
|
268
|
+
assert.equal(analysis.isSingleChunk, true);
|
|
269
|
+
assert.equal(analysis.needsSubdivision, false);
|
|
270
|
+
assert.equal(analysis.size, source.length);
|
|
271
|
+
assert.equal(analysis.unit, 'characters');
|
|
272
|
+
assert.equal(analysis.method, 'chars');
|
|
273
|
+
});
|
|
274
|
+
test('analyzeNodeForChunking identifies large node needing subdivision', async () => {
|
|
275
|
+
// Create source larger than maxChunkChars (1600)
|
|
276
|
+
const source = 'x'.repeat(2000);
|
|
277
|
+
const node = makeNode('class', [], 0, source.length);
|
|
278
|
+
const rule = { subdivisionTypes: { class: ['method'] } };
|
|
279
|
+
const analysis = await analyzeNodeForChunking(node, source, rule, charProfile);
|
|
280
|
+
assert.equal(analysis.isSingleChunk, false);
|
|
281
|
+
assert.equal(analysis.needsSubdivision, true);
|
|
282
|
+
assert.equal(analysis.size, 2000);
|
|
283
|
+
});
|
|
284
|
+
test('analyzeNodeForChunking uses token counter when available', async () => {
|
|
285
|
+
const source = 'const variable = "test value";'; // 30 chars = ~7.5 tokens
|
|
286
|
+
const node = makeNode('declaration', [], 0, source.length);
|
|
287
|
+
const analysis = await analyzeNodeForChunking(node, source, {}, tokenProfile);
|
|
288
|
+
assert.equal(analysis.method, 'tokenized');
|
|
289
|
+
assert.equal(analysis.unit, 'tokens');
|
|
290
|
+
// Token count should be ceil(30/4) = 8
|
|
291
|
+
assert.equal(analysis.size, 8);
|
|
292
|
+
});
|
|
293
|
+
test('analyzeNodeForChunking returns subdivision candidates', async () => {
|
|
294
|
+
const method1 = makeNode('method');
|
|
295
|
+
const method2 = makeNode('method');
|
|
296
|
+
const source = 'class Test {\n method1() {}\n method2() {}\n}';
|
|
297
|
+
const classNode = makeNode('class_declaration', [method1, method2], 0, source.length);
|
|
298
|
+
const rule = { subdivisionTypes: { class_declaration: ['method'] } };
|
|
299
|
+
const analysis = await analyzeNodeForChunking(classNode, source, rule, charProfile);
|
|
300
|
+
assert.equal(analysis.subdivisionCandidates.length, 2);
|
|
301
|
+
});
|
|
302
|
+
test('analyzeNodeForChunking calculates estimated subchunks', async () => {
|
|
303
|
+
// 4000 chars with optimal of 2000 = 2 subchunks
|
|
304
|
+
const source = 'x'.repeat(4000);
|
|
305
|
+
const node = makeNode('class', [], 0, source.length);
|
|
306
|
+
const analysis = await analyzeNodeForChunking(node, source, {}, charProfile);
|
|
307
|
+
assert.equal(analysis.estimatedSubchunks, 2);
|
|
308
|
+
});
|
|
309
|
+
// -------------------------------------------------------------------
|
|
310
|
+
// Tests for batchAnalyzeNodes
|
|
311
|
+
// -------------------------------------------------------------------
|
|
312
|
+
test('batchAnalyzeNodes analyzes multiple nodes', async () => {
|
|
313
|
+
const source = 'function a() {}\nfunction b() {}\nfunction c() {}';
|
|
314
|
+
const nodes = [
|
|
315
|
+
makeNode('function', [], 0, 15),
|
|
316
|
+
makeNode('function', [], 16, 31),
|
|
317
|
+
makeNode('function', [], 32, 47)
|
|
318
|
+
];
|
|
319
|
+
const results = await batchAnalyzeNodes(nodes, source, {}, charProfile);
|
|
320
|
+
assert.equal(results.length, 3);
|
|
321
|
+
results.forEach((result) => {
|
|
322
|
+
assert.ok('node' in result);
|
|
323
|
+
assert.ok('size' in result);
|
|
324
|
+
assert.ok('isSingleChunk' in result);
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
test('batchAnalyzeNodes uses token counter when available', async () => {
|
|
328
|
+
const source = 'const a = 1;\nconst b = 2;';
|
|
329
|
+
const nodes = [
|
|
330
|
+
makeNode('declaration', [], 0, 12),
|
|
331
|
+
makeNode('declaration', [], 13, 25)
|
|
332
|
+
];
|
|
333
|
+
let tokenCounterCalls = 0;
|
|
334
|
+
const countingProfile = {
|
|
335
|
+
...tokenProfile,
|
|
336
|
+
tokenCounter: (text) => {
|
|
337
|
+
tokenCounterCalls++;
|
|
338
|
+
return Math.ceil(text.length / 4);
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
const results = await batchAnalyzeNodes(nodes, source, {}, countingProfile);
|
|
342
|
+
assert.equal(results.length, 2);
|
|
343
|
+
assert.ok(tokenCounterCalls > 0);
|
|
344
|
+
});
|
|
345
|
+
test('batchAnalyzeNodes handles empty node array', async () => {
|
|
346
|
+
const results = await batchAnalyzeNodes([], 'some source', {}, charProfile);
|
|
347
|
+
assert.deepEqual(results, []);
|
|
348
|
+
});
|
|
349
|
+
test('batchAnalyzeNodes finds subdivisions for each node', async () => {
|
|
350
|
+
const method1 = makeNode('method');
|
|
351
|
+
const method2 = makeNode('method');
|
|
352
|
+
const source = 'class A { m1() {} }\nclass B { m2() {} }';
|
|
353
|
+
const classA = makeNode('class', [method1], 0, 19);
|
|
354
|
+
const classB = makeNode('class', [method2], 20, 39);
|
|
355
|
+
const rule = { subdivisionTypes: { class: ['method'] } };
|
|
356
|
+
const results = await batchAnalyzeNodes([classA, classB], source, rule, charProfile);
|
|
357
|
+
assert.equal(results[0].subdivisionCandidates.length, 1);
|
|
358
|
+
assert.equal(results[1].subdivisionCandidates.length, 1);
|
|
359
|
+
});
|
|
360
|
+
test('batchAnalyzeNodes respects isSubdivision parameter', async () => {
|
|
361
|
+
const source = 'const x = 1;';
|
|
362
|
+
const nodes = [makeNode('declaration', [], 0, 12)];
|
|
363
|
+
// Test with isSubdivision = true
|
|
364
|
+
const results = await batchAnalyzeNodes(nodes, source, {}, tokenProfile, true);
|
|
365
|
+
assert.equal(results.length, 1);
|
|
366
|
+
});
|
|
367
|
+
// -------------------------------------------------------------------
|
|
368
|
+
// Tests for yieldStatementChunks
|
|
369
|
+
// -------------------------------------------------------------------
|
|
370
|
+
test('yieldStatementChunks splits large code into chunks', async () => {
|
|
371
|
+
const lines = Array.from({ length: 20 }, (_, i) => `line${i + 1}: const x = ${i};`);
|
|
372
|
+
const source = lines.join('\n');
|
|
373
|
+
const node = makeNode('function', [], 0, source.length);
|
|
374
|
+
const chunks = await yieldStatementChunks(node, source, 100, // maxSize in characters
|
|
375
|
+
20, // overlapSize
|
|
376
|
+
charProfile);
|
|
377
|
+
assert.ok(chunks.length > 1);
|
|
378
|
+
chunks.forEach((chunk) => {
|
|
379
|
+
assert.ok(chunk.code.length > 0);
|
|
380
|
+
assert.ok(chunk.size > 0);
|
|
381
|
+
assert.equal(chunk.unit, 'characters');
|
|
382
|
+
});
|
|
383
|
+
});
|
|
384
|
+
test('yieldStatementChunks maintains 20% minimum overlap', async () => {
|
|
385
|
+
const lines = Array.from({ length: 50 }, (_, i) => `line${i + 1}`);
|
|
386
|
+
const source = lines.join('\n');
|
|
387
|
+
const node = makeNode('function', [], 0, source.length);
|
|
388
|
+
const chunks = await yieldStatementChunks(node, source, 100, 10, charProfile);
|
|
389
|
+
// Verify overlap exists between consecutive chunks
|
|
390
|
+
for (let i = 0; i < chunks.length - 1; i++) {
|
|
391
|
+
const currentLines = chunks[i].code.split('\n');
|
|
392
|
+
const nextLines = chunks[i + 1].code.split('\n');
|
|
393
|
+
// Last line of current should appear in next chunk
|
|
394
|
+
const lastLine = currentLines[currentLines.length - 1];
|
|
395
|
+
const foundOverlap = nextLines.some((line) => line === lastLine);
|
|
396
|
+
assert.ok(foundOverlap, `Expected overlap between chunk ${i} and ${i + 1}`);
|
|
397
|
+
}
|
|
398
|
+
});
|
|
399
|
+
test('yieldStatementChunks uses token counter when profile has it', async () => {
|
|
400
|
+
const source = 'line1\nline2\nline3\nline4\nline5';
|
|
401
|
+
const node = makeNode('function', [], 0, source.length);
|
|
402
|
+
let tokenCounterCalls = 0;
|
|
403
|
+
const profile = {
|
|
404
|
+
...tokenProfile,
|
|
405
|
+
tokenCounter: (text) => {
|
|
406
|
+
tokenCounterCalls++;
|
|
407
|
+
return text.length; // 1:1 mapping for test
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
await yieldStatementChunks(node, source, 10, 2, profile);
|
|
411
|
+
// Should call token counter once per line
|
|
412
|
+
assert.equal(tokenCounterCalls, 5);
|
|
413
|
+
});
|
|
414
|
+
test('yieldStatementChunks handles single line code', async () => {
|
|
415
|
+
const source = 'const x = 1;';
|
|
416
|
+
const node = makeNode('declaration', [], 0, source.length);
|
|
417
|
+
const chunks = await yieldStatementChunks(node, source, 100, 10, charProfile);
|
|
418
|
+
assert.equal(chunks.length, 1);
|
|
419
|
+
assert.equal(chunks[0].code, source);
|
|
420
|
+
});
|
|
421
|
+
test('yieldStatementChunks handles empty code', async () => {
|
|
422
|
+
const node = makeNode('empty', [], 0, 0);
|
|
423
|
+
const chunks = await yieldStatementChunks(node, '', 100, 10, charProfile);
|
|
424
|
+
// Empty input still produces one chunk with empty content
|
|
425
|
+
assert.equal(chunks.length, 1);
|
|
426
|
+
assert.equal(chunks[0].code, '');
|
|
427
|
+
});
|
|
428
|
+
test('yieldStatementChunks reports correct unit for tokens', async () => {
|
|
429
|
+
const source = 'line1\nline2\nline3';
|
|
430
|
+
const node = makeNode('function', [], 0, source.length);
|
|
431
|
+
const chunks = await yieldStatementChunks(node, source, 20, 4, tokenProfile);
|
|
432
|
+
chunks.forEach((chunk) => {
|
|
433
|
+
assert.equal(chunk.unit, 'tokens');
|
|
434
|
+
});
|
|
435
|
+
});
|
|
436
|
+
test('yieldStatementChunks respects maxSize limit', async () => {
|
|
437
|
+
const lines = Array.from({ length: 100 }, () => 'x'.repeat(10));
|
|
438
|
+
const source = lines.join('\n');
|
|
439
|
+
const node = makeNode('function', [], 0, source.length);
|
|
440
|
+
const maxSize = 50;
|
|
441
|
+
const chunks = await yieldStatementChunks(node, source, maxSize, 10, charProfile);
|
|
442
|
+
// First chunk should respect maxSize, allowing some flexibility due to line-based splitting
|
|
443
|
+
chunks.slice(0, -1).forEach((chunk, i) => {
|
|
444
|
+
// Allow some slack for line-based chunking
|
|
445
|
+
assert.ok(chunk.size <= maxSize + 20, `Chunk ${i} exceeds maxSize: ${chunk.size} > ${maxSize + 20}`);
|
|
446
|
+
});
|
|
447
|
+
});
|
|
448
|
+
test('yieldStatementChunks handles very long lines', async () => {
|
|
449
|
+
const longLine = 'x'.repeat(500);
|
|
450
|
+
const source = `${longLine}\nshort\n${longLine}`;
|
|
451
|
+
const node = makeNode('function', [], 0, source.length);
|
|
452
|
+
const chunks = await yieldStatementChunks(node, source, 100, 20, charProfile);
|
|
453
|
+
// Should still produce chunks, even if individual lines exceed maxSize
|
|
454
|
+
assert.ok(chunks.length >= 1);
|
|
455
|
+
});
|
|
456
|
+
test('yieldStatementChunks with async token counter', async () => {
|
|
457
|
+
const source = 'line1\nline2\nline3';
|
|
458
|
+
const node = makeNode('function', [], 0, source.length);
|
|
459
|
+
const asyncProfile = {
|
|
460
|
+
...tokenProfile,
|
|
461
|
+
tokenCounter: async (text) => {
|
|
462
|
+
// Simulate async operation
|
|
463
|
+
await new Promise((resolve) => setTimeout(resolve, 1));
|
|
464
|
+
return text.length;
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
const chunks = await yieldStatementChunks(node, source, 20, 4, asyncProfile);
|
|
468
|
+
assert.ok(chunks.length >= 1);
|
|
469
|
+
assert.equal(chunks[0].unit, 'tokens');
|
|
470
|
+
});
|
|
471
|
+
// -------------------------------------------------------------------
|
|
472
|
+
// Edge case tests
|
|
473
|
+
// -------------------------------------------------------------------
|
|
474
|
+
test('handles node with very small code', async () => {
|
|
475
|
+
const source = 'x';
|
|
476
|
+
const node = makeNode('identifier', [], 0, 1);
|
|
477
|
+
const analysis = await analyzeNodeForChunking(node, source, {}, charProfile);
|
|
478
|
+
assert.equal(analysis.isSingleChunk, true);
|
|
479
|
+
assert.equal(analysis.size, 1);
|
|
480
|
+
});
|
|
481
|
+
test('handles deeply nested subdivisions', () => {
|
|
482
|
+
const innermost = makeNode('method');
|
|
483
|
+
const inner = makeNode('class_body', [innermost]);
|
|
484
|
+
const outer = makeNode('class_body', [inner]);
|
|
485
|
+
const root = makeNode('class', [outer]);
|
|
486
|
+
const rule = { subdivisionTypes: { class: ['method'] } };
|
|
487
|
+
const subs = findSemanticSubdivisions(root, rule);
|
|
488
|
+
assert.equal(subs.length, 1);
|
|
489
|
+
assert.equal(subs[0], innermost);
|
|
490
|
+
});
|
|
491
|
+
test('handles code with special characters', async () => {
|
|
492
|
+
const source = 'const emoji = "\\uD83D\\uDE00";\nconst special = "<>&";';
|
|
493
|
+
const node = makeNode('declarations', [], 0, source.length);
|
|
494
|
+
const analysis = await analyzeNodeForChunking(node, source, {}, charProfile);
|
|
495
|
+
assert.equal(analysis.size, source.length);
|
|
496
|
+
});
|
|
497
|
+
test('handles code with Windows line endings', async () => {
|
|
498
|
+
const source = 'line1\r\nline2\r\nline3';
|
|
499
|
+
const node = makeNode('function', [], 0, source.length);
|
|
500
|
+
const chunks = await yieldStatementChunks(node, source, 20, 5, charProfile);
|
|
501
|
+
assert.ok(chunks.length >= 1);
|
|
502
|
+
});
|
|
503
|
+
test('handles mixed indentation', async () => {
|
|
504
|
+
const source = ' line1\n\t\tline2\n line3';
|
|
505
|
+
const node = makeNode('function', [], 0, source.length);
|
|
506
|
+
const chunks = await yieldStatementChunks(node, source, 30, 5, charProfile);
|
|
507
|
+
assert.ok(chunks.length >= 1);
|
|
508
|
+
});
|
|
509
|
+
//# sourceMappingURL=semantic-chunker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-chunker.test.js","sourceRoot":"","sources":["../../../src/tests/chunking/semantic-chunker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-counter.test.d.ts","sourceRoot":"","sources":["../../../src/tests/chunking/token-counter.test.ts"],"names":[],"mappings":""}
|