tsc-ts 0.0.10 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/tsc-ts.js +70 -1
- package/dist/api/compiler/ast-utilities.d.ts +19 -1
- package/dist/api/compiler/ast-utilities.js +180 -95
- package/dist/api/compiler/ast.d.ts +20 -15
- package/dist/api/compiler/ast.js +1023 -995
- package/dist/api/compiler/astnav.js +15 -15
- package/dist/api/compiler/binder-utilities.js +186 -186
- package/dist/api/compiler/binder.js +290 -263
- package/dist/api/compiler/character-codes.js +2 -2
- package/dist/api/compiler/checker-calls.js +173 -123
- package/dist/api/compiler/checker-classes.d.ts +14 -3
- package/dist/api/compiler/checker-classes.js +134 -90
- package/dist/api/compiler/checker-contextual.js +64 -61
- package/dist/api/compiler/checker-declaration-order.js +79 -79
- package/dist/api/compiler/checker-declarations.d.ts +1 -0
- package/dist/api/compiler/checker-declarations.js +160 -136
- package/dist/api/compiler/checker-declared-types.js +67 -65
- package/dist/api/compiler/checker-decorators.js +77 -77
- package/dist/api/compiler/checker-deprecation.d.ts +8 -3
- package/dist/api/compiler/checker-deprecation.js +76 -55
- package/dist/api/compiler/checker-destructuring.js +47 -45
- package/dist/api/compiler/checker-elaboration.js +24 -24
- package/dist/api/compiler/checker-emit-helpers.js +4 -4
- package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
- package/dist/api/compiler/checker-emit-resolver.js +25 -13
- package/dist/api/compiler/checker-evaluator.js +9 -9
- package/dist/api/compiler/checker-expressions.js +244 -211
- package/dist/api/compiler/checker-functions.js +113 -107
- package/dist/api/compiler/checker-generated-code.d.ts +0 -11
- package/dist/api/compiler/checker-generated-code.js +28 -52
- package/dist/api/compiler/checker-grammar.d.ts +1 -0
- package/dist/api/compiler/checker-grammar.js +469 -438
- package/dist/api/compiler/checker-heritage.js +91 -93
- package/dist/api/compiler/checker-inference.d.ts +77 -5
- package/dist/api/compiler/checker-inference.js +487 -113
- package/dist/api/compiler/checker-iteration.d.ts +0 -10
- package/dist/api/compiler/checker-iteration.js +35 -52
- package/dist/api/compiler/checker-javascript.js +14 -14
- package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
- package/dist/api/compiler/checker-jsdoc.js +67 -58
- package/dist/api/compiler/checker-jsx.js +105 -88
- package/dist/api/compiler/checker-members.d.ts +9 -2
- package/dist/api/compiler/checker-members.js +210 -74
- package/dist/api/compiler/checker-modules.d.ts +15 -6
- package/dist/api/compiler/checker-modules.js +469 -309
- package/dist/api/compiler/checker-narrowing.js +273 -189
- package/dist/api/compiler/checker-object-literals.js +25 -22
- package/dist/api/compiler/checker-operators.js +126 -118
- package/dist/api/compiler/checker-overloads.js +27 -27
- package/dist/api/compiler/checker-property-access.js +59 -55
- package/dist/api/compiler/checker-services.d.ts +1 -0
- package/dist/api/compiler/checker-services.js +222 -210
- package/dist/api/compiler/checker-signatures.js +65 -49
- package/dist/api/compiler/checker-source-file.d.ts +5 -0
- package/dist/api/compiler/checker-source-file.js +154 -130
- package/dist/api/compiler/checker-statements.js +33 -32
- package/dist/api/compiler/checker-super.js +50 -50
- package/dist/api/compiler/checker-symbol-types.js +109 -93
- package/dist/api/compiler/checker-symbols.d.ts +13 -1
- package/dist/api/compiler/checker-symbols.js +264 -149
- package/dist/api/compiler/checker-type-factory.d.ts +5 -0
- package/dist/api/compiler/checker-type-factory.js +137 -34
- package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
- package/dist/api/compiler/checker-type-nodes.js +179 -141
- package/dist/api/compiler/checker-type-operators.d.ts +2 -0
- package/dist/api/compiler/checker-type-operators.js +110 -63
- package/dist/api/compiler/checker-types.d.ts +80 -3
- package/dist/api/compiler/checker-types.js +121 -2
- package/dist/api/compiler/checker-unused.js +114 -118
- package/dist/api/compiler/checker-utilities.js +11 -11
- package/dist/api/compiler/checker.d.ts +93 -31
- package/dist/api/compiler/checker.js +143 -35
- package/dist/api/compiler/command-line.d.ts +1 -3
- package/dist/api/compiler/command-line.js +47 -44
- package/dist/api/compiler/compile-program.d.ts +19 -4
- package/dist/api/compiler/compile-program.js +45 -26
- package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
- package/dist/api/compiler/diagnostic-messages.js +128 -122
- package/dist/api/compiler/diagnostics.js +7 -7
- package/dist/api/compiler/emitter.d.ts +7 -1
- package/dist/api/compiler/emitter.js +53 -11
- package/dist/api/compiler/file-include.d.ts +2 -1
- package/dist/api/compiler/file-include.js +11 -7
- package/dist/api/compiler/file-loader.d.ts +10 -0
- package/dist/api/compiler/file-loader.js +138 -41
- package/dist/api/compiler/instantiation.d.ts +7 -0
- package/dist/api/compiler/instantiation.js +101 -49
- package/dist/api/compiler/jsdoc.js +23 -23
- package/dist/api/compiler/link-tables.d.ts +48 -18
- package/dist/api/compiler/link-tables.js +80 -37
- package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
- package/dist/api/compiler/locales/cs-CZ.js +1 -1
- package/dist/api/compiler/locales/de-DE.d.ts +1 -1
- package/dist/api/compiler/locales/de-DE.js +1 -1
- package/dist/api/compiler/locales/es-ES.d.ts +1 -1
- package/dist/api/compiler/locales/es-ES.js +1 -1
- package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
- package/dist/api/compiler/locales/fr-FR.js +1 -1
- package/dist/api/compiler/locales/it-IT.d.ts +1 -1
- package/dist/api/compiler/locales/it-IT.js +1 -1
- package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
- package/dist/api/compiler/locales/ja-JP.js +1 -1
- package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
- package/dist/api/compiler/locales/ko-KR.js +1 -1
- package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
- package/dist/api/compiler/locales/pl-PL.js +1 -1
- package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
- package/dist/api/compiler/locales/pt-BR.js +1 -1
- package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
- package/dist/api/compiler/locales/ru-RU.js +1 -1
- package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
- package/dist/api/compiler/locales/tr-TR.js +1 -1
- package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
- package/dist/api/compiler/locales/zh-CN.js +1 -1
- package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
- package/dist/api/compiler/locales/zh-TW.js +1 -1
- package/dist/api/compiler/module-resolution-types.js +6 -6
- package/dist/api/compiler/module-resolution.d.ts +10 -1
- package/dist/api/compiler/module-resolution.js +115 -84
- package/dist/api/compiler/module-specifiers.d.ts +15 -0
- package/dist/api/compiler/module-specifiers.js +24 -18
- package/dist/api/compiler/name-resolver.js +74 -65
- package/dist/api/compiler/node-builder-names.d.ts +11 -3
- package/dist/api/compiler/node-builder-names.js +210 -90
- package/dist/api/compiler/node-builder-pseudo.js +29 -31
- package/dist/api/compiler/node-builder-reuse.js +23 -22
- package/dist/api/compiler/node-builder.d.ts +18 -1
- package/dist/api/compiler/node-builder.js +191 -102
- package/dist/api/compiler/option-declarations.d.ts +2 -6
- package/dist/api/compiler/option-declarations.js +315 -375
- package/dist/api/compiler/options.d.ts +15 -33
- package/dist/api/compiler/options.js +21 -54
- package/dist/api/compiler/output-paths.d.ts +4 -1
- package/dist/api/compiler/output-paths.js +6 -11
- package/dist/api/compiler/package-json.d.ts +3 -3
- package/dist/api/compiler/package-json.js +11 -10
- package/dist/api/compiler/parser.d.ts +40 -19
- package/dist/api/compiler/parser.js +308 -216
- package/dist/api/compiler/path.d.ts +9 -0
- package/dist/api/compiler/path.js +20 -3
- package/dist/api/compiler/printer/emit-context.d.ts +3 -1
- package/dist/api/compiler/printer/emit-context.js +16 -1
- package/dist/api/compiler/printer/factory-base.d.ts +2 -2
- package/dist/api/compiler/printer/factory-base.js +7 -3
- package/dist/api/compiler/printer/factory.js +3 -1
- package/dist/api/compiler/printer/helpers.js +10 -1
- package/dist/api/compiler/printer/name-generator.d.ts +1 -1
- package/dist/api/compiler/printer/name-generator.js +35 -16
- package/dist/api/compiler/printer/printer.d.ts +1 -0
- package/dist/api/compiler/printer/printer.js +303 -281
- package/dist/api/compiler/printer/utilities.js +149 -147
- package/dist/api/compiler/program-checker.d.ts +8 -2
- package/dist/api/compiler/program-checker.js +84 -34
- package/dist/api/compiler/program-utilities.d.ts +3 -1
- package/dist/api/compiler/program-utilities.js +28 -15
- package/dist/api/compiler/program.d.ts +2 -0
- package/dist/api/compiler/program.js +69 -57
- package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
- package/dist/api/compiler/pseudo-bigint.js +18 -0
- package/dist/api/compiler/regexp-checker.d.ts +1 -1
- package/dist/api/compiler/regexp-checker.js +93 -76
- package/dist/api/compiler/relations.d.ts +27 -4
- package/dist/api/compiler/relations.js +337 -180
- package/dist/api/compiler/reparser.js +60 -56
- package/dist/api/compiler/scanner.d.ts +19 -2
- package/dist/api/compiler/scanner.js +123 -108
- package/dist/api/compiler/shared-results.d.ts +463 -0
- package/dist/api/compiler/shared-results.js +2128 -0
- package/dist/api/compiler/sourcemap.js +2 -2
- package/dist/api/compiler/symbol-accessibility.js +87 -74
- package/dist/api/compiler/symbol.d.ts +22 -13
- package/dist/api/compiler/symbol.js +15 -1
- package/dist/api/compiler/syntax-kind.d.ts +198 -197
- package/dist/api/compiler/transformers/alias-references.js +247 -139
- package/dist/api/compiler/transformers/async-utilities.js +25 -25
- package/dist/api/compiler/transformers/async.d.ts +0 -1
- package/dist/api/compiler/transformers/async.js +64 -77
- package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
- package/dist/api/compiler/transformers/class-fields.js +81 -78
- package/dist/api/compiler/transformers/commonjs-module.js +18 -15
- package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
- package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
- package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
- package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
- package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
- package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
- package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
- package/dist/api/compiler/transformers/declarations.d.ts +4 -1
- package/dist/api/compiler/transformers/declarations.js +305 -238
- package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
- package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
- package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
- package/dist/api/compiler/transformers/destructuring.js +19 -18
- package/dist/api/compiler/transformers/emit-resolver.js +1 -1
- package/dist/api/compiler/transformers/es-decorators.js +55 -55
- package/dist/api/compiler/transformers/external-module-info.js +3 -3
- package/dist/api/compiler/transformers/for-await.js +25 -25
- package/dist/api/compiler/transformers/import-elision.js +14 -14
- package/dist/api/compiler/transformers/jsx.js +12 -12
- package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
- package/dist/api/compiler/transformers/module.js +8 -8
- package/dist/api/compiler/transformers/named-evaluation.js +4 -4
- package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
- package/dist/api/compiler/transformers/optional-chain.js +10 -10
- package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
- package/dist/api/compiler/transformers/reference-resolver.js +131 -69
- package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
- package/dist/api/compiler/transformers/subtree-facts.js +47 -47
- package/dist/api/compiler/transformers/syntax-facts.js +56 -58
- package/dist/api/compiler/transformers/type-eraser.js +73 -66
- package/dist/api/compiler/transformers/type-serialization.js +24 -24
- package/dist/api/compiler/transformers/using.js +12 -12
- package/dist/api/compiler/transformers/utilities.js +77 -77
- package/dist/api/compiler/transformers/visitor-base.js +172 -172
- package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
- package/dist/api/compiler/tsconfig.d.ts +10 -2
- package/dist/api/compiler/tsconfig.js +136 -48
- package/dist/api/compiler/type-printer.js +40 -3
- package/dist/api/compiler/types.d.ts +2 -1
- package/dist/api/library/ast.generated.d.ts +42 -39
- package/dist/api/library/ast.generated.js +1 -1
- package/dist/api/library/compiler-options.generated.d.ts +111 -100
- package/dist/api/library/compiler-options.generated.js +1 -1
- package/dist/api/library/disk.js +12 -1
- package/dist/api/library/enums.generated.d.ts +206 -206
- package/dist/api/library/enums.generated.js +206 -206
- package/dist/api/library/nodes.js +26 -26
- package/package.json +9 -9
- package/src/compiler/ast-utilities.ts +99 -7
- package/src/compiler/ast.ts +55 -26
- package/src/compiler/binder.ts +39 -4
- package/src/compiler/character-codes.ts +2 -2
- package/src/compiler/checker-calls.ts +76 -8
- package/src/compiler/checker-classes.ts +78 -24
- package/src/compiler/checker-contextual.ts +6 -1
- package/src/compiler/checker-declarations.ts +31 -4
- package/src/compiler/checker-declared-types.ts +8 -5
- package/src/compiler/checker-decorators.ts +1 -1
- package/src/compiler/checker-deprecation.ts +29 -8
- package/src/compiler/checker-destructuring.ts +10 -3
- package/src/compiler/checker-emit-helpers.ts +1 -0
- package/src/compiler/checker-emit-resolver.ts +16 -6
- package/src/compiler/checker-expressions.ts +79 -46
- package/src/compiler/checker-functions.ts +21 -6
- package/src/compiler/checker-generated-code.ts +2 -22
- package/src/compiler/checker-grammar.ts +133 -60
- package/src/compiler/checker-heritage.ts +22 -21
- package/src/compiler/checker-inference.ts +514 -87
- package/src/compiler/checker-iteration.ts +18 -31
- package/src/compiler/checker-javascript.ts +1 -1
- package/src/compiler/checker-jsdoc.ts +50 -27
- package/src/compiler/checker-jsx.ts +26 -4
- package/src/compiler/checker-members.ts +197 -55
- package/src/compiler/checker-modules.ts +332 -65
- package/src/compiler/checker-narrowing.ts +98 -19
- package/src/compiler/checker-object-literals.ts +3 -0
- package/src/compiler/checker-operators.ts +11 -4
- package/src/compiler/checker-property-access.ts +7 -2
- package/src/compiler/checker-services.ts +39 -12
- package/src/compiler/checker-signatures.ts +15 -1
- package/src/compiler/checker-source-file.ts +39 -13
- package/src/compiler/checker-statements.ts +3 -2
- package/src/compiler/checker-symbol-types.ts +29 -6
- package/src/compiler/checker-symbols.ts +158 -15
- package/src/compiler/checker-type-factory.ts +120 -21
- package/src/compiler/checker-type-nodes.ts +46 -3
- package/src/compiler/checker-type-operators.ts +83 -26
- package/src/compiler/checker-types.ts +147 -4
- package/src/compiler/checker-unused.ts +9 -14
- package/src/compiler/checker.ts +168 -41
- package/src/compiler/command-line.ts +28 -28
- package/src/compiler/compile-program.ts +51 -25
- package/src/compiler/decoder.ts +13 -4
- package/src/compiler/diagnostic-messages.ts +1973 -1892
- package/src/compiler/emitter.ts +57 -8
- package/src/compiler/encoder.ts +23 -8
- package/src/compiler/file-include.ts +9 -3
- package/src/compiler/file-loader.ts +139 -32
- package/src/compiler/help.ts +10 -14
- package/src/compiler/incremental.ts +86 -18
- package/src/compiler/init.ts +2 -7
- package/src/compiler/instantiation.ts +77 -22
- package/src/compiler/jsdoc.ts +3 -1
- package/src/compiler/link-tables.ts +82 -37
- package/src/compiler/locales/cs-CZ.ts +1 -1
- package/src/compiler/locales/de-DE.ts +1 -1
- package/src/compiler/locales/es-ES.ts +1 -1
- package/src/compiler/locales/fr-FR.ts +1 -1
- package/src/compiler/locales/it-IT.ts +1 -1
- package/src/compiler/locales/ja-JP.ts +1 -1
- package/src/compiler/locales/ko-KR.ts +1 -1
- package/src/compiler/locales/pl-PL.ts +1 -1
- package/src/compiler/locales/pt-BR.ts +1 -1
- package/src/compiler/locales/ru-RU.ts +1 -1
- package/src/compiler/locales/tr-TR.ts +1 -1
- package/src/compiler/locales/zh-CN.ts +1 -1
- package/src/compiler/locales/zh-TW.ts +1 -1
- package/src/compiler/module-resolution.ts +44 -8
- package/src/compiler/module-specifiers.ts +62 -20
- package/src/compiler/name-resolver.ts +9 -1
- package/src/compiler/node-builder-names.ts +236 -54
- package/src/compiler/node-builder-pseudo.ts +4 -7
- package/src/compiler/node-builder-reuse.ts +5 -4
- package/src/compiler/node-builder.ts +130 -31
- package/src/compiler/option-declarations.ts +33 -103
- package/src/compiler/options.ts +23 -62
- package/src/compiler/output-paths.ts +5 -18
- package/src/compiler/package-entrypoints.ts +345 -0
- package/src/compiler/package-json.ts +4 -4
- package/src/compiler/parallel-check.ts +197 -8
- package/src/compiler/parallel-emit.ts +1 -1
- package/src/compiler/parser.ts +156 -39
- package/src/compiler/path.ts +22 -2
- package/src/compiler/printer/emit-context.ts +16 -0
- package/src/compiler/printer/factory-base.ts +10 -3
- package/src/compiler/printer/factory.ts +4 -1
- package/src/compiler/printer/helpers.ts +10 -1
- package/src/compiler/printer/name-generator.ts +24 -2
- package/src/compiler/printer/printer.ts +35 -14
- package/src/compiler/printer/utilities.ts +8 -2
- package/src/compiler/program-checker.ts +53 -5
- package/src/compiler/program-utilities.ts +23 -10
- package/src/compiler/program.ts +13 -1
- package/src/compiler/pseudo-bigint.ts +17 -0
- package/src/compiler/regexp-checker.ts +63 -30
- package/src/compiler/relations.ts +233 -77
- package/src/compiler/reparser.ts +7 -2
- package/src/compiler/scanner.ts +109 -79
- package/src/compiler/shared-results.ts +2414 -0
- package/src/compiler/show-config.ts +18 -1
- package/src/compiler/sourcemap.ts +2 -2
- package/src/compiler/symbol-accessibility.ts +26 -3
- package/src/compiler/symbol.ts +31 -14
- package/src/compiler/syntax-kind.ts +188 -187
- package/src/compiler/thread-entry.ts +19 -2
- package/src/compiler/transformers/alias-references.ts +123 -4
- package/src/compiler/transformers/async.ts +2 -17
- package/src/compiler/transformers/class-fields.ts +13 -12
- package/src/compiler/transformers/commonjs-module.ts +11 -7
- package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
- package/src/compiler/transformers/declarations-pseudo.ts +2 -4
- package/src/compiler/transformers/declarations-resolver.ts +0 -3
- package/src/compiler/transformers/declarations-syntactic.ts +1 -21
- package/src/compiler/transformers/declarations.ts +134 -48
- package/src/compiler/transformers/decorator-metadata.ts +9 -1
- package/src/compiler/transformers/destructuring.ts +4 -3
- package/src/compiler/transformers/external-module-info.ts +1 -1
- package/src/compiler/transformers/jsx.ts +2 -1
- package/src/compiler/transformers/reference-resolver.ts +83 -19
- package/src/compiler/transformers/runtime-syntax.ts +6 -1
- package/src/compiler/transformers/syntax-facts.ts +2 -7
- package/src/compiler/transformers/type-eraser.ts +10 -1
- package/src/compiler/transformers/type-serialization.ts +3 -2
- package/src/compiler/transformers/visitor-base.ts +2 -1
- package/src/compiler/transformers/visitor-hooks.ts +9 -4
- package/src/compiler/tsc-build.ts +3 -0
- package/src/compiler/tsc-cli.ts +2 -0
- package/src/compiler/tsc-compile.ts +7 -2
- package/src/compiler/tsc-watch.ts +74 -45
- package/src/compiler/tsconfig.ts +176 -19
- package/src/compiler/type-printer.ts +36 -2
- package/src/compiler/types.ts +2 -1
- package/src/library/ast.generated.ts +57 -41
- package/src/library/compiler-options.generated.ts +117 -103
- package/src/library/disk.ts +10 -1
- package/src/library/enums.generated.ts +196 -196
|
@@ -5,6 +5,7 @@ import { findConstructorDeclaration, getNameOfDeclaration, getDeclarationOfKind,
|
|
|
5
5
|
import { chainDiagnostic } from './diagnostics.js';
|
|
6
6
|
import { getUseDefineForClassFields } from './options.js';
|
|
7
7
|
import { createDiagnosticForNode } from './checker.js';
|
|
8
|
+
import { checkJSDocAugmentsTagMatchesExtends } from './checker-jsdoc.js';
|
|
8
9
|
import { emptyIndexInfos, emptySignatures, newTypeMapper, } from './checker-types.js';
|
|
9
10
|
import { createAnonymousType, getIntersectionType, isErrorType, typesOf } from './checker-type-factory.js';
|
|
10
11
|
import { getBaseConstructorTypeOfClass, getBaseTypes, getClassLikeDeclarationOfSymbol, getConstraintOfTypeParameter, getDeclaredTypeOfSymbol, getDefaultFromTypeParameter, getExtendsHeritageClauseElement, getExtendsHeritageClauseElements, getMinTypeArgumentCount, isEntityNameExpression, isMixinConstructorType, isValidBaseType, getDeclaredTypeOfTypeParameter, fillMissingTypeArguments, getInstantiatedConstructorsForTypeArguments, } from './checker-declared-types.js';
|
|
@@ -23,7 +24,7 @@ import { hasDynamicName, hasLateBindableName, isBindingPattern } from './checker
|
|
|
23
24
|
import { checkTypeAssignableTo, checkTypeRelatedTo, compareProperties, isTypeAssignableTo, isTypeIdenticalTo, } from './relations.js';
|
|
24
25
|
import { symbolToString, typeToString } from './type-printer.js';
|
|
25
26
|
import { checkFunctionOrConstructorSymbol } from './checker-overloads.js';
|
|
26
|
-
import { isPropertyInitializedInConstructor } from './checker-classes.js';
|
|
27
|
+
import { getConstructorAccessibilityError, isPropertyInitializedInConstructor } from './checker-classes.js';
|
|
27
28
|
import { declarationCount, getDeclarations, } from './symbol.js';
|
|
28
29
|
// ---- Classes
|
|
29
30
|
/** Checks a class's merged declarations, members, base class, implemented types and index signatures. */
|
|
@@ -49,19 +50,22 @@ export function checkClassHeritage(c, node) {
|
|
|
49
50
|
}
|
|
50
51
|
checkMembersForOverrideModifier(c, node, classType, typeWithThis, staticType);
|
|
51
52
|
for (const typeRefNode of getImplementsHeritageClauseElements(node)) {
|
|
52
|
-
|
|
53
|
-
if (
|
|
54
|
-
|
|
53
|
+
// The parser makes an entity name element a type reference; anything else stays an expression.
|
|
54
|
+
if (typeRefNode.kind === 235 /* SyntaxKind.ExpressionWithTypeArguments */) {
|
|
55
|
+
const expr = getExpression(typeRefNode);
|
|
56
|
+
if (!isEntityNameExpression(expr) || isOptionalChain(expr))
|
|
57
|
+
c.error(expr, 667 /* Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments */);
|
|
58
|
+
}
|
|
55
59
|
const t = getReducedType(c, getTypeFromTypeNode(c, typeRefNode));
|
|
56
60
|
if (isErrorType(c, t))
|
|
57
61
|
continue;
|
|
58
62
|
if (!isValidBaseType(c, t)) {
|
|
59
|
-
c.error(typeRefNode,
|
|
63
|
+
c.error(typeRefNode, 599 /* Diagnostics.A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members */);
|
|
60
64
|
continue;
|
|
61
65
|
}
|
|
62
66
|
const message = t.symbol !== undefined && (t.symbol.flags & 32 /* SymbolFlags.Class */) !== 0
|
|
63
|
-
?
|
|
64
|
-
:
|
|
67
|
+
? 859 /* Diagnostics.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass */
|
|
68
|
+
: 598 /* Diagnostics.Class_0_incorrectly_implements_interface_1 */;
|
|
65
69
|
const baseWithThis = getTypeWithThisArgument(c, t, classType.thisType, false);
|
|
66
70
|
if (!checkTypeAssignableTo(c, typeWithThis, baseWithThis, undefined, undefined))
|
|
67
71
|
issueMemberSpecificError(c, node, typeWithThis, baseWithThis, message);
|
|
@@ -72,8 +76,9 @@ export function checkClassHeritage(c, node) {
|
|
|
72
76
|
}
|
|
73
77
|
function checkBaseClass(c, node, classType, typeWithThis, staticType, baseType) {
|
|
74
78
|
const baseConstructorType = getBaseConstructorTypeOfClass(c, classType);
|
|
75
|
-
const staticBaseType = getApparentType(c, baseConstructorType);
|
|
76
79
|
const baseTypeNode = getExtendsHeritageClauseElement(node);
|
|
80
|
+
checkJSDocAugmentsTagMatchesExtends(c, node, baseTypeNode, baseType);
|
|
81
|
+
const staticBaseType = getApparentType(c, baseConstructorType);
|
|
77
82
|
checkBaseTypeAccessibility(c, staticBaseType, baseTypeNode);
|
|
78
83
|
const typeArgumentNodes = getTypeArguments(baseTypeNode);
|
|
79
84
|
if (typeArgumentNodes !== undefined && typeArgumentNodes.nodes.length !== 0) {
|
|
@@ -86,16 +91,16 @@ function checkBaseClass(c, node, classType, typeWithThis, staticType, baseType)
|
|
|
86
91
|
const baseWithThis = getTypeWithThisArgument(c, baseType, classType.thisType, false);
|
|
87
92
|
const errorNode = getName(node) ?? node;
|
|
88
93
|
if (!checkTypeAssignableTo(c, typeWithThis, baseWithThis, undefined, undefined))
|
|
89
|
-
issueMemberSpecificError(c, node, typeWithThis, baseWithThis,
|
|
94
|
+
issueMemberSpecificError(c, node, typeWithThis, baseWithThis, 593 /* Diagnostics.Class_0_incorrectly_extends_base_class_1 */);
|
|
90
95
|
// The static side is checked only when the instance side is assignable.
|
|
91
96
|
else
|
|
92
|
-
checkTypeAssignableTo(c, staticType, getTypeWithoutSignatures(c, staticBaseType), errorNode,
|
|
97
|
+
checkTypeAssignableTo(c, staticType, getTypeWithoutSignatures(c, staticBaseType), errorNode, 595 /* Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1 */);
|
|
93
98
|
if ((baseConstructorType.flags & 34078720 /* TypeFlags.TypeVariable */) !== 0) {
|
|
94
99
|
if (!isMixinConstructorType(c, staticType))
|
|
95
|
-
c.error(errorNode,
|
|
100
|
+
c.error(errorNode, 708 /* Diagnostics.A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any */);
|
|
96
101
|
else if (hasAbstractSignature(getSignaturesOfType(c, baseConstructorType, 1 /* SignatureKind.Construct */)) &&
|
|
97
102
|
!hasSyntacticModifier(node, 64 /* ModifierFlags.Abstract */))
|
|
98
|
-
c.error(errorNode,
|
|
103
|
+
c.error(errorNode, 936 /* Diagnostics.A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_be_declared_abstract */);
|
|
99
104
|
}
|
|
100
105
|
// A class-like constructor function that isn't a class must return the same type from every
|
|
101
106
|
// instantiated construct signature.
|
|
@@ -104,7 +109,7 @@ function checkBaseClass(c, node, classType, typeWithThis, staticType, baseType)
|
|
|
104
109
|
const constructors = getInstantiatedConstructorsForTypeArguments(c, staticBaseType, getTypeArguments(baseTypeNode)?.nodes, baseTypeNode);
|
|
105
110
|
for (const sig of constructors) {
|
|
106
111
|
if (!isTypeIdenticalTo(c, getReturnTypeOfSignature(c, sig), baseType)) {
|
|
107
|
-
c.error(getExpression(baseTypeNode),
|
|
112
|
+
c.error(getExpression(baseTypeNode), 677 /* Diagnostics.Base_constructors_must_all_have_the_same_return_type */);
|
|
108
113
|
break;
|
|
109
114
|
}
|
|
110
115
|
}
|
|
@@ -147,7 +152,7 @@ export function checkTypeArgumentConstraints(c, node, typeParameters) {
|
|
|
147
152
|
}
|
|
148
153
|
result =
|
|
149
154
|
result &&
|
|
150
|
-
checkTypeAssignableTo(c, typeArguments[i], instantiateType(c, constraint, mapper), i < typeArgumentNodes.length ? typeArgumentNodes[i] : undefined,
|
|
155
|
+
checkTypeAssignableTo(c, typeArguments[i], instantiateType(c, constraint, mapper), i < typeArgumentNodes.length ? typeArgumentNodes[i] : undefined, 527 /* Diagnostics.Type_0_does_not_satisfy_the_constraint_1 */);
|
|
151
156
|
}
|
|
152
157
|
return result;
|
|
153
158
|
}
|
|
@@ -169,20 +174,9 @@ function getImplementsHeritageClauseElements(node) {
|
|
|
169
174
|
}
|
|
170
175
|
function checkBaseTypeAccessibility(c, t, node) {
|
|
171
176
|
const signatures = getSignaturesOfType(c, t, 1 /* SignatureKind.Construct */);
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (declaration === undefined || !hasSyntacticModifier(declaration, 2 /* ModifierFlags.Private */))
|
|
176
|
-
return;
|
|
177
|
-
const typeClassDeclaration = t.symbol !== undefined ? getClassLikeDeclarationOfSymbol(t.symbol) : undefined;
|
|
178
|
-
if (!isNodeWithinClass(node, typeClassDeclaration))
|
|
179
|
-
c.error(node, 809 /* Diagnostics.Cannot_extend_a_class_0_Class_constructor_is_marked_as_private */, getFullyQualifiedName(c, t.symbol));
|
|
180
|
-
}
|
|
181
|
-
function isNodeWithinClass(node, classDeclaration) {
|
|
182
|
-
for (let n = node; n !== undefined; n = n.parent)
|
|
183
|
-
if (n === classDeclaration)
|
|
184
|
-
return true;
|
|
185
|
-
return false;
|
|
177
|
+
const error = getConstructorAccessibilityError(c, node, signatures, 2 /* ModifierFlags.Private */);
|
|
178
|
+
if (error !== undefined)
|
|
179
|
+
c.error(node, 816 /* Diagnostics.Cannot_extend_a_class_0_Class_constructor_is_marked_as_private */, getFullyQualifiedName(c, error.declaringClass.symbol));
|
|
186
180
|
}
|
|
187
181
|
/** Reports each incompatible member, or the class as a whole when no member is to blame. */
|
|
188
182
|
function issueMemberSpecificError(c, node, typeWithThis, baseWithThis, broadMessage) {
|
|
@@ -199,7 +193,7 @@ function issueMemberSpecificError(c, node, typeWithThis, baseWithThis, broadMess
|
|
|
199
193
|
continue;
|
|
200
194
|
const diagnostics = [];
|
|
201
195
|
if (!checkTypeRelatedTo(c, getTypeOfSymbol(c, prop), getTypeOfSymbol(c, baseProp), c.assignableRelation, getName(member) ?? member, undefined, diagnostics)) {
|
|
202
|
-
c.addDiagnostic(chainDiagnostic(diagnostics[0],
|
|
196
|
+
c.addDiagnostic(chainDiagnostic(diagnostics[0], 594 /* Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2 */, symbolToString(c, declaredProp), typeToString(c, typeWithThis), typeToString(c, baseWithThis)));
|
|
203
197
|
issuedMemberError = true;
|
|
204
198
|
}
|
|
205
199
|
}
|
|
@@ -229,7 +223,7 @@ function checkClassForStaticPropertyNameConflicts(c, node) {
|
|
|
229
223
|
continue;
|
|
230
224
|
const memberName = getEffectivePropertyName(c, name);
|
|
231
225
|
if (memberName === 'name' || memberName === 'length' || memberName === 'caller' || memberName === 'arguments')
|
|
232
|
-
c.error(name,
|
|
226
|
+
c.error(name, 838 /* Diagnostics.Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1 */, memberName, symbolToString(c, getSymbolOfDeclaration(c, node)));
|
|
233
227
|
}
|
|
234
228
|
}
|
|
235
229
|
/** The property name a name denotes: a literal name, or the literal type of a computed name's expression. */
|
|
@@ -240,7 +234,7 @@ function getEffectivePropertyName(c, name) {
|
|
|
240
234
|
case 8 /* SyntaxKind.NumericLiteral */:
|
|
241
235
|
case 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */:
|
|
242
236
|
return getText(name);
|
|
243
|
-
case
|
|
237
|
+
case 169 /* SyntaxKind.ComputedPropertyName */: {
|
|
244
238
|
const e = getExpression(name);
|
|
245
239
|
if (e.kind === 10 /* SyntaxKind.StringLiteral */ ||
|
|
246
240
|
e.kind === 8 /* SyntaxKind.NumericLiteral */ ||
|
|
@@ -304,16 +298,16 @@ function checkKindsOfPropertyMemberOverrides(c, t, baseType) {
|
|
|
304
298
|
const derivedName = getNameOfDeclaration(derived.valueDeclaration) ?? derived.valueDeclaration;
|
|
305
299
|
if (basePropertyFlags !== 0 && derivedPropertyFlags !== 0) {
|
|
306
300
|
// Abstract and interface members, and assignment-declared overrides, may change kind.
|
|
307
|
-
if ((base.checkFlags &
|
|
308
|
-
(derived.valueDeclaration !== undefined && derived.valueDeclaration.kind ===
|
|
301
|
+
if ((base.checkFlags & 2097152 /* CheckFlags.Mapped */) !== 0 ||
|
|
302
|
+
(derived.valueDeclaration !== undefined && derived.valueDeclaration.kind === 228 /* SyntaxKind.BinaryExpression */) ||
|
|
309
303
|
arePropertiesAbstractOrInterface(base, baseDeclarationFlags))
|
|
310
304
|
continue;
|
|
311
305
|
const overriddenInstanceProperty = basePropertyFlags !== 4 /* SymbolFlags.Property */ && derivedPropertyFlags === 4 /* SymbolFlags.Property */;
|
|
312
306
|
const overriddenInstanceAccessor = basePropertyFlags === 4 /* SymbolFlags.Property */ && derivedPropertyFlags !== 4 /* SymbolFlags.Property */;
|
|
313
307
|
if (overriddenInstanceProperty || overriddenInstanceAccessor)
|
|
314
308
|
c.error(derivedName, overriddenInstanceProperty
|
|
315
|
-
?
|
|
316
|
-
:
|
|
309
|
+
? 761 /* Diagnostics.X_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property */
|
|
310
|
+
: 762 /* Diagnostics.X_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor */, symbolToString(c, base), typeToString(c, baseType), typeToString(c, t));
|
|
317
311
|
else if (getUseDefineForClassFields(c.compilerOptions))
|
|
318
312
|
checkPropertyOverwritesBase(c, t, baseType, base, derived, baseDeclarationFlags, derivedDeclarationFlags);
|
|
319
313
|
continue;
|
|
@@ -324,14 +318,14 @@ function checkKindsOfPropertyMemberOverrides(c, t, baseType) {
|
|
|
324
318
|
if (isPrototypeProperty(derived) || (derived.flags & 4 /* SymbolFlags.Property */) !== 0)
|
|
325
319
|
continue;
|
|
326
320
|
message =
|
|
327
|
-
|
|
321
|
+
600 /* Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor */;
|
|
328
322
|
}
|
|
329
323
|
else if ((base.flags & 98304 /* SymbolFlags.Accessor */) !== 0)
|
|
330
324
|
message =
|
|
331
|
-
|
|
325
|
+
602 /* Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function */;
|
|
332
326
|
else
|
|
333
327
|
message =
|
|
334
|
-
|
|
328
|
+
601 /* Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function */;
|
|
335
329
|
c.error(derivedName, message, typeToString(c, baseType), symbolToString(c, base), typeToString(c, t));
|
|
336
330
|
}
|
|
337
331
|
if (missing !== undefined)
|
|
@@ -351,7 +345,7 @@ function isImplementedByOtherBaseType(c, t, baseType, base) {
|
|
|
351
345
|
function checkPropertyOverwritesBase(c, t, baseType, base, derived, baseDeclarationFlags, derivedDeclarationFlags) {
|
|
352
346
|
let uninitialized;
|
|
353
347
|
for (const d of getDeclarations(derived)) {
|
|
354
|
-
if (d.kind ===
|
|
348
|
+
if (d.kind === 174 /* SyntaxKind.PropertyDeclaration */ && getInitializer(d) === undefined) {
|
|
355
349
|
uninitialized = d;
|
|
356
350
|
break;
|
|
357
351
|
}
|
|
@@ -372,16 +366,16 @@ function checkPropertyOverwritesBase(c, t, baseType, base, derived, baseDeclarat
|
|
|
372
366
|
propName.kind !== 79 /* SyntaxKind.Identifier */ ||
|
|
373
367
|
!c.strictNullChecks ||
|
|
374
368
|
!isPropertyInitializedInConstructor(c, propName, t, constructor))
|
|
375
|
-
c.error(getNameOfDeclaration(derived.valueDeclaration) ?? derived.valueDeclaration,
|
|
369
|
+
c.error(getNameOfDeclaration(derived.valueDeclaration) ?? derived.valueDeclaration, 763 /* Diagnostics.Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration */, symbolToString(c, base), typeToString(c, baseType));
|
|
376
370
|
}
|
|
377
371
|
function reportMissingAbstractMembers(c, node, missing) {
|
|
378
|
-
const isExpression = node !== undefined && node.kind ===
|
|
372
|
+
const isExpression = node !== undefined && node.kind === 233 /* SyntaxKind.ClassExpression */;
|
|
379
373
|
const properties = missing.properties;
|
|
380
374
|
if (properties.length === 1) {
|
|
381
375
|
if (isExpression)
|
|
382
|
-
c.error(node,
|
|
376
|
+
c.error(node, 794 /* Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1 */, properties[0], missing.baseTypeName);
|
|
383
377
|
else
|
|
384
|
-
c.error(node,
|
|
378
|
+
c.error(node, 682 /* Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2 */, missing.typeName, properties[0], missing.baseTypeName);
|
|
385
379
|
return;
|
|
386
380
|
}
|
|
387
381
|
if (properties.length > 5) {
|
|
@@ -391,16 +385,16 @@ function reportMissingAbstractMembers(c, node, missing) {
|
|
|
391
385
|
.join(', ');
|
|
392
386
|
const remaining = String(properties.length - 4);
|
|
393
387
|
if (isExpression)
|
|
394
|
-
c.error(node,
|
|
388
|
+
c.error(node, 791 /* Diagnostics.Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and_2_more */, missing.baseTypeName, listed, remaining);
|
|
395
389
|
else
|
|
396
|
-
c.error(node,
|
|
390
|
+
c.error(node, 796 /* Diagnostics.Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more */, missing.typeName, missing.baseTypeName, listed, remaining);
|
|
397
391
|
return;
|
|
398
392
|
}
|
|
399
393
|
const listed = properties.map((p) => "'" + p + "'").join(', ');
|
|
400
394
|
if (isExpression)
|
|
401
|
-
c.error(node,
|
|
395
|
+
c.error(node, 797 /* Diagnostics.Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1 */, missing.baseTypeName, listed);
|
|
402
396
|
else
|
|
403
|
-
c.error(node,
|
|
397
|
+
c.error(node, 795 /* Diagnostics.Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2 */, missing.typeName, missing.baseTypeName, listed);
|
|
404
398
|
}
|
|
405
399
|
function arePropertiesAbstractOrInterface(base, baseDeclarationFlags) {
|
|
406
400
|
// Synthetic (intersection) properties need any declaration to qualify; others need all.
|
|
@@ -416,9 +410,9 @@ function arePropertiesAbstractOrInterface(base, baseDeclarationFlags) {
|
|
|
416
410
|
return true;
|
|
417
411
|
}
|
|
418
412
|
function isPropertyAbstractOrInterface(declaration, baseDeclarationFlags) {
|
|
419
|
-
return (declaration.parent.kind ===
|
|
413
|
+
return (declaration.parent.kind === 266 /* SyntaxKind.InterfaceDeclaration */ ||
|
|
420
414
|
((baseDeclarationFlags & 64 /* ModifierFlags.Abstract */) !== 0 &&
|
|
421
|
-
(declaration.kind !==
|
|
415
|
+
(declaration.kind !== 174 /* SyntaxKind.PropertyDeclaration */ || getInitializer(declaration) === undefined)));
|
|
422
416
|
}
|
|
423
417
|
// ---- `override`
|
|
424
418
|
function checkMembersForOverrideModifier(c, node, t, typeWithThis, staticType) {
|
|
@@ -432,7 +426,7 @@ function checkMembersForOverrideModifier(c, node, t, typeWithThis, staticType) {
|
|
|
432
426
|
for (const member of getMembers(node).nodes) {
|
|
433
427
|
if (hasSyntacticModifier(member, 128 /* ModifierFlags.Ambient */))
|
|
434
428
|
continue;
|
|
435
|
-
if (member.kind ===
|
|
429
|
+
if (member.kind === 178 /* SyntaxKind.Constructor */) {
|
|
436
430
|
for (const param of getParameters(member).nodes)
|
|
437
431
|
if (isParameterPropertyDeclaration(param, member))
|
|
438
432
|
checkMemberForOverrideModifier(c, node, staticType, baseStaticType, baseWithThis, t, typeWithThis, param);
|
|
@@ -447,20 +441,20 @@ function checkMemberForOverrideModifier(c, node, staticType, baseStaticType, bas
|
|
|
447
441
|
if (baseWithThis === undefined) {
|
|
448
442
|
if (memberHasOverrideModifier)
|
|
449
443
|
c.error(member, isJs
|
|
450
|
-
?
|
|
451
|
-
:
|
|
444
|
+
? 1114 /* Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class */
|
|
445
|
+
: 1105 /* Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class */, typeToString(c, t));
|
|
452
446
|
return;
|
|
453
447
|
}
|
|
454
448
|
const memberSymbol = getSymbolOfDeclaration(c, member);
|
|
455
449
|
if (memberHasOverrideModifier &&
|
|
456
450
|
memberSymbol !== undefined &&
|
|
457
451
|
memberSymbol.valueDeclaration !== undefined &&
|
|
458
|
-
member.kind !==
|
|
452
|
+
member.kind !== 171 /* SyntaxKind.Parameter */ &&
|
|
459
453
|
hasDynamicName(member) &&
|
|
460
454
|
!hasLateBindableName(c, member)) {
|
|
461
455
|
c.error(member, isJs
|
|
462
|
-
?
|
|
463
|
-
:
|
|
456
|
+
? 1121 /* Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic */
|
|
457
|
+
: 1120 /* Diagnostics.This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic */);
|
|
464
458
|
return;
|
|
465
459
|
}
|
|
466
460
|
if (!memberHasOverrideModifier && c.compilerOptions.noImplicitOverride !== true)
|
|
@@ -477,12 +471,12 @@ function checkMemberForOverrideModifier(c, node, staticType, baseStaticType, bas
|
|
|
477
471
|
const suggestion = getSpellingSuggestionForName(c, memberSymbol.name, getPropertiesOfType(c, baseType), 106500 /* SymbolFlags.ClassMember */);
|
|
478
472
|
if (suggestion !== undefined)
|
|
479
473
|
c.error(member, isJs
|
|
480
|
-
?
|
|
481
|
-
:
|
|
474
|
+
? 1116 /* Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1 */
|
|
475
|
+
: 1110 /* Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1 */, typeToString(c, baseWithThis), symbolToString(c, suggestion));
|
|
482
476
|
else
|
|
483
477
|
c.error(member, isJs
|
|
484
|
-
?
|
|
485
|
-
:
|
|
478
|
+
? 1115 /* Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0 */
|
|
479
|
+
: 1106 /* Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0 */, typeToString(c, baseWithThis));
|
|
486
480
|
return;
|
|
487
481
|
}
|
|
488
482
|
if (baseProp === undefined ||
|
|
@@ -500,19 +494,19 @@ function checkMemberForOverrideModifier(c, node, staticType, baseStaticType, bas
|
|
|
500
494
|
}
|
|
501
495
|
if (!baseHasAbstract) {
|
|
502
496
|
let message;
|
|
503
|
-
if (member.kind ===
|
|
497
|
+
if (member.kind === 171 /* SyntaxKind.Parameter */)
|
|
504
498
|
message = isJs
|
|
505
|
-
?
|
|
506
|
-
:
|
|
499
|
+
? 1113 /* Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 */
|
|
500
|
+
: 1108 /* Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 */;
|
|
507
501
|
else
|
|
508
502
|
message = isJs
|
|
509
|
-
?
|
|
510
|
-
:
|
|
503
|
+
? 1112 /* Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 */
|
|
504
|
+
: 1107 /* Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0 */;
|
|
511
505
|
c.error(member, message, typeToString(c, baseWithThis));
|
|
512
506
|
return;
|
|
513
507
|
}
|
|
514
508
|
if (hasSyntacticModifier(member, 64 /* ModifierFlags.Abstract */))
|
|
515
|
-
c.error(member,
|
|
509
|
+
c.error(member, 1109 /* Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0 */, typeToString(c, baseWithThis));
|
|
516
510
|
}
|
|
517
511
|
// ---- Interfaces
|
|
518
512
|
/** Checks an interface's merged declarations, base interfaces and index signatures, once per symbol. */
|
|
@@ -524,22 +518,26 @@ export function checkInterfaceHeritage(c, node) {
|
|
|
524
518
|
const links = c.symbolLinks(symbol);
|
|
525
519
|
if (!links.interfaceChecked) {
|
|
526
520
|
links.interfaceChecked = true;
|
|
521
|
+
// Reported on the first interface declaration, whichever declaration is checked first.
|
|
522
|
+
const firstName = getName(getDeclarationOfKind(symbol, 266 /* SyntaxKind.InterfaceDeclaration */));
|
|
527
523
|
const t = getDeclaredTypeOfSymbol(c, symbol);
|
|
528
524
|
if ((t.flags & 1048576 /* TypeFlags.Object */) !== 0) {
|
|
529
525
|
const typeWithThis = getTypeWithThisArgument(c, t, undefined, false);
|
|
530
526
|
// Later checks run only when inherited properties agree.
|
|
531
|
-
if (checkInheritedPropertiesAreIdentical(c, t,
|
|
527
|
+
if (checkInheritedPropertiesAreIdentical(c, t, firstName)) {
|
|
532
528
|
for (const baseType of getBaseTypes(c, t))
|
|
533
|
-
checkTypeAssignableTo(c, typeWithThis, getTypeWithThisArgument(c, baseType, t.thisType, false),
|
|
529
|
+
checkTypeAssignableTo(c, typeWithThis, getTypeWithThisArgument(c, baseType, t.thisType, false), firstName, 605 /* Diagnostics.Interface_0_incorrectly_extends_interface_1 */);
|
|
534
530
|
checkIndexConstraints(c, t, symbol, false);
|
|
535
531
|
}
|
|
536
532
|
}
|
|
537
533
|
}
|
|
538
534
|
checkObjectTypeForDuplicateDeclarations(c, node, false);
|
|
539
535
|
for (const element of getExtendsHeritageClauseElements(node)) {
|
|
536
|
+
if (element.kind !== 235 /* SyntaxKind.ExpressionWithTypeArguments */)
|
|
537
|
+
continue;
|
|
540
538
|
const expr = getExpression(element);
|
|
541
539
|
if (!isEntityNameExpression(expr) || isOptionalChain(expr))
|
|
542
|
-
c.error(expr,
|
|
540
|
+
c.error(expr, 666 /* Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments */);
|
|
543
541
|
}
|
|
544
542
|
}
|
|
545
543
|
/** Checks a type literal's index signatures and members after its members are checked. */
|
|
@@ -581,8 +579,8 @@ function checkInheritedPropertiesAreIdentical(c, t, typeNode) {
|
|
|
581
579
|
identical = false;
|
|
582
580
|
const typeName1 = typeToString(c, existing.containingType);
|
|
583
581
|
const typeName2 = typeToString(c, base);
|
|
584
|
-
const errorInfo = createDiagnosticForNode(typeNode,
|
|
585
|
-
c.addDiagnostic(chainDiagnostic(errorInfo,
|
|
582
|
+
const errorInfo = createDiagnosticForNode(typeNode, 504 /* Diagnostics.Named_property_0_of_types_1_and_2_are_not_identical */, [symbolToString(c, prop), typeName1, typeName2]);
|
|
583
|
+
c.addDiagnostic(chainDiagnostic(errorInfo, 505 /* Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2 */, typeToString(c, t), typeName1, typeName2));
|
|
586
584
|
}
|
|
587
585
|
}
|
|
588
586
|
}
|
|
@@ -599,7 +597,7 @@ export function checkTypeParameterListsIdentical(c, symbol) {
|
|
|
599
597
|
links.typeParametersChecked = true;
|
|
600
598
|
const declarations = [];
|
|
601
599
|
for (const d of getDeclarations(symbol))
|
|
602
|
-
if (d.kind ===
|
|
600
|
+
if (d.kind === 265 /* SyntaxKind.ClassDeclaration */ || d.kind === 266 /* SyntaxKind.InterfaceDeclaration */)
|
|
603
601
|
declarations.push(d);
|
|
604
602
|
if (declarations.length <= 1)
|
|
605
603
|
return;
|
|
@@ -615,7 +613,7 @@ export function checkTypeParameterListsIdentical(c, symbol) {
|
|
|
615
613
|
return;
|
|
616
614
|
const name = symbolToString(c, symbol);
|
|
617
615
|
for (const d of declarations)
|
|
618
|
-
c.error(getName(d),
|
|
616
|
+
c.error(getName(d), 604 /* Diagnostics.All_declarations_of_0_must_have_identical_type_parameters */, name);
|
|
619
617
|
}
|
|
620
618
|
/** Reports the declarations of an `infer` type parameter declared more than once with different constraints. */
|
|
621
619
|
export function checkInferTypeParameterDeclarations(c, symbol) {
|
|
@@ -628,7 +626,7 @@ export function checkInferTypeParameterDeclarations(c, symbol) {
|
|
|
628
626
|
const declarations = [];
|
|
629
627
|
const typeParameterLists = [];
|
|
630
628
|
for (const d of getDeclarations(symbol)) {
|
|
631
|
-
if (d.kind ===
|
|
629
|
+
if (d.kind === 170 /* SyntaxKind.TypeParameter */) {
|
|
632
630
|
declarations.push(d);
|
|
633
631
|
typeParameterLists.push([d]);
|
|
634
632
|
}
|
|
@@ -637,7 +635,7 @@ export function checkInferTypeParameterDeclarations(c, symbol) {
|
|
|
637
635
|
return;
|
|
638
636
|
const name = symbolToString(c, symbol);
|
|
639
637
|
for (const d of declarations)
|
|
640
|
-
c.error(getName(d),
|
|
638
|
+
c.error(getName(d), 967 /* Diagnostics.All_declarations_of_0_must_have_identical_constraints */, name);
|
|
641
639
|
}
|
|
642
640
|
function areTypeParametersIdentical(c, lists, targetParameters) {
|
|
643
641
|
const maxTypeArgumentCount = targetParameters.length;
|
|
@@ -675,7 +673,7 @@ export function checkObjectTypeForDuplicateDeclarations(c, node, checkPrivateNam
|
|
|
675
673
|
const privateNames = new Map();
|
|
676
674
|
const nodeInAmbientContext = (node.flags & 8388608 /* NodeFlags.Ambient */) !== 0;
|
|
677
675
|
for (const member of getMembers(node).nodes) {
|
|
678
|
-
if (member.kind ===
|
|
676
|
+
if (member.kind === 178 /* SyntaxKind.Constructor */) {
|
|
679
677
|
for (const param of getParameters(member).nodes)
|
|
680
678
|
if (isParameterPropertyDeclaration(param, member) && !isBindingPattern(getName(param))) {
|
|
681
679
|
const symbol = getSymbolOfDeclaration(c, param);
|
|
@@ -689,15 +687,15 @@ export function checkObjectTypeForDuplicateDeclarations(c, node, checkPrivateNam
|
|
|
689
687
|
continue;
|
|
690
688
|
const memberIsStatic = hasStaticModifier(member);
|
|
691
689
|
if (!nodeInAmbientContext && memberIsStatic && symbol.name === 'prototype')
|
|
692
|
-
c.error(getName(member),
|
|
690
|
+
c.error(getName(member), 838 /* Diagnostics.Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1 */, symbol.name, symbolToString(c, getSymbolOfDeclaration(c, node)));
|
|
693
691
|
const names = memberIsStatic ? staticNames : instanceNames;
|
|
694
692
|
const hasAccessorModifier = hasSyntacticModifier(member, 512 /* ModifierFlags.Accessor */);
|
|
695
|
-
if ((member.kind ===
|
|
696
|
-
member.kind ===
|
|
693
|
+
if ((member.kind === 174 /* SyntaxKind.PropertyDeclaration */ && !hasAccessorModifier) ||
|
|
694
|
+
member.kind === 173 /* SyntaxKind.PropertySignature */)
|
|
697
695
|
checkPropertyOrAccessor(c, node, names, symbol, 1 /* MemberKind.Property */, memberIsStatic);
|
|
698
|
-
else if (member.kind ===
|
|
699
|
-
member.kind ===
|
|
700
|
-
(member.kind ===
|
|
696
|
+
else if (member.kind === 179 /* SyntaxKind.GetAccessor */ ||
|
|
697
|
+
member.kind === 180 /* SyntaxKind.SetAccessor */ ||
|
|
698
|
+
(member.kind === 174 /* SyntaxKind.PropertyDeclaration */ && hasAccessorModifier))
|
|
701
699
|
checkPropertyOrAccessor(c, node, names, symbol, 2 /* MemberKind.Accessor */, memberIsStatic);
|
|
702
700
|
const name = getName(member);
|
|
703
701
|
if (checkPrivateNames && name !== undefined && name.kind === 80 /* SyntaxKind.PrivateIdentifier */) {
|
|
@@ -707,7 +705,7 @@ export function checkObjectTypeForDuplicateDeclarations(c, node, checkPrivateNam
|
|
|
707
705
|
flags |= isStatic(member) ? 2 : 1;
|
|
708
706
|
privateNames.set(symbol.name, flags);
|
|
709
707
|
if (flags === 3)
|
|
710
|
-
reportDuplicateMemberErrors(c, node, symbol.name, false, false,
|
|
708
|
+
reportDuplicateMemberErrors(c, node, symbol.name, false, false, 943 /* Diagnostics.Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name */);
|
|
711
709
|
}
|
|
712
710
|
}
|
|
713
711
|
}
|
|
@@ -719,13 +717,13 @@ function checkPropertyOrAccessor(c, node, names, symbol, kind, isStaticMember) {
|
|
|
719
717
|
names.set(symbol.name, kind);
|
|
720
718
|
// A second property, or a property combined with an accessor.
|
|
721
719
|
else if (state === 1 /* MemberKind.Property */ || (state === 2 /* MemberKind.Accessor */ && kind !== 2 /* MemberKind.Accessor */)) {
|
|
722
|
-
reportDuplicateMemberErrors(c, node, symbol.name, true, isStaticMember,
|
|
720
|
+
reportDuplicateMemberErrors(c, node, symbol.name, true, isStaticMember, 485 /* Diagnostics.Duplicate_identifier_0 */);
|
|
723
721
|
names.set(symbol.name, 3 /* MemberKind.Reported */);
|
|
724
722
|
}
|
|
725
723
|
}
|
|
726
724
|
function reportDuplicateMemberErrors(c, node, name, checkStatic, isStaticMember, message) {
|
|
727
725
|
for (const member of getMembers(node).nodes) {
|
|
728
|
-
if (member.kind ===
|
|
726
|
+
if (member.kind === 178 /* SyntaxKind.Constructor */) {
|
|
729
727
|
for (const param of getParameters(member).nodes) {
|
|
730
728
|
if (!isParameterPropertyDeclaration(param, member) || isBindingPattern(getName(param)))
|
|
731
729
|
continue;
|
|
@@ -790,10 +788,10 @@ function checkIndexConstraintForProperty(c, t, prop, propNameType, propType) {
|
|
|
790
788
|
if (indexInfos.length === 0)
|
|
791
789
|
return;
|
|
792
790
|
const interfaceDeclaration = (t.objectFlags & 2 /* ObjectFlags.Interface */) !== 0
|
|
793
|
-
? getDeclarationOfKind(t.symbol,
|
|
791
|
+
? getDeclarationOfKind(t.symbol, 266 /* SyntaxKind.InterfaceDeclaration */)
|
|
794
792
|
: undefined;
|
|
795
|
-
const propDeclaration = (declaration !== undefined && declaration.kind ===
|
|
796
|
-
(name !== undefined && name.kind ===
|
|
793
|
+
const propDeclaration = (declaration !== undefined && declaration.kind === 228 /* SyntaxKind.BinaryExpression */) ||
|
|
794
|
+
(name !== undefined && name.kind === 169 /* SyntaxKind.ComputedPropertyName */)
|
|
797
795
|
? declaration
|
|
798
796
|
: undefined;
|
|
799
797
|
const localPropDeclaration = getParentOfSymbol(c, prop) === t.symbol ? declaration : undefined;
|
|
@@ -807,14 +805,14 @@ function checkIndexConstraintForProperty(c, t, prop, propNameType, propType) {
|
|
|
807
805
|
errorNode = interfaceDeclaration;
|
|
808
806
|
if (errorNode === undefined || isTypeAssignableTo(c, propType, info.valueType))
|
|
809
807
|
continue;
|
|
810
|
-
const diagnostic = createDiagnosticForNode(errorNode,
|
|
808
|
+
const diagnostic = createDiagnosticForNode(errorNode, 589 /* Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3 */, [
|
|
811
809
|
symbolToString(c, prop),
|
|
812
810
|
typeToString(c, propType),
|
|
813
811
|
typeToString(c, info.keyType),
|
|
814
812
|
typeToString(c, info.valueType),
|
|
815
813
|
]);
|
|
816
814
|
if (propDeclaration !== undefined && errorNode !== propDeclaration)
|
|
817
|
-
diagnostic.addRelatedInfo(createDiagnosticForNode(propDeclaration,
|
|
815
|
+
diagnostic.addRelatedInfo(createDiagnosticForNode(propDeclaration, 867 /* Diagnostics.X_0_is_declared_here */, [symbolToString(c, prop)]));
|
|
818
816
|
c.addDiagnostic(diagnostic);
|
|
819
817
|
}
|
|
820
818
|
}
|
|
@@ -835,7 +833,7 @@ function checkIndexConstraintForIndexSignature(c, t, checkInfo) {
|
|
|
835
833
|
if (indexInfos.length === 0)
|
|
836
834
|
return;
|
|
837
835
|
const interfaceDeclaration = (t.objectFlags & 2 /* ObjectFlags.Interface */) !== 0
|
|
838
|
-
? getDeclarationOfKind(t.symbol,
|
|
836
|
+
? getDeclarationOfKind(t.symbol, 266 /* SyntaxKind.InterfaceDeclaration */)
|
|
839
837
|
: undefined;
|
|
840
838
|
const localCheckDeclaration = getLocalIndexDeclaration(c, t, checkInfo);
|
|
841
839
|
for (const info of indexInfos) {
|
|
@@ -847,7 +845,7 @@ function checkIndexConstraintForIndexSignature(c, t, checkInfo) {
|
|
|
847
845
|
!someBaseHasIndexTypes(c, t, checkInfo.keyType, info.keyType))
|
|
848
846
|
errorNode = interfaceDeclaration;
|
|
849
847
|
if (errorNode !== undefined && !isTypeAssignableTo(c, checkInfo.valueType, info.valueType))
|
|
850
|
-
c.error(errorNode,
|
|
848
|
+
c.error(errorNode, 591 /* Diagnostics.X_0_index_type_1_is_not_assignable_to_2_index_type_3 */, typeToString(c, checkInfo.keyType), typeToString(c, checkInfo.valueType), typeToString(c, info.keyType), typeToString(c, info.valueType));
|
|
851
849
|
}
|
|
852
850
|
}
|
|
853
851
|
/** Reports duplicate index signatures of a class or interface, once per symbol. */
|
|
@@ -872,7 +870,7 @@ function checkTypeForDuplicateIndexSignatures(c, node) {
|
|
|
872
870
|
const keyTypes = [];
|
|
873
871
|
const declarationsByKey = [];
|
|
874
872
|
for (const declaration of getDeclarations(indexSymbol)) {
|
|
875
|
-
if (declaration.kind !==
|
|
873
|
+
if (declaration.kind !== 183 /* SyntaxKind.IndexSignature */)
|
|
876
874
|
continue;
|
|
877
875
|
const parameters = getParameters(declaration).nodes;
|
|
878
876
|
if (parameters.length !== 1)
|
|
@@ -896,6 +894,6 @@ function checkTypeForDuplicateIndexSignatures(c, node) {
|
|
|
896
894
|
if (declarationsByKey[i].length <= 1)
|
|
897
895
|
continue;
|
|
898
896
|
for (const declaration of declarationsByKey[i])
|
|
899
|
-
c.error(declaration,
|
|
897
|
+
c.error(declaration, 555 /* Diagnostics.Duplicate_index_signature_for_type_0 */, typeToString(c, keyTypes[i]));
|
|
900
898
|
}
|
|
901
899
|
}
|