34013 Commits

Author SHA1 Message Date
Ron Buckton
e67b06e909
Simplistic watch mode for runtests (#51461)
* Simplistic watch mode for runtests

* Use esbuild WatchMode object for testRunner updates

* switch AbortController to CancelToken
2022-11-09 15:07:08 -05:00
Sheetal Nandi
6e0a62e8dd
Detangle unittests to reference helpers directly (#51450)
* Remove unnecessary redirection now that we are not in namespaces

* Move the tsc helpers in one place

* Move virtual file system with watch in unittests folder instead of harness since harness doesnt use it anyways

* Replace protocol and commandNames

* Revert incorrect pick
2022-11-09 10:02:40 -08:00
Jake Bailey
19091abda1
Fix missing awaits in Herebyfile (#51465) 2022-11-09 08:00:58 -08:00
Jake Bailey
0993c017ba
Fix JSDoc eslint rule for properties and methods (#51462) 2022-11-08 16:35:10 -08:00
Jake Bailey
d237468cda
Add --no-typecheck option for runtests/runtests-parallel/min/local (#51460) 2022-11-08 15:39:04 -08:00
Jake Bailey
1b35985f4f
Fix --bundle=false on Windows (#51459) 2022-11-08 15:20:22 -08:00
Jake Bailey
b4715d3891
Replace eslint-plugin-jsdoc by extending local jsdoc-format rule, saving ~20% of our linting time (#51438) 2022-11-08 13:59:48 -08:00
Jake Bailey
6a3b4991f0
Remove leftover todo from mjs/cjs transition (#51453) 2022-11-08 12:23:30 -08:00
Jake Bailey
555d174c46
Bump volta/packageManager in package.json (#51445) 2022-11-08 07:50:27 -08:00
TypeScript Bot
437b2690ed Update package-lock.json 2022-11-08 06:07:08 +00:00
Jake Bailey
20a04633f6
Depend on build-src in runtests (#51436) 2022-11-07 17:19:15 -08:00
Mateusz Burzyński
39ccac654c
Add known keys of the mapped type constraint to its members (#50081)
* Add known keys of the mapped type constraint to its members

* Avoid second pass of adding known members by instead passing `noReductions` to `mapType`
2022-11-07 16:22:27 -08:00
Sheetal Nandi
48aebcdcdb
TypeReference directive reuse (#49750) 2022-11-07 15:15:11 -08:00
Jake Bailey
1d96eb489e
Merge pull request #51387 from jakebailey/typeformer-2
Closes https://github.com/microsoft/TypeScript/issues/35210
Closes https://github.com/microsoft/TypeScript/issues/39247
Closes https://github.com/microsoft/TypeScript/issues/49037
Closes https://github.com/microsoft/TypeScript/issues/49332
Closes https://github.com/microsoft/TypeScript/issues/50758
2022-11-07 13:57:46 -08:00
Jake Bailey
da6f0671ae Remove dynamicImport and setDynamicImport
It turns out that the import expression won't actally be rewritten by
esbuild, so we can just write it directly.

While this won't help CJS emit, that already didn't work anyway, and
it's likely that this code is going to be moved outside of the codebase
into VS Code or a shared package elsewhere anyway.
2022-11-07 13:36:22 -08:00
Jake Bailey
7988e40590 Remove outFiles from launch.json
The troubleshooting wizard for the debugger actually says that this
option is no longer recommended; removing it enables us to use source
maps if we happen to be debugging while in --bundle=false mode.
2022-11-07 13:36:22 -08:00
Jake Bailey
8edbf8d46c Disable slow CodeQL queries
See issue 10937 on github.com/github/codeql.
2022-11-07 13:36:22 -08:00
Jake Bailey
b9e24eed8f Remove globalThisShim and globalThis modification for TypeScriptServicesFactory
Looking at github, sourcegraph, and internally, nobody appears to use
this factory at all.

It's still used within our testing framework, so I won't remove it, but
we shouldn't be polyfilling globalThis and sticking things onto it these
days.
2022-11-07 13:36:22 -08:00
Jake Bailey
43cf7875b3 Remove Promise redeclaration
Now that we target ES2018, we don't need to declare this ourselves.
2022-11-07 13:36:22 -08:00
Jake Bailey
25a85d1faa Move compiler-debug into Debug namespace, which allows the compiler to be tree shaken
This debug code was added quite a while ago, constructed such that we
wouldn't have to ship this code to our users.

However, this is the sole place in the compiler project where the ts
namespace "escapes" the bundle. By moving this debug code into the
compiler itself, we no longer have any references to the ts namespace
itself for our bundles that don't export anything (tsc,
typingsInstaller). This lets bundlers tree shake the compiler, reducing
the size of our output by _5.7 MB_ (a ridiculous improvement for
_adding_ code).
2022-11-07 13:36:22 -08:00
Jake Bailey
c5a9573787 Ensure ts object passed to plugins contains deprecatedCompat declarations
We pass the entire "ts" object into plugins. However, we need to make
sure that that object contains the debug compat helpers.

In the old codebase, the deprecated compat code would tack things onto
the actual ts object, after the server code was executed, and later that
same object would be given to plugins.

But in modules, each TS project only sees the view of the "ts" namespace
that their references implied, not the ts object as some sort of
singleton. To ensure that plugins get the debug compat code, we have to
bring that into each project's view of the ts namespace, and not add it
on later in the executable projects.
2022-11-07 13:36:08 -08:00
Jake Bailey
db440d8468 Directly import namespaces for improved esbuild output
I should report this upstream, if I can manage to minimize this.
2022-11-07 13:36:08 -08:00
Jake Bailey
8486229625 Export ts namespace from tsserver for hacky-post patching
Unlike our other exectuables, tsserver is used in web, which means that
there actually would have been a "ts" variable declared for those users
(e.g. in a web worker). It looks like VS Code needs this variable to be
declared, so change this bundle to look the same as other libraries.

Note that in Node, the IIFE will never actually return, so this can have
no effect. On web, it will return in order to yield control back to the
event loop (as on web, postMessage is used to communicate).
2022-11-07 13:35:48 -08:00
Jake Bailey
acfe7ac6d2 Remove mkdirp
If our build scripts target Node 10+, we can use the builtin mkdir
function in recursive mode instead.
2022-11-07 13:35:48 -08:00
Jake Bailey
bbc906dea3 Don't use needsUpdate for quick tasks
needsUpdate may be wrong when the branch changes; these ones are now so
fast thanks to being pure JS that we can just always run their contents
and be sure that the outputs are right.
2022-11-07 13:35:48 -08:00
Jake Bailey
aec2761d31 Modernize localize script, use new XML library
This file is pretty much the same as it was when it was committed in
2017; these days, we can write clearer code with async/await and new FS
APIs.

Additionally, we can improve the performance of this script by using a
newer/faster/maintained XML library. This will enable us to run the
script unconditionally in a later commit.
2022-11-07 13:35:48 -08:00
Jake Bailey
394c4ae68b Use jsonc-parser instead of LKG compiler in build
Profiling the build roughly half of the time spent loading the
build is spent importing typescript.js, for this one function.

Since this stack is already adding required devDependencies, switch
readJson to use jsonc-parser (published by the VS Code team), rather
than importing the entire LKG typescript.js library.
2022-11-07 13:35:48 -08:00
Jake Bailey
d0db80e5c1 Update baselines for corrected line endings in lib files
The old gulpfile produced lib.d.ts files with mixed newlines, thanks to
the files containing CRLF, but the gulp streams adding in LF.

Now they're all LF, which matches every other file in built / lib, but
our baselines are sensitive to this. Rerun the tests and accept them.
2022-11-07 13:35:48 -08:00
Jake Bailey
3cd72e76b2 Change build system to hereby
This eliminates a significant number of dependencies, eliminating all
npm audit issues, speeding up `npm ci` by 20%, and overall making the
build faster (faster startup, direct code is faster than streams, etc)
and clearer to understand.

I'm finding it much easier to make build changes for the module
transform with this; I can more clearly indicate task dependencies and
prevent running tasks that don't need to be run.

Given we're changing our build process entirely (new deps, new steps),
it seems like this is a good time to change things up.
2022-11-07 13:35:48 -08:00
Jake Bailey
f45cc4578e Rename Gulpfile to Herebyfile for improved git diff
The next commit will switch the build system, but git doesn't detect
that the two config files are related.
2022-11-07 13:35:48 -08:00
Jake Bailey
776907cd4d Add ts to globalThis in run.js for convenience during debugging
In namespaces, we'd have access to a variable named "ts" when debugging,
because that was just the ts namespace in the current file. But when
modules, that variable doesn't exist, either because we are pure modules
(so no ts variable), or named something else (when bundled, for export).

Tack a "ts" object onto the globals, which should make this easier. Of
course, someone may eventually declare a variable in the top level scope
named "ts" and break this, but we can cross that bridge when we come to
it.
2022-11-07 13:35:48 -08:00
Jake Bailey
dc92488da8 Consolidate checks that test if the current environment is Node
When bundled, it's very likely that the function "require" will actually
exist at runtime, so we can't use this to determine if we are running in
Node. Consolidate that logic and use other things to check instead.

This is still not perfectly accurate, but I don't want to change this
_too_ much, lest someone downstream depend on our inconsistent logic.

There are yet other places this commit does not fix; search for "typeof
process" for more examples.
2022-11-07 13:35:48 -08:00
Jake Bailey
c65142244c Add dts bundling
This adds a "small" d.ts bundler script. This script is very basic,
using Node printing to produce its output. Generally speaking, this is
inadvisable as it completely disregards name shadowing, globals, etc.
However, in our case, we don't care about the globals, and we can opt to
restructure our codebase in order to avoid conflict, which we largely
had to do anyway when we were namespaces and everything was in scope.
2022-11-07 13:35:48 -08:00
Jake Bailey
4139807e75 Add build via esbuild
This configures the existing build tasks to use esbuild by default. If
using the plain files is desired, passing `--bundle=false` will build
using plain files and still produce a runnable system.

This is only a basic build; a more efficient build is provided later
when gulp is replaced by hereby.
2022-11-07 13:34:44 -08:00
Jake Bailey
36e29448e9 Get codebase building pre bundling
This isn't totally complete, but enough to get everything building and
tests running manually. The next commit will make the build work fully.
2022-11-07 13:34:44 -08:00
Jake Bailey
6dfa4299d7 Remove typescriptServices, protocol.d.ts, typescript_standalone.d.ts
This is the same as TypeScript PR 51026.
2022-11-07 13:34:44 -08:00
Jake Bailey
01e5200096 Convert require calls to imports
Although the existing require calls would work fine, it's more
consistent to make them actual imports and let them be converted at
compile/bundle time. It also lets us emit ESM if needed.

There are still conditional requires present for things like the node
System, but that's a more difficult problem to solve.
2022-11-07 13:34:44 -08:00
Jake Bailey
d12116d8da Fix all internal JSDoc comments
If these are regular comments, then they won't appear in our d.ts files.
But, now we are relying on an external d.ts bundler to produce our final
merged, so they need to be present in the "input" d.ts files, meaning
they have to be JSDoc comments.

These comments only work today because all of our builds load their TS
files from scratch, so they see the actual source files and their
non-JSDoc comments.

The comments also need to be attached to a declaration, not floating,
otherwise they won't be used by api-extractor, so move them if needed.
2022-11-07 13:34:44 -08:00
Jake Bailey
231fa27f89 Add JSDoc eslint rule
See the next commit for a more fleshed-out description.
2022-11-07 13:33:08 -08:00
Jake Bailey
8bd5e54af3 Undo changes needed to load codebase into ts-morph 2022-11-07 13:33:08 -08:00
Jake Bailey
39e27fbb6b Fix up linting, make lint clean
Now that we are modules, there's no reason to ban multiple namespaces
per file; each file is its own scope and declaring a namespace won't
merge it into any other files.
2022-11-07 13:33:07 -08:00
Jake Bailey
180554c99e Make processDiagnosticMessages generate a module 2022-11-07 13:33:07 -08:00
Jake Bailey
d5274a9f4a Add gitlens settings suggestion
While GitHub automatically uses this file if present, GitLens in VS Code
does not. Add the right option to our example settings.json for those
who use the extension.

Unfortunately, you can't leave this enabled if you want to look at the
repo _without_ the file; git blame just crashes when the file isn't
present. I'm not sure that there's a workaround for that.
2022-11-07 13:33:07 -08:00
Jake Bailey
5f5ccc9df3 Generated module conversion step - .git-ignore-blame-revs 2022-11-07 13:33:07 -08:00
Jake Bailey
07758c08ab Generated module conversion step - inlineImports
This step converts as many explicit accesses as possible in favor of direct imports from the modules in which things were declared. This restores the code (as much as possible) back to how it looked originally before the explicitify step, e.g. instead of "ts.Node" and "ts.Symbol", we have just "Node" and "Symbol".
2022-11-07 13:33:07 -08:00
Jake Bailey
b6c0538826 Generated module conversion step - stripNamespaces
This step converts each file into an exported module by hoisting the namespace bodies into the global scope and transferring internal markers down onto declarations as needed.

The namespaces are reconstructed as "barrel"-style modules, which are identical to the old namespace objects in structure. These reconstructed namespaces are then imported in the newly module-ified files, making existing expressions like "ts." valid.
2022-11-07 13:32:03 -08:00
Jake Bailey
9a0b85ce2a Generated module conversion step - explicitify
This step makes all implicit namespace accesses explicit, e.g. "Node" turns into "ts.Node".
2022-11-07 13:29:05 -08:00
Jake Bailey
94724a8c2e Generated module conversion step - unindent
This step makes further commits look clearer by unindenting all of the top level namespaces preemptively.
2022-11-07 13:28:13 -08:00
Jake Bailey
7698653c64 Explicitly reference ts namespace in tsserverlibrary 2022-11-07 13:27:19 -08:00
Jake Bailey
df89c7457d Make a few changes to allow all code to be loaded as one project 2022-11-07 13:27:19 -08:00