Skip to content

On TypeScript 7, Call hierarchy shows a full absolute path instead of file name + relative path #64097

Description

@brian-xu-vlt

🔎 Search Terms

"call hierarchy"
"function call hierarchy files"
"call hierarchy file path"
"absolute path"
"full file path"

Found: Possibly related #36511 — same symptom, reported in 2020 and closed as fixed.

🕗 Version & Regression Information

  • Work as expected on 6.0.3: TypeScript and JavaScript Language Features (built-in)
  • Bug on TypeScriptTeam.native-preview 0.20260226.1 (first version with Call Hierarchy support)
  • Bug on TypeScriptTeam.native-preview 0.20260708.2 (latest)

⏯ Playground Link

https://github.com/brian-xu-vlt/typescript-hierarchy-repro

💻 Code

Important

I provided a repository above because the playground does not seem to support show call hierarchy on a symbol in order to reproduce the bug, but below is the playground code form the provided repository in case it helps

callers.ts

import { targetFunction } from "./target.js";

export const levelOne = (value: number): number => {
  return targetFunction(value);
};

function levelTwo(value: number): number {
  return levelOne(value);
}

const { levelThree } = {
  levelThree: (value: number): number => {
    return levelTwo(value);
  },
};

const levelFour = (value: number): void => {
  console.log(levelThree(42));
};

target.ts

export function targetFunction(value: number): number {
  return value * 2;
}

🙁 Actual behavior

Steps to reproduce

  1. Clone this repo (https://github.com/brian-xu-vlt/typescript-hierarchy-repro) and run pnpm install.
  2. Open src/target.ts.
  3. On targetFunction (line 1) Run Show Call Hierarchy (Shift+Alt+H) and expand the incoming calls
    down to the last level.
    🚨 → See the issue: The hierarchy is targetFunctionlevelOnelevelTwo, then a node for the
    containing file with a full path. That last node is where the two TS versions differ.
Image

🙂 Expected behavior

The file node is labelled the way TypeScript 6 labels it: the file name, with
the path relative to the workspace shown as the secondary detail.

Image

Additional information about the issue

Real life issue

For a simple call the issue is benign, but in real monorepos, a list of many absolute paths make it very hard to navigate the call hierarchy.

Image

Language server likely not the root cause

The reproduction repository contains a simple script to show tsserver and TypeScript 7 LSP server produce the same value, meaning the issue is quite likely to come from TypeScriptTeam.native-preview

Show to run

# with typescript 6.0.3 installed, over the tsserver JSON protocol
node tools/callhierarchy.mjs ./src/target.ts targetFunction --depth 10 --engine tsserver

# with typescript 7.0.2 installed, over LSP
node tools/callhierarchy.mjs ./src/target.ts targetFunction --depth 10 --engine lsp

Result for TS6 and TS7

Image

Metadata

Metadata

Labels

BugA bug in TypeScript

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions