TypeScript/tests/cases/fourslash/renameJsExports03.ts
Nathan Shively-Sanders c3d41bbb73
Alias for commonjs require in JS (#39770)
* First attempt at aliases for require

* test+initial support for const x=require

* 1st round of baseline improvements

* 2nd round of baseline updates

* support property access after require

* check @type tag on require

* forbid expando missing namespaces on aliases

taken from #39558 as soon as it was created

* accept error baselines that are good, actually

* Scribbling on d.ts emit code

* use getSpecifierForModuleSymbol

* hideous hack for module.exports of aliases

* Fix module.exports.x --> export list emit

* fix isLocalImport predicate

* require only creates aliases in JS

* re-handle json imports

* update fourslash baseline

* Cleanup in the checker

1. Simplify alias resolution.
2. Simplify variable-like checking.
3. Make binding skip require calls with type tags -- they fall back to
the old require-call code and then check from there.

I haven't started on the declaration emit code since I don't know what
is going on there nearly as well.

* Function for getting module name from require call

* First round of cleanup plus a new test

Found one missing feature, not sure it's worth adding.

* more small cleanup

* more cleanup, including lint

* use trackSymbol, not serializeTypeForDeclaration

* Code review comments, plus remove unneeded code

Ad-hoc type reference resolution for `require` isn't needed anymore.

* find all refs works

* remove old ad-hoc code

* make it clear that old behaviour is not that correct

* update api baselines

* remove outdated comment

* PR feedback

1. Fix indentation
2. Add comment for exported JSON emit
3. Add test case for nested-namespace exports.

* add a fail-case test (which passes!)
2020-08-17 14:00:37 -07:00

32 lines
1 KiB
TypeScript

/// <reference path='fourslash.ts'/>
// @allowJs: true
// @Filename: a.js
////[|class [|{| "isWriteAccess": true, "isDefinition": true, "contextRangeIndex": 0 |}A|] {
//// [|[|{| "contextRangeIndex": 2, "isDefinition": true |}constructor|]() { }|]
////}|]
////[|module.exports = [|{| "contextRangeIndex": 4 |}A|];|]
// @Filename: b.js
////[|const [|{| "isWriteAccess": true, "isDefinition": true, "contextRangeIndex": 6 |}A|] = require("./a");|]
////new [|A|];
const [r0Def, r0, r1Def, r1, r2Def, r2, r3Def, r3, r4] = test.ranges();
verify.referenceGroups([r0, r2], [
{ definition: "class A", ranges: [r0, r2] },
{ definition: "(alias) class A\nimport A", ranges: [r3, r4] }
]);
verify.referenceGroups(r1, [
{ definition: "class A", ranges: [r1] },
{ definition: "(alias) class A\nimport A", ranges: [r4] }
]);
verify.referenceGroups(r3, [
{ definition: "(alias) class A\nimport A", ranges: [r3, r4] }
]);
verify.referenceGroups(r4, [
{ definition: "(alias) class A\nimport A", ranges: [r3, r4] }
]);