* Fix missed errors in switch when using union of literal and non-literal types (#38686)
This commit makes it so we don’t use the base type of literals when checking comparability in switch. The comparability checks handle that case already, is my understanding, so we don’t need to clobber the type before actually doing the check, causing missed errors.
When comparing the types in switch, if a union with a literal and a non-literal was used, the compiler in `checker.ts` would automatically get the base type of all parts of the union, resulting in missed errors. For example, if the union of the non-literal `number` and literal `"hello"` was compared to the literal `"world"` in a switch case, the compiler would miss that they’re actually not comparable.
Maybe someone can tell me why we were getting the base type before checking comparability, rather than relying on the logic within the comparability checks to handle literal/base type comparability?
* Fix lint (whitespace) issue in checker.ts by running lint with fix flag.
* fix services' type's isLiteral
* update literal completions tests
* initial prototype
* use symbol to expression. TODO: filter existing, replace import nodes
* WIP
* WIP
* remove booleans from literals
* trigger at case keyword positions
* clean up tests
* fix element access expression case
* refactor dealing with existing values into a tracker
* fix merge errors
* cleanup and more tests
* fix lint errors
* more merge conflict fixes and cleanup
* use appropriate quotes
* small indentation fix
* refactor case clause tracker
* experiment: support tabstops after each case clause
* address small CR comments
* fix completion entry details; add test case
* fix lint errors
* remove space before tab stops; refactor
* Fixed an issue with `in` not being able to be used on narrowed down expression of a generic nullable type
* Add another test case from a new issue
* Move the fix to `hasEmptyObjectIntersection`
* Refactor `Extensions`, fix lookup priorities
* Update baselines
* Clean up
* Temporarily apply same fix to `node` for testing
* Revert ancestor node_modules lookups back to two passes
* Revert "Temporarily apply same fix to `node` for testing"
This reverts commit 4014f3005a2a01a5c71a88e6418cc635498a83bc.
* Update baselines
* Add new test for node_modules searching behavior
* Update new baseline
* Add known keys of the mapped type constraint to its members
* Avoid second pass of adding known members by instead passing `noReductions` to `mapType`
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.
* Fixed a regression with discriminating unions based on a union property against `undefined` with `strictNullChecks: false`
* Add additional test case from the issue comment
* Fix enum classification and evaluation
* References in literal enums must be to other enum members
* Accept new baselines
* Unify enum types + template literal constant expressions
* Accept new baselines
* Fix fourslash tests
* Fix new compiler errors
* Fix lint error
* Accept new API baselines
* Fix test
* Better error message + consistently check enum initializers
* Accept new baselines
* fix(51301): keep the line break after removing the unused identifier
* preserve line breaks in import specifiers
* preserve line breaks in parameters and destructuring elements
* remove preserveLineBreak option
* fix(50551): handle destructuring variables used before assignment
* skip the error in binding elements that refer to the same destructuring
* fix binding element type