Skip to content

Commit bbe3362

Browse files
roomote[bot]roomote-agentdaniel-lxs
authored
fix: ensure JSON files respect .rooignore during indexing (#6691)
Co-authored-by: Roo Code <[email protected]> Co-authored-by: Daniel <[email protected]>
1 parent f9e85a5 commit bbe3362

File tree

3 files changed

+54
-2
lines changed

3 files changed

+54
-2
lines changed

src/services/code-index/__tests__/manager.spec.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,14 @@ vi.mock("vscode", () => {
1919
index: 0,
2020
},
2121
],
22+
createFileSystemWatcher: vi.fn().mockReturnValue({
23+
onDidCreate: vi.fn().mockReturnValue({ dispose: vi.fn() }),
24+
onDidChange: vi.fn().mockReturnValue({ dispose: vi.fn() }),
25+
onDidDelete: vi.fn().mockReturnValue({ dispose: vi.fn() }),
26+
dispose: vi.fn(),
27+
}),
2228
},
29+
RelativePattern: vi.fn().mockImplementation((base, pattern) => ({ base, pattern })),
2330
}
2431
})
2532

@@ -32,6 +39,26 @@ vi.mock("../../../utils/path", () => {
3239
}
3340
})
3441

42+
// Mock fs/promises for RooIgnoreController
43+
vi.mock("fs/promises", () => ({
44+
default: {
45+
readFile: vi.fn().mockRejectedValue(new Error("File not found")), // Simulate no .gitignore/.rooignore
46+
},
47+
}))
48+
49+
// Mock file utils for RooIgnoreController
50+
vi.mock("../../../utils/fs", () => ({
51+
fileExistsAtPath: vi.fn().mockResolvedValue(false), // Simulate no .rooignore file
52+
}))
53+
54+
// Mock ignore module
55+
vi.mock("ignore", () => ({
56+
default: vi.fn().mockReturnValue({
57+
add: vi.fn(),
58+
ignores: vi.fn().mockReturnValue(false),
59+
}),
60+
}))
61+
3562
vi.mock("../state-manager", () => ({
3663
CodeIndexStateManager: vi.fn().mockImplementation(() => ({
3764
onProgressUpdate: vi.fn(),

src/services/code-index/manager.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { CodeIndexServiceFactory } from "./service-factory"
99
import { CodeIndexSearchService } from "./search-service"
1010
import { CodeIndexOrchestrator } from "./orchestrator"
1111
import { CacheManager } from "./cache-manager"
12+
import { RooIgnoreController } from "../../core/ignore/RooIgnoreController"
1213
import fs from "fs/promises"
1314
import ignore from "ignore"
1415
import path from "path"
@@ -312,6 +313,7 @@ export class CodeIndexManager {
312313
return
313314
}
314315

316+
// Create .gitignore instance
315317
const ignorePath = path.join(workspacePath, ".gitignore")
316318
try {
317319
const content = await fs.readFile(ignorePath, "utf8")
@@ -327,11 +329,16 @@ export class CodeIndexManager {
327329
})
328330
}
329331

332+
// Create RooIgnoreController instance
333+
const rooIgnoreController = new RooIgnoreController(workspacePath)
334+
await rooIgnoreController.initialize()
335+
330336
// (Re)Create shared service instances
331337
const { embedder, vectorStore, scanner, fileWatcher } = this._serviceFactory.createServices(
332338
this.context,
333339
this._cacheManager!,
334340
ignoreInstance,
341+
rooIgnoreController,
335342
)
336343

337344
// Validate embedder configuration before proceeding

src/services/code-index/service-factory.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { codeParser, DirectoryScanner, FileWatcher } from "./processors"
1010
import { ICodeParser, IEmbedder, IFileWatcher, IVectorStore } from "./interfaces"
1111
import { CodeIndexConfigManager } from "./config-manager"
1212
import { CacheManager } from "./cache-manager"
13+
import { RooIgnoreController } from "../../core/ignore/RooIgnoreController"
1314
import { Ignore } from "ignore"
1415
import { t } from "../../i18n"
1516
import { TelemetryService } from "@roo-code/telemetry"
@@ -161,8 +162,17 @@ export class CodeIndexServiceFactory {
161162
vectorStore: IVectorStore,
162163
cacheManager: CacheManager,
163164
ignoreInstance: Ignore,
165+
rooIgnoreController?: RooIgnoreController,
164166
): IFileWatcher {
165-
return new FileWatcher(this.workspacePath, context, cacheManager, embedder, vectorStore, ignoreInstance)
167+
return new FileWatcher(
168+
this.workspacePath,
169+
context,
170+
cacheManager,
171+
embedder,
172+
vectorStore,
173+
ignoreInstance,
174+
rooIgnoreController,
175+
)
166176
}
167177

168178
/**
@@ -173,6 +183,7 @@ export class CodeIndexServiceFactory {
173183
context: vscode.ExtensionContext,
174184
cacheManager: CacheManager,
175185
ignoreInstance: Ignore,
186+
rooIgnoreController?: RooIgnoreController,
176187
): {
177188
embedder: IEmbedder
178189
vectorStore: IVectorStore
@@ -188,7 +199,14 @@ export class CodeIndexServiceFactory {
188199
const vectorStore = this.createVectorStore()
189200
const parser = codeParser
190201
const scanner = this.createDirectoryScanner(embedder, vectorStore, parser, ignoreInstance)
191-
const fileWatcher = this.createFileWatcher(context, embedder, vectorStore, cacheManager, ignoreInstance)
202+
const fileWatcher = this.createFileWatcher(
203+
context,
204+
embedder,
205+
vectorStore,
206+
cacheManager,
207+
ignoreInstance,
208+
rooIgnoreController,
209+
)
192210

193211
return {
194212
embedder,

0 commit comments

Comments
 (0)