microsoft / TypeScript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
https://www.typescriptlang.org
Apache License 2.0
99.86k stars 12.36k forks source link

Feature request: Make `Program.sourceFileToPackageName` public #53812

Open marekdedic opened 1 year ago

marekdedic commented 1 year ago

Suggestion

🔍 Search Terms

sourceFileToPackageName

✅ Viability Checklist

My suggestion meets these guidelines:

⭐ Suggestion

I would like to request Program.sourceFileToPackageName to be marked as public (or rather, un-marked as internal)

📃 Motivating Example & Use Case

In typescript-eslint, I have recently worked on a way to specify a type including its source (local/package/lib). Well, as part of that, we need to know if a type is declared in a particular package (well, or a corresponding @types package). Currently, this is implemented by just checking the type's declaration files for the node_modules/package_name substring - a rather crude approach.

I stumbled upon Program.sourceFileToPackageName, which as far as I understand is TypeScript doing the same thing - recording the package in which the type was declared, if any. So I would like to use that to prevent any possible discrepancy between TS and typescript-eslint. Additionally, it would solve the problem of not everyone having their dependencies in node_modules - with things like type roots and similar.

Corresponding typescript-eslint issue: typescript-eslint/typescript-eslint#6861

RyanCavanaugh commented 1 year ago

@weswigham @sheetalkamat any concerns?

JoshuaKGoldberg commented 2 months ago

FYI @sheetalkamat - we need this API (or an equivalent) in typescript-eslint to properly support node:test in options for the @typescript-eslint/no-floating-promises rule. The chain of causality is:

...however, now I'm not positive what the right strategy is. If a single .d.ts file has multiple declare modules in it, this might not hold up. Do you have any advice for what we should do here?