Skip to content

Rust-native moduleResolution repo-local config extends/default handling #447

Description

@jununfly

This was generated by AI during triage.

Parent

  • Roadmap plan: docs/plans/2026-06-22-rust-native-typescript-module-resolution-roadmap.md
  • Config interpretation plan: docs/plans/2026-06-22-rust-native-config-interpretation-completion.md
  • Roadmap node: 1-2-2. extends/default handling

What to build

Implement bounded repo-local TypeScript config extends handling for the Rust-native moduleResolution path. The completed slice should load repo-local JSON extends chains, merge only the moduleResolution-related compilerOptions consumed by Rust, preserve the correct path basis for path-bearing fields, and derive bounded defaults for missing options.

Supported extends shapes for this issue: relative paths, repo-local absolute paths, .json suffix completion, and directory completion to tsconfig.json. npm package extends is explicitly out of scope and should be reported with unsupported/no-go taxonomy rather than silently treated as loaded.

Merged fields are limited to moduleResolution, module, baseUrl, paths, rootDirs, allowJs, and resolveJsonModule.

Acceptance criteria

  • Rust config loading supports repo-local JSON extends chains with cycle/depth protection and deterministic fallback/no-go diagnostics.
  • Child config values override base config values for the resolver-owned compilerOptions subset.
  • baseUrl, paths targets, and rootDirs keep the path basis of the config file where each field is declared.
  • Missing moduleResolution is defaulted from module for the bounded supported modes, and the decision/profile surface can distinguish explicit vs defaulted values.
  • Deterministic Rust tests cover positive extends, override behavior, path-basis behavior, defaulting, unsupported npm package extends, and cycle/depth protection.
  • Default graph output remains bounded to repo-local moduleResolution behavior; no TypeScript compiler API runtime dependency is introduced.

Blocked by

None - can start immediately.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestready-for-agentFully specified and ready for an AFK agent

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions