From 052628e5e2f6acb40cbfdff349bc1a2f982e8c9c Mon Sep 17 00:00:00 2001 From: Roo Code Date: Mon, 30 Jun 2025 10:35:21 +0000 Subject: [PATCH] Fix #5238: Add support for .NET file extensions in codebase indexing - Added Visual Basic .NET (.vb) extension support - Added F# (.fs, .fsx, .fsi) extension support - Added appropriate parser mappings for VB.NET and F# files - Added comprehensive test coverage for .NET extension support This resolves the issue where .NET projects were not being properly indexed because only C# files were supported. Now all common .NET file types are included in the codebase indexing system. --- .../__tests__/dotnet-support.spec.ts | 32 +++++++++++++++++++ src/services/tree-sitter/index.ts | 6 ++++ src/services/tree-sitter/languageParser.ts | 12 +++++++ 3 files changed, 50 insertions(+) create mode 100644 src/services/code-index/__tests__/dotnet-support.spec.ts diff --git a/src/services/code-index/__tests__/dotnet-support.spec.ts b/src/services/code-index/__tests__/dotnet-support.spec.ts new file mode 100644 index 00000000000..ac0f217b66b --- /dev/null +++ b/src/services/code-index/__tests__/dotnet-support.spec.ts @@ -0,0 +1,32 @@ +// npx vitest services/code-index/__tests__/dotnet-support.spec.ts + +import { extensions } from "../../tree-sitter" +import { scannerExtensions } from "../shared/supported-extensions" + +describe(".NET file extension support", () => { + it("should include C# files in supported extensions", () => { + expect(extensions).toContain(".cs") + expect(scannerExtensions).toContain(".cs") + }) + + it("should include Visual Basic .NET files in supported extensions", () => { + expect(extensions).toContain(".vb") + expect(scannerExtensions).toContain(".vb") + }) + + it("should include F# files in supported extensions", () => { + expect(extensions).toContain(".fs") + expect(extensions).toContain(".fsx") + expect(extensions).toContain(".fsi") + expect(scannerExtensions).toContain(".fs") + expect(scannerExtensions).toContain(".fsx") + expect(scannerExtensions).toContain(".fsi") + }) + + it("should not include markdown files in scanner extensions", () => { + expect(extensions).toContain(".md") + expect(extensions).toContain(".markdown") + expect(scannerExtensions).not.toContain(".md") + expect(scannerExtensions).not.toContain(".markdown") + }) +}) diff --git a/src/services/tree-sitter/index.ts b/src/services/tree-sitter/index.ts index c0813e65099..24a7b60fdfd 100644 --- a/src/services/tree-sitter/index.ts +++ b/src/services/tree-sitter/index.ts @@ -46,6 +46,12 @@ const extensions = [ "hpp", // C# "cs", + // Visual Basic .NET + "vb", + // F# + "fs", + "fsx", + "fsi", // Ruby "rb", "java", diff --git a/src/services/tree-sitter/languageParser.ts b/src/services/tree-sitter/languageParser.ts index a8ac0a9ead9..41f52b19f41 100644 --- a/src/services/tree-sitter/languageParser.ts +++ b/src/services/tree-sitter/languageParser.ts @@ -137,6 +137,18 @@ export async function loadRequiredLanguageParsers(filesToParse: string[], source language = await loadLanguage("c_sharp", sourceDirectory) query = new Query(language, csharpQuery) break + case "vb": + // Visual Basic .NET - use C# parser as fallback since VB.NET has similar structure + language = await loadLanguage("c_sharp", sourceDirectory) + query = new Query(language, csharpQuery) + break + case "fs": + case "fsx": + case "fsi": + // F# - use OCaml parser since F# is based on OCaml + language = await loadLanguage("ocaml", sourceDirectory) + query = new Query(language, ocamlQuery) + break case "rb": language = await loadLanguage("ruby", sourceDirectory) query = new Query(language, rubyQuery)