feat: filter IDE reference candidates

This commit is contained in:
2026-08-17 13:55:12 +08:00
parent 35163e12b4
commit 0ff9477b5d
10 changed files with 138 additions and 15 deletions
+61
View File
@@ -63,4 +63,65 @@ describe('combineSnapshots', () => {
expect(combineSnapshots([parsed], 'main', 1).items).toHaveLength(1)
expect(combineSnapshots([parsed], 'main', 10).total).toBe(2)
})
it('excludes Visual Studio project and solution files by default', () => {
const parsed = parseSnapshot(snapshot('F:\\project\\main.cs', {
documents: [
{ path: 'F:\\project\\main.cs', label: 'main.cs', dirty: false },
{ path: 'F:\\project\\app.csproj', label: 'app.csproj', dirty: false },
{ path: 'F:\\project\\library.fsproj', label: 'library.fsproj', dirty: false },
{ path: 'F:\\project\\tools.vbproj', label: 'tools.vbproj', dirty: false },
{ path: 'F:\\project\\native.vcxproj', label: 'native.vcxproj', dirty: false },
{ path: 'F:\\project\\legacy.vsproj', label: 'legacy.vsproj', dirty: false },
{ path: 'F:\\project\\app.sln', label: 'app.sln', dirty: false },
{ path: 'F:\\project\\app.slnx', label: 'app.slnx', dirty: false },
],
}), now)!
expect(combineSnapshots([parsed]).items.map((item) => item.label)).toEqual(['main.cs'])
})
it('matches configured extensions without case sensitivity', () => {
const parsed = parseSnapshot(snapshot('F:\\project\\main.cs', {
documents: [
{ path: 'F:\\project\\main.cs', label: 'main.cs', dirty: false },
{ path: 'F:\\project\\APP.CSPROJ', label: 'APP.CSPROJ', dirty: false },
],
}), now)!
expect(combineSnapshots([parsed], '', 100, ['.csproj']).items.map((item) => item.label)).toEqual(['main.cs'])
})
it('accepts configured extensions without a leading dot', () => {
const parsed = parseSnapshot(snapshot('F:\\project\\main.cs', {
documents: [
{ path: 'F:\\project\\main.cs', label: 'main.cs', dirty: false },
{ path: 'F:\\project\\app.slnx', label: 'app.slnx', dirty: false },
],
}), now)!
expect(combineSnapshots([parsed], '', 100, ['slnx']).items.map((item) => item.label)).toEqual(['main.cs'])
})
it('disables filtering when excludedExtensions is empty', () => {
const parsed = parseSnapshot(snapshot('F:\\project\\main.cs', {
documents: [
{ path: 'F:\\project\\main.cs', label: 'main.cs', dirty: false },
{ path: 'F:\\project\\app.csproj', label: 'app.csproj', dirty: false },
],
}), now)!
expect(combineSnapshots([parsed], '', 100, []).total).toBe(2)
})
it('reports the filtered document count for each instance', () => {
const parsed = parseSnapshot(snapshot('F:\\project\\main.cs', {
documents: [
{ path: 'F:\\project\\main.cs', label: 'main.cs', dirty: false },
{ path: 'F:\\project\\app.csproj', label: 'app.csproj', dirty: false },
],
}), now)!
expect(combineSnapshots([parsed]).items[0]?.instanceOpenCount).toBe(1)
})
})