lance-context 0.1.0 → 1.1.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 +232 -23
- package/dist/__tests__/ast-chunker.test.d.ts +2 -0
- package/dist/__tests__/ast-chunker.test.d.ts.map +1 -0
- package/dist/__tests__/ast-chunker.test.js +307 -0
- package/dist/__tests__/ast-chunker.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +242 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/dashboard/beads.test.d.ts +2 -0
- package/dist/__tests__/dashboard/beads.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/beads.test.js +151 -0
- package/dist/__tests__/dashboard/beads.test.js.map +1 -0
- package/dist/__tests__/dashboard/index.test.d.ts +2 -0
- package/dist/__tests__/dashboard/index.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/index.test.js +116 -0
- package/dist/__tests__/dashboard/index.test.js.map +1 -0
- package/dist/__tests__/dashboard/routes.test.d.ts +2 -0
- package/dist/__tests__/dashboard/routes.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/routes.test.js +125 -0
- package/dist/__tests__/dashboard/routes.test.js.map +1 -0
- package/dist/__tests__/dashboard/server.test.d.ts +2 -0
- package/dist/__tests__/dashboard/server.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/server.test.js +75 -0
- package/dist/__tests__/dashboard/server.test.js.map +1 -0
- package/dist/__tests__/dashboard/state.test.d.ts +2 -0
- package/dist/__tests__/dashboard/state.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/state.test.js +124 -0
- package/dist/__tests__/dashboard/state.test.js.map +1 -0
- package/dist/__tests__/embeddings/factory.test.d.ts +2 -0
- package/dist/__tests__/embeddings/factory.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/factory.test.js +100 -0
- package/dist/__tests__/embeddings/factory.test.js.map +1 -0
- package/dist/__tests__/embeddings/jina.test.d.ts +2 -0
- package/dist/__tests__/embeddings/jina.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/jina.test.js +156 -0
- package/dist/__tests__/embeddings/jina.test.js.map +1 -0
- package/dist/__tests__/embeddings/ollama.test.d.ts +2 -0
- package/dist/__tests__/embeddings/ollama.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/ollama.test.js +172 -0
- package/dist/__tests__/embeddings/ollama.test.js.map +1 -0
- package/dist/__tests__/embeddings/rate-limiter.test.d.ts +2 -0
- package/dist/__tests__/embeddings/rate-limiter.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/rate-limiter.test.js +163 -0
- package/dist/__tests__/embeddings/rate-limiter.test.js.map +1 -0
- package/dist/__tests__/embeddings/retry.test.d.ts +2 -0
- package/dist/__tests__/embeddings/retry.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/retry.test.js +260 -0
- package/dist/__tests__/embeddings/retry.test.js.map +1 -0
- package/dist/__tests__/embeddings/types.test.d.ts +2 -0
- package/dist/__tests__/embeddings/types.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/types.test.js +31 -0
- package/dist/__tests__/embeddings/types.test.js.map +1 -0
- package/dist/__tests__/mocks/embedding-backend.mock.d.ts +10 -0
- package/dist/__tests__/mocks/embedding-backend.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/embedding-backend.mock.js +39 -0
- package/dist/__tests__/mocks/embedding-backend.mock.js.map +1 -0
- package/dist/__tests__/mocks/fetch.mock.d.ts +38 -0
- package/dist/__tests__/mocks/fetch.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/fetch.mock.js +74 -0
- package/dist/__tests__/mocks/fetch.mock.js.map +1 -0
- package/dist/__tests__/mocks/lancedb.mock.d.ts +38 -0
- package/dist/__tests__/mocks/lancedb.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/lancedb.mock.js +63 -0
- package/dist/__tests__/mocks/lancedb.mock.js.map +1 -0
- package/dist/__tests__/search/clustering.test.d.ts +2 -0
- package/dist/__tests__/search/clustering.test.d.ts.map +1 -0
- package/dist/__tests__/search/clustering.test.js +230 -0
- package/dist/__tests__/search/clustering.test.js.map +1 -0
- package/dist/__tests__/search/hybrid-search.test.d.ts +2 -0
- package/dist/__tests__/search/hybrid-search.test.d.ts.map +1 -0
- package/dist/__tests__/search/hybrid-search.test.js +186 -0
- package/dist/__tests__/search/hybrid-search.test.js.map +1 -0
- package/dist/__tests__/search/indexer.test.d.ts +2 -0
- package/dist/__tests__/search/indexer.test.d.ts.map +1 -0
- package/dist/__tests__/search/indexer.test.js +878 -0
- package/dist/__tests__/search/indexer.test.js.map +1 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.d.ts +2 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.d.ts.map +1 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.js +228 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.js.map +1 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +11 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/utils/concurrency.test.d.ts +2 -0
- package/dist/__tests__/utils/concurrency.test.d.ts.map +1 -0
- package/dist/__tests__/utils/concurrency.test.js +83 -0
- package/dist/__tests__/utils/concurrency.test.js.map +1 -0
- package/dist/__tests__/utils/errors.test.d.ts +2 -0
- package/dist/__tests__/utils/errors.test.d.ts.map +1 -0
- package/dist/__tests__/utils/errors.test.js +136 -0
- package/dist/__tests__/utils/errors.test.js.map +1 -0
- package/dist/__tests__/utils/type-guards.test.d.ts +2 -0
- package/dist/__tests__/utils/type-guards.test.d.ts.map +1 -0
- package/dist/__tests__/utils/type-guards.test.js +80 -0
- package/dist/__tests__/utils/type-guards.test.js.map +1 -0
- package/dist/__tests__/worktree/worktree-manager.test.d.ts +2 -0
- package/dist/__tests__/worktree/worktree-manager.test.d.ts.map +1 -0
- package/dist/__tests__/worktree/worktree-manager.test.js +403 -0
- package/dist/__tests__/worktree/worktree-manager.test.js.map +1 -0
- package/dist/config.d.ts +122 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +508 -0
- package/dist/config.js.map +1 -0
- package/dist/dashboard/beads.d.ts +35 -0
- package/dist/dashboard/beads.d.ts.map +1 -0
- package/dist/dashboard/beads.js +102 -0
- package/dist/dashboard/beads.js.map +1 -0
- package/dist/dashboard/events.d.ts +46 -0
- package/dist/dashboard/events.d.ts.map +1 -0
- package/dist/dashboard/events.js +141 -0
- package/dist/dashboard/events.js.map +1 -0
- package/dist/dashboard/index.d.ts +69 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +93 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/routes.d.ts +6 -0
- package/dist/dashboard/routes.d.ts.map +1 -0
- package/dist/dashboard/routes.js +245 -0
- package/dist/dashboard/routes.js.map +1 -0
- package/dist/dashboard/server.d.ts +27 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +72 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/dashboard/state.d.ts +125 -0
- package/dist/dashboard/state.d.ts.map +1 -0
- package/dist/dashboard/state.js +264 -0
- package/dist/dashboard/state.js.map +1 -0
- package/dist/dashboard/ui.d.ts +6 -0
- package/dist/dashboard/ui.d.ts.map +1 -0
- package/dist/dashboard/ui.js +1421 -0
- package/dist/dashboard/ui.js.map +1 -0
- package/dist/embeddings/index.d.ts +20 -2
- package/dist/embeddings/index.d.ts.map +1 -1
- package/dist/embeddings/index.js +49 -6
- package/dist/embeddings/index.js.map +1 -1
- package/dist/embeddings/jina.d.ts +9 -0
- package/dist/embeddings/jina.d.ts.map +1 -1
- package/dist/embeddings/jina.js +42 -2
- package/dist/embeddings/jina.js.map +1 -1
- package/dist/embeddings/ollama.d.ts +2 -0
- package/dist/embeddings/ollama.d.ts.map +1 -1
- package/dist/embeddings/ollama.js +21 -5
- package/dist/embeddings/ollama.js.map +1 -1
- package/dist/embeddings/rate-limiter.d.ts +75 -0
- package/dist/embeddings/rate-limiter.d.ts.map +1 -0
- package/dist/embeddings/rate-limiter.js +145 -0
- package/dist/embeddings/rate-limiter.js.map +1 -0
- package/dist/embeddings/retry.d.ts +14 -0
- package/dist/embeddings/retry.d.ts.map +1 -0
- package/dist/embeddings/retry.js +89 -0
- package/dist/embeddings/retry.js.map +1 -0
- package/dist/embeddings/types.d.ts +56 -2
- package/dist/embeddings/types.d.ts.map +1 -1
- package/dist/embeddings/types.js +16 -0
- package/dist/embeddings/types.js.map +1 -1
- package/dist/index.js +1871 -44
- package/dist/index.js.map +1 -1
- package/dist/memory/index.d.ts +63 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +168 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/search/ast-chunker.d.ts +34 -0
- package/dist/search/ast-chunker.d.ts.map +1 -0
- package/dist/search/ast-chunker.js +261 -0
- package/dist/search/ast-chunker.js.map +1 -0
- package/dist/search/clustering.d.ts +77 -0
- package/dist/search/clustering.d.ts.map +1 -0
- package/dist/search/clustering.js +455 -0
- package/dist/search/clustering.js.map +1 -0
- package/dist/search/indexer.d.ts +239 -3
- package/dist/search/indexer.d.ts.map +1 -1
- package/dist/search/indexer.js +941 -45
- package/dist/search/indexer.js.map +1 -1
- package/dist/search/tree-sitter-chunker.d.ts +69 -0
- package/dist/search/tree-sitter-chunker.d.ts.map +1 -0
- package/dist/search/tree-sitter-chunker.js +436 -0
- package/dist/search/tree-sitter-chunker.js.map +1 -0
- package/dist/symbols/index.d.ts +14 -0
- package/dist/symbols/index.d.ts.map +1 -0
- package/dist/symbols/index.js +19 -0
- package/dist/symbols/index.js.map +1 -0
- package/dist/symbols/name-path.d.ts +113 -0
- package/dist/symbols/name-path.d.ts.map +1 -0
- package/dist/symbols/name-path.js +194 -0
- package/dist/symbols/name-path.js.map +1 -0
- package/dist/symbols/pattern-search.d.ts +14 -0
- package/dist/symbols/pattern-search.d.ts.map +1 -0
- package/dist/symbols/pattern-search.js +224 -0
- package/dist/symbols/pattern-search.js.map +1 -0
- package/dist/symbols/reference-finder.d.ts +38 -0
- package/dist/symbols/reference-finder.d.ts.map +1 -0
- package/dist/symbols/reference-finder.js +376 -0
- package/dist/symbols/reference-finder.js.map +1 -0
- package/dist/symbols/symbol-editor.d.ts +81 -0
- package/dist/symbols/symbol-editor.d.ts.map +1 -0
- package/dist/symbols/symbol-editor.js +257 -0
- package/dist/symbols/symbol-editor.js.map +1 -0
- package/dist/symbols/symbol-extractor.d.ts +49 -0
- package/dist/symbols/symbol-extractor.d.ts.map +1 -0
- package/dist/symbols/symbol-extractor.js +593 -0
- package/dist/symbols/symbol-extractor.js.map +1 -0
- package/dist/symbols/symbol-renamer.d.ts +81 -0
- package/dist/symbols/symbol-renamer.d.ts.map +1 -0
- package/dist/symbols/symbol-renamer.js +204 -0
- package/dist/symbols/symbol-renamer.js.map +1 -0
- package/dist/symbols/types.d.ts +234 -0
- package/dist/symbols/types.d.ts.map +1 -0
- package/dist/symbols/types.js +106 -0
- package/dist/symbols/types.js.map +1 -0
- package/dist/utils/concurrency.d.ts +32 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +57 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +91 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/type-guards.d.ts +17 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +25 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/worktree/index.d.ts +6 -0
- package/dist/worktree/index.d.ts.map +1 -0
- package/dist/worktree/index.js +6 -0
- package/dist/worktree/index.js.map +1 -0
- package/dist/worktree/types.d.ts +101 -0
- package/dist/worktree/types.d.ts.map +1 -0
- package/dist/worktree/types.js +6 -0
- package/dist/worktree/types.js.map +1 -0
- package/dist/worktree/worktree-manager.d.ts +80 -0
- package/dist/worktree/worktree-manager.d.ts.map +1 -0
- package/dist/worktree/worktree-manager.js +407 -0
- package/dist/worktree/worktree-manager.js.map +1 -0
- package/package.json +39 -5
- package/scripts/postinstall.js +48 -0
package/README.md
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="logo.svg" alt="lance-context logo" width="150" height="150">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://github.com/nicholaspsmith/lance-context/actions/workflows/ci.yml"><img src="https://github.com/nicholaspsmith/lance-context/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
7
|
+
<a href="https://www.npmjs.com/package/lance-context"><img src="https://img.shields.io/npm/v/lance-context.svg" alt="npm version"></a>
|
|
8
|
+
<a href="https://github.com/nicholaspsmith/lance-context/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-GPL--3.0-blue.svg" alt="License: GPL-3.0"></a>
|
|
9
|
+
<img src="https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg" alt="Node.js version">
|
|
10
|
+
</p>
|
|
11
|
+
|
|
1
12
|
# lance-context
|
|
2
13
|
|
|
3
14
|
An MCP plugin that adds semantic code search to Claude Code and other AI coding agents, giving them deep context from your entire codebase.
|
|
@@ -5,47 +16,177 @@ An MCP plugin that adds semantic code search to Claude Code and other AI coding
|
|
|
5
16
|
## Features
|
|
6
17
|
|
|
7
18
|
- **Semantic Code Search**: Natural language queries locate relevant code across your entire codebase
|
|
8
|
-
- **Multiple Embedding Backends**: Jina v3 API
|
|
19
|
+
- **Multiple Embedding Backends**: Jina v3 API or Ollama (local)
|
|
9
20
|
- **LanceDB Vector Storage**: Fast, efficient vector search with hybrid BM25 + dense matching
|
|
10
21
|
- **MCP Compatible**: Works with Claude Code, Cursor, and other MCP-compatible tools
|
|
22
|
+
- **Web Dashboard**: Real-time monitoring of index status, configuration, and usage statistics
|
|
23
|
+
- **Beads Integration**: Shows issue tracker data if your project uses [beads](https://github.com/steveyegge/beads)
|
|
11
24
|
|
|
12
25
|
## Installation
|
|
13
26
|
|
|
14
|
-
###
|
|
27
|
+
### Quick Install (Recommended)
|
|
15
28
|
|
|
16
29
|
```bash
|
|
17
|
-
|
|
30
|
+
npm install -g lance-context
|
|
18
31
|
```
|
|
19
32
|
|
|
20
|
-
|
|
33
|
+
This automatically registers lance-context with Claude Code. Restart Claude Code to start using semantic search.
|
|
34
|
+
|
|
35
|
+
### Manual Registration
|
|
36
|
+
|
|
37
|
+
If automatic registration didn't work, manually add to Claude Code:
|
|
21
38
|
|
|
22
39
|
```bash
|
|
23
|
-
claude mcp add lance-context -- npx lance-context
|
|
40
|
+
claude mcp add --scope user --transport stdio lance-context -- npx -y lance-context
|
|
24
41
|
```
|
|
25
42
|
|
|
26
|
-
###
|
|
43
|
+
### Verify Installation
|
|
27
44
|
|
|
28
|
-
|
|
29
|
-
|
|
45
|
+
In Claude Code, run `/mcp` to see lance-context in the list of MCP servers.
|
|
46
|
+
|
|
47
|
+
### Project-Level Installation
|
|
48
|
+
|
|
49
|
+
For project-specific MCP configuration, add a `.mcp.json` to your project root:
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"mcpServers": {
|
|
54
|
+
"lance-context": {
|
|
55
|
+
"command": "npx",
|
|
56
|
+
"args": ["-y", "lance-context"]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
30
60
|
```
|
|
31
61
|
|
|
32
|
-
|
|
62
|
+
### Project Configuration
|
|
63
|
+
|
|
64
|
+
Create a `.lance-context.json` file in your project root to customize indexing behavior. All options are optional - lance-context works out of the box with sensible defaults.
|
|
65
|
+
|
|
66
|
+
#### Minimal Configuration
|
|
33
67
|
|
|
34
|
-
|
|
68
|
+
For most projects, you only need to specify what to include:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"patterns": ["**/*.ts", "**/*.js"],
|
|
73
|
+
"instructions": "This is a TypeScript monorepo. Use semantic search to find relevant utilities."
|
|
74
|
+
}
|
|
75
|
+
```
|
|
35
76
|
|
|
36
|
-
|
|
77
|
+
#### Full Configuration Example
|
|
37
78
|
|
|
38
|
-
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"patterns": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
|
|
82
|
+
"excludePatterns": ["**/node_modules/**", "**/dist/**", "**/*.test.ts"],
|
|
83
|
+
"embedding": {
|
|
84
|
+
"backend": "jina"
|
|
85
|
+
},
|
|
86
|
+
"chunking": {
|
|
87
|
+
"maxLines": 100,
|
|
88
|
+
"overlap": 20
|
|
89
|
+
},
|
|
90
|
+
"search": {
|
|
91
|
+
"semanticWeight": 0.7,
|
|
92
|
+
"keywordWeight": 0.3
|
|
93
|
+
},
|
|
94
|
+
"dashboard": {
|
|
95
|
+
"enabled": true,
|
|
96
|
+
"port": 24300,
|
|
97
|
+
"openBrowser": true
|
|
98
|
+
},
|
|
99
|
+
"instructions": "Project-specific instructions for AI agents working with this codebase."
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### Configuration Options Reference
|
|
104
|
+
|
|
105
|
+
| Option | Description | Default |
|
|
106
|
+
|--------|-------------|---------|
|
|
107
|
+
| `patterns` | Glob patterns for files to index | `["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.go", "**/*.rs", "**/*.java", "**/*.rb", "**/*.php", "**/*.c", "**/*.cpp", "**/*.h", "**/*.hpp", "**/*.cs", "**/*.swift", "**/*.kt"]` |
|
|
108
|
+
| `excludePatterns` | Glob patterns for files to exclude | `["**/node_modules/**", "**/dist/**", "**/.git/**", "**/build/**", "**/target/**", "**/__pycache__/**", "**/venv/**", "**/.venv/**", "**/vendor/**", "**/*.min.js", "**/*.min.css"]` |
|
|
109
|
+
| `embedding.backend` | Embedding provider: `"jina"` or `"ollama"` | Auto-detect based on available API keys |
|
|
110
|
+
| `embedding.model` | Override the default embedding model | Backend default |
|
|
111
|
+
| `chunking.maxLines` | Maximum lines per chunk | `100` |
|
|
112
|
+
| `chunking.overlap` | Overlapping lines between chunks for context continuity | `20` |
|
|
113
|
+
| `search.semanticWeight` | Weight for semantic (vector) similarity (0-1) | `0.7` |
|
|
114
|
+
| `search.keywordWeight` | Weight for BM25 keyword matching (0-1) | `0.3` |
|
|
115
|
+
| `dashboard.enabled` | Enable the web dashboard | `true` |
|
|
116
|
+
| `dashboard.port` | Port for the dashboard server | `24300` |
|
|
117
|
+
| `dashboard.openBrowser` | Auto-open browser when dashboard starts | `true` |
|
|
118
|
+
| `instructions` | Project-specific instructions returned by `get_project_instructions` | None |
|
|
119
|
+
|
|
120
|
+
#### Default Behavior
|
|
121
|
+
|
|
122
|
+
Without a `.lance-context.json` file, lance-context will:
|
|
123
|
+
|
|
124
|
+
- Index common source code files (TypeScript, JavaScript, Python, Go, Rust, Java, Ruby, PHP, C/C++, C#, Swift, Kotlin)
|
|
125
|
+
- Exclude build artifacts, dependencies, and generated files
|
|
126
|
+
- Use Jina embeddings if `JINA_API_KEY` is set, otherwise fall back to local Ollama
|
|
127
|
+
- Split code into 100-line chunks with 20-line overlap
|
|
128
|
+
- Use hybrid search with 70% semantic / 30% keyword weighting
|
|
129
|
+
- Start the dashboard on port 24300
|
|
130
|
+
|
|
131
|
+
#### Environment Variables
|
|
132
|
+
|
|
133
|
+
Set these environment variables to configure embedding backends:
|
|
134
|
+
|
|
135
|
+
| Variable | Description | Default |
|
|
136
|
+
|----------|-------------|---------|
|
|
137
|
+
| `JINA_API_KEY` | Jina AI API key for cloud embeddings ([free tier available](https://jina.ai/)) | None |
|
|
138
|
+
| `OLLAMA_URL` | Custom Ollama server URL for local embeddings | `http://localhost:11434` |
|
|
139
|
+
| `LANCE_CONTEXT_PROJECT` | Override the project path to index | Current working directory |
|
|
140
|
+
|
|
141
|
+
**Backend Selection Priority:**
|
|
142
|
+
|
|
143
|
+
1. If `embedding.backend` is set in config, use that backend
|
|
144
|
+
2. If `JINA_API_KEY` is set, use Jina
|
|
145
|
+
3. Fall back to Ollama (must be running locally)
|
|
146
|
+
|
|
147
|
+
## Architecture
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
151
|
+
│ MCP Server (index.ts) │
|
|
152
|
+
│ Exposes tools: index_codebase, search_code │
|
|
153
|
+
└─────────────────┬───────────────────────────────────────────┘
|
|
154
|
+
│
|
|
155
|
+
┌─────────────────▼───────────────────────────────────────────┐
|
|
156
|
+
│ CodeIndexer (indexer.ts) │
|
|
157
|
+
│ - AST-aware chunking for supported languages │
|
|
158
|
+
│ - Incremental indexing (only re-index changed files) │
|
|
159
|
+
│ - Hybrid search (semantic + keyword scoring) │
|
|
160
|
+
└─────────────────┬───────────────────────────────────────────┘
|
|
161
|
+
│
|
|
162
|
+
┌─────────────────▼───────────────────────────────────────────┐
|
|
163
|
+
│ Embedding Backends (embeddings/) │
|
|
164
|
+
│ Jina v3 │ Ollama (local) │
|
|
165
|
+
└─────────────────┬───────────────────────────────────────────┘
|
|
166
|
+
│
|
|
167
|
+
┌─────────────────▼───────────────────────────────────────────┐
|
|
168
|
+
│ LanceDB Vector Store │
|
|
169
|
+
│ Stored in .lance-context/ directory │
|
|
170
|
+
└─────────────────────────────────────────────────────────────┘
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Embedding Backend Setup
|
|
174
|
+
|
|
175
|
+
lance-context automatically selects the best available backend (in priority order):
|
|
176
|
+
|
|
177
|
+
1. **Jina v3** (if `JINA_API_KEY` is set, free tier available)
|
|
39
178
|
```bash
|
|
40
|
-
export JINA_API_KEY=
|
|
179
|
+
export JINA_API_KEY=jina_...
|
|
41
180
|
```
|
|
42
181
|
|
|
43
|
-
2. **Ollama** (local, privacy-preserving)
|
|
182
|
+
2. **Ollama** (local fallback, privacy-preserving)
|
|
44
183
|
```bash
|
|
45
184
|
# Make sure Ollama is running with nomic-embed-text
|
|
46
185
|
ollama pull nomic-embed-text
|
|
47
186
|
```
|
|
48
187
|
|
|
188
|
+
See [Project Configuration](#project-configuration) for all configuration options including how to specify a backend.
|
|
189
|
+
|
|
49
190
|
## Usage
|
|
50
191
|
|
|
51
192
|
Once installed, you'll have access to these tools:
|
|
@@ -99,6 +240,42 @@ Clear the index:
|
|
|
99
240
|
Index cleared.
|
|
100
241
|
```
|
|
101
242
|
|
|
243
|
+
### `get_project_instructions`
|
|
244
|
+
|
|
245
|
+
Get project-specific instructions from the config:
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
> get_project_instructions
|
|
249
|
+
Use semantic search for exploring this codebase. Always run tests before committing.
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Dashboard
|
|
253
|
+
|
|
254
|
+
lance-context includes a web dashboard for monitoring index status and usage.
|
|
255
|
+
|
|
256
|
+
### Accessing the Dashboard
|
|
257
|
+
|
|
258
|
+
The dashboard starts automatically when the MCP server runs and is available at:
|
|
259
|
+
|
|
260
|
+
```
|
|
261
|
+
http://127.0.0.1:24300
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
The browser opens automatically on startup (configurable).
|
|
265
|
+
|
|
266
|
+
### Dashboard Features
|
|
267
|
+
|
|
268
|
+
- **Index Status**: Files indexed, chunks created, last updated time
|
|
269
|
+
- **Embedding Backend**: Current backend and index path
|
|
270
|
+
- **Configuration**: Project path, chunk settings, search weights
|
|
271
|
+
- **File Patterns**: Include/exclude patterns being used
|
|
272
|
+
- **Command Usage**: Real-time chart of MCP tool usage (using [charts.css](https://chartscss.org/))
|
|
273
|
+
- **Beads Integration**: Issue tracker status and ready tasks (if beads is configured)
|
|
274
|
+
|
|
275
|
+
### Dashboard Configuration
|
|
276
|
+
|
|
277
|
+
Configure the dashboard via the `dashboard` options in `.lance-context.json`. See [Configuration Options Reference](#configuration-options-reference) for details.
|
|
278
|
+
|
|
102
279
|
## How It Works
|
|
103
280
|
|
|
104
281
|
1. **Indexing**: Code files are chunked into ~100-line segments with overlap
|
|
@@ -106,25 +283,57 @@ Index cleared.
|
|
|
106
283
|
3. **Storage**: Vectors are stored in LanceDB (`.lance-context/` directory)
|
|
107
284
|
4. **Search**: Natural language queries are embedded and matched against stored vectors
|
|
108
285
|
|
|
109
|
-
## Environment Variables
|
|
110
|
-
|
|
111
|
-
| Variable | Description | Default |
|
|
112
|
-
|----------|-------------|---------|
|
|
113
|
-
| `JINA_API_KEY` | Jina AI API key for embeddings | - |
|
|
114
|
-
| `OLLAMA_URL` | Ollama server URL | `http://localhost:11434` |
|
|
115
|
-
| `LANCE_CONTEXT_PROJECT` | Project path to index | Current directory |
|
|
116
|
-
|
|
117
286
|
## Supported Languages
|
|
118
287
|
|
|
119
288
|
TypeScript, JavaScript, Python, Go, Rust, Java, Ruby, PHP, C/C++, C#, Swift, Kotlin, and more.
|
|
120
289
|
|
|
290
|
+
## Troubleshooting
|
|
291
|
+
|
|
292
|
+
### "No embedding backend available"
|
|
293
|
+
|
|
294
|
+
This error means no API keys are set and Ollama is not running/accessible.
|
|
295
|
+
|
|
296
|
+
**Solutions:**
|
|
297
|
+
1. Set an API key: `export JINA_API_KEY=jina_...`
|
|
298
|
+
2. Or start Ollama: `ollama serve` and ensure `nomic-embed-text` model is pulled
|
|
299
|
+
|
|
300
|
+
### "Embedding dimension mismatch"
|
|
301
|
+
|
|
302
|
+
This occurs when switching between embedding backends (e.g., from Jina to OpenAI). Each backend produces different vector dimensions.
|
|
303
|
+
|
|
304
|
+
**Solution:** Force a full reindex:
|
|
305
|
+
```
|
|
306
|
+
> index_codebase(forceReindex: true)
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Slow Indexing
|
|
310
|
+
|
|
311
|
+
Large codebases may take time to index initially.
|
|
312
|
+
|
|
313
|
+
**Tips:**
|
|
314
|
+
1. Use `excludePatterns` to skip unnecessary directories (tests, generated code)
|
|
315
|
+
2. Ollama is faster for local use but requires more resources
|
|
316
|
+
3. Subsequent runs use incremental indexing (only changed files)
|
|
317
|
+
|
|
318
|
+
### Index Corruption
|
|
319
|
+
|
|
320
|
+
If you encounter strange search results or errors:
|
|
321
|
+
|
|
322
|
+
**Solution:** Clear and rebuild the index:
|
|
323
|
+
```
|
|
324
|
+
> clear_index
|
|
325
|
+
> index_codebase
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Or manually delete the `.lance-context/` directory and re-index.
|
|
329
|
+
|
|
121
330
|
## License
|
|
122
331
|
|
|
123
332
|
GPL-3.0 - See [LICENSE](LICENSE) for details.
|
|
124
333
|
|
|
125
334
|
## Contributing
|
|
126
335
|
|
|
127
|
-
Contributions welcome! Please read our
|
|
336
|
+
Contributions welcome! Please read our [Contributing Guide](CONTRIBUTING.md) before submitting PRs.
|
|
128
337
|
|
|
129
338
|
## Related Projects
|
|
130
339
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-chunker.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ast-chunker.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { ASTChunker } from '../search/ast-chunker.js';
|
|
3
|
+
// Mock fs/promises
|
|
4
|
+
vi.mock('fs/promises', () => ({
|
|
5
|
+
readFile: vi.fn(),
|
|
6
|
+
}));
|
|
7
|
+
describe('ASTChunker', () => {
|
|
8
|
+
describe('canParse', () => {
|
|
9
|
+
it('should return true for TypeScript files', () => {
|
|
10
|
+
expect(ASTChunker.canParse('file.ts')).toBe(true);
|
|
11
|
+
expect(ASTChunker.canParse('file.tsx')).toBe(true);
|
|
12
|
+
expect(ASTChunker.canParse('file.mts')).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
it('should return true for JavaScript files', () => {
|
|
15
|
+
expect(ASTChunker.canParse('file.js')).toBe(true);
|
|
16
|
+
expect(ASTChunker.canParse('file.jsx')).toBe(true);
|
|
17
|
+
expect(ASTChunker.canParse('file.mjs')).toBe(true);
|
|
18
|
+
expect(ASTChunker.canParse('file.cjs')).toBe(true);
|
|
19
|
+
});
|
|
20
|
+
it('should return false for non-JS/TS files', () => {
|
|
21
|
+
expect(ASTChunker.canParse('file.py')).toBe(false);
|
|
22
|
+
expect(ASTChunker.canParse('file.go')).toBe(false);
|
|
23
|
+
expect(ASTChunker.canParse('file.rs')).toBe(false);
|
|
24
|
+
expect(ASTChunker.canParse('file.md')).toBe(false);
|
|
25
|
+
});
|
|
26
|
+
it('should be case insensitive', () => {
|
|
27
|
+
expect(ASTChunker.canParse('file.TS')).toBe(true);
|
|
28
|
+
expect(ASTChunker.canParse('file.JS')).toBe(true);
|
|
29
|
+
});
|
|
30
|
+
it('should handle .cts extension', () => {
|
|
31
|
+
expect(ASTChunker.canParse('file.cts')).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('chunkFile', () => {
|
|
35
|
+
let fsPromises;
|
|
36
|
+
beforeEach(async () => {
|
|
37
|
+
fsPromises = await import('fs/promises');
|
|
38
|
+
});
|
|
39
|
+
afterEach(() => {
|
|
40
|
+
vi.resetAllMocks();
|
|
41
|
+
});
|
|
42
|
+
describe('function declarations', () => {
|
|
43
|
+
it('should create chunk for function declaration', async () => {
|
|
44
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
45
|
+
function greet(name: string): string {
|
|
46
|
+
return \`Hello, \${name}!\`;
|
|
47
|
+
}
|
|
48
|
+
`);
|
|
49
|
+
const chunker = new ASTChunker();
|
|
50
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
51
|
+
const funcChunk = chunks.find((c) => c.type === 'function');
|
|
52
|
+
expect(funcChunk).toBeDefined();
|
|
53
|
+
expect(funcChunk?.name).toBe('greet');
|
|
54
|
+
expect(funcChunk?.content).toContain('function greet');
|
|
55
|
+
});
|
|
56
|
+
it('should include async functions', async () => {
|
|
57
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
58
|
+
async function fetchData(): Promise<void> {
|
|
59
|
+
await fetch('/api');
|
|
60
|
+
}
|
|
61
|
+
`);
|
|
62
|
+
const chunker = new ASTChunker();
|
|
63
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
64
|
+
const funcChunk = chunks.find((c) => c.type === 'function');
|
|
65
|
+
expect(funcChunk?.name).toBe('fetchData');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('class declarations', () => {
|
|
69
|
+
it('should create chunk for small class', async () => {
|
|
70
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
71
|
+
class User {
|
|
72
|
+
name: string;
|
|
73
|
+
constructor(name: string) {
|
|
74
|
+
this.name = name;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
`);
|
|
78
|
+
const chunker = new ASTChunker();
|
|
79
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
80
|
+
const classChunk = chunks.find((c) => c.type === 'class');
|
|
81
|
+
expect(classChunk).toBeDefined();
|
|
82
|
+
expect(classChunk?.name).toBe('User');
|
|
83
|
+
});
|
|
84
|
+
it('should split large classes into methods', async () => {
|
|
85
|
+
// Create a class with many lines
|
|
86
|
+
const lines = ['class BigClass {'];
|
|
87
|
+
for (let i = 0; i < 200; i++) {
|
|
88
|
+
lines.push(` method${i}() { return ${i}; }`);
|
|
89
|
+
}
|
|
90
|
+
lines.push('}');
|
|
91
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(lines.join('\n'));
|
|
92
|
+
const chunker = new ASTChunker();
|
|
93
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
94
|
+
// Should have multiple chunks from the class
|
|
95
|
+
const methodChunks = chunks.filter((c) => c.type === 'method');
|
|
96
|
+
expect(methodChunks.length).toBeGreaterThan(1);
|
|
97
|
+
});
|
|
98
|
+
it('should name method chunks with class prefix', async () => {
|
|
99
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
100
|
+
class MyService {
|
|
101
|
+
getData() {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
`);
|
|
106
|
+
const chunker = new ASTChunker();
|
|
107
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
108
|
+
// Find either a small class chunk or method chunks
|
|
109
|
+
const hasMethodWithClassName = chunks.some((c) => c.name?.includes('MyService') && (c.type === 'method' || c.type === 'class'));
|
|
110
|
+
expect(hasMethodWithClassName).toBe(true);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('interface declarations', () => {
|
|
114
|
+
it('should create chunk for interface', async () => {
|
|
115
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
116
|
+
interface Config {
|
|
117
|
+
apiKey: string;
|
|
118
|
+
baseUrl: string;
|
|
119
|
+
}
|
|
120
|
+
`);
|
|
121
|
+
const chunker = new ASTChunker();
|
|
122
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
123
|
+
const interfaceChunk = chunks.find((c) => c.type === 'interface');
|
|
124
|
+
expect(interfaceChunk).toBeDefined();
|
|
125
|
+
expect(interfaceChunk?.name).toBe('Config');
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe('type declarations', () => {
|
|
129
|
+
it('should create chunk for type alias', async () => {
|
|
130
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
131
|
+
type Status = 'pending' | 'active' | 'completed';
|
|
132
|
+
`);
|
|
133
|
+
const chunker = new ASTChunker();
|
|
134
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
135
|
+
const typeChunk = chunks.find((c) => c.type === 'type');
|
|
136
|
+
expect(typeChunk).toBeDefined();
|
|
137
|
+
expect(typeChunk?.name).toBe('Status');
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe('import grouping', () => {
|
|
141
|
+
it('should group imports into single chunk', async () => {
|
|
142
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
143
|
+
import { foo } from 'foo';
|
|
144
|
+
import { bar } from 'bar';
|
|
145
|
+
import * as baz from 'baz';
|
|
146
|
+
|
|
147
|
+
function main() {}
|
|
148
|
+
`);
|
|
149
|
+
const chunker = new ASTChunker();
|
|
150
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
151
|
+
const importChunk = chunks.find((c) => c.type === 'import');
|
|
152
|
+
expect(importChunk).toBeDefined();
|
|
153
|
+
expect(importChunk?.name).toBe('imports');
|
|
154
|
+
expect(importChunk?.content).toContain('foo');
|
|
155
|
+
expect(importChunk?.content).toContain('bar');
|
|
156
|
+
expect(importChunk?.content).toContain('baz');
|
|
157
|
+
});
|
|
158
|
+
it('should place imports first in chunk order', async () => {
|
|
159
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
160
|
+
import { x } from 'x';
|
|
161
|
+
|
|
162
|
+
function first() {}
|
|
163
|
+
`);
|
|
164
|
+
const chunker = new ASTChunker();
|
|
165
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
166
|
+
expect(chunks[0].type).toBe('import');
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
describe('variable statements', () => {
|
|
170
|
+
it('should create chunk for exported const', async () => {
|
|
171
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
172
|
+
export const CONFIG = {
|
|
173
|
+
port: 3000,
|
|
174
|
+
};
|
|
175
|
+
`);
|
|
176
|
+
const chunker = new ASTChunker();
|
|
177
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
178
|
+
const varChunk = chunks.find((c) => c.type === 'variable');
|
|
179
|
+
expect(varChunk).toBeDefined();
|
|
180
|
+
expect(varChunk?.name).toContain('CONFIG');
|
|
181
|
+
});
|
|
182
|
+
it('should handle multiple declarations', async () => {
|
|
183
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
184
|
+
const a = 1, b = 2, c = 3;
|
|
185
|
+
`);
|
|
186
|
+
const chunker = new ASTChunker();
|
|
187
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
188
|
+
const varChunk = chunks.find((c) => c.type === 'variable');
|
|
189
|
+
expect(varChunk).toBeDefined();
|
|
190
|
+
expect(varChunk?.name).toContain('a');
|
|
191
|
+
expect(varChunk?.name).toContain('b');
|
|
192
|
+
expect(varChunk?.name).toContain('c');
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
describe('large chunk splitting', () => {
|
|
196
|
+
it('should split chunks over MAX_CHUNK_LINES', async () => {
|
|
197
|
+
// Create a very large function (over 150 lines)
|
|
198
|
+
const lines = ['function bigFunction() {'];
|
|
199
|
+
for (let i = 0; i < 200; i++) {
|
|
200
|
+
lines.push(` const x${i} = ${i};`);
|
|
201
|
+
}
|
|
202
|
+
lines.push(' return x0;');
|
|
203
|
+
lines.push('}');
|
|
204
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(lines.join('\n'));
|
|
205
|
+
const chunker = new ASTChunker();
|
|
206
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
207
|
+
// Should have been split into multiple parts
|
|
208
|
+
const funcChunks = chunks.filter((c) => c.name?.includes('bigFunction'));
|
|
209
|
+
expect(funcChunks.length).toBeGreaterThan(1);
|
|
210
|
+
});
|
|
211
|
+
it('should label split chunks with part numbers', async () => {
|
|
212
|
+
const lines = ['function huge() {'];
|
|
213
|
+
for (let i = 0; i < 200; i++) {
|
|
214
|
+
lines.push(` console.log(${i});`);
|
|
215
|
+
}
|
|
216
|
+
lines.push('}');
|
|
217
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(lines.join('\n'));
|
|
218
|
+
const chunker = new ASTChunker();
|
|
219
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
220
|
+
const partChunks = chunks.filter((c) => c.name?.includes('part'));
|
|
221
|
+
expect(partChunks.length).toBeGreaterThan(0);
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
describe('line number tracking', () => {
|
|
225
|
+
it('should track correct start and end lines', async () => {
|
|
226
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
227
|
+
function first() {}
|
|
228
|
+
|
|
229
|
+
function second() {
|
|
230
|
+
return 2;
|
|
231
|
+
}
|
|
232
|
+
`);
|
|
233
|
+
const chunker = new ASTChunker();
|
|
234
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
235
|
+
const firstFunc = chunks.find((c) => c.name === 'first');
|
|
236
|
+
const secondFunc = chunks.find((c) => c.name === 'second');
|
|
237
|
+
expect(firstFunc?.startLine).toBeLessThan(secondFunc?.startLine ?? 0);
|
|
238
|
+
// First function ends at or before second starts
|
|
239
|
+
expect(firstFunc?.endLine).toBeLessThanOrEqual(secondFunc?.startLine ?? 0);
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
describe('JSX support', () => {
|
|
243
|
+
it('should parse .tsx files with JSX', async () => {
|
|
244
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
245
|
+
function Component() {
|
|
246
|
+
return <div>Hello</div>;
|
|
247
|
+
}
|
|
248
|
+
`);
|
|
249
|
+
const chunker = new ASTChunker();
|
|
250
|
+
// Should not throw
|
|
251
|
+
const chunks = await chunker.chunkFile('test.tsx');
|
|
252
|
+
expect(chunks.length).toBeGreaterThan(0);
|
|
253
|
+
});
|
|
254
|
+
it('should parse .jsx files', async () => {
|
|
255
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
256
|
+
function Component() {
|
|
257
|
+
return <span>World</span>;
|
|
258
|
+
}
|
|
259
|
+
`);
|
|
260
|
+
const chunker = new ASTChunker();
|
|
261
|
+
const chunks = await chunker.chunkFile('test.jsx');
|
|
262
|
+
expect(chunks.length).toBeGreaterThan(0);
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
describe('edge cases', () => {
|
|
266
|
+
it('should handle empty file', async () => {
|
|
267
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue('');
|
|
268
|
+
const chunker = new ASTChunker();
|
|
269
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
270
|
+
expect(chunks).toEqual([]);
|
|
271
|
+
});
|
|
272
|
+
it('should handle file with only imports', async () => {
|
|
273
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
274
|
+
import { a } from 'a';
|
|
275
|
+
import { b } from 'b';
|
|
276
|
+
`);
|
|
277
|
+
const chunker = new ASTChunker();
|
|
278
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
279
|
+
expect(chunks.length).toBe(1);
|
|
280
|
+
expect(chunks[0].type).toBe('import');
|
|
281
|
+
});
|
|
282
|
+
it('should handle file with only comments', async () => {
|
|
283
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
284
|
+
// This is a comment
|
|
285
|
+
/* Block comment */
|
|
286
|
+
`);
|
|
287
|
+
const chunker = new ASTChunker();
|
|
288
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
289
|
+
expect(chunks).toEqual([]);
|
|
290
|
+
});
|
|
291
|
+
it('should handle enum declarations', async () => {
|
|
292
|
+
vi.mocked(fsPromises.readFile).mockResolvedValue(`
|
|
293
|
+
enum Color {
|
|
294
|
+
Red,
|
|
295
|
+
Green,
|
|
296
|
+
Blue,
|
|
297
|
+
}
|
|
298
|
+
`);
|
|
299
|
+
const chunker = new ASTChunker();
|
|
300
|
+
const chunks = await chunker.chunkFile('test.ts');
|
|
301
|
+
const enumChunk = chunks.find((c) => c.name === 'Color');
|
|
302
|
+
expect(enumChunk).toBeDefined();
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
//# sourceMappingURL=ast-chunker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-chunker.test.js","sourceRoot":"","sources":["../../src/__tests__/ast-chunker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":""}
|