mcp-code-context 3.7.1 → 3.8.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.
Files changed (81) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/INSTRUCTIONS.md +3 -3
  3. package/README.md +12 -9
  4. package/SECURITY.md +10 -10
  5. package/dist/src/core/engine.d.ts +1 -1
  6. package/dist/src/core/engine.js +1 -1
  7. package/dist/src/core/indexManager.d.ts +1 -1
  8. package/dist/src/core/indexManager.js +1 -1
  9. package/dist/src/core/sessionManager.d.ts +1 -1
  10. package/dist/src/core/sessionManager.js +1 -1
  11. package/dist/src/core/validator.d.ts +1 -1
  12. package/dist/src/core/validator.js +1 -1
  13. package/dist/src/index.d.ts +1 -1
  14. package/dist/src/index.js +2 -2
  15. package/dist/src/operations/astTransform.d.ts +1 -1
  16. package/dist/src/operations/astTransform.js +1 -1
  17. package/dist/src/operations/compress.d.ts +1 -1
  18. package/dist/src/operations/compress.js +1 -1
  19. package/dist/src/operations/confirmationStore.d.ts +1 -1
  20. package/dist/src/operations/confirmationStore.js +1 -1
  21. package/dist/src/operations/write.d.ts +1 -1
  22. package/dist/src/operations/write.js +1 -1
  23. package/dist/src/parsers/base.d.ts +1 -1
  24. package/dist/src/parsers/base.js +1 -1
  25. package/dist/src/parsers/csharp.d.ts +1 -1
  26. package/dist/src/parsers/csharp.js +1 -1
  27. package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
  28. package/dist/src/parsers/dartTreeSitter.js +1 -1
  29. package/dist/src/parsers/go.d.ts +1 -1
  30. package/dist/src/parsers/go.js +1 -1
  31. package/dist/src/parsers/java.d.ts +1 -1
  32. package/dist/src/parsers/java.js +1 -1
  33. package/dist/src/parsers/kotlin.d.ts +1 -1
  34. package/dist/src/parsers/kotlin.js +1 -1
  35. package/dist/src/parsers/php.d.ts +1 -1
  36. package/dist/src/parsers/php.js +1 -1
  37. package/dist/src/parsers/python.d.ts +1 -1
  38. package/dist/src/parsers/python.js +1 -1
  39. package/dist/src/parsers/registry.d.ts +1 -1
  40. package/dist/src/parsers/registry.js +1 -1
  41. package/dist/src/parsers/ruby.d.ts +8 -1
  42. package/dist/src/parsers/ruby.js +18 -3
  43. package/dist/src/parsers/ruby.js.map +1 -1
  44. package/dist/src/parsers/rust.d.ts +1 -1
  45. package/dist/src/parsers/rust.js +1 -1
  46. package/dist/src/parsers/typescript.d.ts +1 -1
  47. package/dist/src/parsers/typescript.js +1 -1
  48. package/dist/src/tools/readHandlers.js +26 -0
  49. package/dist/src/tools/readHandlers.js.map +1 -1
  50. package/dist/src/tools/toolDefinitionsCore.js +2 -2
  51. package/dist/src/utils/appDir.d.ts +1 -1
  52. package/dist/src/utils/appDir.js +1 -1
  53. package/dist/src/utils/auditLogger.d.ts +1 -1
  54. package/dist/src/utils/auditLogger.js +1 -1
  55. package/dist/src/utils/backupManager.d.ts +1 -1
  56. package/dist/src/utils/backupManager.js +1 -1
  57. package/dist/src/utils/constants.d.ts +1 -1
  58. package/dist/src/utils/constants.js +1 -1
  59. package/dist/src/utils/diff.d.ts +2 -2
  60. package/dist/src/utils/diff.js +2 -2
  61. package/dist/src/utils/fileLock.d.ts +1 -1
  62. package/dist/src/utils/fileLock.js +1 -1
  63. package/dist/src/utils/fileWalker.d.ts +1 -1
  64. package/dist/src/utils/fileWalker.js +1 -1
  65. package/dist/src/utils/fileWatcher.d.ts +1 -1
  66. package/dist/src/utils/fileWatcher.js +1 -1
  67. package/dist/src/utils/fuzzySearch.d.ts +1 -1
  68. package/dist/src/utils/fuzzySearch.js +1 -1
  69. package/dist/src/utils/logger.d.ts +1 -1
  70. package/dist/src/utils/logger.js +1 -1
  71. package/dist/src/utils/railsSchema.d.ts +10 -0
  72. package/dist/src/utils/railsSchema.js +104 -0
  73. package/dist/src/utils/railsSchema.js.map +1 -0
  74. package/dist/src/utils/rateLimiter.d.ts +1 -1
  75. package/dist/src/utils/rateLimiter.js +1 -1
  76. package/dist/src/utils/streaming.d.ts +1 -1
  77. package/dist/src/utils/streaming.js +1 -1
  78. package/dist/src/utils/telemetry.d.ts +1 -1
  79. package/dist/src/utils/telemetry.js +1 -1
  80. package/llms.txt +11 -9
  81. package/package.json +6 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.8.0] - 2026-07-15
4
+
5
+ ### Added
6
+
7
+ - **Ruby full support** — `RubyParser` now complete with `search()` method for `search_code_pattern` tool compatibility
8
+ - **ActiveRecord Virtual Schema Extractor** — new `src/utils/railsSchema.ts` utility:
9
+ - Parses `db/schema.rb` via O(n) line-by-line state machine (no backtracking risk)
10
+ - mtime-keyed in-memory cache — zero I/O on repeated reads of unchanged schema
11
+ - `modelToTable()` — Rails CoC PascalCase → snake_case → pluralize (`AdminUser → admin_users`, `Category → categories`)
12
+ - `formatSchemaAnnotation()` — emits XML comment block with column names and types
13
+ - **AR schema injection in `read_file_surgical`** — when reading `.rb` files inheriting from `ApplicationRecord` or `ActiveRecord::Base`, virtual schema columns are prepended as XML comments
14
+ - Context-aware: when `symbolName` is set, reads full file to detect AR inheritance before injecting
15
+ - Graceful: no-op when `db/schema.rb` is absent or table not found
16
+
17
+ ### Fixed
18
+
19
+ - **`RubyParser.extractSymbol` off-by-one** — `tree.rootNode.text` omits leading whitespace on Windows/WASM, causing `startIndex` drift. Fixed by adjusting indices relative to `tree.rootNode.startIndex`.
20
+
21
+ ### Tests
22
+
23
+ - Added `tests/unit/parsers/ruby.spec.ts` — 5 vitest specs: symbol discovery, surgical replace, `extractSymbol` scoping, `parseSchemaRb` column extraction, `modelToTable` CoC mapping
24
+ - All 115 WASM parser tests passing (100%)
25
+
26
+ ---
27
+
3
28
  ## [3.7.1] - 2026-06-18
4
29
 
5
30
  ### Fixed
package/INSTRUCTIONS.md CHANGED
@@ -253,7 +253,7 @@ newContent: "{ return 42; }"
253
253
 
254
254
  ---
255
255
 
256
- ## 🚀 v3.7.1 Features
256
+ ## 🚀 v3.8.0 Features
257
257
 
258
258
  ### New Tools
259
259
  - **`get_session_stats`**: Session-scoped stats (pending ops, locks held, rate limiter tokens)
@@ -267,7 +267,7 @@ newContent: "{ return 42; }"
267
267
  - ✅ **Auto-persist before eviction**: Cache data preserved
268
268
  - ✅ **Higher file limits**: MAX_FILES = 2000 (was 500)
269
269
 
270
- ### Previously Added in v3.7.1
270
+ ### Previously Added in v3.7.x
271
271
  - ✅ **4 New Tools**: `search_symbols`, `explain_symbol`, `batch_read`, `get_rate_limit_status`
272
272
  - ✅ **`diffFormat`**: Control diff verbosity (`unified`, `compact`, `summary`, `none`)
273
273
  - ✅ **Phase 2 optimized**: No need to resend `newContent`/`code` — server stores it from Phase 1
@@ -288,6 +288,6 @@ See `llms.txt` for complete API reference and technical details.
288
288
 
289
289
  ---
290
290
 
291
- **Version**: 3.7.1
291
+ **Version**: 3.8.0
292
292
  **Last Updated**: June 8, 2026
293
293
  **Status**: Production-ready with session-scoped state and crash recovery
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![npm version](https://img.shields.io/npm/v/mcp-code-context.svg)](https://www.npmjs.com/package/mcp-code-context)
5
5
  [![npm downloads](https://img.shields.io/npm/dm/mcp-code-context.svg)](https://www.npmjs.com/package/mcp-code-context)
6
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-100%25-blue.svg)]()
7
- [![Tests](https://img.shields.io/badge/tests-83%20passing-success.svg)]()
7
+ [![Tests](https://img.shields.io/badge/tests-120%20passing-success.svg)]()
8
8
  [![Ko-fi](https://img.shields.io/badge/Support-Ko--fi-FF5E5B?logo=ko-fi)](https://ko-fi.com/achatainga)
9
9
  [![PayPal](https://img.shields.io/badge/Donate-PayPal-00457C?logo=paypal)](https://paypal.me/achatainga)
10
10
 
@@ -75,7 +75,7 @@ Built to be robust and precise. Both read and write engines are tested against r
75
75
 
76
76
  ### Production-Ready Features
77
77
 
78
- | Feature | v3.6.x | v3.7.1 | Benefit |
78
+ | Feature | v3.6.x | v3.8.0 | Benefit |
79
79
  |---------|--------|--------|---------|
80
80
  | Multi-process safety | ✅ | ✅ | No file corruption |
81
81
  | Persistent cache | ✅ | ✅ | <100ms cache hits |
@@ -88,7 +88,7 @@ Built to be robust and precise. Both read and write engines are tested against r
88
88
 
89
89
  ## Features
90
90
 
91
- ### What's New in v3.7.1
91
+ ### What's New in v3.8.0
92
92
 
93
93
  | Feature | Description |
94
94
  |---------|-------------|
@@ -99,6 +99,8 @@ Built to be robust and precise. Both read and write engines are tested against r
99
99
  | 📊 **Higher file limits** | MAX_FILES_REPO_MAP = 2000 (was 500) |
100
100
  | 🧪 **Multi-client tests** | New integration tests for concurrent MCP clients |
101
101
  | 📝 **New tools**: `get_session_stats`, `clear_session_cache`, `list_pending_operations` | Session-aware operations |
102
+ | 💎 **Ruby full support** | Complete `RubyParser` with `search()` for `search_code_pattern` compatibility |
103
+ | 🗄️ **ActiveRecord Virtual Schema** | Parses `db/schema.rb` and injects column annotations when reading AR model files |
102
104
 
103
105
  ### Previous Versions (v3.6.x)
104
106
 
@@ -142,6 +144,7 @@ Built to be robust and precise. Both read and write engines are tested against r
142
144
  | PHP | ✅ AST (Tree-sitter WASM) | ✅ AST + line-splice | ✅ |
143
145
  | Dart | ✅ AST (Tree-sitter WASM) | ✅ AST + line-splice | ✅ |
144
146
  | Python | ✅ AST (Tree-sitter WASM) | ✅ Indentation-aware | ✅ |
147
+ | Ruby | ✅ AST (Tree-sitter WASM) + ActiveRecord Virtual Schema | ✅ AST byte-offset splice | ✅ |
145
148
  | Others (JSON, YAML, CSS, etc.) | Passthrough / truncation | — | — |
146
149
 
147
150
  ---
@@ -161,7 +164,7 @@ Built to be robust and precise. Both read and write engines are tested against r
161
164
 
162
165
  ### `get_semantic_repo_map` Tool
163
166
 
164
- - **Max files**: Limited to 2000 files to prevent timeouts (increased from 500 in v3.7.1)
167
+ - **Max files**: Limited to 2000 files to prevent timeouts (increased from 500 in v3.8.0)
165
168
  - **Performance**: Synchronous I/O may take 10-30 seconds on large repositories
166
169
  - **Recommendation**: Use `@folder` syntax to target specific directories
167
170
 
@@ -188,13 +191,13 @@ npx -y mcp-code-context
188
191
 
189
192
  ---
190
193
 
191
- ## Session State (v3.7.1+)
194
+ ## Session State (v3.8.0+)
192
195
 
193
- **Important**: v3.7.1 introduces **session-scoped state** for each MCP client connection. This prevents state leakage when multiple agents (Amazon Q, Kiro, Cursor, etc.) use the same server instance.
196
+ **Important**: v3.8.0 introduces **session-scoped state** for each MCP client connection. This prevents state leakage when multiple agents (Amazon Q, Kiro, Cursor, etc.) use the same server instance.
194
197
 
195
198
  ### What Changed
196
199
 
197
- | Before (v3.6.x) | After (v3.7.1) |
200
+ | Before (v3.6.x) | After (v3.8.0) |
198
201
  |----------------|----------------|
199
202
  | Global `LockManager` (shared by all clients) | Session-scoped `sessionStates` Map |
200
203
  | Global `ConfirmationStore` (in-memory Map) | Session-scoped confirmation store + SQLite persistence |
@@ -222,7 +225,7 @@ npx -y mcp-code-context
222
225
  }
223
226
  ```
224
227
 
225
- ### New Tools (v3.7.1)
228
+ ### New Tools (v3.8.0)
226
229
 
227
230
  - `get_session_stats` — Get stats for current session only
228
231
  - `clear_session_cache` — Clear cache for current session only
@@ -526,7 +529,7 @@ npm run dev
526
529
  - **Portability:** 100% WASM - no native dependencies, works on all platforms
527
530
  - **Tests:** 83 passing (unit + integration + performance + stress)
528
531
 
529
- ### v3.7.1 Key Changes
532
+ ### v3.8.0 Key Changes
530
533
 
531
534
  | Component | Change | Benefit |
532
535
  |-----------|--------|---------|
package/SECURITY.md CHANGED
@@ -1,8 +1,8 @@
1
- # Security Policy - mcp-code-context v3.7.1
1
+ # Security Policy - mcp-code-context v3.8.0
2
2
 
3
- ## 🔒 Security Improvements in v3.7.1
3
+ ## 🔒 Security Improvements in v3.7.1+
4
4
 
5
- This release addresses **all critical security vulnerabilities** from comprehensive adversarial audit, implements full middleware pipeline, and hardens all 13 tool handlers. **NEW**: Session-scoped state isolation prevents cross-client data leakage.
5
+ This release addresses **all critical security vulnerabilities** from comprehensive adversarial audit, implements full middleware pipeline, and hardens all 13 tool handlers. **NEW in v3.7.0**: Session-scoped state isolation prevents cross-client data leakage.
6
6
 
7
7
  ---
8
8
 
@@ -96,9 +96,9 @@ This release addresses **all critical security vulnerabilities** from comprehens
96
96
 
97
97
  ---
98
98
 
99
- ### 10. Session State Leakage (HIGH) — **NEW**
99
+ ### 10. Session State Leakage (HIGH) — **NEW in v3.7.0**
100
100
  **CVSS Score**: 7.5 (High)
101
- **Status**: ✅ FIXED in v3.7.1
101
+ **Status**: ✅ FIXED in v3.7.0
102
102
 
103
103
  **Description**: Global state (`globalLockManager`, `globalConfirmationStore`, `rateLimiter`) accumulated across client sessions with no cleanup.
104
104
 
@@ -108,9 +108,9 @@ This release addresses **all critical security vulnerabilities** from comprehens
108
108
 
109
109
  ---
110
110
 
111
- ### 11. Pending Operations Not Persistent (HIGH) — **NEW**
111
+ ### 11. Pending Operations Not Persistent (HIGH) — **NEW in v3.7.0**
112
112
  **CVSS Score**: 7.0 (High)
113
- **Status**: ✅ FIXED in v3.7.1
113
+ **Status**: ✅ FIXED in v3.7.0
114
114
 
115
115
  **Description**: Pending operations stored in `globalConfirmationStore` (in-memory Map). No persistence.
116
116
 
@@ -141,7 +141,7 @@ This release addresses **all critical security vulnerabilities** from comprehens
141
141
  - Audit logging (persistent `.mcp-audit-logs/`)
142
142
  - Telemetry (operation metrics, percentiles)
143
143
 
144
- 4. **Session-Scoped State** (v3.7.1)
144
+ 4. **Session-Scoped State** (v3.7.0)
145
145
  - Each MCP client gets isolated locks, confirmation store, rate limiter
146
146
  - No state leakage between clients (Amazon Q, Kiro, Cursor, etc.)
147
147
 
@@ -191,7 +191,7 @@ node dist-tests/tests/test-security.js
191
191
  - [x] Syntax validation
192
192
  - [x] Bounded memory in compress
193
193
 
194
- ### v3.7.1 ✅
194
+ ### v3.7.x ✅
195
195
  - [x] Regex timeout enforcement (safeRegexTest)
196
196
  - [x] Expanded ReDoS detection (15+ patterns)
197
197
  - [x] Rate limiting (token bucket)
@@ -208,4 +208,4 @@ node dist-tests/tests/test-security.js
208
208
  ---
209
209
 
210
210
  **Last Updated**: 2026-06-08
211
- **Version**: 3.7.1
211
+ **Version**: 3.8.0
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Core Engine - v3.7.1
2
+ * Core Engine - v3.8.0
3
3
  * ASYNC I/O: Migrated to fs.promises
4
4
  */
5
5
  import { Parser, Language } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Core Engine - v3.7.1
2
+ * Core Engine - v3.8.0
3
3
  * ASYNC I/O: Migrated to fs.promises
4
4
  */
5
5
  import { Parser, Language } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Index Manager - v3.7.1
2
+ * Index Manager - v3.8.0
3
3
  * Persistent symbol index and dependency graph in ~/.mcp-code-context/index/
4
4
  * Enables O(1) search_symbols and analyze_impact queries.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Index Manager - v3.7.1
2
+ * Index Manager - v3.8.0
3
3
  * Persistent symbol index and dependency graph in ~/.mcp-code-context/index/
4
4
  * Enables O(1) search_symbols and analyze_impact queries.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Session Manager - v3.7.1
2
+ * Session Manager - v3.8.0
3
3
  * Manages per-MCP-client state isolation
4
4
  * Prevents state leakage between concurrent clients
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Session Manager - v3.7.1
2
+ * Session Manager - v3.8.0
3
3
  * Manages per-MCP-client state isolation
4
4
  * Prevents state leakage between concurrent clients
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Security Validator - v3.7.1
2
+ * Security Validator - v3.8.0
3
3
  * CRITICAL FIX: Path traversal check AFTER normalization
4
4
  */
5
5
  export interface ValidationResult {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Security Validator - v3.7.1
2
+ * Security Validator - v3.8.0
3
3
  * CRITICAL FIX: Path traversal check AFTER normalization
4
4
  */
5
5
  import * as path from "node:path";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * mcp-code-context v3.7.1 - Tree-sitter WASM Edition (thin bootstrap)
3
+ * mcp-code-context v3.8.0 - Tree-sitter WASM Edition (thin bootstrap)
4
4
  */
5
5
  export {};
package/dist/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * mcp-code-context v3.7.1 - Tree-sitter WASM Edition (thin bootstrap)
3
+ * mcp-code-context v3.8.0 - Tree-sitter WASM Edition (thin bootstrap)
4
4
  */
5
5
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
6
6
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
@@ -13,7 +13,7 @@ import { TOOLS } from "./tools/toolDefinitions.js";
13
13
  import { setServerInstances } from "./tools/context.js";
14
14
  import { registerPipeline } from "./tools/pipeline.js";
15
15
  const SERVER_NAME = "mcp-code-context";
16
- const SERVER_VERSION = "3.7.1";
16
+ const SERVER_VERSION = "3.8.0";
17
17
  const server = new Server({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } });
18
18
  server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
19
19
  registerPipeline(server);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * AST Transform - v3.7.1
2
+ * AST Transform - v3.8.0
3
3
  * Declarative AST transformations using Tree-sitter.
4
4
  * Operates on symbol positions from the AST — no fragile text matching.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * AST Transform - v3.7.1
2
+ * AST Transform - v3.8.0
3
3
  * Declarative AST transformations using Tree-sitter.
4
4
  * Operates on symbol positions from the AST — no fragile text matching.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Semantic Compression - v3.7.1
2
+ * Semantic Compression - v3.8.0
3
3
  * IMPROVEMENTS: Centralized constants + size limits + timeout + index feeding
4
4
  */
5
5
  import { ParserRegistry } from "../parsers/registry.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Semantic Compression - v3.7.1
2
+ * Semantic Compression - v3.8.0
3
3
  * IMPROVEMENTS: Centralized constants + size limits + timeout + index feeding
4
4
  */
5
5
  import * as fs from "node:fs/promises";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Confirmation Store - v3.7.1
2
+ * Confirmation Store - v3.8.0
3
3
  * Two-phase write: dry-run preview → confirm with token
4
4
  * Stores pending write operations with auto-expiry
5
5
  * NOW with SQLite persistence for crash recovery
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Confirmation Store - v3.7.1
2
+ * Confirmation Store - v3.8.0
3
3
  * Two-phase write: dry-run preview → confirm with token
4
4
  * Stores pending write operations with auto-expiry
5
5
  * NOW with SQLite persistence for crash recovery
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Write Operations - v3.7.1
2
+ * Write Operations - v3.8.0
3
3
  * FIXES: SecurityValidator in renameSymbol, atomic writes, AST-based positioning
4
4
  * CRITICAL: renameSymbol Phase 1 is now pure-functional (no disk writes)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Write Operations - v3.7.1
2
+ * Write Operations - v3.8.0
3
3
  * FIXES: SecurityValidator in renameSymbol, atomic writes, AST-based positioning
4
4
  * CRITICAL: renameSymbol Phase 1 is now pure-functional (no disk writes)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Base Parser - v3.7.1
2
+ * Base Parser - v3.8.0
3
3
  * Abstract base for all language parsers
4
4
  * IMPROVEMENT: replaceSymbol moved here using AST indices (eliminates indexOf fragility)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Base Parser - v3.7.1
2
+ * Base Parser - v3.8.0
3
3
  * Abstract base for all language parsers
4
4
  * IMPROVEMENT: replaceSymbol moved here using AST indices (eliminates indexOf fragility)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * C# Parser - v3.7.1
2
+ * C# Parser - v3.8.0
3
3
  * Tree-sitter based C# parser
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * C# Parser - v3.7.1
2
+ * C# Parser - v3.8.0
3
3
  * Tree-sitter based C# parser
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Dart Tree-sitter Parser - v3.7.1
2
+ * Dart Tree-sitter Parser - v3.8.0
3
3
  * 100% AST accuracy via WASM
4
4
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Dart Tree-sitter Parser - v3.7.1
2
+ * Dart Tree-sitter Parser - v3.8.0
3
3
  * 100% AST accuracy via WASM
4
4
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Go Parser - v3.7.1
2
+ * Go Parser - v3.8.0
3
3
  * Tree-sitter based Go parser
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Go Parser - v3.7.1
2
+ * Go Parser - v3.8.0
3
3
  * Tree-sitter based Go parser
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Java Parser - v3.7.1
2
+ * Java Parser - v3.8.0
3
3
  * Tree-sitter based Java parser
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Java Parser - v3.7.1
2
+ * Java Parser - v3.8.0
3
3
  * Tree-sitter based Java parser
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Kotlin Parser - v3.7.1
2
+ * Kotlin Parser - v3.8.0
3
3
  * Tree-sitter based Kotlin parser
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Kotlin Parser - v3.7.1
2
+ * Kotlin Parser - v3.8.0
3
3
  * Tree-sitter based Kotlin parser
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * PHP Parser - v3.7.1
2
+ * PHP Parser - v3.8.0
3
3
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * PHP Parser - v3.7.1
2
+ * PHP Parser - v3.8.0
3
3
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Python Parser - v3.7.1
2
+ * Python Parser - v3.8.0
3
3
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Python Parser - v3.7.1
2
+ * Python Parser - v3.8.0
3
3
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Parser Registry - v3.7.1
2
+ * Parser Registry - v3.8.0
3
3
  * Manages all language parsers
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Parser Registry - v3.7.1
2
+ * Parser Registry - v3.8.0
3
3
  * Manages all language parsers
4
4
  */
5
5
  import { TypeScriptParser } from "./typescript.js";
@@ -1,12 +1,19 @@
1
1
  /**
2
- * Ruby Parser - v3.7.1
2
+ * Ruby Parser - v3.8.0
3
3
  * Tree-sitter based Ruby parser
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
6
6
  import { BaseParser, SymbolInfo } from "./base.js";
7
7
  export declare class RubyParser extends BaseParser {
8
8
  constructor();
9
+ /**
10
+ * Extract a symbol from source content using AST byte offsets.
11
+ * NOTE: uses content directly (not tree.rootNode.text) because web-tree-sitter
12
+ * may strip leading whitespace/newlines from rootNode.text on Windows/WASM,
13
+ * causing off-by-one drift against the original byte offsets.
14
+ */
9
15
  extractSymbol(tree: Tree, symbolName: string, className?: string): string | null;
16
+ search(tree: Tree, pattern: string): SymbolInfo[];
10
17
  findSymbols(tree: Tree): SymbolInfo[];
11
18
  private findParentClass;
12
19
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Ruby Parser - v3.7.1
2
+ * Ruby Parser - v3.8.0
3
3
  * Tree-sitter based Ruby parser
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -7,11 +7,26 @@ export class RubyParser extends BaseParser {
7
7
  constructor() {
8
8
  super("ruby");
9
9
  }
10
+ /**
11
+ * Extract a symbol from source content using AST byte offsets.
12
+ * NOTE: uses content directly (not tree.rootNode.text) because web-tree-sitter
13
+ * may strip leading whitespace/newlines from rootNode.text on Windows/WASM,
14
+ * causing off-by-one drift against the original byte offsets.
15
+ */
10
16
  extractSymbol(tree, symbolName, className) {
11
- const src = tree.rootNode.text;
12
17
  const symbols = this.findSymbols(tree);
13
18
  const target = symbols.find(s => s.name === symbolName && (!className || s.className === className));
14
- return target ? src.substring(target.startIndex, target.endIndex) : null;
19
+ if (!target)
20
+ return null;
21
+ // Reconstruct the original source from tree nodes — use the full text of the
22
+ // root node's parent walk so we always have the unparsed original.
23
+ // The safest approach: use tree.rootNode.text but correct the start offset.
24
+ const src = tree.rootNode.text;
25
+ const rootStart = tree.rootNode.startIndex;
26
+ return src.substring(target.startIndex - rootStart, target.endIndex - rootStart);
27
+ }
28
+ search(tree, pattern) {
29
+ return this.findSymbols(tree).filter(s => s.name.toLowerCase().includes(pattern.toLowerCase()));
15
30
  }
16
31
  findSymbols(tree) {
17
32
  const symbols = [];
@@ -1 +1 @@
1
- {"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../../src/parsers/ruby.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../../src/parsers/ruby.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rust Parser - v3.7.1
2
+ * Rust Parser - v3.8.0
3
3
  * Tree-sitter based Rust parser
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rust Parser - v3.7.1
2
+ * Rust Parser - v3.8.0
3
3
  * Tree-sitter based Rust parser
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * TypeScript Parser - v3.7.1
2
+ * TypeScript Parser - v3.8.0
3
3
  * Tree-sitter based TS/JS parser
4
4
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * TypeScript Parser - v3.7.1
2
+ * TypeScript Parser - v3.8.0
3
3
  * Tree-sitter based TS/JS parser
4
4
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
5
5
  */