* 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!)
62 lines
970 B
Plaintext
62 lines
970 B
Plaintext
=== tests/cases/conformance/salsa/use.js ===
|
|
var ex = require('./ex')
|
|
>ex : typeof ex
|
|
>require('./ex') : typeof ex
|
|
>require : any
|
|
>'./ex' : "./ex"
|
|
|
|
// values work
|
|
var crunch = new ex.Crunch(1);
|
|
>crunch : ex.Crunch
|
|
>new ex.Crunch(1) : ex.Crunch
|
|
>ex.Crunch : typeof ex.Crunch
|
|
>ex : typeof ex
|
|
>Crunch : typeof ex.Crunch
|
|
>1 : 1
|
|
|
|
crunch.n
|
|
>crunch.n : number
|
|
>crunch : ex.Crunch
|
|
>n : number
|
|
|
|
|
|
// types work
|
|
/**
|
|
* @param {ex.Crunch} wrap
|
|
*/
|
|
function f(wrap) {
|
|
>f : (wrap: ex.Crunch) => void
|
|
>wrap : ex.Crunch
|
|
|
|
wrap.n
|
|
>wrap.n : number
|
|
>wrap : ex.Crunch
|
|
>n : number
|
|
}
|
|
|
|
=== tests/cases/conformance/salsa/ex.js ===
|
|
export class Crunch {
|
|
>Crunch : Crunch
|
|
|
|
/** @param {number} n */
|
|
constructor(n) {
|
|
>n : number
|
|
|
|
this.n = n
|
|
>this.n = n : number
|
|
>this.n : any
|
|
>this : this
|
|
>n : any
|
|
>n : number
|
|
}
|
|
m() {
|
|
>m : () => number
|
|
|
|
return this.n
|
|
>this.n : number
|
|
>this : this
|
|
>n : number
|
|
}
|
|
}
|
|
|