Switches simple patterns like:
```ts
if (some.thing) {
some.thing.method();
}
```
to:
```ts
some.thing?.method()
```
This is more concise and avoids having to repeat the `some.thing` part
* variables: allow resolving `extensionDir`
This allows us to fix https://github.com/microsoft/vscode-remote-release/issues/5516#issuecomment-911597917
It enables a new replacement in the format `${extensionDir:<id>}` which
will expand to the filesystem path where the extension is stored. This
involved churn, since now resolution is always synchronous (where before
the terminal took a synchronous-only path.)
Additionally, changes were needed to inject this information in the
variable resolver. As part of this I made the extension host resolver
(used by debug and tasks) its own extension host service.
* fixup! preserve object key order in resolution, add extensionDir support
* fixup! address pr comments
* fixup! address pr comments
* fixup! address pr comments
* config: fix config replacement only working for first variable per line
* fixup! fix unit tests
* Change shape of the tabs API
* Disable tab tests for now
* Add an onDidChangeTabGroup event
* Optimize for group activate
* Update events to no longer be an array
* Further tab optimization
* Implement simple debug UI mode
* Don't show debug viewlet on step
* Move flag to proposed
* Pass around full debugUI options object
* Implement isSimpleUI in mock
I recently ran into an issue where I was trying to call showQuickPick with a readonly array. This is currently not allowed, even though `showQuickPick` never mutates the input
This change marks a few places in `vscode.d.ts` where we take arrays as parameters as `readonly []`. It also caught a potential bug with`getSession` modifying the input array
Config variables cannot define a workspace folder, but resolution was using `getFolderUri` and failing when undefined, even though `getConfigurationValue` implementations have logic to handle it. This PR changes the logic to simply forward folderUri to `getConfigurationValue`, which can be undefined.
TS 3.9 is smarter about catching cases where an if statement is always true. This revealed a few places in our codebase where we were checking to see if a function property exists before calling it, but the property is not nullable