Skip to content

Commit ab0e2df

Browse files
committed
make navtree use the same sourcefile as native impl
1 parent f0978f6 commit ab0e2df

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

typescript/src/decorateProxy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ export const decorateLanguageService = (
172172
// so we forced to communicate via fs
173173
const config = JSON.parse(ts.sys.readFile(require('path').join(__dirname, '../../plugin-config.json'), 'utf8') ?? '{}')
174174
proxy.getNavigationTree = fileName => {
175-
if (c('patchOutline') || config.patchOutline) return getNavTreeItems(info, fileName, config.outline)
175+
if (c('patchOutline') || config.patchOutline) return getNavTreeItems(languageService, languageServiceHost, fileName, config.outline)
176176
return languageService.getNavigationTree(fileName)
177177
}
178178
}

typescript/src/getPatchedNavTree.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,13 +160,17 @@ const getPatchedNavModule = (additionalFeatures: AdditionalFeatures): { getNavig
160160

161161
let navModule: { getNavigationTree: any }
162162

163-
export const getNavTreeItems = (info: ts.server.PluginCreateInfo, fileName: string, additionalFeatures: AdditionalFeatures) => {
163+
export const getNavTreeItems = (
164+
languageService: ts.LanguageService,
165+
languageServiceHost: ts.LanguageServiceHost,
166+
fileName: string,
167+
additionalFeatures: AdditionalFeatures,
168+
) => {
164169
if (!navModule) navModule = getPatchedNavModule(additionalFeatures)
165-
const program = info.languageService.getProgram()
166-
if (!program) throw new Error('no program')
167-
// sourceFile is unreliable to use here, as it's not the same as the one used within original getNavigationTree
168-
const sourceFile = program?.getSourceFile(fileName)
170+
const sourceFile =
171+
(languageService as import('typescript-full').LanguageService).getNonBoundSourceFile?.(fileName) ??
172+
languageService.getProgram()!.getSourceFile(fileName)
169173
if (!sourceFile) throw new Error('no sourceFile')
170174

171-
return navModule.getNavigationTree(sourceFile, getCancellationToken(info.languageServiceHost))
175+
return navModule.getNavigationTree(sourceFile, getCancellationToken(languageServiceHost))
172176
}

typescript/test/other.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ test('Patched navtree (outline)', () => {
5757
</Notification>
5858
}
5959
`)
60-
const navTreeItems: ts.NavigationTree = getNavTreeItems({ languageService, languageServiceHost: {} } as any, entrypoint, {
60+
const navTreeItems: ts.NavigationTree = getNavTreeItems(languageService, {} as any, entrypoint, {
6161
arraysTuplesNumberedItems: false,
6262
})
6363
const simplify = (items: ts.NavigationTree[]) => {

0 commit comments

Comments
 (0)