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 targetFunction β†’ levelOne β†’ levelTwo, 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

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions