164dddc48e
feat(7481): Operator to ensure an expression is contextually typed by, and satisfies, some type ( #46827 )
...
* feat(7481): add explicit type compatibility check with 'satisfies' expression
* Add failing test for lack of intersectioned contextual type
* Implement the behavior
* Add test corresponding to the 'if'
* Add test based on defined scenarios
* remove isExpression in favor of using type casting
* move tests from compiler to conformance folder
* update baseline
* add missing contextFlags argument
* use asserted type
* accept baseline
Co-authored-by: Ryan Cavanaugh <ryanca@microsoft.com >
2022-08-26 10:05:52 -07:00
Andrew Branch and GitHub
38076df346
Fix auto import crash due to difference in paths handling ( #50419 )
2022-08-25 13:02:48 -07:00
Oleksandr T and GitHub
12eb519b3f
fix(50435): Duplicate seeming Code Actions for convert const to let ( #50442 )
...
* fix(50435): omit fix all in constToLet QF
* add FixAll action
2022-08-25 13:01:46 -07:00
a08b045d2b
Jsdoc property description ( #50269 )
...
* jsdocPropertyDescription
* jsdocPropertyDescription
* jsdocPropertyDescription
* Fixes #47933
* added additional test
* added additional example
* fixed bug
* changed function to only grab the literal type
* added additional condition for literals and symbols
* added additional test cases
* Update src/services/symbolDisplay.ts
Co-authored-by: Andrew Branch <andrewbranch@users.noreply.github.com >
* addressed PR review
* addressed new PR review
Co-authored-by: Danay Fernandez Alfonso <t-danayf@microsoft.com >
Co-authored-by: Andrew Branch <andrewbranch@users.noreply.github.com >
2022-08-25 11:57:32 -07:00
Oleksandr T and GitHub
8d7ad8c3ae
fix(50375): Errors for missing enum-named properties should attempt to preserve names ( #50382 )
...
* fix(50375): preserve enum-named properties
* add AllowComputedPropertyEnums option
* use bit shifting
* rename AllowComputedPropertyEnum -> WriteComputedProps
* mark WriteComputedProps as internal
* mark symbolToNode as internal
2022-08-24 11:54:44 -07:00
Daniel Rosenwasser and GitHub
fb717df6bf
Discard union types before considering weak type checks on unit-like types ( #50423 )
...
* Only check isUnitType when dealing with non-unions.
* Add test case.
* Accepted baselines.
2022-08-24 11:39:00 -07:00
Sheetal Nandi and GitHub
b9a5bbc9af
Syntax operations also need to ensure project is present for the open script infos since update could be pending to make sure open script info has project ( #50418 )
...
Also convert one relevant test case to baseline
Fixes #50131
2022-08-24 10:28:23 -07:00
Oleksandr T and GitHub
44ce3cff70
fix(50224): Intellisense for strings within a type's Union doesn't work properly for JSX ( #50231 )
...
* fix(50224): show string literal completions in JsxAttributeInitializer
* add feedback changes
2022-08-23 14:59:10 -07:00
Daniel Rosenwasser and GitHub
4605d89064
Use a mapped type to enforce type-safety on forEachChild. ( #50409 )
2022-08-22 17:30:44 -07:00
Jake Bailey and GitHub
6362fb2dce
Replace eslint rulesdir with eslint-plugin-local, convert eslint rules to JS ( #50380 )
2022-08-22 13:46:03 -07:00
Ron Buckton and GitHub
aaa4f9d9ff
Make canHaveModifiers/Decorators public ( #50399 )
2022-08-22 15:01:17 -04:00
Daniel Rosenwasser and GitHub
76357ba802
Swap forEachChild to use a table of functions instead of a switch statement. ( #50225 )
...
* Swap `forEachChild` to use an array of functions instead of a `switch` statement.
* Let's see if 'new' changes anything.
* Co-locate each assignment into `forEachChildTable`.
* Try `push`ing undefined to create a packed Array.
* Try using an unconditional no-op function.
* `forEach` -> `forEachChildIn`
* Remove the optional chain if we are pre-filling with no-ops.
* Grab function directly to avoid possible `.call` overhead from downlevel emit.
* Swap to object literal.
* Lints and formatting.
2022-08-21 17:48:45 -07:00
Alex Hsu and GitHub
38e91fb120
LEGO: Merge pull request 50389
...
LEGO: Merge pull request 50389
2022-08-21 03:07:27 -07:00
Ron Buckton and GitHub
284837d66b
Fixes for decorators property deprecations ( #50343 )
...
* Change type of deprecated 'decorators' property
* fix 'Invalid Arguments' error for create/update constructor in factory
* Update deprecation comments
* Make 'decorators' optional and 'undefined'
* Rename '_decorators' to 'illegalDecorators'
* Update baselines
2022-08-19 14:27:26 -04:00
Oleksandr T and GitHub
5969ae9ef7
fix(50075): do not strip undefined from the function class properties ( #50169 )
2022-08-19 09:34:42 -07:00
Wesley Wigham and GitHub
05d7d6bb12
Unify default import resolution across specifier target codepaths ( #49814 )
...
* Unify default import resolution across specifier target codepaths
* Use differing type aliases, per request
2022-08-19 02:25:41 -07:00
Sheetal Nandi and GitHub
1f0f7c8246
If resolvedFileName differs with realPath only in casing use the resolvedFileName before realpath so that errors can be reported with forceConsistentCasingInFileNames ( #50364 )
...
* Add tests when realpath supresses the casing error
* Fix when real path results in value that differs only in case
Fixes #49470
* Comment
2022-08-18 14:51:46 -07:00
Kyℓe Hensel and GitHub
ea36fb3d5f
mark Intl.LocalesArgument as readonly ( #50135 )
2022-08-18 14:38:41 -07:00
Ron Buckton and GitHub
1592210673
Add a jump-table for visitEachChild ( #50266 )
...
* Add a jump-table for visitEachChild
* Name each visitor function for better stack traces
* Fix node tests and some minor cleanup
2022-08-18 15:03:17 -04:00
Daniel Rosenwasser and GitHub
7bafbeae90
Add fourslash function for validating syntactic classification ( #50362 )
2022-08-18 11:28:08 -07:00
Alex Hsu and GitHub
42165a183a
LEGO: Merge pull request 50353
...
LEGO: Merge pull request 50353
2022-08-18 03:12:12 -07:00
Alex Hsu and GitHub
15f7b6f687
LEGO: Merge pull request 50337
...
LEGO: Merge pull request 50337
2022-08-17 03:02:07 -07:00
3b80ddca21
fix first match in RegExpMatchArray being possibly undefined when noUncheckedIndexedAccess is enabled ( #49682 )
...
* fix first match in `RegExpMatchArray` being possibly undefined when `noUncheckedIndexedAccess` is enabled
* fix tests
* add test
Co-authored-by: DetachHead <detachhead@users.noreply.github.com >
Co-authored-by: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com >
2022-08-16 10:12:12 -07:00
Andrew Branch and GitHub
330e33cdda
Ignore related info in diagnostic deduplication ( #50309 )
...
* Ignore related info in diagnostic deduplication
* Add another test
2022-08-16 09:28:59 -07:00
f24f74eb89
🔨 Fix missing "Implement interface" code fix for mapped types with implicit keyof T in their definition ( #49999 )
...
* ⚗️ Add test to verify code fix works when implementing a mapped type with indirect keyof
Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com >
* 🔨 Add property as implementation for symbols that has no declaration
Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com >
diff --git a/src/services/codefixes/helpers.ts b/src/services/codefixes/helpers.ts
index 94b64e57..a4c11fd5 100644
--- a/src/services/codefixes/helpers.ts
+++ b/src/services/codefixes/helpers.ts
@@ -60,21 +60,19 @@ namespace ts.codefix {
isAmbient = false,
): void {
const declarations = symbol.getDeclarations();
- if (!(declarations && declarations.length)) {
- return undefined;
- }
+ const declaration = declarations ? declarations[0] : undefined;
const checker = context.program.getTypeChecker();
const scriptTarget = getEmitScriptTarget(context.program.getCompilerOptions());
- const declaration = declarations[0];
+ const kind = declaration?.kind ?? SyntaxKind.PropertySignature;
const name = getSynthesizedDeepClone(getNameOfDeclaration(declaration), /*includeTrivia*/ false) as PropertyName;
- const visibilityModifier = createVisibilityModifier(getEffectiveModifierFlags(declaration));
+ const visibilityModifier = createVisibilityModifier(declaration ? getEffectiveModifierFlags(declaration) : ModifierFlags.None);
const modifiers = visibilityModifier ? factory.createNodeArray([visibilityModifier]) : undefined;
const type = checker.getWidenedType(checker.getTypeOfSymbolAtLocation(symbol, enclosingDeclaration));
const optional = !!(symbol.flags & SymbolFlags.Optional);
const ambient = !!(enclosingDeclaration.flags & NodeFlags.Ambient) || isAmbient;
const quotePreference = getQuotePreference(sourceFile, preferences);
- switch (declaration.kind) {
+ switch (kind) {
case SyntaxKind.PropertySignature:
case SyntaxKind.PropertyDeclaration:
const flags = quotePreference === QuotePreference.Single ? NodeBuilderFlags.UseSingleQuotesForStringLiteralType : undefined;
@@ -88,13 +86,16 @@ namespace ts.codefix {
}
addClassElement(factory.createPropertyDeclaration(
modifiers,
- name,
+ declaration ? name : symbol.getName(),
optional && (preserveOptional & PreserveOptionalFlags.Property) ? factory.createToken(SyntaxKind.QuestionToken) : undefined,
typeNode,
/*initializer*/ undefined));
break;
case SyntaxKind.GetAccessor:
case SyntaxKind.SetAccessor: {
+ if (!declarations) {
+ break;
+ }
let typeNode = checker.typeToTypeNode(type, enclosingDeclaration, /*flags*/ undefined, getNoopSymbolTrackerWithResolver(context));
const allAccessors = getAllAccessorDeclarations(declarations, declaration as AccessorDeclaration);
const orderedAccessors = allAccessors.secondAccessor
@@ -138,6 +139,10 @@ namespace ts.codefix {
// If there is more than one overload but no implementation signature
// (eg: an abstract method or interface declaration), there is a 1-1
// correspondence of declarations and signatures.
+ if (!declarations) {
+ break;
+ }
+
const signatures = checker.getSignaturesOfType(type, SignatureKind.Call);
if (!some(signatures)) {
break;
* 🔨 Improve code readability
Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com >
diff --git a/src/services/codefixes/helpers.ts b/src/services/codefixes/helpers.ts
index 2f5c8703ab..aea0206a8a 100644
--- a/src/services/codefixes/helpers.ts
+++ b/src/services/codefixes/helpers.ts
@@ -60,7 +60,7 @@ namespace ts.codefix {
isAmbient = false,
): void {
const declarations = symbol.getDeclarations();
- const declaration = declarations ? declarations[0] : undefined;
+ const declaration = declarations?.[0];
const checker = context.program.getTypeChecker();
const scriptTarget = getEmitScriptTarget(context.program.getCompilerOptions());
const kind = declaration?.kind ?? SyntaxKind.PropertySignature;
@@ -93,9 +93,7 @@ namespace ts.codefix {
break;
case SyntaxKind.GetAccessor:
case SyntaxKind.SetAccessor: {
- if (!declarations) {
- break;
- }
+ Debug.assertIsDefined(declarations);
let typeNode = checker.typeToTypeNode(type, enclosingDeclaration, /*flags*/ undefined, getNoopSymbolTrackerWithResolver(context));
const allAccessors = getAllAccessorDeclarations(declarations, declaration as AccessorDeclaration);
const orderedAccessors = allAccessors.secondAccessor
@@ -139,10 +137,7 @@ namespace ts.codefix {
// If there is more than one overload but no implementation signature
// (eg: an abstract method or interface declaration), there is a 1-1
// correspondence of declarations and signatures.
- if (!declarations) {
- break;
- }
-
+ Debug.assertIsDefined(declarations);
const signatures = type.isUnion() ? flatMap(type.types, t => t.getCallSignatures()) : type.getCallSignatures();
if (!some(signatures)) {
break;
* 📜 Add comment regarding mapped type children's missing declaration
Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com >
Signed-off-by: Babak K. Shandiz <babak.k.shandiz@gmail.com >
Co-authored-by: Andrew Branch <andrew@wheream.io >
2022-08-16 09:27:29 -07:00
Andrew Branch and GitHub
4e33e0eb6c
Make literal types not comparable to weak object types without property overlap ( #49865 )
2022-08-15 17:10:11 -07:00
Andrew Branch and GitHub
64ee1e88e0
Strip literal freshness of contextually typed literals ( #49884 )
...
* Strip literal freshness of contextually typed literals
* Add more tests
2022-08-15 17:04:09 -07:00
Sheetal Nandi and GitHub
9c1baeede6
On windows handle the long paths in realpathSync.native ( #50306 )
...
Fixes #49470
2022-08-15 16:57:47 -07:00
Wesley Wigham and GitHub
e989d840f1
Forward intersectionState flag when comparing indexed access constraints ( #50261 )
2022-08-15 16:10:32 -07:00
8a873de5cf
fix(49149): remove unneeded array overload to Object.freeze ( #50029 )
...
* fix(49149): remove unneeded array overload to Object.freeze
* chore: commit baseline changes
Co-authored-by: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com >
Co-authored-by: Andrew Branch <andrew@wheream.io >
2022-08-15 16:10:02 -07:00
Oleksandr T and GitHub
61d8a8d7f3
fix(49629): fix crash in find-all-refs when using module.exports/export= with arrays/primitives ( #50291 )
2022-08-15 15:14:26 -07:00
Andrew Branch and GitHub
bc52ff6f4b
Make React import fix not block component import fix ( #50307 )
...
* Stop React import fix from blocking component import fixes
* Add additional promote-type-only test
2022-08-15 13:13:41 -07:00
Jake Bailey and GitHub
fd3c46b2f0
Fix export = error message to not have redundant language ( #50308 )
2022-08-15 13:13:33 -07:00
Alex Hsu and GitHub
03b12a6a45
LEGO: Merge pull request 50298
...
LEGO: Merge pull request 50298
2022-08-14 03:10:53 -07:00
Alex Hsu and GitHub
7f5600eec5
LEGO: Merge pull request 50295
...
LEGO: Merge pull request 50295
2022-08-13 05:07:02 -07:00
Ryan Cavanaugh and GitHub
adf26ffa4b
Revert "Fixed an issue with contextual type for intersection properties ( #48668 )" ( #50279 )
...
This reverts commit 9236e39374 .
2022-08-12 10:24:50 -07:00
b19741c65d
Report aggregate statistics for solution as well as some solution perf numbers ( #50267 )
...
* Report aggregate statistics for solution as well as some solution perf numbers
This change under --extendedDiagnostics aggregates the diagnostics from all projects built and reports it at the end. Apart from that it also outputs some measurements for work that happens in tsc --build like finding if projects are uptodate etc.
Also removes unnecessary node count per suggestion
* Apply suggestions from code review
Co-authored-by: Ron Buckton <ron.buckton@microsoft.com >
* Fix condition
* Remove extra time
Co-authored-by: Ron Buckton <ron.buckton@microsoft.com >
2022-08-11 13:20:48 -07:00
Jack Works and GitHub
075ee3d4b6
refactor: follow gh-50257 JSX.IntrinsicClassAttributes logic ( #50271 )
2022-08-11 09:32:31 -07:00
Sheetal Nandi and GitHub
924c68ca95
use cache for program creation on watch mode. ( #49958 )
2022-08-10 16:56:54 -07:00
Sheetal Nandi and GitHub
90cfbaee37
Make build info tolerant to json errors ( #50265 )
...
* Make build info tolerant to json errors
Fixes #49754
* Fix incorrect code
2022-08-10 16:44:35 -07:00
Jake Bailey and GitHub
8a24fe75c9
Fix up code so we don't crash when TS itself is emitted with let/const ( #50151 )
2022-08-10 13:38:38 -07:00
Jake Bailey and GitHub
b56483feb8
Remove shims project ( #50049 )
2022-08-10 11:49:59 -07:00
Jake Bailey and GitHub
7f1dc78f54
Simplify normalizeSlashes ( #50154 )
2022-08-10 11:20:00 -07:00
Jake Bailey and GitHub
5fbf3b04dc
Don't treat object properties as potential JS contructors without JSDoc class tag ( #49735 )
2022-08-10 11:19:19 -07:00
Jack Works and GitHub
382f0c3af3
fix: crashes when JSX.IntrinsicClassAttributes is an alias type close GH-50254 ( #50257 )
2022-08-10 10:41:12 -07:00
35c6fbfee0
JSDoc @type tag optional parameters ( #48132 )
...
* JSDoc @type tag optional parameters
* Don't repeat isInJSFile() condition
* Exclude variable initializers
* Add tests for class methods
* Don't contextually type JS function declarations
* Update Baselines and/or Applied Lint Fixes
* Reword comment
Co-authored-by: TypeScript Bot <typescriptbot@microsoft.com >
2022-08-09 17:03:30 -07:00
Andrew Casey and GitHub
2513a2d98c
Use binary search in file system cache ( #50163 )
...
* Use binary search in file system cache
Previously, we were linear searching a linear number of times, resulting in too many `toLowerCaseFileName` calls on Windows.
* Use SortedArray types for clarity
* Use insertSorted after making it return a flat
* Drop redundant undefined
* Correct copy-paste error
2022-08-09 16:47:07 -07:00
Oleksandr T and GitHub
af90e703ab
feat(49903): omit declare on type declarations ( #49925 )
2022-08-09 16:38:42 -07:00
Zzzen and GitHub
b94b299a11
fix CFA for BindingElement. #49759 ( #49836 )
...
* fix CFA for BindingElement. #49759
* fix Parameter
* fix controlFlowBindingPatternOrder
* fix bindParameterFlow
* add tests
* refactor
* refactor
* refactor
2022-08-09 16:37:39 -07:00
Nathan Shively-Sanders and GitHub
dd98c17b10
Merge multiple symbols even when re-exported ( #49987 )
...
* Merge multiple symbols even when re-exported
As far as I remember, the target of `mergeSymbol` needs to be a merged
symbol, not a symbol with a mergeId that points to mergedSymbol.
However, mergeSymbolTable didn't check for this.
I can't remember if symbol tables may contain
symbols-with-mergeId. If they can, then mergeSymbolTable needs to call
getMergedSymbol on the individual targets of the merge. That's what I
did in this PR.
* Call getMergeSymbol eagerly
On the source, not target, of mergeSymbolTable's contents
2022-08-09 16:36:53 -07:00