From 74806dfd13ec86067cbba1a3931c8aa603bbc09a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 22:15:11 +0000 Subject: [PATCH 1/2] deps(deps): bump microsoft/typescript-go from `63b00de` to `bd7c18d` Bumps [microsoft/typescript-go](https://github.com/microsoft/typescript-go) from `63b00de` to `bd7c18d`. - [Commits](https://github.com/microsoft/typescript-go/compare/63b00de5083cdfffdb77df46341a8d30bd9c3b67...bd7c18dc8ed3c5ed960d72f1e329353f0a594bcc) --- updated-dependencies: - dependency-name: microsoft/typescript-go dependency-version: bd7c18dc8ed3c5ed960d72f1e329353f0a594bcc dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- microsoft/typescript-go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microsoft/typescript-go b/microsoft/typescript-go index 63b00de5..bd7c18dc 160000 --- a/microsoft/typescript-go +++ b/microsoft/typescript-go @@ -1 +1 @@ -Subproject commit 63b00de5083cdfffdb77df46341a8d30bd9c3b67 +Subproject commit bd7c18dc8ed3c5ed960d72f1e329353f0a594bcc From 7c7a435cdf6a7dab914060d6614f3a6dade12947 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Nov 2025 15:08:32 +0800 Subject: [PATCH 2/2] chore(sync): mirror internal packages into pkg/ (auto) (#29) Co-authored-by: buke <1013738+buke@users.noreply.github.com> --- pkg/ast/ast.go | 14 +- pkg/ast/diagnostic.go | 46 +- pkg/bundled/generate.go | 3 +- pkg/checker/jsx.go | 44 +- pkg/checker/relater.go | 13 +- pkg/compiler/fileloader.go | 10 +- pkg/compiler/filesparser.go | 8 +- pkg/compiler/host.go | 15 +- pkg/compiler/program.go | 50 +- pkg/compiler/projectreferencefilemapper.go | 41 +- pkg/core/context.go | 14 - pkg/diagnostics/diagnostics.go | 110 +- pkg/diagnostics/diagnostics_generated.go | 4265 ++++++++++++++++- pkg/diagnostics/diagnostics_test.go | 145 + pkg/diagnostics/extraDiagnosticMessages.json | 4 + pkg/diagnostics/generate.go | 293 +- pkg/diagnostics/loc/cs-CZ.json.gz | Bin 0 -> 83850 bytes pkg/diagnostics/loc/de-DE.json.gz | Bin 0 -> 85088 bytes pkg/diagnostics/loc/es-ES.json.gz | Bin 0 -> 81793 bytes pkg/diagnostics/loc/fr-FR.json.gz | Bin 0 -> 83443 bytes pkg/diagnostics/loc/it-IT.json.gz | Bin 0 -> 80082 bytes pkg/diagnostics/loc/ja-JP.json.gz | Bin 0 -> 85685 bytes pkg/diagnostics/loc/ko-KR.json.gz | Bin 0 -> 81845 bytes pkg/diagnostics/loc/pl-PL.json.gz | Bin 0 -> 85864 bytes pkg/diagnostics/loc/pt-BR.json.gz | Bin 0 -> 80394 bytes pkg/diagnostics/loc/ru-RU.json.gz | Bin 0 -> 95356 bytes pkg/diagnostics/loc/tr-TR.json.gz | Bin 0 -> 81450 bytes pkg/diagnostics/loc/zh-CN.json.gz | Bin 0 -> 81310 bytes pkg/diagnostics/loc/zh-TW.json.gz | Bin 0 -> 81323 bytes pkg/diagnostics/loc_generated.go | 151 + pkg/diagnosticwriter/diagnosticwriter.go | 46 +- pkg/execute/build/buildtask.go | 2 +- pkg/execute/build/compilerHost.go | 7 +- pkg/execute/build/host.go | 3 +- pkg/execute/build/orchestrator.go | 8 +- pkg/execute/incremental/buildInfo.go | 3 +- .../incremental/buildinfotosnapshot.go | 3 +- pkg/execute/incremental/snapshot.go | 15 +- .../incremental/snapshottobuildinfo.go | 6 +- pkg/execute/tsc.go | 38 +- pkg/execute/tsc/compile.go | 4 +- pkg/execute/tsc/diagnostics.go | 20 +- pkg/execute/tsc/emit.go | 12 +- pkg/execute/tsc/help.go | 82 +- pkg/execute/tsc/init.go | 13 +- pkg/execute/tsctests/readablebuildinfo.go | 6 +- pkg/execute/tsctests/sys.go | 148 +- pkg/execute/tsctests/tsc_test.go | 8 + pkg/execute/tsctests/tscbuild_test.go | 10 + pkg/execute/watcher.go | 4 +- pkg/fourslash/_scripts/convertFourslash.mts | 278 +- pkg/fourslash/_scripts/manualTests.txt | 6 + pkg/fourslash/_scripts/updateFailing.mts | 4 +- pkg/fourslash/baselineutil.go | 33 +- pkg/fourslash/fourslash.go | 467 +- pkg/fourslash/statebaseline.go | 509 ++ pkg/fourslash/test_parser.go | 27 +- .../tests/gen/declareFunction_test.go | 26 + .../tests/gen/navigateItemsLet_test.go | 46 + .../tests/gen/navigateToImport_test.go | 55 + .../gen/navigateToSymbolIterator_test.go | 34 + ...ationItemsInConstructorsExactMatch_test.go | 49 + .../gen/navigationItemsPrefixMatch2_test.go | 94 + .../tests/gen/navto_emptyPattern_test.go | 38 + .../tests/gen/navto_excludeLib3_test.go | 32 + .../manual/navigationItemsExactMatch2_test.go | 101 + ...tionItemsSpecialPropertyAssignment_test.go | 92 + .../tests/manual/navto_excludeLib1_test.go | 58 + .../tests/manual/navto_excludeLib2_test.go | 52 + .../tests/statedeclarationmaps_test.go | 380 ++ pkg/fourslash/tests/statefindallrefs_test.go | 1120 +++++ pkg/fourslash/tests/staterename_test.go | 132 + pkg/locale/locale.go | 28 + pkg/ls/autoimports.go | 28 +- pkg/ls/codeactions_importfixes.go | 5 +- pkg/ls/documenthighlights.go | 4 +- pkg/ls/findallreferences.go | 263 +- pkg/ls/hover.go | 293 +- pkg/ls/languageservice.go | 5 + pkg/ls/lsconv/converters.go | 18 +- pkg/ls/lsutil/userpreferences.go | 35 +- pkg/ls/source_map.go | 45 + pkg/ls/symbols.go | 51 +- pkg/lsp/lsproto/_generate/generate.mts | 220 +- pkg/lsp/lsproto/lsp.go | 5 + pkg/lsp/lsproto/lsp_generated.go | 395 ++ pkg/lsp/server.go | 350 +- pkg/module/resolver.go | 181 +- pkg/packagejson/cache.go | 41 +- pkg/project/compilerhost.go | 3 +- pkg/project/configfileregistry.go | 68 + pkg/project/configfileregistrybuilder.go | 44 +- pkg/project/project.go | 38 + pkg/project/projectcollection.go | 15 + pkg/project/projectcollectionbuilder.go | 309 +- pkg/project/projectcollectionbuilder_test.go | 4 +- pkg/project/projectreferencesprogram_test.go | 17 +- pkg/project/session.go | 145 +- pkg/project/snapshot.go | 67 +- pkg/project/snapshotfs.go | 11 + pkg/project/untitled_test.go | 8 +- pkg/sourcemap/util.go | 26 +- pkg/stringutil/format.go | 19 - pkg/testutil/fsbaselineutil/differ.go | 122 + pkg/testutil/harnessutil/harnessutil.go | 6 +- .../projecttestutil/projecttestutil.go | 51 +- pkg/testutil/stringtestutil/stringtestutil.go | 10 +- pkg/testutil/tsbaseline/error_baseline.go | 5 +- pkg/tsoptions/commandlineoption.go | 16 +- pkg/tsoptions/declscompiler.go | 1 + pkg/tsoptions/parsedbuildcommandline.go | 11 + pkg/tsoptions/parsedcommandline.go | 11 + pkg/tsoptions/tsconfigparsing.go | 20 +- pkg/tsoptions/tsconfigparsing_test.go | 5 +- ...ortProvider_referencesCrash.baseline.jsonc | 6 +- ...encesUmdModuleAsGlobalConst.baseline.jsonc | 4 + ...initionAcrossModuleProjects.baseline.jsonc | 100 + .../state/declarationMapsFindAllRefs.baseline | 170 + ...FindAllRefsDefinitionInMappedFile.baseline | 109 + ...psFindAllRefsStartingAtDefinition.baseline | 208 + ...MapsFindAllRefsTargetDoesNotExist.baseline | 154 + ...apsOpeningOriginalLocationProject.baseline | 107 + ...eSourceOfProjectReferenceRedirect.baseline | 107 + .../state/declarationMapsRename.baseline | 168 + ...ionMapsRenameStartingAtDefinition.baseline | 206 + ...ationMapsRenameTargetDoesNotExist.baseline | 152 + ...eSourceOfProjectReferenceRedirect.baseline | 446 ++ ...rceOfProjectReferenceRedirectEdit.baseline | 929 ++++ ...OfProjectReferenceRedirectEditEnd.baseline | 703 +++ ...onMapsRenameWithProjectReferences.baseline | 300 ++ ...psRenameWithProjectReferencesEdit.baseline | 779 +++ ...enameWithProjectReferencesEditEnd.baseline | 553 +++ ...clarationMapsRenameWithSourceMaps.baseline | 423 ++ ...ationMapsRenameWithSourceMapsEdit.baseline | 891 ++++ ...onMapsRenameWithSourceMapsEditEnd.baseline | 665 +++ ...psRenameWithSourceMapsNotSolution.baseline | 457 ++ ...nameWithSourceMapsNotSolutionEdit.baseline | 936 ++++ ...eWithSourceMapsNotSolutionEditEnd.baseline | 710 +++ .../declarationMapsWorkspaceSymbols.baseline | 216 + ...efsAncestorSiblingProjectsLoading.baseline | 179 + ...tsLoadingDisableSolutionSearching.baseline | 139 + ...irectsAreDisabledDeclMapIsMissing.baseline | 130 + ...irectsAreDisabledDeclMapIsPresent.baseline | 142 + ...directsAreEnabledDeclMapIsMissing.baseline | 130 + ...directsAreEnabledDeclMapIsPresent.baseline | 142 + ...irectsAreDisabledDeclMapIsMissing.baseline | 130 + ...irectsAreDisabledDeclMapIsPresent.baseline | 142 + ...directsAreEnabledDeclMapIsMissing.baseline | 130 + ...directsAreEnabledDeclMapIsPresent.baseline | 142 + ...irectsAreDisabledDeclMapIsMissing.baseline | 88 + ...irectsAreDisabledDeclMapIsPresent.baseline | 118 + ...directsAreEnabledDeclMapIsMissing.baseline | 88 + ...directsAreEnabledDeclMapIsPresent.baseline | 118 + ...irectsAreDisabledDeclMapIsMissing.baseline | 88 + ...irectsAreDisabledDeclMapIsPresent.baseline | 118 + ...directsAreEnabledDeclMapIsMissing.baseline | 88 + ...directsAreEnabledDeclMapIsPresent.baseline | 118 + ...terItsUpdateDoesNotIncludeTheFile.baseline | 452 ++ ...onfiguredProjectThatWillBeRemoved.baseline | 122 + .../findAllRefsOverlappingProjects.baseline | 237 + ...erencingFileFromReferencedProject.baseline | 514 ++ ...indAllRefsRootOfReferencedProject.baseline | 163 + ...fReferencedProjectDeclarationMaps.baseline | 368 ++ ...ReferencingDefaultProjectDirectly.baseline | 447 ++ ...ferencingDefaultProjectIndirectly.baseline | 623 +++ ...roughDisableReferencedProjectLoad.baseline | 597 +++ ...ectLoadInOneButWithoutItInAnother.baseline | 624 +++ ...ReferencingDefaultProjectDirectly.baseline | 422 ++ ...owFunctionAsObjectLiteralProperty.baseline | 130 + ...ctionAsObjectLiteralPropertyTypes.baseline | 145 + ...fLocalnessArrowFunctionAssignment.baseline | 145 + ...fLocalnessMethodOfClassExpression.baseline | 149 + ...gOfLocalnessObjectLiteralProperty.baseline | 145 + ...ojectsOpenAndOneProjectReferences.baseline | 369 ++ ...renameAncestorProjectRefMangement.baseline | 254 + .../state/renameInCommonFile.baseline | 197 + .../tsbuild/commandLine/bad-locale.js | 9 + .../reference/tsbuild/commandLine/locale.js | 147 + ...-dts-generation-errors-with-incremental.js | 15 +- ...s-not-in-rootDir-at-the-import-location.js | 9 +- .../fileDelete/detects-deleted-file.js | 9 +- ...hange-in-signature-with-isolatedModules.js | 20 +- ...based-projects-and-emits-them-correctly.js | 20 +- .../noCheck/dts-errors-with-incremental.js | 108 +- .../semantic-errors-with-incremental.js | 50 +- .../noCheck/syntax-errors-with-incremental.js | 40 +- .../tsbuild/noEmit/changes-composite.js | 56 +- .../noEmit/changes-incremental-declaration.js | 56 +- .../tsbuild/noEmit/changes-incremental.js | 56 +- .../changes-with-initial-noEmit-composite.js | 28 +- ...-initial-noEmit-incremental-declaration.js | 28 +- ...changes-with-initial-noEmit-incremental.js | 28 +- ...ble-changes-with-incremental-as-modules.js | 46 +- ...aration-enable-changes-with-incremental.js | 46 +- ...tion-enable-changes-with-multiple-files.js | 228 +- .../dts-errors-with-incremental-as-modules.js | 50 +- .../noEmit/dts-errors-with-incremental.js | 50 +- ...dts-enabled-with-incremental-as-modules.js | 16 +- ...rs-without-dts-enabled-with-incremental.js | 16 +- ...ntic-errors-with-incremental-as-modules.js | 30 +- .../semantic-errors-with-incremental.js | 30 +- ...rrors-with-declaration-with-incremental.js | 14 +- ...rrors-with-declaration-with-incremental.js | 10 +- .../semantic-errors-with-incremental.js | 10 +- ...hen-there-are-23-projects-in-a-solution.js | 6 +- ...when-there-are-3-projects-in-a-solution.js | 6 +- ...when-there-are-5-projects-in-a-solution.js | 6 +- ...when-there-are-8-projects-in-a-solution.js | 6 +- ...iles-containing-json-file-non-composite.js | 26 +- .../files-containing-json-file.js | 26 +- .../include-and-files-non-composite.js | 26 +- .../resolveJsonModule/include-and-files.js | 26 +- ...file-name-matches-ts-file-non-composite.js | 26 +- ...r-include-and-file-name-matches-ts-file.js | 26 +- ...-along-with-other-include-non-composite.js | 26 +- ...nclude-of-json-along-with-other-include.js | 26 +- .../include-only-non-composite.js | 26 +- ...t-outside-configDirectory-non-composite.js | 26 +- ...out-rootDir-but-outside-configDirectory.js | 26 +- ...clude-only-without-outDir-non-composite.js | 24 +- .../include-only-without-outDir.js | 24 +- .../tsbuild/resolveJsonModule/include-only.js | 26 +- .../without-outDir-non-composite.js | 24 +- .../resolveJsonModule/without-outDir.js | 24 +- ...s-even-if-upstream-projects-have-errors.js | 10 +- ...ror-if-input-file-is-missing-with-force.js | 18 +- .../reports-error-if-input-file-is-missing.js | 18 +- ...rrors-when-test-does-not-reference-core.js | 15 +- ...ects-have-errors-with-stopBuildOnErrors.js | 15 +- ...de-resolution-with-external-module-name.js | 9 +- .../demo/updates-with-bad-reference.js | 18 +- .../dts-errors-with-incremental-as-modules.js | 50 +- .../noEmit/dts-errors-with-incremental.js | 50 +- ...dts-enabled-with-incremental-as-modules.js | 16 +- ...rs-without-dts-enabled-with-incremental.js | 16 +- ...ntic-errors-with-incremental-as-modules.js | 30 +- .../semantic-errors-with-incremental.js | 30 +- ...Error-with-declaration-with-incremental.js | 28 +- .../noEmitOnError-with-incremental.js | 18 +- ...ceError-when-file-with-no-error-changes.js | 50 +- ...ing-errors-only-changed-file-is-emitted.js | 32 +- ...tErrors-when-file-with-no-error-changes.js | 36 +- ...ixing-error-files-all-files-are-emitted.js | 18 +- ...hen-there-are-23-projects-in-a-solution.js | 6 +- ...when-there-are-3-projects-in-a-solution.js | 6 +- ...when-there-are-5-projects-in-a-solution.js | 6 +- ...when-there-are-8-projects-in-a-solution.js | 6 +- ...rs-when-preserveWatchOutput-is-not-used.js | 20 +- ...veWatchOutput-is-passed-on-command-line.js | 20 +- ...BuildOnErrors-is-passed-on-command-line.js | 20 +- ...rrors-when-test-does-not-reference-core.js | 15 +- ...ects-have-errors-with-stopBuildOnErrors.js | 15 +- .../reference/tsc/commandLine/bad-locale.js | 9 + .../reference/tsc/commandLine/locale.js | 9 + ...le-from-CJS-module-error-on-jsx-element.js | 11 +- ...-dts-generation-errors-with-incremental.js | 15 +- ...ing-Windows-paths-and-uppercase-letters.js | 42 +- ...ion-field-with-declaration-emit-enabled.js | 24 +- ...e-to-modifier-of-class-expression-field.js | 14 +- ...types-found-doesnt-crash-under---strict.js | 10 +- .../incremental/serializing-error-chain.js | 27 +- .../tsc/moduleResolution/alternateResult.js | 236 +- .../moduleResolution/package-json-scope.js | 15 +- .../noCheck/dts-errors-with-incremental.js | 108 +- .../semantic-errors-with-incremental.js | 50 +- .../noCheck/syntax-errors-with-incremental.js | 40 +- .../reference/tsc/noEmit/changes-composite.js | 56 +- .../noEmit/changes-incremental-declaration.js | 56 +- .../tsc/noEmit/changes-incremental.js | 56 +- .../changes-with-initial-noEmit-composite.js | 28 +- ...-initial-noEmit-incremental-declaration.js | 28 +- ...changes-with-initial-noEmit-incremental.js | 28 +- ...tion-enable-changes-with-multiple-files.js | 228 +- .../dts-errors-with-incremental-as-modules.js | 50 +- .../tsc/noEmit/dts-errors-with-incremental.js | 50 +- ...dts-enabled-with-incremental-as-modules.js | 16 +- ...rs-without-dts-enabled-with-incremental.js | 16 +- ...ntic-errors-with-incremental-as-modules.js | 30 +- .../semantic-errors-with-incremental.js | 30 +- ...rrors-with-declaration-with-incremental.js | 14 +- ...-before-fixing-error-with-noEmitOnError.js | 20 +- ...rrors-with-declaration-with-incremental.js | 10 +- .../semantic-errors-with-incremental.js | 10 +- .../when-declarationMap-changes.js | 10 +- ...g-when-module-reference-is-not-relative.js | 10 +- ...ce-error-when-the-input-file-is-missing.js | 10 +- .../redirects-to-the-output-dts-file.js | 10 +- 287 files changed, 31454 insertions(+), 2298 deletions(-) create mode 100644 pkg/diagnostics/diagnostics_test.go create mode 100644 pkg/diagnostics/loc/cs-CZ.json.gz create mode 100644 pkg/diagnostics/loc/de-DE.json.gz create mode 100644 pkg/diagnostics/loc/es-ES.json.gz create mode 100644 pkg/diagnostics/loc/fr-FR.json.gz create mode 100644 pkg/diagnostics/loc/it-IT.json.gz create mode 100644 pkg/diagnostics/loc/ja-JP.json.gz create mode 100644 pkg/diagnostics/loc/ko-KR.json.gz create mode 100644 pkg/diagnostics/loc/pl-PL.json.gz create mode 100644 pkg/diagnostics/loc/pt-BR.json.gz create mode 100644 pkg/diagnostics/loc/ru-RU.json.gz create mode 100644 pkg/diagnostics/loc/tr-TR.json.gz create mode 100644 pkg/diagnostics/loc/zh-CN.json.gz create mode 100644 pkg/diagnostics/loc/zh-TW.json.gz create mode 100644 pkg/diagnostics/loc_generated.go create mode 100644 pkg/fourslash/statebaseline.go create mode 100644 pkg/fourslash/tests/gen/declareFunction_test.go create mode 100644 pkg/fourslash/tests/gen/navigateItemsLet_test.go create mode 100644 pkg/fourslash/tests/gen/navigateToImport_test.go create mode 100644 pkg/fourslash/tests/gen/navigateToSymbolIterator_test.go create mode 100644 pkg/fourslash/tests/gen/navigationItemsInConstructorsExactMatch_test.go create mode 100644 pkg/fourslash/tests/gen/navigationItemsPrefixMatch2_test.go create mode 100644 pkg/fourslash/tests/gen/navto_emptyPattern_test.go create mode 100644 pkg/fourslash/tests/gen/navto_excludeLib3_test.go create mode 100644 pkg/fourslash/tests/manual/navigationItemsExactMatch2_test.go create mode 100644 pkg/fourslash/tests/manual/navigationItemsSpecialPropertyAssignment_test.go create mode 100644 pkg/fourslash/tests/manual/navto_excludeLib1_test.go create mode 100644 pkg/fourslash/tests/manual/navto_excludeLib2_test.go create mode 100644 pkg/fourslash/tests/statedeclarationmaps_test.go create mode 100644 pkg/fourslash/tests/statefindallrefs_test.go create mode 100644 pkg/fourslash/tests/staterename_test.go create mode 100644 pkg/locale/locale.go delete mode 100644 pkg/stringutil/format.go create mode 100644 pkg/testutil/fsbaselineutil/differ.go create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefs.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsDefinitionInMappedFile.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsStartingAtDefinition.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsTargetDoesNotExist.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsOpeningOriginalLocationProject.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsOpeningOriginalLocationProjectDisableSourceOfProjectReferenceRedirect.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRename.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameStartingAtDefinition.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameTargetDoesNotExist.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirect.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirectEdit.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirectEditEnd.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferences.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferencesEdit.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferencesEditEnd.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMaps.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsEdit.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsEditEnd.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolution.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolutionEdit.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolutionEditEnd.baseline create mode 100644 testdata/baselines/reference/fourslash/state/declarationMapsWorkspaceSymbols.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsAncestorSiblingProjectsLoading.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsAncestorSiblingProjectsLoadingDisableSolutionSearching.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsDoesNotTryToSearchProjectAfterItsUpdateDoesNotIncludeTheFile.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsOpenFileInConfiguredProjectThatWillBeRemoved.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsOverlappingProjects.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsProjectWithOwnFilesReferencingFileFromReferencedProject.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsRootOfReferencedProject.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsRootOfReferencedProjectDeclarationMaps.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectDirectly.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectly.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectlyThroughDisableReferencedProjectLoad.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectlyThroughDisableReferencedProjectLoadInOneButWithoutItInAnother.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsSolutionWithDisableReferencedProjectLoadReferencingDefaultProjectDirectly.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAsObjectLiteralProperty.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAsObjectLiteralPropertyTypes.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAssignment.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessMethodOfClassExpression.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessObjectLiteralProperty.baseline create mode 100644 testdata/baselines/reference/fourslash/state/findAllRefsTwoProjectsOpenAndOneProjectReferences.baseline create mode 100644 testdata/baselines/reference/fourslash/state/renameAncestorProjectRefMangement.baseline create mode 100644 testdata/baselines/reference/fourslash/state/renameInCommonFile.baseline create mode 100644 testdata/baselines/reference/tsbuild/commandLine/bad-locale.js create mode 100644 testdata/baselines/reference/tsbuild/commandLine/locale.js create mode 100644 testdata/baselines/reference/tsc/commandLine/bad-locale.js create mode 100644 testdata/baselines/reference/tsc/commandLine/locale.js diff --git a/pkg/ast/ast.go b/pkg/ast/ast.go index ab57bc32..601af3db 100644 --- a/pkg/ast/ast.go +++ b/pkg/ast/ast.go @@ -10983,7 +10983,7 @@ func (node *SourceFile) computeDeclarationMap() map[string][]*Node { result := make(map[string][]*Node) addDeclaration := func(declaration *Node) { - name := getDeclarationName(declaration) + name := GetDeclarationName(declaration) if name != "" { result[name] = append(result[name], declaration) } @@ -10993,7 +10993,7 @@ func (node *SourceFile) computeDeclarationMap() map[string][]*Node { visit = func(node *Node) bool { switch node.Kind { case KindFunctionDeclaration, KindFunctionExpression, KindMethodDeclaration, KindMethodSignature: - declarationName := getDeclarationName(node) + declarationName := GetDeclarationName(node) if declarationName != "" { declarations := result[declarationName] var lastDeclaration *Node @@ -11025,7 +11025,7 @@ func (node *SourceFile) computeDeclarationMap() map[string][]*Node { break } fallthrough - case KindVariableDeclaration, KindBindingElement: + case KindVariableDeclaration, KindBindingElement, KindCommonJSExport: name := node.Name() if name != nil { if IsBindingPattern(name) { @@ -11074,6 +11074,12 @@ func (node *SourceFile) computeDeclarationMap() map[string][]*Node { } } } + case KindBinaryExpression: + switch GetAssignmentDeclarationKind(node.AsBinaryExpression()) { + case JSDeclarationKindThisProperty, JSDeclarationKindProperty: + addDeclaration(node) + } + node.ForEachChild(visit) default: node.ForEachChild(visit) } @@ -11083,7 +11089,7 @@ func (node *SourceFile) computeDeclarationMap() map[string][]*Node { return result } -func getDeclarationName(declaration *Node) string { +func GetDeclarationName(declaration *Node) string { name := GetNonAssignedNameOfDeclaration(declaration) if name != nil { if IsComputedPropertyName(name) { diff --git a/pkg/ast/diagnostic.go b/pkg/ast/diagnostic.go index d5c77c12..b3e8a7cf 100644 --- a/pkg/ast/diagnostic.go +++ b/pkg/ast/diagnostic.go @@ -7,16 +7,20 @@ import ( "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/diagnostics" + "github.com/buke/typescript-go-internal/pkg/locale" ) // Diagnostic type Diagnostic struct { - file *SourceFile - loc core.TextRange - code int32 - category diagnostics.Category - message string + file *SourceFile + loc core.TextRange + code int32 + category diagnostics.Category + // Original message; may be nil. + message *diagnostics.Message + messageKey diagnostics.Key + messageArgs []string messageChain []*Diagnostic relatedInformation []*Diagnostic reportsUnnecessary bool @@ -31,7 +35,8 @@ func (d *Diagnostic) Len() int { return d.loc.Len() } func (d *Diagnostic) Loc() core.TextRange { return d.loc } func (d *Diagnostic) Code() int32 { return d.code } func (d *Diagnostic) Category() diagnostics.Category { return d.category } -func (d *Diagnostic) Message() string { return d.message } +func (d *Diagnostic) MessageKey() diagnostics.Key { return d.messageKey } +func (d *Diagnostic) MessageArgs() []string { return d.messageArgs } func (d *Diagnostic) MessageChain() []*Diagnostic { return d.messageChain } func (d *Diagnostic) RelatedInformation() []*Diagnostic { return d.relatedInformation } func (d *Diagnostic) ReportsUnnecessary() bool { return d.reportsUnnecessary } @@ -72,12 +77,22 @@ func (d *Diagnostic) Clone() *Diagnostic { return &result } -func NewDiagnosticWith( +func (d *Diagnostic) Localize(locale locale.Locale) string { + return diagnostics.Localize(locale, d.message, d.messageKey, d.messageArgs...) +} + +// For debugging only. +func (d *Diagnostic) String() string { + return diagnostics.Localize(locale.Default, d.message, d.messageKey, d.messageArgs...) +} + +func NewDiagnosticFromSerialized( file *SourceFile, loc core.TextRange, code int32, category diagnostics.Category, - message string, + messageKey diagnostics.Key, + messageArgs []string, messageChain []*Diagnostic, relatedInformation []*Diagnostic, reportsUnnecessary bool, @@ -89,7 +104,8 @@ func NewDiagnosticWith( loc: loc, code: code, category: category, - message: message, + messageKey: messageKey, + messageArgs: messageArgs, messageChain: messageChain, relatedInformation: relatedInformation, reportsUnnecessary: reportsUnnecessary, @@ -104,7 +120,9 @@ func NewDiagnostic(file *SourceFile, loc core.TextRange, message *diagnostics.Me loc: loc, code: message.Code(), category: message.Category(), - message: message.Format(args...), + message: message, + messageKey: message.Key(), + messageArgs: diagnostics.StringifyArgs(args), reportsUnnecessary: message.ReportsUnnecessary(), reportsDeprecated: message.ReportsDeprecated(), } @@ -185,13 +203,13 @@ func EqualDiagnosticsNoRelatedInfo(d1, d2 *Diagnostic) bool { return getDiagnosticPath(d1) == getDiagnosticPath(d2) && d1.Loc() == d2.Loc() && d1.Code() == d2.Code() && - d1.Message() == d2.Message() && + slices.Equal(d1.MessageArgs(), d2.MessageArgs()) && slices.EqualFunc(d1.MessageChain(), d2.MessageChain(), equalMessageChain) } func equalMessageChain(c1, c2 *Diagnostic) bool { return c1.Code() == c2.Code() && - c1.Message() == c2.Message() && + slices.Equal(c1.MessageArgs(), c2.MessageArgs()) && slices.EqualFunc(c1.MessageChain(), c2.MessageChain(), equalMessageChain) } @@ -211,7 +229,7 @@ func compareMessageChainSize(c1, c2 []*Diagnostic) int { func compareMessageChainContent(c1, c2 []*Diagnostic) int { for i := range c1 { - c := strings.Compare(c1[i].Message(), c2[i].Message()) + c := slices.Compare(c1[i].MessageArgs(), c2[i].MessageArgs()) if c != 0 { return c } @@ -256,7 +274,7 @@ func CompareDiagnostics(d1, d2 *Diagnostic) int { if c != 0 { return c } - c = strings.Compare(d1.Message(), d2.Message()) + c = slices.Compare(d1.MessageArgs(), d2.MessageArgs()) if c != 0 { return c } diff --git a/pkg/bundled/generate.go b/pkg/bundled/generate.go index 7bbb2ed5..da2a524e 100644 --- a/pkg/bundled/generate.go +++ b/pkg/bundled/generate.go @@ -14,6 +14,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/core" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/parser" "github.com/buke/typescript-go-internal/pkg/repo" "github.com/buke/typescript-go-internal/pkg/tspath" @@ -150,7 +151,7 @@ func readLibs() []lib { if len(diags) > 0 { for _, diag := range diags { - log.Printf("%s", diag.Message()) + log.Printf("%s", diag.Localize(locale.Default)) } log.Fatalf("failed to parse libs.json") } diff --git a/pkg/checker/jsx.go b/pkg/checker/jsx.go index 35b3123f..e2ff5135 100644 --- a/pkg/checker/jsx.go +++ b/pkg/checker/jsx.go @@ -297,7 +297,7 @@ func (c *Checker) elaborateJsxComponents(node *ast.Node, source *Type, target *T if !ast.IsJsxSpreadAttribute(prop) && !isHyphenatedJsxName(prop.Name().Text()) { nameType := c.getStringLiteralType(prop.Name().Text()) if nameType != nil && nameType.flags&TypeFlagsNever == 0 { - reportedError = c.elaborateElement(source, target, relation, prop.Name(), prop.Initializer(), nameType, nil, diagnosticOutput) || reportedError + reportedError = c.elaborateElement(source, target, relation, prop.Name(), prop.Initializer(), nameType, nil, nil, diagnosticOutput) || reportedError } } } @@ -326,13 +326,14 @@ func (c *Checker) elaborateJsxComponents(node *ast.Node, source *Type, target *T nonArrayLikeTargetParts = c.filterType(childrenTargetType, func(t *Type) bool { return !c.isArrayOrTupleLikeType(t) }) } var invalidTextDiagnostic *diagnostics.Message - getInvalidTextualChildDiagnostic := func() *diagnostics.Message { + var invalidTextDiagnosticArgs []any + getInvalidTextualChildDiagnostic := func() (*diagnostics.Message, []any) { if invalidTextDiagnostic == nil { tagNameText := scanner.GetTextOfNode(node.Parent.TagName()) - diagnostic := diagnostics.X_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2 - invalidTextDiagnostic = diagnostics.FormatMessage(diagnostic, tagNameText, childrenPropName, c.TypeToString(childrenTargetType)) + invalidTextDiagnostic = diagnostics.X_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2 + invalidTextDiagnosticArgs = []any{tagNameText, childrenPropName, c.TypeToString(childrenTargetType)} } - return invalidTextDiagnostic + return invalidTextDiagnostic, invalidTextDiagnosticArgs } if moreThanOneRealChildren { if arrayLikeTargetParts != c.neverType { @@ -350,7 +351,7 @@ func (c *Checker) elaborateJsxComponents(node *ast.Node, source *Type, target *T child := validChildren[0] e := c.getElaborationElementForJsxChild(child, childrenNameType, getInvalidTextualChildDiagnostic) if e.errorNode != nil { - reportedError = c.elaborateElement(source, target, relation, e.errorNode, e.innerExpression, e.nameType, e.errorMessage, diagnosticOutput) || reportedError + reportedError = c.elaborateElement(source, target, relation, e.errorNode, e.innerExpression, e.nameType, nil, e.createDiagnostic, diagnosticOutput) || reportedError } } else if !c.isTypeRelatedTo(c.getIndexedAccessType(source, childrenNameType), childrenTargetType, relation) { // arity mismatch @@ -364,13 +365,13 @@ func (c *Checker) elaborateJsxComponents(node *ast.Node, source *Type, target *T } type JsxElaborationElement struct { - errorNode *ast.Node - innerExpression *ast.Node - nameType *Type - errorMessage *diagnostics.Message + errorNode *ast.Node + innerExpression *ast.Node + nameType *Type + createDiagnostic func(prop *ast.Node) *ast.Diagnostic // Optional: creates a custom diagnostic for this element } -func (c *Checker) generateJsxChildren(node *ast.Node, getInvalidTextDiagnostic func() *diagnostics.Message) iter.Seq[JsxElaborationElement] { +func (c *Checker) generateJsxChildren(node *ast.Node, getInvalidTextDiagnostic func() (*diagnostics.Message, []any)) iter.Seq[JsxElaborationElement] { return func(yield func(JsxElaborationElement) bool) { memberOffset := 0 for i, child := range node.Children().Nodes { @@ -387,7 +388,7 @@ func (c *Checker) generateJsxChildren(node *ast.Node, getInvalidTextDiagnostic f } } -func (c *Checker) getElaborationElementForJsxChild(child *ast.Node, nameType *Type, getInvalidTextDiagnostic func() *diagnostics.Message) JsxElaborationElement { +func (c *Checker) getElaborationElementForJsxChild(child *ast.Node, nameType *Type, getInvalidTextDiagnostic func() (*diagnostics.Message, []any)) JsxElaborationElement { switch child.Kind { case ast.KindJsxExpression: // child is of the type of the expression @@ -398,7 +399,15 @@ func (c *Checker) getElaborationElementForJsxChild(child *ast.Node, nameType *Ty return JsxElaborationElement{} } // child is a string - return JsxElaborationElement{errorNode: child, innerExpression: nil, nameType: nameType, errorMessage: getInvalidTextDiagnostic()} + return JsxElaborationElement{ + errorNode: child, + innerExpression: nil, + nameType: nameType, + createDiagnostic: func(prop *ast.Node) *ast.Diagnostic { + errorMessage, errorArgs := getInvalidTextDiagnostic() + return NewDiagnosticForNode(prop, errorMessage, errorArgs...) + }, + } case ast.KindJsxElement, ast.KindJsxSelfClosingElement, ast.KindJsxFragment: // child is of type JSX.Element return JsxElaborationElement{errorNode: child, innerExpression: child, nameType: nameType} @@ -448,7 +457,10 @@ func (c *Checker) elaborateIterableOrArrayLikeTargetElementwise(iterator iter.Se if next != nil { specificSource = c.checkExpressionForMutableLocationWithContextualType(next, sourcePropType) } - if c.exactOptionalPropertyTypes && c.isExactOptionalPropertyMismatch(specificSource, targetPropType) { + if e.createDiagnostic != nil { + // Use the custom diagnostic factory if provided (e.g., for JSX text children with dynamic error messages) + c.reportDiagnostic(e.createDiagnostic(prop), diagnosticOutput) + } else if c.exactOptionalPropertyTypes && c.isExactOptionalPropertyMismatch(specificSource, targetPropType) { diag := createDiagnosticForNode(prop, diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target, c.TypeToString(specificSource), c.TypeToString(targetPropType)) c.reportDiagnostic(diag, diagnosticOutput) } else { @@ -456,10 +468,10 @@ func (c *Checker) elaborateIterableOrArrayLikeTargetElementwise(iterator iter.Se sourceIsOptional := propName != ast.InternalSymbolNameMissing && core.OrElse(c.getPropertyOfType(source, propName), c.unknownSymbol).Flags&ast.SymbolFlagsOptional != 0 targetPropType = c.removeMissingType(targetPropType, targetIsOptional) sourcePropType = c.removeMissingType(sourcePropType, targetIsOptional && sourceIsOptional) - result := c.checkTypeRelatedToEx(specificSource, targetPropType, relation, prop, e.errorMessage, diagnosticOutput) + result := c.checkTypeRelatedToEx(specificSource, targetPropType, relation, prop, nil, diagnosticOutput) if result && specificSource != sourcePropType { // If for whatever reason the expression type doesn't yield an error, make sure we still issue an error on the sourcePropType - c.checkTypeRelatedToEx(sourcePropType, targetPropType, relation, prop, e.errorMessage, diagnosticOutput) + c.checkTypeRelatedToEx(sourcePropType, targetPropType, relation, prop, nil, diagnosticOutput) } } } diff --git a/pkg/checker/relater.go b/pkg/checker/relater.go index 5e07e140..e4748ea8 100644 --- a/pkg/checker/relater.go +++ b/pkg/checker/relater.go @@ -503,10 +503,10 @@ func (c *Checker) elaborateObjectLiteral(node *ast.Node, source *Type, target *T } switch prop.Kind { case ast.KindSetAccessor, ast.KindGetAccessor, ast.KindMethodDeclaration, ast.KindShorthandPropertyAssignment: - reportedError = c.elaborateElement(source, target, relation, prop.Name(), nil, nameType, nil, diagnosticOutput) || reportedError + reportedError = c.elaborateElement(source, target, relation, prop.Name(), nil, nameType, nil, nil, diagnosticOutput) || reportedError case ast.KindPropertyAssignment: message := core.IfElse(ast.IsComputedNonLiteralName(prop.Name()), diagnostics.Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1, nil) - reportedError = c.elaborateElement(source, target, relation, prop.Name(), prop.Initializer(), nameType, message, diagnosticOutput) || reportedError + reportedError = c.elaborateElement(source, target, relation, prop.Name(), prop.Initializer(), nameType, message, nil, diagnosticOutput) || reportedError } } return reportedError @@ -531,12 +531,12 @@ func (c *Checker) elaborateArrayLiteral(node *ast.Node, source *Type, target *Ty } nameType := c.getNumberLiteralType(jsnum.Number(i)) checkNode := c.getEffectiveCheckNode(element) - reportedError = c.elaborateElement(source, target, relation, checkNode, checkNode, nameType, nil, diagnosticOutput) || reportedError + reportedError = c.elaborateElement(source, target, relation, checkNode, checkNode, nameType, nil, nil, diagnosticOutput) || reportedError } return reportedError } -func (c *Checker) elaborateElement(source *Type, target *Type, relation *Relation, prop *ast.Node, next *ast.Node, nameType *Type, errorMessage *diagnostics.Message, diagnosticOutput *[]*ast.Diagnostic) bool { +func (c *Checker) elaborateElement(source *Type, target *Type, relation *Relation, prop *ast.Node, next *ast.Node, nameType *Type, errorMessage *diagnostics.Message, diagnosticFactory func(prop *ast.Node) *ast.Diagnostic, diagnosticOutput *[]*ast.Diagnostic) bool { targetPropType := c.getBestMatchIndexedAccessTypeOrUndefined(source, target, nameType) if targetPropType == nil || targetPropType.flags&TypeFlagsIndexedAccess != 0 { // Don't elaborate on indexes on generic variables @@ -557,7 +557,10 @@ func (c *Checker) elaborateElement(source *Type, target *Type, relation *Relatio if next != nil { specificSource = c.checkExpressionForMutableLocationWithContextualType(next, sourcePropType) } - if c.exactOptionalPropertyTypes && c.isExactOptionalPropertyMismatch(specificSource, targetPropType) { + if diagnosticFactory != nil { + // Use the custom diagnostic factory if provided (e.g., for JSX text children with dynamic error messages) + diags = append(diags, diagnosticFactory(prop)) + } else if c.exactOptionalPropertyTypes && c.isExactOptionalPropertyMismatch(specificSource, targetPropType) { diags = append(diags, createDiagnosticForNode(prop, diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target, c.TypeToString(specificSource), c.TypeToString(targetPropType))) } else { propName := c.getPropertyNameFromIndex(nameType, nil /*accessNode*/) diff --git a/pkg/compiler/fileloader.go b/pkg/compiler/fileloader.go index 94a06296..870b42c0 100644 --- a/pkg/compiler/fileloader.go +++ b/pkg/compiler/fileloader.go @@ -18,7 +18,7 @@ import ( type libResolution struct { libraryName string resolution *module.ResolvedModule - trace []string + trace []module.DiagAndArgs } type LibFile struct { @@ -231,7 +231,7 @@ func processAllProgramFiles( module.ModeAwareCacheKey{Name: value.libraryName, Mode: core.ModuleKindCommonJS}: value.resolution, } for _, trace := range value.trace { - opts.Host.Trace(trace) + opts.Host.Trace(trace.Message, trace.Args...) } } @@ -286,7 +286,7 @@ func (p *fileLoader) addAutomaticTypeDirectiveTasks() { func (p *fileLoader) resolveAutomaticTypeDirectives(containingFileName string) ( toParse []resolvedRef, typeResolutionsInFile module.ModeAwareCache[*module.ResolvedTypeReferenceDirective], - typeResolutionsTrace []string, + typeResolutionsTrace []module.DiagAndArgs, ) { automaticTypeDirectiveNames := module.GetAutomaticTypeDirectiveNames(p.opts.Config.CompilerOptions(), p.opts.Host) if len(automaticTypeDirectiveNames) != 0 { @@ -449,7 +449,7 @@ func (p *fileLoader) resolveTypeReferenceDirectives(t *parseTask) { meta := t.metadata typeResolutionsInFile := make(module.ModeAwareCache[*module.ResolvedTypeReferenceDirective], len(file.TypeReferenceDirectives)) - var typeResolutionsTrace []string + var typeResolutionsTrace []module.DiagAndArgs for index, ref := range file.TypeReferenceDirectives { redirect, fileName := p.projectReferenceFileMapper.getRedirectForResolution(file) resolutionMode := getModeForTypeReferenceDirectiveInFile(ref, file, meta, module.GetCompilerOptionsWithRedirect(p.opts.Config.CompilerOptions(), redirect)) @@ -527,7 +527,7 @@ func (p *fileLoader) resolveImportsAndModuleAugmentations(t *parseTask) { if len(moduleNames) != 0 { resolutionsInFile := make(module.ModeAwareCache[*module.ResolvedModule], len(moduleNames)) - var resolutionsTrace []string + var resolutionsTrace []module.DiagAndArgs for index, entry := range moduleNames { moduleName := entry.Text() diff --git a/pkg/compiler/filesparser.go b/pkg/compiler/filesparser.go index 07f25b98..24c4d25a 100644 --- a/pkg/compiler/filesparser.go +++ b/pkg/compiler/filesparser.go @@ -25,9 +25,9 @@ type parseTask struct { metadata ast.SourceFileMetaData resolutionsInFile module.ModeAwareCache[*module.ResolvedModule] - resolutionsTrace []string + resolutionsTrace []module.DiagAndArgs typeResolutionsInFile module.ModeAwareCache[*module.ResolvedTypeReferenceDirective] - typeResolutionsTrace []string + typeResolutionsTrace []module.DiagAndArgs resolutionDiagnostics []*ast.Diagnostic importHelpersImportSpecifier *ast.Node jsxRuntimeImportSpecifier *jsxRuntimeImportSpecifier @@ -255,10 +255,10 @@ func (w *filesParser) collectWorker(loader *fileLoader, tasks []*parseTask, iter continue } for _, trace := range task.typeResolutionsTrace { - loader.opts.Host.Trace(trace) + loader.opts.Host.Trace(trace.Message, trace.Args...) } for _, trace := range task.resolutionsTrace { - loader.opts.Host.Trace(trace) + loader.opts.Host.Trace(trace.Message, trace.Args...) } if subTasks := task.subTasks; len(subTasks) > 0 { w.collectWorker(loader, subTasks, iterate, seen) diff --git a/pkg/compiler/host.go b/pkg/compiler/host.go index d764bc15..9ffad183 100644 --- a/pkg/compiler/host.go +++ b/pkg/compiler/host.go @@ -3,6 +3,7 @@ package compiler import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/core" + "github.com/buke/typescript-go-internal/pkg/diagnostics" "github.com/buke/typescript-go-internal/pkg/parser" "github.com/buke/typescript-go-internal/pkg/tsoptions" "github.com/buke/typescript-go-internal/pkg/tspath" @@ -14,7 +15,7 @@ type CompilerHost interface { FS() vfs.FS DefaultLibraryPath() string GetCurrentDirectory() string - Trace(msg string) + Trace(msg *diagnostics.Message, args ...any) GetSourceFile(opts ast.SourceFileParseOptions) *ast.SourceFile GetResolvedProjectReference(fileName string, path tspath.Path) *tsoptions.ParsedCommandLine } @@ -26,7 +27,7 @@ type compilerHost struct { fs vfs.FS defaultLibraryPath string extendedConfigCache tsoptions.ExtendedConfigCache - trace func(msg string) + trace func(msg *diagnostics.Message, args ...any) } func NewCachedFSCompilerHost( @@ -34,7 +35,7 @@ func NewCachedFSCompilerHost( fs vfs.FS, defaultLibraryPath string, extendedConfigCache tsoptions.ExtendedConfigCache, - trace func(msg string), + trace func(msg *diagnostics.Message, args ...any), ) CompilerHost { return NewCompilerHost(currentDirectory, cachedvfs.From(fs), defaultLibraryPath, extendedConfigCache, trace) } @@ -44,10 +45,10 @@ func NewCompilerHost( fs vfs.FS, defaultLibraryPath string, extendedConfigCache tsoptions.ExtendedConfigCache, - trace func(msg string), + trace func(msg *diagnostics.Message, args ...any), ) CompilerHost { if trace == nil { - trace = func(msg string) {} + trace = func(msg *diagnostics.Message, args ...any) {} } return &compilerHost{ currentDirectory: currentDirectory, @@ -70,8 +71,8 @@ func (h *compilerHost) GetCurrentDirectory() string { return h.currentDirectory } -func (h *compilerHost) Trace(msg string) { - h.trace(msg) +func (h *compilerHost) Trace(msg *diagnostics.Message, args ...any) { + h.trace(msg, args...) } func (h *compilerHost) GetSourceFile(opts ast.SourceFileParseOptions) *ast.SourceFile { diff --git a/pkg/compiler/program.go b/pkg/compiler/program.go index 45897d0b..dffc6608 100644 --- a/pkg/compiler/program.go +++ b/pkg/compiler/program.go @@ -17,6 +17,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/diagnostics" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/module" "github.com/buke/typescript-go-internal/pkg/modulespecifiers" "github.com/buke/typescript-go-internal/pkg/outputpaths" @@ -67,6 +68,10 @@ type Program struct { // Cached unresolved imports for ATA unresolvedImportsOnce sync.Once unresolvedImports *collections.Set[string] + + // Used by workspace/symbol + hasTSFileOnce sync.Once + hasTSFile bool } // FileExists implements checker.Program. @@ -145,10 +150,19 @@ func (p *Program) GetParseFileRedirect(fileName string) string { return p.projectReferenceFileMapper.getParseFileRedirect(ast.NewHasFileName(fileName, p.toPath(fileName))) } -func (p *Program) ForEachResolvedProjectReference( - fn func(path tspath.Path, config *tsoptions.ParsedCommandLine, parent *tsoptions.ParsedCommandLine, index int), -) { - p.projectReferenceFileMapper.forEachResolvedProjectReference(fn) +func (p *Program) GetResolvedProjectReferences() []*tsoptions.ParsedCommandLine { + return p.projectReferenceFileMapper.getResolvedProjectReferences() +} + +func (p *Program) RangeResolvedProjectReference(f func(path tspath.Path, config *tsoptions.ParsedCommandLine, parent *tsoptions.ParsedCommandLine, index int) bool) bool { + return p.projectReferenceFileMapper.rangeResolvedProjectReference(f) +} + +func (p *Program) RangeResolvedProjectReferenceInChildConfig( + childConfig *tsoptions.ParsedCommandLine, + f func(path tspath.Path, config *tsoptions.ParsedCommandLine, parent *tsoptions.ParsedCommandLine, index int) bool, +) bool { + return p.projectReferenceFileMapper.rangeResolvedProjectReferenceInChildConfig(childConfig, f) } // UseCaseSensitiveFileNames implements checker.Program. @@ -905,13 +919,13 @@ func (p *Program) verifyProjectReferences() { p.programDiagnostics = append(p.programDiagnostics, diag) } - p.ForEachResolvedProjectReference(func(path tspath.Path, config *tsoptions.ParsedCommandLine, parent *tsoptions.ParsedCommandLine, index int) { + p.RangeResolvedProjectReference(func(path tspath.Path, config *tsoptions.ParsedCommandLine, parent *tsoptions.ParsedCommandLine, index int) bool { ref := parent.ProjectReferences()[index] // !!! Deprecated in 5.0 and removed since 5.5 // verifyRemovedProjectReference(ref, parent, index); if config == nil { createDiagnosticForReference(parent, index, diagnostics.File_0_not_found, ref.Path) - return + return true } refOptions := config.CompilerOptions() if !refOptions.Composite.IsTrue() || refOptions.NoEmit.IsTrue() { @@ -928,6 +942,7 @@ func (p *Program) verifyProjectReferences() { createDiagnosticForReference(parent, index, diagnostics.Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1, buildInfoFileName, ref.Path) p.hasEmitBlockingDiagnostics.Add(p.toPath(buildInfoFileName)) } + return true }) } @@ -1558,17 +1573,17 @@ func (p *Program) IsMissingPath(path tspath.Path) bool { }) } -func (p *Program) ExplainFiles(w io.Writer) { +func (p *Program) ExplainFiles(w io.Writer, locale locale.Locale) { toRelativeFileName := func(fileName string) string { return tspath.GetRelativePathFromDirectory(p.GetCurrentDirectory(), fileName, p.comparePathsOptions) } for _, file := range p.GetSourceFiles() { fmt.Fprintln(w, toRelativeFileName(file.FileName())) for _, reason := range p.includeProcessor.fileIncludeReasons[file.Path()] { - fmt.Fprintln(w, " ", reason.toDiagnostic(p, true).Message()) + fmt.Fprintln(w, " ", reason.toDiagnostic(p, true).Localize(locale)) } for _, diag := range p.includeProcessor.explainRedirectAndImpliedFormat(p, file, toRelativeFileName) { - fmt.Fprintln(w, " ", diag.Message()) + fmt.Fprintln(w, " ", diag.Localize(locale)) } } } @@ -1623,6 +1638,23 @@ func (p *Program) SourceFileMayBeEmitted(sourceFile *ast.SourceFile, forceDtsEmi return sourceFileMayBeEmitted(sourceFile, p, forceDtsEmit) } +func (p *Program) IsLibFile(sourceFile *ast.SourceFile) bool { + _, ok := p.libFiles[sourceFile.Path()] + return ok +} + +func (p *Program) HasTSFile() bool { + p.hasTSFileOnce.Do(func() { + for _, file := range p.files { + if tspath.HasImplementationTSFileExtension(file.FileName()) { + p.hasTSFile = true + break + } + } + }) + return p.hasTSFile +} + var plainJSErrors = collections.NewSetFromItems( // binder errors diagnostics.Cannot_redeclare_block_scoped_variable_0.Code(), diff --git a/pkg/compiler/projectreferencefilemapper.go b/pkg/compiler/projectreferencefilemapper.go index 07ccfe6a..09da82e8 100644 --- a/pkg/compiler/projectreferencefilemapper.go +++ b/pkg/compiler/projectreferencefilemapper.go @@ -46,6 +46,9 @@ func (mapper *projectReferenceFileMapper) getParseFileRedirect(file ast.HasFileN } func (mapper *projectReferenceFileMapper) getResolvedProjectReferences() []*tsoptions.ParsedCommandLine { + if mapper.opts.Config.ConfigFile == nil { + return nil + } refs, ok := mapper.referencesInConfigFile[mapper.opts.Config.ConfigFile.SourceFile.Path()] var result []*tsoptions.ParsedCommandLine if ok { @@ -106,32 +109,50 @@ func (mapper *projectReferenceFileMapper) getResolvedReferenceFor(path tspath.Pa return config, ok } -func (mapper *projectReferenceFileMapper) forEachResolvedProjectReference( - fn func(path tspath.Path, config *tsoptions.ParsedCommandLine, parent *tsoptions.ParsedCommandLine, index int), -) { +func (mapper *projectReferenceFileMapper) rangeResolvedProjectReference( + f func(path tspath.Path, config *tsoptions.ParsedCommandLine, parent *tsoptions.ParsedCommandLine, index int) bool, +) bool { if mapper.opts.Config.ConfigFile == nil { - return + return false } seenRef := collections.NewSetWithSizeHint[tspath.Path](len(mapper.referencesInConfigFile)) seenRef.Add(mapper.opts.Config.ConfigFile.SourceFile.Path()) refs := mapper.referencesInConfigFile[mapper.opts.Config.ConfigFile.SourceFile.Path()] - mapper.forEachResolvedReferenceWorker(refs, fn, mapper.opts.Config, seenRef) + return mapper.rangeResolvedReferenceWorker(refs, f, mapper.opts.Config, seenRef) } -func (mapper *projectReferenceFileMapper) forEachResolvedReferenceWorker( +func (mapper *projectReferenceFileMapper) rangeResolvedReferenceWorker( references []tspath.Path, - fn func(path tspath.Path, config *tsoptions.ParsedCommandLine, parent *tsoptions.ParsedCommandLine, index int), + f func(path tspath.Path, config *tsoptions.ParsedCommandLine, parent *tsoptions.ParsedCommandLine, index int) bool, parent *tsoptions.ParsedCommandLine, seenRef *collections.Set[tspath.Path], -) { +) bool { for index, path := range references { if !seenRef.AddIfAbsent(path) { continue } config, _ := mapper.configToProjectReference[path] - fn(path, config, parent, index) - mapper.forEachResolvedReferenceWorker(mapper.referencesInConfigFile[path], fn, config, seenRef) + if !f(path, config, parent, index) { + return false + } + if !mapper.rangeResolvedReferenceWorker(mapper.referencesInConfigFile[path], f, config, seenRef) { + return false + } } + return true +} + +func (mapper *projectReferenceFileMapper) rangeResolvedProjectReferenceInChildConfig( + childConfig *tsoptions.ParsedCommandLine, + f func(path tspath.Path, config *tsoptions.ParsedCommandLine, parent *tsoptions.ParsedCommandLine, index int) bool, +) bool { + if childConfig == nil || childConfig.ConfigFile == nil { + return false + } + seenRef := collections.NewSetWithSizeHint[tspath.Path](len(mapper.referencesInConfigFile)) + seenRef.Add(childConfig.ConfigFile.SourceFile.Path()) + refs := mapper.referencesInConfigFile[childConfig.ConfigFile.SourceFile.Path()] + return mapper.rangeResolvedReferenceWorker(refs, f, mapper.opts.Config, seenRef) } func (mapper *projectReferenceFileMapper) getSourceToDtsIfSymlink(file ast.HasFileName) *tsoptions.SourceOutputAndProjectReference { diff --git a/pkg/core/context.go b/pkg/core/context.go index ddd01920..394fcf45 100644 --- a/pkg/core/context.go +++ b/pkg/core/context.go @@ -2,15 +2,12 @@ package core import ( "context" - - "golang.org/x/text/language" ) type key int const ( requestIDKey key = iota - localeKey ) func WithRequestID(ctx context.Context, id string) context.Context { @@ -23,14 +20,3 @@ func GetRequestID(ctx context.Context) string { } return "" } - -func WithLocale(ctx context.Context, locale language.Tag) context.Context { - return context.WithValue(ctx, localeKey, locale) -} - -func GetLocale(ctx context.Context) language.Tag { - if locale, ok := ctx.Value(localeKey).(language.Tag); ok { - return locale - } - return language.Und -} diff --git a/pkg/diagnostics/diagnostics.go b/pkg/diagnostics/diagnostics.go index f0390590..8487c1b7 100644 --- a/pkg/diagnostics/diagnostics.go +++ b/pkg/diagnostics/diagnostics.go @@ -1,11 +1,19 @@ // Package diagnostics contains generated localizable diagnostic messages. package diagnostics -import "github.com/buke/typescript-go-internal/pkg/stringutil" +import ( + "fmt" + "regexp" + "strconv" + "sync" -//go:generate go run generate.go -output ./diagnostics_generated.go + "github.com/buke/typescript-go-internal/pkg/locale" + "golang.org/x/text/language" +) + +//go:generate go run generate.go -diagnostics ./diagnostics_generated.go -loc ./loc_generated.go -locdir ./loc //go:generate go run golang.org/x/tools/cmd/stringer@latest -type=Category -output=stringer_generated.go -//go:generate go run mvdan.cc/gofumpt@latest -w diagnostics_generated.go stringer_generated.go +//go:generate go run mvdan.cc/gofumpt@latest -w diagnostics_generated.go loc_generated.go stringer_generated.go type Category int32 @@ -30,10 +38,12 @@ func (category Category) Name() string { panic("Unhandled diagnostic category") } +type Key string + type Message struct { code int32 category Category - key string + key Key text string reportsUnnecessary bool elidedInCompatibilityPyramid bool @@ -42,22 +52,92 @@ type Message struct { func (m *Message) Code() int32 { return m.code } func (m *Message) Category() Category { return m.category } -func (m *Message) Key() string { return m.key } -func (m *Message) Message() string { return m.text } +func (m *Message) Key() Key { return m.key } func (m *Message) ReportsUnnecessary() bool { return m.reportsUnnecessary } func (m *Message) ElidedInCompatibilityPyramid() bool { return m.elidedInCompatibilityPyramid } func (m *Message) ReportsDeprecated() bool { return m.reportsDeprecated } -func (m *Message) Format(args ...any) string { - text := m.Message() - if len(args) != 0 { - text = stringutil.Format(text, args) +// For debugging only. +func (m *Message) String() string { + return m.text +} + +func (m *Message) Localize(locale locale.Locale, args ...any) string { + return Localize(locale, m, "", StringifyArgs(args)...) +} + +func Localize(locale locale.Locale, message *Message, key Key, args ...string) string { + if message == nil { + message = keyToMessage(key) + } + if message == nil { + panic("Unknown diagnostic message: " + string(key)) } - return text + + text := message.text + if localized, ok := getLocalizedMessages(language.Tag(locale))[message.key]; ok { + text = localized + } + + return Format(text, args) } -func FormatMessage(m *Message, args ...any) *Message { - result := *m - result.text = stringutil.Format(m.text, args) - return &result +var localizedMessagesCache sync.Map // map[language.Tag]map[Key]string + +func getLocalizedMessages(loc language.Tag) map[Key]string { + if loc == language.Und { + return nil + } + + // Check cache first + if cached, ok := localizedMessagesCache.Load(loc); ok { + if cached == nil { + return nil + } + return cached.(map[Key]string) + } + + var messages map[Key]string + + _, index, confidence := matcher.Match(loc) + if confidence >= language.Low && index >= 0 && index < len(localeFuncs) { + if fn := localeFuncs[index]; fn != nil { + messages = fn() + } + } + + localizedMessagesCache.Store(loc, messages) + return messages +} + +var placeholderRegexp = regexp.MustCompile(`{(\d+)}`) + +func Format(text string, args []string) string { + if len(args) == 0 { + return text + } + + return placeholderRegexp.ReplaceAllStringFunc(text, func(match string) string { + index, err := strconv.ParseInt(match[1:len(match)-1], 10, 0) + if err != nil || int(index) >= len(args) { + panic("Invalid formatting placeholder") + } + return args[int(index)] + }) +} + +func StringifyArgs(args []any) []string { + if len(args) == 0 { + return nil + } + + result := make([]string, len(args)) + for i, arg := range args { + if s, ok := arg.(string); ok { + result[i] = s + } else { + result[i] = fmt.Sprintf("%v", arg) + } + } + return result } diff --git a/pkg/diagnostics/diagnostics_generated.go b/pkg/diagnostics/diagnostics_generated.go index 7cfec6d2..50df22ce 100644 --- a/pkg/diagnostics/diagnostics_generated.go +++ b/pkg/diagnostics/diagnostics_generated.go @@ -2436,7 +2436,7 @@ var Unterminated_quoted_string_in_response_file_0 = &Message{code: 6045, categor var Argument_for_0_option_must_be_Colon_1 = &Message{code: 6046, category: CategoryError, key: "Argument_for_0_option_must_be_Colon_1_6046", text: "Argument for '{0}' option must be: {1}."} -var Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1 = &Message{code: 6048, category: CategoryError, key: "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048", text: "Locale must be of the form or -. For example '{0}' or '{1}'."} +var Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1 = &Message{code: 6048, category: CategoryError, key: "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048", text: "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'."} var Unable_to_open_file_0 = &Message{code: 6050, category: CategoryError, key: "Unable_to_open_file_0_6050", text: "Unable to open file '{0}'."} @@ -4257,3 +4257,4266 @@ var Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory = &Message{co var Set_the_number_of_checkers_per_project = &Message{code: 100003, category: CategoryMessage, key: "Set_the_number_of_checkers_per_project_100003", text: "Set the number of checkers per project."} var X_4_unless_singleThreaded_is_passed = &Message{code: 100004, category: CategoryMessage, key: "4_unless_singleThreaded_is_passed_100004", text: "4, unless --singleThreaded is passed."} + +func keyToMessage(key Key) *Message { + switch key { + case "Unterminated_string_literal_1002": + return Unterminated_string_literal + case "Identifier_expected_1003": + return Identifier_expected + case "_0_expected_1005": + return X_0_expected + case "A_file_cannot_have_a_reference_to_itself_1006": + return A_file_cannot_have_a_reference_to_itself + case "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": + return The_parser_expected_to_find_a_1_to_match_the_0_token_here + case "Trailing_comma_not_allowed_1009": + return Trailing_comma_not_allowed + case "Asterisk_Slash_expected_1010": + return Asterisk_Slash_expected + case "An_element_access_expression_should_take_an_argument_1011": + return An_element_access_expression_should_take_an_argument + case "Unexpected_token_1012": + return Unexpected_token + case "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": + return A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma + case "A_rest_parameter_must_be_last_in_a_parameter_list_1014": + return A_rest_parameter_must_be_last_in_a_parameter_list + case "Parameter_cannot_have_question_mark_and_initializer_1015": + return Parameter_cannot_have_question_mark_and_initializer + case "A_required_parameter_cannot_follow_an_optional_parameter_1016": + return A_required_parameter_cannot_follow_an_optional_parameter + case "An_index_signature_cannot_have_a_rest_parameter_1017": + return An_index_signature_cannot_have_a_rest_parameter + case "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": + return An_index_signature_parameter_cannot_have_an_accessibility_modifier + case "An_index_signature_parameter_cannot_have_a_question_mark_1019": + return An_index_signature_parameter_cannot_have_a_question_mark + case "An_index_signature_parameter_cannot_have_an_initializer_1020": + return An_index_signature_parameter_cannot_have_an_initializer + case "An_index_signature_must_have_a_type_annotation_1021": + return An_index_signature_must_have_a_type_annotation + case "An_index_signature_parameter_must_have_a_type_annotation_1022": + return An_index_signature_parameter_must_have_a_type_annotation + case "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": + return X_readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature + case "An_index_signature_cannot_have_a_trailing_comma_1025": + return An_index_signature_cannot_have_a_trailing_comma + case "Accessibility_modifier_already_seen_1028": + return Accessibility_modifier_already_seen + case "_0_modifier_must_precede_1_modifier_1029": + return X_0_modifier_must_precede_1_modifier + case "_0_modifier_already_seen_1030": + return X_0_modifier_already_seen + case "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": + return X_0_modifier_cannot_appear_on_class_elements_of_this_kind + case "super_must_be_followed_by_an_argument_list_or_member_access_1034": + return X_super_must_be_followed_by_an_argument_list_or_member_access + case "Only_ambient_modules_can_use_quoted_names_1035": + return Only_ambient_modules_can_use_quoted_names + case "Statements_are_not_allowed_in_ambient_contexts_1036": + return Statements_are_not_allowed_in_ambient_contexts + case "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": + return A_declare_modifier_cannot_be_used_in_an_already_ambient_context + case "Initializers_are_not_allowed_in_ambient_contexts_1039": + return Initializers_are_not_allowed_in_ambient_contexts + case "_0_modifier_cannot_be_used_in_an_ambient_context_1040": + return X_0_modifier_cannot_be_used_in_an_ambient_context + case "_0_modifier_cannot_be_used_here_1042": + return X_0_modifier_cannot_be_used_here + case "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": + return X_0_modifier_cannot_appear_on_a_module_or_namespace_element + case "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": + return Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier + case "A_rest_parameter_cannot_be_optional_1047": + return A_rest_parameter_cannot_be_optional + case "A_rest_parameter_cannot_have_an_initializer_1048": + return A_rest_parameter_cannot_have_an_initializer + case "A_set_accessor_must_have_exactly_one_parameter_1049": + return A_set_accessor_must_have_exactly_one_parameter + case "A_set_accessor_cannot_have_an_optional_parameter_1051": + return A_set_accessor_cannot_have_an_optional_parameter + case "A_set_accessor_parameter_cannot_have_an_initializer_1052": + return A_set_accessor_parameter_cannot_have_an_initializer + case "A_set_accessor_cannot_have_rest_parameter_1053": + return A_set_accessor_cannot_have_rest_parameter + case "A_get_accessor_cannot_have_parameters_1054": + return A_get_accessor_cannot_have_parameters + case "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": + return Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compatible_constructor_value + case "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": + return Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher + case "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": + return The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + case "A_promise_must_have_a_then_method_1059": + return A_promise_must_have_a_then_method + case "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": + return The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback + case "Enum_member_must_have_initializer_1061": + return Enum_member_must_have_initializer + case "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": + return Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method + case "An_export_assignment_cannot_be_used_in_a_namespace_1063": + return An_export_assignment_cannot_be_used_in_a_namespace + case "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": + return The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_write_Promise_0 + case "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": + return The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type + case "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": + return In_ambient_enum_declarations_member_initializer_must_be_constant_expression + case "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": + return Unexpected_token_A_constructor_method_accessor_or_property_was_expected + case "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": + return Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces + case "_0_modifier_cannot_appear_on_a_type_member_1070": + return X_0_modifier_cannot_appear_on_a_type_member + case "_0_modifier_cannot_appear_on_an_index_signature_1071": + return X_0_modifier_cannot_appear_on_an_index_signature + case "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": + return A_0_modifier_cannot_be_used_with_an_import_declaration + case "Invalid_reference_directive_syntax_1084": + return Invalid_reference_directive_syntax + case "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": + return X_0_modifier_cannot_appear_on_a_constructor_declaration + case "_0_modifier_cannot_appear_on_a_parameter_1090": + return X_0_modifier_cannot_appear_on_a_parameter + case "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": + return Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement + case "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": + return Type_parameters_cannot_appear_on_a_constructor_declaration + case "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": + return Type_annotation_cannot_appear_on_a_constructor_declaration + case "An_accessor_cannot_have_type_parameters_1094": + return An_accessor_cannot_have_type_parameters + case "A_set_accessor_cannot_have_a_return_type_annotation_1095": + return A_set_accessor_cannot_have_a_return_type_annotation + case "An_index_signature_must_have_exactly_one_parameter_1096": + return An_index_signature_must_have_exactly_one_parameter + case "_0_list_cannot_be_empty_1097": + return X_0_list_cannot_be_empty + case "Type_parameter_list_cannot_be_empty_1098": + return Type_parameter_list_cannot_be_empty + case "Type_argument_list_cannot_be_empty_1099": + return Type_argument_list_cannot_be_empty + case "Invalid_use_of_0_in_strict_mode_1100": + return Invalid_use_of_0_in_strict_mode + case "with_statements_are_not_allowed_in_strict_mode_1101": + return X_with_statements_are_not_allowed_in_strict_mode + case "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": + return X_delete_cannot_be_called_on_an_identifier_in_strict_mode + case "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": + return X_for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules + case "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": + return A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement + case "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": + return A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement + case "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": + return The_left_hand_side_of_a_for_of_statement_may_not_be_async + case "Jump_target_cannot_cross_function_boundary_1107": + return Jump_target_cannot_cross_function_boundary + case "A_return_statement_can_only_be_used_within_a_function_body_1108": + return A_return_statement_can_only_be_used_within_a_function_body + case "Expression_expected_1109": + return Expression_expected + case "Type_expected_1110": + return Type_expected + case "Private_field_0_must_be_declared_in_an_enclosing_class_1111": + return Private_field_0_must_be_declared_in_an_enclosing_class + case "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": + return A_default_clause_cannot_appear_more_than_once_in_a_switch_statement + case "Duplicate_label_0_1114": + return Duplicate_label_0 + case "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": + return A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement + case "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": + return A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement + case "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": + return An_object_literal_cannot_have_multiple_properties_with_the_same_name + case "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": + return An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name + case "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": + return An_object_literal_cannot_have_property_and_accessor_with_the_same_name + case "An_export_assignment_cannot_have_modifiers_1120": + return An_export_assignment_cannot_have_modifiers + case "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": + return Octal_literals_are_not_allowed_Use_the_syntax_0 + case "Variable_declaration_list_cannot_be_empty_1123": + return Variable_declaration_list_cannot_be_empty + case "Digit_expected_1124": + return Digit_expected + case "Hexadecimal_digit_expected_1125": + return Hexadecimal_digit_expected + case "Unexpected_end_of_text_1126": + return Unexpected_end_of_text + case "Invalid_character_1127": + return Invalid_character + case "Declaration_or_statement_expected_1128": + return Declaration_or_statement_expected + case "Statement_expected_1129": + return Statement_expected + case "case_or_default_expected_1130": + return X_case_or_default_expected + case "Property_or_signature_expected_1131": + return Property_or_signature_expected + case "Enum_member_expected_1132": + return Enum_member_expected + case "Variable_declaration_expected_1134": + return Variable_declaration_expected + case "Argument_expression_expected_1135": + return Argument_expression_expected + case "Property_assignment_expected_1136": + return Property_assignment_expected + case "Expression_or_comma_expected_1137": + return Expression_or_comma_expected + case "Parameter_declaration_expected_1138": + return Parameter_declaration_expected + case "Type_parameter_declaration_expected_1139": + return Type_parameter_declaration_expected + case "Type_argument_expected_1140": + return Type_argument_expected + case "String_literal_expected_1141": + return String_literal_expected + case "Line_break_not_permitted_here_1142": + return Line_break_not_permitted_here + case "or_expected_1144": + return X_or_expected + case "or_JSX_element_expected_1145": + return X_or_JSX_element_expected + case "Declaration_expected_1146": + return Declaration_expected + case "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": + return Import_declarations_in_a_namespace_cannot_reference_a_module + case "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": + return Cannot_use_imports_exports_or_module_augmentations_when_module_is_none + case "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": + return File_name_0_differs_from_already_included_file_name_1_only_in_casing + case "_0_declarations_must_be_initialized_1155": + return X_0_declarations_must_be_initialized + case "_0_declarations_can_only_be_declared_inside_a_block_1156": + return X_0_declarations_can_only_be_declared_inside_a_block + case "Unterminated_template_literal_1160": + return Unterminated_template_literal + case "Unterminated_regular_expression_literal_1161": + return Unterminated_regular_expression_literal + case "An_object_member_cannot_be_declared_optional_1162": + return An_object_member_cannot_be_declared_optional + case "A_yield_expression_is_only_allowed_in_a_generator_body_1163": + return A_yield_expression_is_only_allowed_in_a_generator_body + case "Computed_property_names_are_not_allowed_in_enums_1164": + return Computed_property_names_are_not_allowed_in_enums + case "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": + return A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type + case "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": + return A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_symbol_type + case "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": + return A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type + case "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": + return A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type + case "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": + return A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type + case "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": + return A_comma_expression_is_not_allowed_in_a_computed_property_name + case "extends_clause_already_seen_1172": + return X_extends_clause_already_seen + case "extends_clause_must_precede_implements_clause_1173": + return X_extends_clause_must_precede_implements_clause + case "Classes_can_only_extend_a_single_class_1174": + return Classes_can_only_extend_a_single_class + case "implements_clause_already_seen_1175": + return X_implements_clause_already_seen + case "Interface_declaration_cannot_have_implements_clause_1176": + return Interface_declaration_cannot_have_implements_clause + case "Binary_digit_expected_1177": + return Binary_digit_expected + case "Octal_digit_expected_1178": + return Octal_digit_expected + case "Unexpected_token_expected_1179": + return Unexpected_token_expected + case "Property_destructuring_pattern_expected_1180": + return Property_destructuring_pattern_expected + case "Array_element_destructuring_pattern_expected_1181": + return Array_element_destructuring_pattern_expected + case "A_destructuring_declaration_must_have_an_initializer_1182": + return A_destructuring_declaration_must_have_an_initializer + case "An_implementation_cannot_be_declared_in_ambient_contexts_1183": + return An_implementation_cannot_be_declared_in_ambient_contexts + case "Modifiers_cannot_appear_here_1184": + return Modifiers_cannot_appear_here + case "Merge_conflict_marker_encountered_1185": + return Merge_conflict_marker_encountered + case "A_rest_element_cannot_have_an_initializer_1186": + return A_rest_element_cannot_have_an_initializer + case "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": + return A_parameter_property_may_not_be_declared_using_a_binding_pattern + case "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": + return Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement + case "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": + return The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer + case "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": + return The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer + case "An_import_declaration_cannot_have_modifiers_1191": + return An_import_declaration_cannot_have_modifiers + case "Module_0_has_no_default_export_1192": + return Module_0_has_no_default_export + case "An_export_declaration_cannot_have_modifiers_1193": + return An_export_declaration_cannot_have_modifiers + case "Export_declarations_are_not_permitted_in_a_namespace_1194": + return Export_declarations_are_not_permitted_in_a_namespace + case "export_Asterisk_does_not_re_export_a_default_1195": + return X_export_Asterisk_does_not_re_export_a_default + case "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": + return Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified + case "Catch_clause_variable_cannot_have_an_initializer_1197": + return Catch_clause_variable_cannot_have_an_initializer + case "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": + return An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive + case "Unterminated_Unicode_escape_sequence_1199": + return Unterminated_Unicode_escape_sequence + case "Line_terminator_not_permitted_before_arrow_1200": + return Line_terminator_not_permitted_before_arrow + case "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": + return Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead + case "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": + return Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead + case "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": + return Re_exporting_a_type_when_0_is_enabled_requires_using_export_type + case "Decorators_are_not_valid_here_1206": + return Decorators_are_not_valid_here + case "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": + return Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name + case "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": + return Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0 + case "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": + return Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode + case "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": + return A_class_declaration_without_the_default_modifier_must_have_a_name + case "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": + return Identifier_expected_0_is_a_reserved_word_in_strict_mode + case "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": + return Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode + case "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": + return Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode + case "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": + return Invalid_use_of_0_Modules_are_automatically_in_strict_mode + case "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": + return Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules + case "Export_assignment_is_not_supported_when_module_flag_is_system_1218": + return Export_assignment_is_not_supported_when_module_flag_is_system + case "Generators_are_not_allowed_in_an_ambient_context_1221": + return Generators_are_not_allowed_in_an_ambient_context + case "An_overload_signature_cannot_be_declared_as_a_generator_1222": + return An_overload_signature_cannot_be_declared_as_a_generator + case "_0_tag_already_specified_1223": + return X_0_tag_already_specified + case "Signature_0_must_be_a_type_predicate_1224": + return Signature_0_must_be_a_type_predicate + case "Cannot_find_parameter_0_1225": + return Cannot_find_parameter_0 + case "Type_predicate_0_is_not_assignable_to_1_1226": + return Type_predicate_0_is_not_assignable_to_1 + case "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": + return Parameter_0_is_not_in_the_same_position_as_parameter_1 + case "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": + return A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods + case "A_type_predicate_cannot_reference_a_rest_parameter_1229": + return A_type_predicate_cannot_reference_a_rest_parameter + case "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": + return A_type_predicate_cannot_reference_element_0_in_a_binding_pattern + case "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": + return An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration + case "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": + return An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module + case "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": + return An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module + case "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": + return An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file + case "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": + return A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module + case "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": + return The_return_type_of_a_property_decorator_function_must_be_either_void_or_any + case "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": + return The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any + case "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": + return Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression + case "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": + return Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression + case "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": + return Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression + case "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": + return Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression + case "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": + return X_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration + case "_0_modifier_cannot_be_used_with_1_modifier_1243": + return X_0_modifier_cannot_be_used_with_1_modifier + case "Abstract_methods_can_only_appear_within_an_abstract_class_1244": + return Abstract_methods_can_only_appear_within_an_abstract_class + case "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": + return Method_0_cannot_have_an_implementation_because_it_is_marked_abstract + case "An_interface_property_cannot_have_an_initializer_1246": + return An_interface_property_cannot_have_an_initializer + case "A_type_literal_property_cannot_have_an_initializer_1247": + return A_type_literal_property_cannot_have_an_initializer + case "A_class_member_cannot_have_the_0_keyword_1248": + return A_class_member_cannot_have_the_0_keyword + case "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": + return A_decorator_can_only_decorate_a_method_implementation_not_an_overload + case "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": + return Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5 + case "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": + return Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definitions_are_automatically_in_strict_mode + case "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": + return Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_automatically_in_strict_mode + case "Abstract_properties_can_only_appear_within_an_abstract_class_1253": + return Abstract_properties_can_only_appear_within_an_abstract_class + case "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": + return A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_reference + case "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": + return A_definite_assignment_assertion_is_not_permitted_in_this_context + case "A_required_element_cannot_follow_an_optional_element_1257": + return A_required_element_cannot_follow_an_optional_element + case "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": + return A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration + case "Module_0_can_only_be_default_imported_using_the_1_flag_1259": + return Module_0_can_only_be_default_imported_using_the_1_flag + case "Keywords_cannot_contain_escape_characters_1260": + return Keywords_cannot_contain_escape_characters + case "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": + return Already_included_file_name_0_differs_from_file_name_1_only_in_casing + case "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": + return Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module + case "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": + return Declarations_with_initializers_cannot_also_have_definite_assignment_assertions + case "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": + return Declarations_with_definite_assignment_assertions_must_also_have_type_annotations + case "A_rest_element_cannot_follow_another_rest_element_1265": + return A_rest_element_cannot_follow_another_rest_element + case "An_optional_element_cannot_follow_a_rest_element_1266": + return An_optional_element_cannot_follow_a_rest_element + case "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": + return Property_0_cannot_have_an_initializer_because_it_is_marked_abstract + case "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": + return An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type + case "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": + return Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled + case "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": + return Decorator_function_return_type_0_is_not_assignable_to_type_1 + case "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": + return Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any + case "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": + return A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled + case "_0_modifier_cannot_appear_on_a_type_parameter_1273": + return X_0_modifier_cannot_appear_on_a_type_parameter + case "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": + return X_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias + case "accessor_modifier_can_only_appear_on_a_property_declaration_1275": + return X_accessor_modifier_can_only_appear_on_a_property_declaration + case "An_accessor_property_cannot_be_declared_optional_1276": + return An_accessor_property_cannot_be_declared_optional + case "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": + return X_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class + case "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": + return The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0 + case "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": + return The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0 + case "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": + return Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to_be_a_global_script_set_moduleDetection_to_force_or_add_an_empty_export_statement + case "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": + return Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead + case "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": + return An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_type + case "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": + return An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_a_type_only_declaration + case "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": + return An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_type + case "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": + return An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_a_type_only_declaration + case "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": + return ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax + case "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": + return A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled + case "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": + return An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabled + case "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": + return X_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_import_type_where_0_is_imported + case "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": + return X_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_export_type_0_as_default + case "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": + return X_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_import_type_where_0_is_imported + case "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": + return X_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_export_type_0_as_default + case "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": + return ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve + case "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": + return This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled + case "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": + return ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjust_the_type_field_in_the_nearest_package_json_to_make_this_file_an_ECMAScript_module_or_adjust_your_verbatimModuleSyntax_module_and_moduleResolution_settings_in_TypeScript + case "with_statements_are_not_allowed_in_an_async_function_block_1300": + return X_with_statements_are_not_allowed_in_an_async_function_block + case "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": + return X_await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules + case "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": + return The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level + case "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": + return Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern + case "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": + return The_body_of_an_if_statement_cannot_be_the_empty_statement + case "Global_module_exports_may_only_appear_in_module_files_1314": + return Global_module_exports_may_only_appear_in_module_files + case "Global_module_exports_may_only_appear_in_declaration_files_1315": + return Global_module_exports_may_only_appear_in_declaration_files + case "Global_module_exports_may_only_appear_at_top_level_1316": + return Global_module_exports_may_only_appear_at_top_level + case "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": + return A_parameter_property_cannot_be_declared_using_a_rest_parameter + case "An_abstract_accessor_cannot_have_an_implementation_1318": + return An_abstract_accessor_cannot_have_an_implementation + case "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": + return A_default_export_can_only_be_used_in_an_ECMAScript_style_module + case "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": + return Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + case "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": + return Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + case "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": + return Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + case "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": + return Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_node18_node20_or_nodenext + case "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": + return Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_node20_nodenext_or_preserve + case "Argument_of_dynamic_import_cannot_be_spread_element_1325": + return Argument_of_dynamic_import_cannot_be_spread_element + case "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": + return This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments + case "String_literal_with_double_quotes_expected_1327": + return String_literal_with_double_quotes_expected + case "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": + return Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal + case "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": + return X_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0 + case "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": + return A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly + case "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": + return A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly + case "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": + return A_variable_whose_type_is_a_unique_symbol_type_must_be_const + case "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": + return X_unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name + case "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": + return X_unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement + case "unique_symbol_types_are_not_allowed_here_1335": + return X_unique_symbol_types_are_not_allowed_here + case "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": + return An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead + case "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": + return X_infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type + case "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": + return Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here + case "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": + return Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0 + case "Class_constructor_may_not_be_an_accessor_1341": + return Class_constructor_may_not_be_an_accessor + case "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": + return The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_node18_node20_or_nodenext + case "A_label_is_not_allowed_here_1344": + return A_label_is_not_allowed_here + case "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": + return An_expression_of_type_void_cannot_be_tested_for_truthiness + case "This_parameter_is_not_allowed_with_use_strict_directive_1346": + return This_parameter_is_not_allowed_with_use_strict_directive + case "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": + return X_use_strict_directive_cannot_be_used_with_non_simple_parameter_list + case "Non_simple_parameter_declared_here_1348": + return Non_simple_parameter_declared_here + case "use_strict_directive_used_here_1349": + return X_use_strict_directive_used_here + case "Print_the_final_configuration_instead_of_building_1350": + return Print_the_final_configuration_instead_of_building + case "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": + return An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal + case "A_bigint_literal_cannot_use_exponential_notation_1352": + return A_bigint_literal_cannot_use_exponential_notation + case "A_bigint_literal_must_be_an_integer_1353": + return A_bigint_literal_must_be_an_integer + case "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": + return X_readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types + case "A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array__1355": + return A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals + case "Did_you_mean_to_mark_this_function_as_async_1356": + return Did_you_mean_to_mark_this_function_as_async + case "An_enum_member_name_must_be_followed_by_a_or_1357": + return An_enum_member_name_must_be_followed_by_a_or + case "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": + return Tagged_template_expressions_are_not_permitted_in_an_optional_chain + case "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": + return Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here + case "Type_0_does_not_satisfy_the_expected_type_1_1360": + return Type_0_does_not_satisfy_the_expected_type_1 + case "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": + return X_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type + case "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": + return X_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type + case "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": + return A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both + case "Convert_to_type_only_export_1364": + return Convert_to_type_only_export + case "Convert_all_re_exported_types_to_type_only_exports_1365": + return Convert_all_re_exported_types_to_type_only_exports + case "Split_into_two_separate_import_declarations_1366": + return Split_into_two_separate_import_declarations + case "Split_all_invalid_type_only_imports_1367": + return Split_all_invalid_type_only_imports + case "Class_constructor_may_not_be_a_generator_1368": + return Class_constructor_may_not_be_a_generator + case "Did_you_mean_0_1369": + return Did_you_mean_0 + case "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": + return X_await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module + case "_0_was_imported_here_1376": + return X_0_was_imported_here + case "_0_was_exported_here_1377": + return X_0_was_exported_here + case "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": + return Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher + case "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": + return An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type + case "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": + return An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type + case "Unexpected_token_Did_you_mean_or_rbrace_1381": + return Unexpected_token_Did_you_mean_or_rbrace + case "Unexpected_token_Did_you_mean_or_gt_1382": + return Unexpected_token_Did_you_mean_or_gt + case "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": + return Function_type_notation_must_be_parenthesized_when_used_in_a_union_type + case "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": + return Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type + case "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": + return Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type + case "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": + return Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type + case "_0_is_not_allowed_as_a_variable_declaration_name_1389": + return X_0_is_not_allowed_as_a_variable_declaration_name + case "_0_is_not_allowed_as_a_parameter_name_1390": + return X_0_is_not_allowed_as_a_parameter_name + case "An_import_alias_cannot_use_import_type_1392": + return An_import_alias_cannot_use_import_type + case "Imported_via_0_from_file_1_1393": + return Imported_via_0_from_file_1 + case "Imported_via_0_from_file_1_with_packageId_2_1394": + return Imported_via_0_from_file_1_with_packageId_2 + case "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": + return Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions + case "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": + return Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions + case "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": + return Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions + case "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": + return Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions + case "File_is_included_via_import_here_1399": + return File_is_included_via_import_here + case "Referenced_via_0_from_file_1_1400": + return Referenced_via_0_from_file_1 + case "File_is_included_via_reference_here_1401": + return File_is_included_via_reference_here + case "Type_library_referenced_via_0_from_file_1_1402": + return Type_library_referenced_via_0_from_file_1 + case "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": + return Type_library_referenced_via_0_from_file_1_with_packageId_2 + case "File_is_included_via_type_library_reference_here_1404": + return File_is_included_via_type_library_reference_here + case "Library_referenced_via_0_from_file_1_1405": + return Library_referenced_via_0_from_file_1 + case "File_is_included_via_library_reference_here_1406": + return File_is_included_via_library_reference_here + case "Matched_by_include_pattern_0_in_1_1407": + return Matched_by_include_pattern_0_in_1 + case "File_is_matched_by_include_pattern_specified_here_1408": + return File_is_matched_by_include_pattern_specified_here + case "Part_of_files_list_in_tsconfig_json_1409": + return Part_of_files_list_in_tsconfig_json + case "File_is_matched_by_files_list_specified_here_1410": + return File_is_matched_by_files_list_specified_here + case "Output_from_referenced_project_0_included_because_1_specified_1411": + return Output_from_referenced_project_0_included_because_1_specified + case "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": + return Output_from_referenced_project_0_included_because_module_is_specified_as_none + case "File_is_output_from_referenced_project_specified_here_1413": + return File_is_output_from_referenced_project_specified_here + case "Source_from_referenced_project_0_included_because_1_specified_1414": + return Source_from_referenced_project_0_included_because_1_specified + case "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": + return Source_from_referenced_project_0_included_because_module_is_specified_as_none + case "File_is_source_from_referenced_project_specified_here_1416": + return File_is_source_from_referenced_project_specified_here + case "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": + return Entry_point_of_type_library_0_specified_in_compilerOptions + case "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": + return Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1 + case "File_is_entry_point_of_type_library_specified_here_1419": + return File_is_entry_point_of_type_library_specified_here + case "Entry_point_for_implicit_type_library_0_1420": + return Entry_point_for_implicit_type_library_0 + case "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": + return Entry_point_for_implicit_type_library_0_with_packageId_1 + case "Library_0_specified_in_compilerOptions_1422": + return Library_0_specified_in_compilerOptions + case "File_is_library_specified_here_1423": + return File_is_library_specified_here + case "Default_library_1424": + return Default_library + case "Default_library_for_target_0_1425": + return Default_library_for_target_0 + case "File_is_default_library_for_target_specified_here_1426": + return File_is_default_library_for_target_specified_here + case "Root_file_specified_for_compilation_1427": + return Root_file_specified_for_compilation + case "File_is_output_of_project_reference_source_0_1428": + return File_is_output_of_project_reference_source_0 + case "File_redirects_to_file_0_1429": + return File_redirects_to_file_0 + case "The_file_is_in_the_program_because_Colon_1430": + return The_file_is_in_the_program_because_Colon + case "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": + return X_for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module + case "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": + return Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher + case "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": + return Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters + case "Unexpected_keyword_or_identifier_1434": + return Unexpected_keyword_or_identifier + case "Unknown_keyword_or_identifier_Did_you_mean_0_1435": + return Unknown_keyword_or_identifier_Did_you_mean_0 + case "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": + return Decorators_must_precede_the_name_and_all_keywords_of_property_declarations + case "Namespace_must_be_given_a_name_1437": + return Namespace_must_be_given_a_name + case "Interface_must_be_given_a_name_1438": + return Interface_must_be_given_a_name + case "Type_alias_must_be_given_a_name_1439": + return Type_alias_must_be_given_a_name + case "Variable_declaration_not_allowed_at_this_location_1440": + return Variable_declaration_not_allowed_at_this_location + case "Cannot_start_a_function_call_in_a_type_annotation_1441": + return Cannot_start_a_function_call_in_a_type_annotation + case "Expected_for_property_initializer_1442": + return Expected_for_property_initializer + case "Module_declaration_names_may_only_use_or_quoted_strings_1443": + return Module_declaration_names_may_only_use_or_quoted_strings + case "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": + return X_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_enabled + case "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": + return Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed + case "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": + return Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments + case "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": + return Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression + case "resolution_mode_should_be_either_require_or_import_1453": + return X_resolution_mode_should_be_either_require_or_import + case "resolution_mode_can_only_be_set_for_type_only_imports_1454": + return X_resolution_mode_can_only_be_set_for_type_only_imports + case "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": + return X_resolution_mode_is_the_only_valid_key_for_type_import_assertions + case "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": + return Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require + case "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": + return Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk + case "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": + return File_is_ECMAScript_module_because_0_has_field_type_with_value_module + case "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": + return File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module + case "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": + return File_is_CommonJS_module_because_0_does_not_have_field_type + case "File_is_CommonJS_module_because_package_json_was_not_found_1461": + return File_is_CommonJS_module_because_package_json_was_not_found + case "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": + return X_resolution_mode_is_the_only_valid_key_for_type_import_attributes + case "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": + return Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require + case "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": + return The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output + case "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": + return Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_cannot_be_imported_with_require_Use_an_ECMAScript_import_instead + case "catch_or_finally_expected_1472": + return X_catch_or_finally_expected + case "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": + return An_import_declaration_can_only_be_used_at_the_top_level_of_a_module + case "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": + return An_export_declaration_can_only_be_used_at_the_top_level_of_a_module + case "Control_what_method_is_used_to_detect_module_format_JS_files_1475": + return Control_what_method_is_used_to_detect_module_format_JS_files + case "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": + return X_auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_with_module_Colon_node16_as_modules + case "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": + return An_instantiation_expression_cannot_be_followed_by_a_property_access + case "Identifier_or_string_literal_expected_1478": + return Identifier_or_string_literal_expected + case "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": + return The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_referenced_file_is_an_ECMAScript_module_and_cannot_be_imported_with_require_Consider_writing_a_dynamic_import_0_call_instead + case "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": + return To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module + case "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": + return To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1 + case "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": + return To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0 + case "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": + return To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module + case "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": + return X_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled + case "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": + return X_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled + case "Decorator_used_before_export_here_1486": + return Decorator_used_before_export_here + case "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": + return Octal_escape_sequences_are_not_allowed_Use_the_syntax_0 + case "Escape_sequence_0_is_not_allowed_1488": + return Escape_sequence_0_is_not_allowed + case "Decimals_with_leading_zeros_are_not_allowed_1489": + return Decimals_with_leading_zeros_are_not_allowed + case "File_appears_to_be_binary_1490": + return File_appears_to_be_binary + case "_0_modifier_cannot_appear_on_a_using_declaration_1491": + return X_0_modifier_cannot_appear_on_a_using_declaration + case "_0_declarations_may_not_have_binding_patterns_1492": + return X_0_declarations_may_not_have_binding_patterns + case "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": + return The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration + case "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": + return The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration + case "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": + return X_0_modifier_cannot_appear_on_an_await_using_declaration + case "Identifier_string_literal_or_number_literal_expected_1496": + return Identifier_string_literal_or_number_literal_expected + case "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": + return Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator + case "Invalid_syntax_in_decorator_1498": + return Invalid_syntax_in_decorator + case "Unknown_regular_expression_flag_1499": + return Unknown_regular_expression_flag + case "Duplicate_regular_expression_flag_1500": + return Duplicate_regular_expression_flag + case "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": + return This_regular_expression_flag_is_only_available_when_targeting_0_or_later + case "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": + return The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously + case "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": + return Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later + case "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": + return Subpattern_flags_must_be_present_when_there_is_a_minus_sign + case "Incomplete_quantifier_Digit_expected_1505": + return Incomplete_quantifier_Digit_expected + case "Numbers_out_of_order_in_quantifier_1506": + return Numbers_out_of_order_in_quantifier + case "There_is_nothing_available_for_repetition_1507": + return There_is_nothing_available_for_repetition + case "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": + return Unexpected_0_Did_you_mean_to_escape_it_with_backslash + case "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": + return This_regular_expression_flag_cannot_be_toggled_within_a_subpattern + case "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": + return X_k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets + case "q_is_only_available_inside_character_class_1511": + return X_q_is_only_available_inside_character_class + case "c_must_be_followed_by_an_ASCII_letter_1512": + return X_c_must_be_followed_by_an_ASCII_letter + case "Undetermined_character_escape_1513": + return Undetermined_character_escape + case "Expected_a_capturing_group_name_1514": + return Expected_a_capturing_group_name + case "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": + return Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other + case "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": + return A_character_class_range_must_not_be_bounded_by_another_character_class + case "Range_out_of_order_in_character_class_1517": + return Range_out_of_order_in_character_class + case "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": + return Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class + case "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": + return Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead + case "Expected_a_class_set_operand_1520": + return Expected_a_class_set_operand + case "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": + return X_q_must_be_followed_by_string_alternatives_enclosed_in_braces + case "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": + return A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backslash + case "Expected_a_Unicode_property_name_1523": + return Expected_a_Unicode_property_name + case "Unknown_Unicode_property_name_1524": + return Unknown_Unicode_property_name + case "Expected_a_Unicode_property_value_1525": + return Expected_a_Unicode_property_value + case "Unknown_Unicode_property_value_1526": + return Unknown_Unicode_property_value + case "Expected_a_Unicode_property_name_or_value_1527": + return Expected_a_Unicode_property_name_or_value + case "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": + return Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_the_Unicode_Sets_v_flag_is_set + case "Unknown_Unicode_property_name_or_value_1529": + return Unknown_Unicode_property_name_or_value + case "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": + return Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set + case "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": + return X_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces + case "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": + return There_is_no_capturing_group_named_0_in_this_regular_expression + case "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": + return This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_regular_expression + case "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": + return This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regular_expression + case "This_character_cannot_be_escaped_in_a_regular_expression_1535": + return This_character_cannot_be_escaped_in_a_regular_expression + case "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": + return Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended_as_an_escape_sequence_use_the_syntax_0_instead + case "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": + return Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class + case "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": + return Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set + case "A_bigint_literal_cannot_be_used_as_a_property_name_1539": + return A_bigint_literal_cannot_be_used_as_a_property_name + case "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": + return A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_keyword_instead + case "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": + return Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute + case "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": + return Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute + case "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": + return Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_module_is_set_to_0 + case "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": + return Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0 + case "using_declarations_are_not_allowed_in_ambient_contexts_1545": + return X_using_declarations_are_not_allowed_in_ambient_contexts + case "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": + return X_await_using_declarations_are_not_allowed_in_ambient_contexts + case "The_types_of_0_are_incompatible_between_these_types_2200": + return The_types_of_0_are_incompatible_between_these_types + case "The_types_returned_by_0_are_incompatible_between_these_types_2201": + return The_types_returned_by_0_are_incompatible_between_these_types + case "Call_signature_return_types_0_and_1_are_incompatible_2202": + return Call_signature_return_types_0_and_1_are_incompatible + case "Construct_signature_return_types_0_and_1_are_incompatible_2203": + return Construct_signature_return_types_0_and_1_are_incompatible + case "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": + return Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1 + case "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": + return Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1 + case "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": + return The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement + case "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": + return The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement + case "This_type_parameter_might_need_an_extends_0_constraint_2208": + return This_type_parameter_might_need_an_extends_0_constraint + case "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": + return The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate + case "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": + return The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate + case "Add_extends_constraint_2211": + return Add_extends_constraint + case "Add_extends_constraint_to_all_type_parameters_2212": + return Add_extends_constraint_to_all_type_parameters + case "Duplicate_identifier_0_2300": + return Duplicate_identifier_0 + case "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": + return Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor + case "Static_members_cannot_reference_class_type_parameters_2302": + return Static_members_cannot_reference_class_type_parameters + case "Circular_definition_of_import_alias_0_2303": + return Circular_definition_of_import_alias_0 + case "Cannot_find_name_0_2304": + return Cannot_find_name_0 + case "Module_0_has_no_exported_member_1_2305": + return Module_0_has_no_exported_member_1 + case "File_0_is_not_a_module_2306": + return File_0_is_not_a_module + case "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": + return Cannot_find_module_0_or_its_corresponding_type_declarations + case "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": + return Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity + case "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": + return An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements + case "Type_0_recursively_references_itself_as_a_base_type_2310": + return Type_0_recursively_references_itself_as_a_base_type + case "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": + return Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function + case "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": + return An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_members + case "Type_parameter_0_has_a_circular_constraint_2313": + return Type_parameter_0_has_a_circular_constraint + case "Generic_type_0_requires_1_type_argument_s_2314": + return Generic_type_0_requires_1_type_argument_s + case "Type_0_is_not_generic_2315": + return Type_0_is_not_generic + case "Global_type_0_must_be_a_class_or_interface_type_2316": + return Global_type_0_must_be_a_class_or_interface_type + case "Global_type_0_must_have_1_type_parameter_s_2317": + return Global_type_0_must_have_1_type_parameter_s + case "Cannot_find_global_type_0_2318": + return Cannot_find_global_type_0 + case "Named_property_0_of_types_1_and_2_are_not_identical_2319": + return Named_property_0_of_types_1_and_2_are_not_identical + case "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": + return Interface_0_cannot_simultaneously_extend_types_1_and_2 + case "Excessive_stack_depth_comparing_types_0_and_1_2321": + return Excessive_stack_depth_comparing_types_0_and_1 + case "Type_0_is_not_assignable_to_type_1_2322": + return Type_0_is_not_assignable_to_type_1 + case "Cannot_redeclare_exported_variable_0_2323": + return Cannot_redeclare_exported_variable_0 + case "Property_0_is_missing_in_type_1_2324": + return Property_0_is_missing_in_type_1 + case "Property_0_is_private_in_type_1_but_not_in_type_2_2325": + return Property_0_is_private_in_type_1_but_not_in_type_2 + case "Types_of_property_0_are_incompatible_2326": + return Types_of_property_0_are_incompatible + case "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": + return Property_0_is_optional_in_type_1_but_required_in_type_2 + case "Types_of_parameters_0_and_1_are_incompatible_2328": + return Types_of_parameters_0_and_1_are_incompatible + case "Index_signature_for_type_0_is_missing_in_type_1_2329": + return Index_signature_for_type_0_is_missing_in_type_1 + case "_0_and_1_index_signatures_are_incompatible_2330": + return X_0_and_1_index_signatures_are_incompatible + case "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": + return X_this_cannot_be_referenced_in_a_module_or_namespace_body + case "this_cannot_be_referenced_in_current_location_2332": + return X_this_cannot_be_referenced_in_current_location + case "this_cannot_be_referenced_in_a_static_property_initializer_2334": + return X_this_cannot_be_referenced_in_a_static_property_initializer + case "super_can_only_be_referenced_in_a_derived_class_2335": + return X_super_can_only_be_referenced_in_a_derived_class + case "super_cannot_be_referenced_in_constructor_arguments_2336": + return X_super_cannot_be_referenced_in_constructor_arguments + case "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": + return Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors + case "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": + return X_super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class + case "Property_0_does_not_exist_on_type_1_2339": + return Property_0_does_not_exist_on_type_1 + case "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": + return Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword + case "Property_0_is_private_and_only_accessible_within_class_1_2341": + return Property_0_is_private_and_only_accessible_within_class_1 + case "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": + return This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_version_of_0 + case "Type_0_does_not_satisfy_the_constraint_1_2344": + return Type_0_does_not_satisfy_the_constraint_1 + case "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": + return Argument_of_type_0_is_not_assignable_to_parameter_of_type_1 + case "Call_target_does_not_contain_any_signatures_2346": + return Call_target_does_not_contain_any_signatures + case "Untyped_function_calls_may_not_accept_type_arguments_2347": + return Untyped_function_calls_may_not_accept_type_arguments + case "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": + return Value_of_type_0_is_not_callable_Did_you_mean_to_include_new + case "This_expression_is_not_callable_2349": + return This_expression_is_not_callable + case "Only_a_void_function_can_be_called_with_the_new_keyword_2350": + return Only_a_void_function_can_be_called_with_the_new_keyword + case "This_expression_is_not_constructable_2351": + return This_expression_is_not_constructable + case "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": + return Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first + case "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": + return Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1 + case "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": + return This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found + case "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": + return A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value + case "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": + return An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type + case "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": + return The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access + case "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": + return The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter + case "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": + return The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_type_assignable_to_the_Function_interface_type_or_an_object_type_with_a_Symbol_hasInstance_method + case "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": + return The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type + case "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": + return The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type + case "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": + return The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access + case "Operator_0_cannot_be_applied_to_types_1_and_2_2365": + return Operator_0_cannot_be_applied_to_types_1_and_2 + case "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": + return Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined + case "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": + return This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap + case "Type_parameter_name_cannot_be_0_2368": + return Type_parameter_name_cannot_be_0 + case "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": + return A_parameter_property_is_only_allowed_in_a_constructor_implementation + case "A_rest_parameter_must_be_of_an_array_type_2370": + return A_rest_parameter_must_be_of_an_array_type + case "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": + return A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation + case "Parameter_0_cannot_reference_itself_2372": + return Parameter_0_cannot_reference_itself + case "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": + return Parameter_0_cannot_reference_identifier_1_declared_after_it + case "Duplicate_index_signature_for_type_0_2374": + return Duplicate_index_signature_for_type_0 + case "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": + return Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties + case "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": + return A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_class_contains_initialized_properties_parameter_properties_or_private_identifiers + case "Constructors_for_derived_classes_must_contain_a_super_call_2377": + return Constructors_for_derived_classes_must_contain_a_super_call + case "A_get_accessor_must_return_a_value_2378": + return A_get_accessor_must_return_a_value + case "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": + return Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties + case "Overload_signatures_must_all_be_exported_or_non_exported_2383": + return Overload_signatures_must_all_be_exported_or_non_exported + case "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": + return Overload_signatures_must_all_be_ambient_or_non_ambient + case "Overload_signatures_must_all_be_public_private_or_protected_2385": + return Overload_signatures_must_all_be_public_private_or_protected + case "Overload_signatures_must_all_be_optional_or_required_2386": + return Overload_signatures_must_all_be_optional_or_required + case "Function_overload_must_be_static_2387": + return Function_overload_must_be_static + case "Function_overload_must_not_be_static_2388": + return Function_overload_must_not_be_static + case "Function_implementation_name_must_be_0_2389": + return Function_implementation_name_must_be_0 + case "Constructor_implementation_is_missing_2390": + return Constructor_implementation_is_missing + case "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": + return Function_implementation_is_missing_or_not_immediately_following_the_declaration + case "Multiple_constructor_implementations_are_not_allowed_2392": + return Multiple_constructor_implementations_are_not_allowed + case "Duplicate_function_implementation_2393": + return Duplicate_function_implementation + case "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": + return This_overload_signature_is_not_compatible_with_its_implementation_signature + case "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": + return Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local + case "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": + return Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters + case "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": + return Declaration_name_conflicts_with_built_in_global_identifier_0 + case "constructor_cannot_be_used_as_a_parameter_property_name_2398": + return X_constructor_cannot_be_used_as_a_parameter_property_name + case "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": + return Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference + case "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": + return Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference + case "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": + return A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_initialized_properties_parameter_properties_or_private_identifiers + case "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": + return Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference + case "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": + return Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2 + case "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": + return The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation + case "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": + return The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any + case "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": + return The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access + case "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": + return The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_here_has_type_0 + case "Setters_cannot_return_a_value_2408": + return Setters_cannot_return_a_value + case "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": + return Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class + case "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": + return The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any + case "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": + return Property_0_of_type_1_is_not_assignable_to_2_index_type_3 + case "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": + return Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target + case "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": + return X_0_index_type_1_is_not_assignable_to_2_index_type_3 + case "Class_name_cannot_be_0_2414": + return Class_name_cannot_be_0 + case "Class_0_incorrectly_extends_base_class_1_2415": + return Class_0_incorrectly_extends_base_class_1 + case "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": + return Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2 + case "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": + return Class_static_side_0_incorrectly_extends_base_class_static_side_1 + case "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": + return Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1 + case "Types_of_construct_signatures_are_incompatible_2419": + return Types_of_construct_signatures_are_incompatible + case "Class_0_incorrectly_implements_interface_1_2420": + return Class_0_incorrectly_implements_interface_1 + case "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": + return A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members + case "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": + return Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor + case "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": + return Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function + case "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": + return Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function + case "Interface_name_cannot_be_0_2427": + return Interface_name_cannot_be_0 + case "All_declarations_of_0_must_have_identical_type_parameters_2428": + return All_declarations_of_0_must_have_identical_type_parameters + case "Interface_0_incorrectly_extends_interface_1_2430": + return Interface_0_incorrectly_extends_interface_1 + case "Enum_name_cannot_be_0_2431": + return Enum_name_cannot_be_0 + case "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": + return In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element + case "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": + return A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged + case "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": + return A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged + case "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": + return Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces + case "Ambient_module_declaration_cannot_specify_relative_module_name_2436": + return Ambient_module_declaration_cannot_specify_relative_module_name + case "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": + return Module_0_is_hidden_by_a_local_declaration_with_the_same_name + case "Import_name_cannot_be_0_2438": + return Import_name_cannot_be_0 + case "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": + return Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name + case "Import_declaration_conflicts_with_local_declaration_of_0_2440": + return Import_declaration_conflicts_with_local_declaration_of_0 + case "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": + return Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module + case "Types_have_separate_declarations_of_a_private_property_0_2442": + return Types_have_separate_declarations_of_a_private_property_0 + case "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": + return Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2 + case "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": + return Property_0_is_protected_in_type_1_but_public_in_type_2 + case "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": + return Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses + case "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": + return Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_class_2 + case "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": + return The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead + case "Block_scoped_variable_0_used_before_its_declaration_2448": + return Block_scoped_variable_0_used_before_its_declaration + case "Class_0_used_before_its_declaration_2449": + return Class_0_used_before_its_declaration + case "Enum_0_used_before_its_declaration_2450": + return Enum_0_used_before_its_declaration + case "Cannot_redeclare_block_scoped_variable_0_2451": + return Cannot_redeclare_block_scoped_variable_0 + case "An_enum_member_cannot_have_a_numeric_name_2452": + return An_enum_member_cannot_have_a_numeric_name + case "Variable_0_is_used_before_being_assigned_2454": + return Variable_0_is_used_before_being_assigned + case "Type_alias_0_circularly_references_itself_2456": + return Type_alias_0_circularly_references_itself + case "Type_alias_name_cannot_be_0_2457": + return Type_alias_name_cannot_be_0 + case "An_AMD_module_cannot_have_multiple_name_assignments_2458": + return An_AMD_module_cannot_have_multiple_name_assignments + case "Module_0_declares_1_locally_but_it_is_not_exported_2459": + return Module_0_declares_1_locally_but_it_is_not_exported + case "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": + return Module_0_declares_1_locally_but_it_is_exported_as_2 + case "Type_0_is_not_an_array_type_2461": + return Type_0_is_not_an_array_type + case "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": + return A_rest_element_must_be_last_in_a_destructuring_pattern + case "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": + return A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature + case "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": + return A_computed_property_name_must_be_of_type_string_number_symbol_or_any + case "this_cannot_be_referenced_in_a_computed_property_name_2465": + return X_this_cannot_be_referenced_in_a_computed_property_name + case "super_cannot_be_referenced_in_a_computed_property_name_2466": + return X_super_cannot_be_referenced_in_a_computed_property_name + case "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": + return A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type + case "Cannot_find_global_value_0_2468": + return Cannot_find_global_value_0 + case "The_0_operator_cannot_be_applied_to_type_symbol_2469": + return The_0_operator_cannot_be_applied_to_type_symbol + case "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": + return Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher + case "Enum_declarations_must_all_be_const_or_non_const_2473": + return Enum_declarations_must_all_be_const_or_non_const + case "const_enum_member_initializers_must_be_constant_expressions_2474": + return X_const_enum_member_initializers_must_be_constant_expressions + case "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": + return X_const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query + case "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": + return A_const_enum_member_can_only_be_accessed_using_a_string_literal + case "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": + return X_const_enum_member_initializer_was_evaluated_to_a_non_finite_value + case "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": + return X_const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN + case "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": + return X_let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations + case "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": + return Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1 + case "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": + return The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation + case "Export_declaration_conflicts_with_exported_declaration_of_0_2484": + return Export_declaration_conflicts_with_exported_declaration_of_0 + case "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": + return The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access + case "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": + return Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator + case "An_iterator_must_have_a_next_method_2489": + return An_iterator_must_have_a_next_method + case "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": + return The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property + case "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": + return The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern + case "Cannot_redeclare_identifier_0_in_catch_clause_2492": + return Cannot_redeclare_identifier_0_in_catch_clause + case "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": + return Tuple_type_0_of_length_1_has_no_element_at_index_2 + case "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": + return Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher + case "Type_0_is_not_an_array_type_or_a_string_type_2495": + return Type_0_is_not_an_array_type_or_a_string_type + case "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": + return The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_function_expression + case "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": + return This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_referencing_its_default_export + case "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": + return Module_0_uses_export_and_cannot_be_used_with_export_Asterisk + case "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": + return An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments + case "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": + return A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments + case "A_rest_element_cannot_contain_a_binding_pattern_2501": + return A_rest_element_cannot_contain_a_binding_pattern + case "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": + return X_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation + case "Cannot_find_namespace_0_2503": + return Cannot_find_namespace_0 + case "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": + return Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator + case "A_generator_cannot_have_a_void_type_annotation_2505": + return A_generator_cannot_have_a_void_type_annotation + case "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": + return X_0_is_referenced_directly_or_indirectly_in_its_own_base_expression + case "Type_0_is_not_a_constructor_function_type_2507": + return Type_0_is_not_a_constructor_function_type + case "No_base_constructor_has_the_specified_number_of_type_arguments_2508": + return No_base_constructor_has_the_specified_number_of_type_arguments + case "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": + return Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_known_members + case "Base_constructors_must_all_have_the_same_return_type_2510": + return Base_constructors_must_all_have_the_same_return_type + case "Cannot_create_an_instance_of_an_abstract_class_2511": + return Cannot_create_an_instance_of_an_abstract_class + case "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": + return Overload_signatures_must_all_be_abstract_or_non_abstract + case "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": + return Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression + case "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": + return A_tuple_type_cannot_be_indexed_with_a_negative_value + case "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": + return Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2 + case "All_declarations_of_an_abstract_method_must_be_consecutive_2516": + return All_declarations_of_an_abstract_method_must_be_consecutive + case "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": + return Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type + case "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": + return A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard + case "An_async_iterator_must_have_a_next_method_2519": + return An_async_iterator_must_have_a_next_method + case "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": + return Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions + case "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": + return The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_standard_function_or_method + case "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": + return X_yield_expressions_cannot_be_used_in_a_parameter_initializer + case "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": + return X_await_expressions_cannot_be_used_in_a_parameter_initializer + case "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": + return A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface + case "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": + return The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary + case "A_module_cannot_have_multiple_default_exports_2528": + return A_module_cannot_have_multiple_default_exports + case "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": + return Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions + case "Property_0_is_incompatible_with_index_signature_2530": + return Property_0_is_incompatible_with_index_signature + case "Object_is_possibly_null_2531": + return Object_is_possibly_null + case "Object_is_possibly_undefined_2532": + return Object_is_possibly_undefined + case "Object_is_possibly_null_or_undefined_2533": + return Object_is_possibly_null_or_undefined + case "A_function_returning_never_cannot_have_a_reachable_end_point_2534": + return A_function_returning_never_cannot_have_a_reachable_end_point + case "Type_0_cannot_be_used_to_index_type_1_2536": + return Type_0_cannot_be_used_to_index_type_1 + case "Type_0_has_no_matching_index_signature_for_type_1_2537": + return Type_0_has_no_matching_index_signature_for_type_1 + case "Type_0_cannot_be_used_as_an_index_type_2538": + return Type_0_cannot_be_used_as_an_index_type + case "Cannot_assign_to_0_because_it_is_not_a_variable_2539": + return Cannot_assign_to_0_because_it_is_not_a_variable + case "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": + return Cannot_assign_to_0_because_it_is_a_read_only_property + case "Index_signature_in_type_0_only_permits_reading_2542": + return Index_signature_in_type_0_only_permits_reading + case "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": + return Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference + case "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": + return Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference + case "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": + return A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any + case "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": + return The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property + case "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": + return Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator + case "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": + return Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator + case "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": + return Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2_or_later + case "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": + return Property_0_does_not_exist_on_type_1_Did_you_mean_2 + case "Cannot_find_name_0_Did_you_mean_1_2552": + return Cannot_find_name_0_Did_you_mean_1 + case "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": + return Computed_values_are_not_permitted_in_an_enum_with_string_valued_members + case "Expected_0_arguments_but_got_1_2554": + return Expected_0_arguments_but_got_1 + case "Expected_at_least_0_arguments_but_got_1_2555": + return Expected_at_least_0_arguments_but_got_1 + case "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": + return A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter + case "Expected_0_type_arguments_but_got_1_2558": + return Expected_0_type_arguments_but_got_1 + case "Type_0_has_no_properties_in_common_with_type_1_2559": + return Type_0_has_no_properties_in_common_with_type_1 + case "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": + return Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it + case "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": + return Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_write_2 + case "Base_class_expressions_cannot_reference_class_type_parameters_2562": + return Base_class_expressions_cannot_reference_class_type_parameters + case "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": + return The_containing_function_or_module_body_is_too_large_for_control_flow_analysis + case "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": + return Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor + case "Property_0_is_used_before_being_assigned_2565": + return Property_0_is_used_before_being_assigned + case "A_rest_element_cannot_have_a_property_name_2566": + return A_rest_element_cannot_have_a_property_name + case "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": + return Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations + case "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": + return Property_0_may_not_exist_on_type_1_Did_you_mean_2 + case "Could_not_find_name_0_Did_you_mean_1_2570": + return Could_not_find_name_0_Did_you_mean_1 + case "Object_is_of_type_unknown_2571": + return Object_is_of_type_unknown + case "A_rest_element_type_must_be_an_array_type_2574": + return A_rest_element_type_must_be_an_array_type + case "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": + return No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments + case "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": + return Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead + case "Return_type_annotation_circularly_references_itself_2577": + return Return_type_annotation_circularly_references_itself + case "Unused_ts_expect_error_directive_2578": + return Unused_ts_expect_error_directive + case "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": + return Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode + case "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": + return Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery + case "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": + return Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha + case "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": + return Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later + case "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": + return Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom + case "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": + return X_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_es2015_or_later + case "Cannot_assign_to_0_because_it_is_a_constant_2588": + return Cannot_assign_to_0_because_it_is_a_constant + case "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": + return Type_instantiation_is_excessively_deep_and_possibly_infinite + case "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": + return Expression_produces_a_union_type_that_is_too_complex_to_represent + case "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": + return Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig + case "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": + return Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig + case "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": + return Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig + case "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": + return This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag + case "_0_can_only_be_imported_by_using_a_default_import_2595": + return X_0_can_only_be_imported_by_using_a_default_import + case "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": + return X_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import + case "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": + return X_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import + case "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": + return X_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import + case "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": + return JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist + case "Property_0_in_type_1_is_not_assignable_to_type_2_2603": + return Property_0_in_type_1_is_not_assignable_to_type_2 + case "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": + return JSX_element_type_0_does_not_have_any_construct_or_call_signatures + case "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": + return Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property + case "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": + return JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property + case "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": + return The_global_type_JSX_0_may_not_have_more_than_one_property + case "JSX_spread_child_must_be_an_array_type_2609": + return JSX_spread_child_must_be_an_array_type + case "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": + return X_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property + case "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": + return X_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor + case "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": + return 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 + case "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": + return Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead + case "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": + return Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead + case "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": + return Type_of_property_0_circularly_references_itself_in_mapped_type_1 + case "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": + return X_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import + case "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": + return X_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import + case "Source_has_0_element_s_but_target_requires_1_2618": + return Source_has_0_element_s_but_target_requires_1 + case "Source_has_0_element_s_but_target_allows_only_1_2619": + return Source_has_0_element_s_but_target_allows_only_1 + case "Target_requires_0_element_s_but_source_may_have_fewer_2620": + return Target_requires_0_element_s_but_source_may_have_fewer + case "Target_allows_only_0_element_s_but_source_may_have_more_2621": + return Target_allows_only_0_element_s_but_source_may_have_more + case "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": + return Source_provides_no_match_for_required_element_at_position_0_in_target + case "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": + return Source_provides_no_match_for_variadic_element_at_position_0_in_target + case "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": + return Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target + case "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": + return Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target + case "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": + return Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target + case "Cannot_assign_to_0_because_it_is_an_enum_2628": + return Cannot_assign_to_0_because_it_is_an_enum + case "Cannot_assign_to_0_because_it_is_a_class_2629": + return Cannot_assign_to_0_because_it_is_a_class + case "Cannot_assign_to_0_because_it_is_a_function_2630": + return Cannot_assign_to_0_because_it_is_a_function + case "Cannot_assign_to_0_because_it_is_a_namespace_2631": + return Cannot_assign_to_0_because_it_is_a_namespace + case "Cannot_assign_to_0_because_it_is_an_import_2632": + return Cannot_assign_to_0_because_it_is_an_import + case "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": + return JSX_property_access_expressions_cannot_include_JSX_namespace_names + case "_0_index_signatures_are_incompatible_2634": + return X_0_index_signatures_are_incompatible + case "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": + return Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable + case "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": + return Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation + case "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": + return Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_types + case "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": + return Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operator + case "React_components_cannot_include_JSX_namespace_names_2639": + return React_components_cannot_include_JSX_namespace_names + case "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": + return Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity + case "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": + return Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and_2_more + case "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": + return A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums + case "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": + return Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead + case "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": + return Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1 + case "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": + return Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2 + case "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": + return Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more + case "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": + return Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1 + case "JSX_expressions_must_have_one_parent_element_2657": + return JSX_expressions_must_have_one_parent_element + case "Type_0_provides_no_match_for_the_signature_1_2658": + return Type_0_provides_no_match_for_the_signature_1 + case "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": + return X_super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher + case "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": + return X_super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions + case "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": + return Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module + case "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": + return Cannot_find_name_0_Did_you_mean_the_static_member_1_0 + case "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": + return Cannot_find_name_0_Did_you_mean_the_instance_member_this_0 + case "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": + return Invalid_module_name_in_augmentation_module_0_cannot_be_found + case "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": + return Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented + case "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": + return Exports_and_export_assignments_are_not_permitted_in_module_augmentations + case "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": + return Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module + case "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": + return X_export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible + case "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": + return Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations + case "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": + return Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context + case "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": + return Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity + case "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": + return Cannot_assign_a_0_constructor_type_to_a_1_constructor_type + case "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": + return Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration + case "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": + return Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration + case "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": + return Cannot_extend_a_class_0_Class_constructor_is_marked_as_private + case "Accessors_must_both_be_abstract_or_non_abstract_2676": + return Accessors_must_both_be_abstract_or_non_abstract + case "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": + return A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type + case "Type_0_is_not_comparable_to_type_1_2678": + return Type_0_is_not_comparable_to_type_1 + case "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": + return A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void + case "A_0_parameter_must_be_the_first_parameter_2680": + return A_0_parameter_must_be_the_first_parameter + case "A_constructor_cannot_have_a_this_parameter_2681": + return A_constructor_cannot_have_a_this_parameter + case "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": + return X_this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation + case "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": + return The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1 + case "The_this_types_of_each_signature_are_incompatible_2685": + return The_this_types_of_each_signature_are_incompatible + case "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": + return X_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead + case "All_declarations_of_0_must_have_identical_modifiers_2687": + return All_declarations_of_0_must_have_identical_modifiers + case "Cannot_find_type_definition_file_for_0_2688": + return Cannot_find_type_definition_file_for_0 + case "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": + return Cannot_extend_an_interface_0_Did_you_mean_implements + case "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": + return X_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0 + case "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": + return X_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible + case "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": + return X_0_only_refers_to_a_type_but_is_being_used_as_a_value_here + case "Namespace_0_has_no_exported_member_1_2694": + return Namespace_0_has_no_exported_member_1 + case "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": + return Left_side_of_comma_operator_is_unused_and_has_no_side_effects + case "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": + return The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead + case "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": + return An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option + case "Spread_types_may_only_be_created_from_object_types_2698": + return Spread_types_may_only_be_created_from_object_types + case "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": + return Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1 + case "Rest_types_may_only_be_created_from_object_types_2700": + return Rest_types_may_only_be_created_from_object_types + case "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": + return The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access + case "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": + return X_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here + case "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": + return The_operand_of_a_delete_operator_must_be_a_property_reference + case "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": + return The_operand_of_a_delete_operator_cannot_be_a_read_only_property + case "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": + return An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option + case "Required_type_parameters_may_not_follow_optional_type_parameters_2706": + return Required_type_parameters_may_not_follow_optional_type_parameters + case "Generic_type_0_requires_between_1_and_2_type_arguments_2707": + return Generic_type_0_requires_between_1_and_2_type_arguments + case "Cannot_use_namespace_0_as_a_value_2708": + return Cannot_use_namespace_0_as_a_value + case "Cannot_use_namespace_0_as_a_type_2709": + return Cannot_use_namespace_0_as_a_type + case "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": + return X_0_are_specified_twice_The_attribute_named_0_will_be_overwritten + case "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": + return A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option + case "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": + return A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option + case "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": + return Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1 + case "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": + return The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context + case "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": + return Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor + case "Type_parameter_0_has_a_circular_default_2716": + return Type_parameter_0_has_a_circular_default + case "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": + return Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2 + case "Duplicate_property_0_2718": + return Duplicate_property_0 + case "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": + return Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated + case "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": + return Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass + case "Cannot_invoke_an_object_which_is_possibly_null_2721": + return Cannot_invoke_an_object_which_is_possibly_null + case "Cannot_invoke_an_object_which_is_possibly_undefined_2722": + return Cannot_invoke_an_object_which_is_possibly_undefined + case "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": + return Cannot_invoke_an_object_which_is_possibly_null_or_undefined + case "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": + return X_0_has_no_exported_member_named_1_Did_you_mean_2 + case "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": + return Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0 + case "Cannot_find_lib_definition_for_0_2726": + return Cannot_find_lib_definition_for_0 + case "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": + return Cannot_find_lib_definition_for_0_Did_you_mean_1 + case "_0_is_declared_here_2728": + return X_0_is_declared_here + case "Property_0_is_used_before_its_initialization_2729": + return Property_0_is_used_before_its_initialization + case "An_arrow_function_cannot_have_a_this_parameter_2730": + return An_arrow_function_cannot_have_a_this_parameter + case "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": + return Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_in_String + case "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": + return Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension + case "Property_0_was_also_declared_here_2733": + return Property_0_was_also_declared_here + case "Are_you_missing_a_semicolon_2734": + return Are_you_missing_a_semicolon + case "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": + return Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1 + case "Operator_0_cannot_be_applied_to_type_1_2736": + return Operator_0_cannot_be_applied_to_type_1 + case "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": + return BigInt_literals_are_not_available_when_targeting_lower_than_ES2020 + case "An_outer_value_of_this_is_shadowed_by_this_container_2738": + return An_outer_value_of_this_is_shadowed_by_this_container + case "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": + return Type_0_is_missing_the_following_properties_from_type_1_Colon_2 + case "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": + return Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more + case "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": + return Property_0_is_missing_in_type_1_but_required_in_type_2 + case "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": + return The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary + case "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": + return No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments + case "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": + return Type_parameter_defaults_can_only_reference_previously_declared_type_parameters + case "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": + return This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_provided + case "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": + return This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided + case "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": + return X_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2 + case "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": + return Cannot_access_ambient_const_enums_when_0_is_enabled + case "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": + return X_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0 + case "The_implementation_signature_is_declared_here_2750": + return The_implementation_signature_is_declared_here + case "Circularity_originates_in_type_at_this_location_2751": + return Circularity_originates_in_type_at_this_location + case "The_first_export_default_is_here_2752": + return The_first_export_default_is_here + case "Another_export_default_is_here_2753": + return Another_export_default_is_here + case "super_may_not_use_type_arguments_2754": + return X_super_may_not_use_type_arguments + case "No_constituent_of_type_0_is_callable_2755": + return No_constituent_of_type_0_is_callable + case "Not_all_constituents_of_type_0_are_callable_2756": + return Not_all_constituents_of_type_0_are_callable + case "Type_0_has_no_call_signatures_2757": + return Type_0_has_no_call_signatures + case "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": + return Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_other + case "No_constituent_of_type_0_is_constructable_2759": + return No_constituent_of_type_0_is_constructable + case "Not_all_constituents_of_type_0_are_constructable_2760": + return Not_all_constituents_of_type_0_are_constructable + case "Type_0_has_no_construct_signatures_2761": + return Type_0_has_no_construct_signatures + case "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": + return Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_with_each_other + case "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": + return Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_send_0 + case "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": + return Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_always_send_0 + case "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": + return Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring_will_always_send_0 + case "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": + return Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_containing_generator_will_always_send_0 + case "The_0_property_of_an_iterator_must_be_a_method_2767": + return The_0_property_of_an_iterator_must_be_a_method + case "The_0_property_of_an_async_iterator_must_be_a_method_2768": + return The_0_property_of_an_async_iterator_must_be_a_method + case "No_overload_matches_this_call_2769": + return No_overload_matches_this_call + case "The_last_overload_gave_the_following_error_2770": + return The_last_overload_gave_the_following_error + case "The_last_overload_is_declared_here_2771": + return The_last_overload_is_declared_here + case "Overload_0_of_1_2_gave_the_following_error_2772": + return Overload_0_of_1_2_gave_the_following_error + case "Did_you_forget_to_use_await_2773": + return Did_you_forget_to_use_await + case "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": + return This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead + case "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": + return Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation + case "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": + return Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name + case "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": + return The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access + case "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": + return The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access + case "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": + return The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access + case "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": + return The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access + case "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": + return The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access + case "_0_needs_an_explicit_type_annotation_2782": + return X_0_needs_an_explicit_type_annotation + case "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": + return X_0_is_specified_more_than_once_so_this_usage_will_be_overwritten + case "get_and_set_accessors_cannot_declare_this_parameters_2784": + return X_get_and_set_accessors_cannot_declare_this_parameters + case "This_spread_always_overwrites_this_property_2785": + return This_spread_always_overwrites_this_property + case "_0_cannot_be_used_as_a_JSX_component_2786": + return X_0_cannot_be_used_as_a_JSX_component + case "Its_return_type_0_is_not_a_valid_JSX_element_2787": + return Its_return_type_0_is_not_a_valid_JSX_element + case "Its_instance_type_0_is_not_a_valid_JSX_element_2788": + return Its_instance_type_0_is_not_a_valid_JSX_element + case "Its_element_type_0_is_not_a_valid_JSX_element_2789": + return Its_element_type_0_is_not_a_valid_JSX_element + case "The_operand_of_a_delete_operator_must_be_optional_2790": + return The_operand_of_a_delete_operator_must_be_optional + case "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": + return Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later + case "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": + return Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option + case "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": + return The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_are_not_externally_visible + case "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": + return Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise + case "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": + return The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types + case "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": + return It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tagged_template_expression_which_cannot_be_invoked + case "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": + return A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_be_declared_abstract + case "The_declaration_was_marked_as_deprecated_here_2798": + return The_declaration_was_marked_as_deprecated_here + case "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": + return Type_produces_a_tuple_type_that_is_too_large_to_represent + case "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": + return Expression_produces_a_tuple_type_that_is_too_large_to_represent + case "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": + return This_condition_will_always_return_true_since_this_0_is_always_defined + case "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": + return Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher + case "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": + return Cannot_assign_to_private_method_0_Private_methods_are_not_writable + case "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": + return Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name + case "Private_accessor_was_defined_without_a_getter_2806": + return Private_accessor_was_defined_without_a_getter + case "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": + return This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0 + case "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": + return A_get_accessor_must_be_at_least_as_accessible_as_the_setter + case "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": + return Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_whole_assignment_in_parentheses + case "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": + return Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments + case "Initializer_for_property_0_2811": + return Initializer_for_property_0 + case "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": + return Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom + case "Class_declaration_cannot_implement_overload_list_for_0_2813": + return Class_declaration_cannot_implement_overload_list_for_0 + case "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": + return Function_with_bodies_can_only_merge_with_classes_that_are_ambient + case "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": + return X_arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks + case "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": + return Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class + case "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": + return Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block + case "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": + return Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers + case "Namespace_name_cannot_be_0_2819": + return Namespace_name_cannot_be_0 + case "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": + return Type_0_is_not_assignable_to_type_1_Did_you_mean_2 + case "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": + return Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext_or_preserve + case "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": + return Import_assertions_cannot_be_used_with_type_only_imports_or_exports + case "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": + return Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext_or_preserve + case "Cannot_find_namespace_0_Did_you_mean_1_2833": + return Cannot_find_namespace_0_Did_you_mean_1 + case "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": + return Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_node16_or_nodenext_Consider_adding_an_extension_to_the_import_path + case "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": + return Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_node16_or_nodenext_Did_you_mean_0 + case "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": + return Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls + case "Import_assertion_values_must_be_string_literal_expressions_2837": + return Import_assertion_values_must_be_string_literal_expressions + case "All_declarations_of_0_must_have_identical_constraints_2838": + return All_declarations_of_0_must_have_identical_constraints + case "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": + return This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value + case "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": + return An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types + case "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": + return X_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation + case "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": + return We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here + case "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": + return Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor + case "This_condition_will_always_return_0_2845": + return This_condition_will_always_return_0 + case "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": + return A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_file_0_instead + case "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": + return The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression + case "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": + return Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1 + case "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": + return The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_null_or_undefined + case "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": + return The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_Symbol_dispose_method_or_be_null_or_undefined + case "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": + return X_await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules + case "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": + return X_await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module + case "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": + return Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher + case "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": + return Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super + case "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": + return Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls + case "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": + return Import_attributes_cannot_be_used_with_type_only_imports_or_exports + case "Import_attribute_values_must_be_string_literal_expressions_2858": + return Import_attribute_values_must_be_string_literal_expressions + case "Excessive_complexity_comparing_types_0_and_1_2859": + return Excessive_complexity_comparing_types_0_and_1 + case "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": + return The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_hand_side_s_Symbol_hasInstance_method + case "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": + return An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_hand_side_of_an_instanceof_expression + case "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": + return Type_0_is_generic_and_can_only_be_indexed_for_reading + case "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": + return A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values + case "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": + return A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types + case "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": + return Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_is_enabled + case "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": + return Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_when_isolatedModules_is_enabled + case "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": + return Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun + case "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": + return Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_and_then_add_bun_to_the_types_field_in_your_tsconfig + case "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": + return Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish + case "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": + return This_binary_expression_is_never_nullish_Are_you_missing_parentheses + case "This_expression_is_always_nullish_2871": + return This_expression_is_always_nullish + case "This_kind_of_expression_is_always_truthy_2872": + return This_kind_of_expression_is_always_truthy + case "This_kind_of_expression_is_always_falsy_2873": + return This_kind_of_expression_is_always_falsy + case "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": + return This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found + case "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": + return This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_for_the_appropriate_package_installed + case "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": + return This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolves_to_0 + case "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": + return This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_during_emit_because_it_is_not_a_relative_path + case "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": + return This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_between_the_projects_output_files_is_not_the_same_as_the_relative_path_between_its_input_files + case "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": + return Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found + case "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": + return Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert + case "This_expression_is_never_nullish_2881": + return This_expression_is_never_nullish + case "Import_declaration_0_is_using_private_name_1_4000": + return Import_declaration_0_is_using_private_name_1 + case "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": + return Type_parameter_0_of_exported_class_has_or_is_using_private_name_1 + case "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": + return Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1 + case "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": + return Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1 + case "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": + return Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1 + case "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": + return Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1 + case "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": + return Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1 + case "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": + return Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1 + case "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": + return Type_parameter_0_of_exported_function_has_or_is_using_private_name_1 + case "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": + return Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 + case "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": + return X_extends_clause_of_exported_class_0_has_or_is_using_private_name_1 + case "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": + return X_extends_clause_of_exported_class_has_or_is_using_private_name_0 + case "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": + return X_extends_clause_of_exported_interface_0_has_or_is_using_private_name_1 + case "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": + return Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": + return Exported_variable_0_has_or_is_using_name_1_from_private_module_2 + case "Exported_variable_0_has_or_is_using_private_name_1_4025": + return Exported_variable_0_has_or_is_using_private_name_1 + case "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": + return Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": + return Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 + case "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": + return Public_static_property_0_of_exported_class_has_or_is_using_private_name_1 + case "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": + return Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": + return Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 + case "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": + return Public_property_0_of_exported_class_has_or_is_using_private_name_1 + case "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": + return Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 + case "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": + return Property_0_of_exported_interface_has_or_is_using_private_name_1 + case "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": + return Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 + case "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": + return Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1 + case "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": + return Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 + case "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": + return Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1 + case "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": + return Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": + return Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 + case "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": + return Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1 + case "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": + return Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": + return Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 + case "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": + return Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1 + case "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": + return Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 + case "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": + return Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0 + case "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": + return Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 + case "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": + return Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0 + case "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": + return Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 + case "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": + return Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0 + case "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": + return Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named + case "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": + return Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 + case "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": + return Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0 + case "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": + return Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named + case "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": + return Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 + case "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": + return Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0 + case "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": + return Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 + case "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": + return Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0 + case "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": + return Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named + case "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": + return Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 + case "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": + return Return_type_of_exported_function_has_or_is_using_private_name_0 + case "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": + return Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": + return Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 + case "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": + return Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1 + case "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": + return Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 + case "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": + return Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1 + case "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": + return Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 + case "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": + return Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1 + case "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": + return Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": + return Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 + case "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": + return Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1 + case "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": + return Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": + return Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 + case "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": + return Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1 + case "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": + return Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 + case "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": + return Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1 + case "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": + return Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": + return Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 + case "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": + return Parameter_0_of_exported_function_has_or_is_using_private_name_1 + case "Exported_type_alias_0_has_or_is_using_private_name_1_4081": + return Exported_type_alias_0_has_or_is_using_private_name_1 + case "Default_export_of_the_module_has_or_is_using_private_name_0_4082": + return Default_export_of_the_module_has_or_is_using_private_name_0 + case "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": + return Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1 + case "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": + return Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2 + case "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": + return Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1 + case "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": + return Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 + case "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": + return Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1 + case "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": + return Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected + case "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": + return Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": + return Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 + case "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": + return Public_static_method_0_of_exported_class_has_or_is_using_private_name_1 + case "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": + return Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": + return Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 + case "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": + return Public_method_0_of_exported_class_has_or_is_using_private_name_1 + case "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": + return Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 + case "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": + return Method_0_of_exported_interface_has_or_is_using_private_name_1 + case "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": + return Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1 + case "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": + return The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1 + case "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": + return Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter + case "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": + return Parameter_0_of_accessor_has_or_is_using_private_name_1 + case "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": + return Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2 + case "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": + return Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named + case "Type_arguments_for_0_circularly_reference_themselves_4109": + return Type_arguments_for_0_circularly_reference_themselves + case "Tuple_type_arguments_circularly_reference_themselves_4110": + return Tuple_type_arguments_circularly_reference_themselves + case "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": + return Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0 + case "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": + return This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class + case "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": + return This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0 + case "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": + return This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0 + case "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": + return This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 + case "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": + return This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0 + case "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": + return This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1 + case "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": + return The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized + case "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": + return This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 + case "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": + return This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 + case "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": + return This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class + case "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": + return This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0 + case "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": + return 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 + case "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": + return Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next + case "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": + return Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given + case "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": + return One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value + case "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": + return This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic + case "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": + return This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic + case "The_current_host_does_not_support_the_0_option_5001": + return The_current_host_does_not_support_the_0_option + case "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": + return Cannot_find_the_common_subdirectory_path_for_the_input_files + case "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": + return File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0 + case "Cannot_read_file_0_Colon_1_5012": + return Cannot_read_file_0_Colon_1 + case "Unknown_compiler_option_0_5023": + return Unknown_compiler_option_0 + case "Compiler_option_0_requires_a_value_of_type_1_5024": + return Compiler_option_0_requires_a_value_of_type_1 + case "Unknown_compiler_option_0_Did_you_mean_1_5025": + return Unknown_compiler_option_0_Did_you_mean_1 + case "Could_not_write_file_0_Colon_1_5033": + return Could_not_write_file_0_Colon_1 + case "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": + return Option_project_cannot_be_mixed_with_source_files_on_a_command_line + case "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": + return Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher + case "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": + return Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided + case "Option_0_cannot_be_specified_without_specifying_option_1_5052": + return Option_0_cannot_be_specified_without_specifying_option_1 + case "Option_0_cannot_be_specified_with_option_1_5053": + return Option_0_cannot_be_specified_with_option_1 + case "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": + return A_tsconfig_json_file_is_already_defined_at_Colon_0 + case "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": + return Cannot_write_file_0_because_it_would_overwrite_input_file + case "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": + return Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files + case "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": + return Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0 + case "The_specified_path_does_not_exist_Colon_0_5058": + return The_specified_path_does_not_exist_Colon_0 + case "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": + return Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier + case "Pattern_0_can_have_at_most_one_Asterisk_character_5061": + return Pattern_0_can_have_at_most_one_Asterisk_character + case "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": + return Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character + case "Substitutions_for_pattern_0_should_be_an_array_5063": + return Substitutions_for_pattern_0_should_be_an_array + case "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": + return Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2 + case "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": + return File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0 + case "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": + return Substitutions_for_pattern_0_shouldn_t_be_an_empty_array + case "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": + return Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name + case "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": + return Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig + case "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": + return Option_0_cannot_be_specified_without_specifying_option_1_or_option_2 + case "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": + return Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic + case "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": + return Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd + case "Unknown_build_option_0_5072": + return Unknown_build_option_0 + case "Build_option_0_requires_a_value_of_type_1_5073": + return Build_option_0_requires_a_value_of_type_1 + case "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": + return Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified + case "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": + return X_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_constraint_2 + case "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": + return X_0_and_1_operations_cannot_be_mixed_without_parentheses + case "Unknown_build_option_0_Did_you_mean_1_5077": + return Unknown_build_option_0_Did_you_mean_1 + case "Unknown_watch_option_0_5078": + return Unknown_watch_option_0 + case "Unknown_watch_option_0_Did_you_mean_1_5079": + return Unknown_watch_option_0_Did_you_mean_1 + case "Watch_option_0_requires_a_value_of_type_1_5080": + return Watch_option_0_requires_a_value_of_type_1 + case "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": + return Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0 + case "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": + return X_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1 + case "Cannot_read_file_0_5083": + return Cannot_read_file_0 + case "A_tuple_member_cannot_be_both_optional_and_rest_5085": + return A_tuple_member_cannot_be_both_optional_and_rest + case "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": + return A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type + case "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": + return A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type + case "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": + return The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary + case "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": + return Option_0_cannot_be_specified_when_option_jsx_is_1 + case "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": + return Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash + case "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": + return Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled + case "The_root_value_of_a_0_file_must_be_an_object_5092": + return The_root_value_of_a_0_file_must_be_an_object + case "Compiler_option_0_may_only_be_used_with_build_5093": + return Compiler_option_0_may_only_be_used_with_build + case "Compiler_option_0_may_not_be_used_with_build_5094": + return Compiler_option_0_may_not_be_used_with_build + case "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": + return Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later + case "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": + return Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set + case "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": + return An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled + case "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": + return Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler + case "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": + return Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error + case "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": + return Option_0_has_been_removed_Please_remove_it_from_your_configuration + case "Invalid_value_for_ignoreDeprecations_5103": + return Invalid_value_for_ignoreDeprecations + case "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": + return Option_0_is_redundant_and_cannot_be_specified_with_option_1 + case "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": + return Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System + case "Use_0_instead_5106": + return Use_0_instead + case "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": + return Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error + case "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": + return Option_0_1_has_been_removed_Please_remove_it_from_your_configuration + case "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": + return Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1 + case "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": + return Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1 + case "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": + return Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information + case "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": + return Generates_a_sourcemap_for_each_corresponding_d_ts_file + case "Concatenate_and_emit_output_to_single_file_6001": + return Concatenate_and_emit_output_to_single_file + case "Generates_corresponding_d_ts_file_6002": + return Generates_corresponding_d_ts_file + case "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": + return Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations + case "Watch_input_files_6005": + return Watch_input_files + case "Redirect_output_structure_to_the_directory_6006": + return Redirect_output_structure_to_the_directory + case "Do_not_erase_const_enum_declarations_in_generated_code_6007": + return Do_not_erase_const_enum_declarations_in_generated_code + case "Do_not_emit_outputs_if_any_errors_were_reported_6008": + return Do_not_emit_outputs_if_any_errors_were_reported + case "Do_not_emit_comments_to_output_6009": + return Do_not_emit_comments_to_output + case "Do_not_emit_outputs_6010": + return Do_not_emit_outputs + case "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": + return Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking + case "Skip_type_checking_of_declaration_files_6012": + return Skip_type_checking_of_declaration_files + case "Do_not_resolve_the_real_path_of_symlinks_6013": + return Do_not_resolve_the_real_path_of_symlinks + case "Only_emit_d_ts_declaration_files_6014": + return Only_emit_d_ts_declaration_files + case "Specify_ECMAScript_target_version_6015": + return Specify_ECMAScript_target_version + case "Specify_module_code_generation_6016": + return Specify_module_code_generation + case "Print_this_message_6017": + return Print_this_message + case "Print_the_compiler_s_version_6019": + return Print_the_compiler_s_version + case "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": + return Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json + case "Syntax_Colon_0_6023": + return Syntax_Colon_0 + case "options_6024": + return X_options + case "file_6025": + return X_file + case "Examples_Colon_0_6026": + return Examples_Colon_0 + case "Options_Colon_6027": + return Options_Colon + case "Version_0_6029": + return Version_0 + case "Insert_command_line_options_and_files_from_a_file_6030": + return Insert_command_line_options_and_files_from_a_file + case "Starting_compilation_in_watch_mode_6031": + return Starting_compilation_in_watch_mode + case "File_change_detected_Starting_incremental_compilation_6032": + return File_change_detected_Starting_incremental_compilation + case "KIND_6034": + return KIND + case "FILE_6035": + return FILE + case "VERSION_6036": + return VERSION + case "LOCATION_6037": + return LOCATION + case "DIRECTORY_6038": + return DIRECTORY + case "STRATEGY_6039": + return STRATEGY + case "FILE_OR_DIRECTORY_6040": + return FILE_OR_DIRECTORY + case "Errors_Files_6041": + return Errors_Files + case "Generates_corresponding_map_file_6043": + return Generates_corresponding_map_file + case "Compiler_option_0_expects_an_argument_6044": + return Compiler_option_0_expects_an_argument + case "Unterminated_quoted_string_in_response_file_0_6045": + return Unterminated_quoted_string_in_response_file_0 + case "Argument_for_0_option_must_be_Colon_1_6046": + return Argument_for_0_option_must_be_Colon_1 + case "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": + return Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1 + case "Unable_to_open_file_0_6050": + return Unable_to_open_file_0 + case "Corrupted_locale_file_0_6051": + return Corrupted_locale_file_0 + case "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": + return Raise_error_on_expressions_and_declarations_with_an_implied_any_type + case "File_0_not_found_6053": + return File_0_not_found + case "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": + return File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1 + case "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": + return Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures + case "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": + return Do_not_emit_declarations_for_code_that_has_an_internal_annotation + case "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": + return Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir + case "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": + return File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files + case "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": + return Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix + case "NEWLINE_6061": + return NEWLINE + case "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": + return Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line + case "Enables_experimental_support_for_ES7_decorators_6065": + return Enables_experimental_support_for_ES7_decorators + case "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": + return Enables_experimental_support_for_emitting_type_metadata_for_decorators + case "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": + return Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file + case "Successfully_created_a_tsconfig_json_file_6071": + return Successfully_created_a_tsconfig_json_file + case "Suppress_excess_property_checks_for_object_literals_6072": + return Suppress_excess_property_checks_for_object_literals + case "Stylize_errors_and_messages_using_color_and_context_experimental_6073": + return Stylize_errors_and_messages_using_color_and_context_experimental + case "Do_not_report_errors_on_unused_labels_6074": + return Do_not_report_errors_on_unused_labels + case "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": + return Report_error_when_not_all_code_paths_in_function_return_a_value + case "Report_errors_for_fallthrough_cases_in_switch_statement_6076": + return Report_errors_for_fallthrough_cases_in_switch_statement + case "Do_not_report_errors_on_unreachable_code_6077": + return Do_not_report_errors_on_unreachable_code + case "Disallow_inconsistently_cased_references_to_the_same_file_6078": + return Disallow_inconsistently_cased_references_to_the_same_file + case "Specify_library_files_to_be_included_in_the_compilation_6079": + return Specify_library_files_to_be_included_in_the_compilation + case "Specify_JSX_code_generation_6080": + return Specify_JSX_code_generation + case "Only_amd_and_system_modules_are_supported_alongside_0_6082": + return Only_amd_and_system_modules_are_supported_alongside_0 + case "Base_directory_to_resolve_non_absolute_module_names_6083": + return Base_directory_to_resolve_non_absolute_module_names + case "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": + return Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit + case "Enable_tracing_of_the_name_resolution_process_6085": + return Enable_tracing_of_the_name_resolution_process + case "Resolving_module_0_from_1_6086": + return Resolving_module_0_from_1 + case "Explicitly_specified_module_resolution_kind_Colon_0_6087": + return Explicitly_specified_module_resolution_kind_Colon_0 + case "Module_resolution_kind_is_not_specified_using_0_6088": + return Module_resolution_kind_is_not_specified_using_0 + case "Module_name_0_was_successfully_resolved_to_1_6089": + return Module_name_0_was_successfully_resolved_to_1 + case "Module_name_0_was_not_resolved_6090": + return Module_name_0_was_not_resolved + case "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": + return X_paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0 + case "Module_name_0_matched_pattern_1_6092": + return Module_name_0_matched_pattern_1 + case "Trying_substitution_0_candidate_module_location_Colon_1_6093": + return Trying_substitution_0_candidate_module_location_Colon_1 + case "Resolving_module_name_0_relative_to_base_url_1_2_6094": + return Resolving_module_name_0_relative_to_base_url_1_2 + case "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": + return Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1 + case "File_0_does_not_exist_6096": + return File_0_does_not_exist + case "File_0_exists_use_it_as_a_name_resolution_result_6097": + return File_0_exists_use_it_as_a_name_resolution_result + case "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": + return Loading_module_0_from_node_modules_folder_target_file_types_Colon_1 + case "Found_package_json_at_0_6099": + return Found_package_json_at_0 + case "package_json_does_not_have_a_0_field_6100": + return X_package_json_does_not_have_a_0_field + case "package_json_has_0_field_1_that_references_2_6101": + return X_package_json_has_0_field_1_that_references_2 + case "Allow_javascript_files_to_be_compiled_6102": + return Allow_javascript_files_to_be_compiled + case "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": + return Checking_if_0_is_the_longest_matching_prefix_for_1_2 + case "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": + return Expected_type_of_0_field_in_package_json_to_be_1_got_2 + case "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": + return X_baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1 + case "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": + return X_rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0 + case "Longest_matching_prefix_for_0_is_1_6108": + return Longest_matching_prefix_for_0_is_1 + case "Loading_0_from_the_root_dir_1_candidate_location_2_6109": + return Loading_0_from_the_root_dir_1_candidate_location_2 + case "Trying_other_entries_in_rootDirs_6110": + return Trying_other_entries_in_rootDirs + case "Module_resolution_using_rootDirs_has_failed_6111": + return Module_resolution_using_rootDirs_has_failed + case "Do_not_emit_use_strict_directives_in_module_output_6112": + return Do_not_emit_use_strict_directives_in_module_output + case "Enable_strict_null_checks_6113": + return Enable_strict_null_checks + case "Unknown_option_excludes_Did_you_mean_exclude_6114": + return Unknown_option_excludes_Did_you_mean_exclude + case "Raise_error_on_this_expressions_with_an_implied_any_type_6115": + return Raise_error_on_this_expressions_with_an_implied_any_type + case "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": + return Resolving_type_reference_directive_0_containing_file_1_root_directory_2 + case "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": + return Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2 + case "Type_reference_directive_0_was_not_resolved_6120": + return Type_reference_directive_0_was_not_resolved + case "Resolving_with_primary_search_path_0_6121": + return Resolving_with_primary_search_path_0 + case "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": + return Root_directory_cannot_be_determined_skipping_primary_search_paths + case "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": + return Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set + case "Type_declaration_files_to_be_included_in_compilation_6124": + return Type_declaration_files_to_be_included_in_compilation + case "Looking_up_in_node_modules_folder_initial_location_0_6125": + return Looking_up_in_node_modules_folder_initial_location_0 + case "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": + return Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder + case "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": + return Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1 + case "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": + return Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set + case "Resolving_real_path_for_0_result_1_6130": + return Resolving_real_path_for_0_result_1 + case "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": + return Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system + case "File_name_0_has_a_1_extension_stripping_it_6132": + return File_name_0_has_a_1_extension_stripping_it + case "_0_is_declared_but_its_value_is_never_read_6133": + return X_0_is_declared_but_its_value_is_never_read + case "Report_errors_on_unused_locals_6134": + return Report_errors_on_unused_locals + case "Report_errors_on_unused_parameters_6135": + return Report_errors_on_unused_parameters + case "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": + return The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files + case "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": + return Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1 + case "Property_0_is_declared_but_its_value_is_never_read_6138": + return Property_0_is_declared_but_its_value_is_never_read + case "Import_emit_helpers_from_tslib_6139": + return Import_emit_helpers_from_tslib + case "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": + return Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2 + case "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": + return Parse_in_strict_mode_and_emit_use_strict_for_each_source_file + case "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": + return Module_0_was_resolved_to_1_but_jsx_is_not_set + case "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": + return Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1 + case "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": + return Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h + case "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": + return Resolution_for_module_0_was_found_in_cache_from_location_1 + case "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": + return Directory_0_does_not_exist_skipping_all_lookups_in_it + case "Show_diagnostic_information_6149": + return Show_diagnostic_information + case "Show_verbose_diagnostic_information_6150": + return Show_verbose_diagnostic_information + case "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": + return Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file + case "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": + return Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set + case "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": + return Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule + case "Print_names_of_generated_files_part_of_the_compilation_6154": + return Print_names_of_generated_files_part_of_the_compilation + case "Print_names_of_files_part_of_the_compilation_6155": + return Print_names_of_files_part_of_the_compilation + case "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": + return The_locale_used_when_displaying_messages_to_the_user_e_g_en_us + case "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": + return Do_not_generate_custom_helper_functions_like_extends_in_compiled_output + case "Do_not_include_the_default_library_file_lib_d_ts_6158": + return Do_not_include_the_default_library_file_lib_d_ts + case "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": + return Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files + case "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": + return Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files + case "List_of_folders_to_include_type_definitions_from_6161": + return List_of_folders_to_include_type_definitions_from + case "Disable_size_limitations_on_JavaScript_projects_6162": + return Disable_size_limitations_on_JavaScript_projects + case "The_character_set_of_the_input_files_6163": + return The_character_set_of_the_input_files + case "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": + return Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1 + case "Do_not_truncate_error_messages_6165": + return Do_not_truncate_error_messages + case "Output_directory_for_generated_declaration_files_6166": + return Output_directory_for_generated_declaration_files + case "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": + return A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl + case "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": + return List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime + case "Show_all_compiler_options_6169": + return Show_all_compiler_options + case "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": + return Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file + case "Command_line_Options_6171": + return Command_line_Options + case "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": + return Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5 + case "Enable_all_strict_type_checking_options_6180": + return Enable_all_strict_type_checking_options + case "Scoped_package_detected_looking_in_0_6182": + return Scoped_package_detected_looking_in_0 + case "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": + return Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 + case "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": + return Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 + case "Enable_strict_checking_of_function_types_6186": + return Enable_strict_checking_of_function_types + case "Enable_strict_checking_of_property_initialization_in_classes_6187": + return Enable_strict_checking_of_property_initialization_in_classes + case "Numeric_separators_are_not_allowed_here_6188": + return Numeric_separators_are_not_allowed_here + case "Multiple_consecutive_numeric_separators_are_not_permitted_6189": + return Multiple_consecutive_numeric_separators_are_not_permitted + case "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": + return Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen + case "All_imports_in_import_declaration_are_unused_6192": + return All_imports_in_import_declaration_are_unused + case "Found_1_error_Watching_for_file_changes_6193": + return Found_1_error_Watching_for_file_changes + case "Found_0_errors_Watching_for_file_changes_6194": + return Found_0_errors_Watching_for_file_changes + case "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": + return Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols + case "_0_is_declared_but_never_used_6196": + return X_0_is_declared_but_never_used + case "Include_modules_imported_with_json_extension_6197": + return Include_modules_imported_with_json_extension + case "All_destructured_elements_are_unused_6198": + return All_destructured_elements_are_unused + case "All_variables_are_unused_6199": + return All_variables_are_unused + case "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": + return Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0 + case "Conflicts_are_in_this_file_6201": + return Conflicts_are_in_this_file + case "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": + return Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0 + case "_0_was_also_declared_here_6203": + return X_0_was_also_declared_here + case "and_here_6204": + return X_and_here + case "All_type_parameters_are_unused_6205": + return All_type_parameters_are_unused + case "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": + return X_package_json_has_a_typesVersions_field_with_version_specific_path_mappings + case "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": + return X_package_json_does_not_have_a_typesVersions_entry_that_matches_version_0 + case "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": + return X_package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2 + case "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": + return X_package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range + case "An_argument_for_0_was_not_provided_6210": + return An_argument_for_0_was_not_provided + case "An_argument_matching_this_binding_pattern_was_not_provided_6211": + return An_argument_matching_this_binding_pattern_was_not_provided + case "Did_you_mean_to_call_this_expression_6212": + return Did_you_mean_to_call_this_expression + case "Did_you_mean_to_use_new_with_this_expression_6213": + return Did_you_mean_to_use_new_with_this_expression + case "Enable_strict_bind_call_and_apply_methods_on_functions_6214": + return Enable_strict_bind_call_and_apply_methods_on_functions + case "Using_compiler_options_of_project_reference_redirect_0_6215": + return Using_compiler_options_of_project_reference_redirect_0 + case "Found_1_error_6216": + return Found_1_error + case "Found_0_errors_6217": + return Found_0_errors + case "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": + return Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2 + case "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": + return Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3 + case "package_json_had_a_falsy_0_field_6220": + return X_package_json_had_a_falsy_0_field + case "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": + return Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects + case "Emit_class_fields_with_Define_instead_of_Set_6222": + return Emit_class_fields_with_Define_instead_of_Set + case "Generates_a_CPU_profile_6223": + return Generates_a_CPU_profile + case "Disable_solution_searching_for_this_project_6224": + return Disable_solution_searching_for_this_project + case "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": + return Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory + case "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": + return Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling + case "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": + return Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize + case "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": + return Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3 + case "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": + return Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line + case "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": + return Could_not_resolve_the_path_0_with_the_extensions_Colon_1 + case "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": + return Declaration_augments_declaration_in_another_file_This_cannot_be_serialized + case "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": + return This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_file + case "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": + return This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without + case "Disable_loading_referenced_projects_6235": + return Disable_loading_referenced_projects + case "Arguments_for_the_rest_parameter_0_were_not_provided_6236": + return Arguments_for_the_rest_parameter_0_were_not_provided + case "Generates_an_event_trace_and_a_list_of_types_6237": + return Generates_an_event_trace_and_a_list_of_types + case "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": + return Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react + case "File_0_exists_according_to_earlier_cached_lookups_6239": + return File_0_exists_according_to_earlier_cached_lookups + case "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": + return File_0_does_not_exist_according_to_earlier_cached_lookups + case "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": + return Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1 + case "Resolving_type_reference_directive_0_containing_file_1_6242": + return Resolving_type_reference_directive_0_containing_file_1 + case "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": + return Interpret_optional_property_types_as_written_rather_than_adding_undefined + case "Modules_6244": + return Modules + case "File_Management_6245": + return File_Management + case "Emit_6246": + return Emit + case "JavaScript_Support_6247": + return JavaScript_Support + case "Type_Checking_6248": + return Type_Checking + case "Editor_Support_6249": + return Editor_Support + case "Watch_and_Build_Modes_6250": + return Watch_and_Build_Modes + case "Compiler_Diagnostics_6251": + return Compiler_Diagnostics + case "Interop_Constraints_6252": + return Interop_Constraints + case "Backwards_Compatibility_6253": + return Backwards_Compatibility + case "Language_and_Environment_6254": + return Language_and_Environment + case "Projects_6255": + return Projects + case "Output_Formatting_6256": + return Output_Formatting + case "Completeness_6257": + return Completeness + case "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": + return X_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file + case "Found_1_error_in_0_6259": + return Found_1_error_in_0 + case "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": + return Found_0_errors_in_the_same_file_starting_at_Colon_1 + case "Found_0_errors_in_1_files_6261": + return Found_0_errors_in_1_files + case "File_name_0_has_a_1_extension_looking_up_2_instead_6262": + return File_name_0_has_a_1_extension_looking_up_2_instead + case "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": + return Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set + case "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": + return Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present + case "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": + return Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_node_modules_folder + case "Option_0_can_only_be_specified_on_command_line_6266": + return Option_0_can_only_be_specified_on_command_line + case "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": + return Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve + case "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": + return Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1 + case "Invalid_import_specifier_0_has_no_possible_resolutions_6272": + return Invalid_import_specifier_0_has_no_possible_resolutions + case "package_json_scope_0_has_no_imports_defined_6273": + return X_package_json_scope_0_has_no_imports_defined + case "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": + return X_package_json_scope_0_explicitly_maps_specifier_1_to_null + case "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": + return X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1 + case "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": + return Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1 + case "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": + return Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_if_npm_library_needs_configuration_update + case "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": + return There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The_1_library_may_need_to_update_its_package_json_or_typings + case "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": + return Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_need_configuration_update + case "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": + return There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setting_Consider_updating_to_node16_nodenext_or_bundler + case "package_json_has_a_peerDependencies_field_6281": + return X_package_json_has_a_peerDependencies_field + case "Found_peerDependency_0_with_1_version_6282": + return Found_peerDependency_0_with_1_version + case "Failed_to_find_peerDependency_0_6283": + return Failed_to_find_peerDependency_0 + case "File_Layout_6284": + return File_Layout + case "Environment_Settings_6285": + return Environment_Settings + case "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": + return See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule + case "For_nodejs_Colon_6287": + return For_nodejs_Colon + case "and_npm_install_D_types_Slashnode_6290": + return X_and_npm_install_D_types_Slashnode + case "Other_Outputs_6291": + return Other_Outputs + case "Stricter_Typechecking_Options_6292": + return Stricter_Typechecking_Options + case "Style_Options_6293": + return Style_Options + case "Recommended_Options_6294": + return Recommended_Options + case "Enable_project_compilation_6302": + return Enable_project_compilation + case "Composite_projects_may_not_disable_declaration_emit_6304": + return Composite_projects_may_not_disable_declaration_emit + case "Output_file_0_has_not_been_built_from_source_file_1_6305": + return Output_file_0_has_not_been_built_from_source_file_1 + case "Referenced_project_0_must_have_setting_composite_Colon_true_6306": + return Referenced_project_0_must_have_setting_composite_Colon_true + case "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": + return File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern + case "Referenced_project_0_may_not_disable_emit_6310": + return Referenced_project_0_may_not_disable_emit + case "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": + return Project_0_is_out_of_date_because_output_1_is_older_than_input_2 + case "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": + return Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2 + case "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": + return Project_0_is_out_of_date_because_output_file_1_does_not_exist + case "Failed_to_delete_file_0_6353": + return Failed_to_delete_file_0 + case "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": + return Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies + case "Projects_in_this_build_Colon_0_6355": + return Projects_in_this_build_Colon_0 + case "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": + return A_non_dry_build_would_delete_the_following_files_Colon_0 + case "A_non_dry_build_would_build_project_0_6357": + return A_non_dry_build_would_build_project_0 + case "Building_project_0_6358": + return Building_project_0 + case "Updating_output_timestamps_of_project_0_6359": + return Updating_output_timestamps_of_project_0 + case "Project_0_is_up_to_date_6361": + return Project_0_is_up_to_date + case "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": + return Skipping_build_of_project_0_because_its_dependency_1_has_errors + case "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": + return Project_0_can_t_be_built_because_its_dependency_1_has_errors + case "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": + return Build_one_or_more_projects_and_their_dependencies_if_out_of_date + case "Delete_the_outputs_of_all_projects_6365": + return Delete_the_outputs_of_all_projects + case "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": + return Show_what_would_be_built_or_deleted_if_specified_with_clean + case "Option_build_must_be_the_first_command_line_argument_6369": + return Option_build_must_be_the_first_command_line_argument + case "Options_0_and_1_cannot_be_combined_6370": + return Options_0_and_1_cannot_be_combined + case "Updating_unchanged_output_timestamps_of_project_0_6371": + return Updating_unchanged_output_timestamps_of_project_0 + case "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": + return A_non_dry_build_would_update_timestamps_for_output_of_project_0 + case "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": + return Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1 + case "Composite_projects_may_not_disable_incremental_compilation_6379": + return Composite_projects_may_not_disable_incremental_compilation + case "Specify_file_to_store_incremental_compilation_information_6380": + return Specify_file_to_store_incremental_compilation_information + case "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": + return Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_current_version_2 + case "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": + return Skipping_build_of_project_0_because_its_dependency_1_was_not_built + case "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": + return Project_0_can_t_be_built_because_its_dependency_1_was_not_built + case "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": + return Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it + case "_0_is_deprecated_6385": + return X_0_is_deprecated + case "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": + return Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found + case "The_signature_0_of_1_is_deprecated_6387": + return The_signature_0_of_1_is_deprecated + case "Project_0_is_being_forcibly_rebuilt_6388": + return Project_0_is_being_forcibly_rebuilt + case "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": + return Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved + case "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": + return Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2 + case "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": + return Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 + case "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": + return Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved + case "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": + return Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 + case "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": + return Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 + case "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": + return Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved + case "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": + return Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 + case "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": + return Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 + case "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": + return Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved + case "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": + return Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitted + case "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": + return Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_files + case "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": + return Project_0_is_out_of_date_because_config_file_does_not_exist + case "Resolving_in_0_mode_with_conditions_1_6402": + return Resolving_in_0_mode_with_conditions_1 + case "Matched_0_condition_1_6403": + return Matched_0_condition_1 + case "Using_0_subpath_1_with_target_2_6404": + return Using_0_subpath_1_with_target_2 + case "Saw_non_matching_condition_0_6405": + return Saw_non_matching_condition_0 + case "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": + return Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions + case "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": + return Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noEmit_or_emitDeclarationOnly_to_be_set + case "Use_the_package_json_exports_field_when_resolving_package_imports_6408": + return Use_the_package_json_exports_field_when_resolving_package_imports + case "Use_the_package_json_imports_field_when_resolving_imports_6409": + return Use_the_package_json_imports_field_when_resolving_imports + case "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": + return Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports + case "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": + return X_true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false + case "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": + return Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_but_not_any_more + case "Entering_conditional_exports_6413": + return Entering_conditional_exports + case "Resolved_under_condition_0_6414": + return Resolved_under_condition_0 + case "Failed_to_resolve_under_condition_0_6415": + return Failed_to_resolve_under_condition_0 + case "Exiting_conditional_exports_6416": + return Exiting_conditional_exports + case "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": + return Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0 + case "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": + return Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0 + case "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": + return Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors + case "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": + return Project_0_is_out_of_date_because_input_1_does_not_exist + case "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": + return Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_in_output_files + case "Project_0_is_out_of_date_because_it_has_errors_6423": + return Project_0_is_out_of_date_because_it_has_errors + case "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": + return The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1 + case "The_expected_type_comes_from_this_index_signature_6501": + return The_expected_type_comes_from_this_index_signature + case "The_expected_type_comes_from_the_return_type_of_this_signature_6502": + return The_expected_type_comes_from_the_return_type_of_this_signature + case "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": + return Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing + case "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": + return File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option + case "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": + return Print_names_of_files_and_the_reason_they_are_part_of_the_compilation + case "Consider_adding_a_declare_modifier_to_this_class_6506": + return Consider_adding_a_declare_modifier_to_this_class + case "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": + return Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these_files + case "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": + return Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export + case "Allow_accessing_UMD_globals_from_modules_6602": + return Allow_accessing_UMD_globals_from_modules + case "Disable_error_reporting_for_unreachable_code_6603": + return Disable_error_reporting_for_unreachable_code + case "Disable_error_reporting_for_unused_labels_6604": + return Disable_error_reporting_for_unused_labels + case "Ensure_use_strict_is_always_emitted_6605": + return Ensure_use_strict_is_always_emitted + case "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": + return Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it + case "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": + return Specify_the_base_directory_to_resolve_non_relative_module_names + case "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": + return No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files + case "Enable_error_reporting_in_type_checked_JavaScript_files_6609": + return Enable_error_reporting_in_type_checked_JavaScript_files + case "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": + return Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references + case "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": + return Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project + case "Specify_the_output_directory_for_generated_declaration_files_6613": + return Specify_the_output_directory_for_generated_declaration_files + case "Create_sourcemaps_for_d_ts_files_6614": + return Create_sourcemaps_for_d_ts_files + case "Output_compiler_performance_information_after_building_6615": + return Output_compiler_performance_information_after_building + case "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": + return Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project + case "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": + return Reduce_the_number_of_projects_loaded_automatically_by_TypeScript + case "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": + return Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server + case "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": + return Opt_a_project_out_of_multi_project_reference_checking_when_editing + case "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": + return Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects + case "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": + return Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration + case "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": + return Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files + case "Only_output_d_ts_files_and_not_JavaScript_files_6623": + return Only_output_d_ts_files_and_not_JavaScript_files + case "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": + return Emit_design_type_metadata_for_decorated_declarations_in_source_files + case "Disable_the_type_acquisition_for_JavaScript_projects_6625": + return Disable_the_type_acquisition_for_JavaScript_projects + case "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": + return Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility + case "Filters_results_from_the_include_option_6627": + return Filters_results_from_the_include_option + case "Remove_a_list_of_directories_from_the_watch_process_6628": + return Remove_a_list_of_directories_from_the_watch_process + case "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": + return Remove_a_list_of_files_from_the_watch_mode_s_processing + case "Enable_experimental_support_for_legacy_experimental_decorators_6630": + return Enable_experimental_support_for_legacy_experimental_decorators + case "Print_files_read_during_the_compilation_including_why_it_was_included_6631": + return Print_files_read_during_the_compilation_including_why_it_was_included + case "Output_more_detailed_compiler_performance_information_after_building_6632": + return Output_more_detailed_compiler_performance_information_after_building + case "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": + return Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_are_inherited + case "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": + return Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers + case "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": + return Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include + case "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": + return Build_all_projects_including_those_that_appear_to_be_up_to_date + case "Ensure_that_casing_is_correct_in_imports_6637": + return Ensure_that_casing_is_correct_in_imports + case "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": + return Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging + case "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": + return Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file + case "Skip_building_downstream_projects_on_error_in_upstream_project_6640": + return Skip_building_downstream_projects_on_error_in_upstream_project + case "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": + return Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation + case "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": + return Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects + case "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": + return Include_sourcemap_files_inside_the_emitted_JavaScript + case "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": + return Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript + case "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": + return Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports + case "Specify_what_JSX_code_is_generated_6646": + return Specify_what_JSX_code_is_generated + case "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": + return Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h + case "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": + return Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment + case "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": + return Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk + case "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": + return Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option + case "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": + return Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment + case "Print_the_names_of_emitted_files_after_a_compilation_6652": + return Print_the_names_of_emitted_files_after_a_compilation + case "Print_all_of_the_files_read_during_the_compilation_6653": + return Print_all_of_the_files_read_during_the_compilation + case "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": + return Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit + case "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": + return Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations + case "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": + return Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs + case "Specify_what_module_code_is_generated_6657": + return Specify_what_module_code_is_generated + case "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": + return Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier + case "Set_the_newline_character_for_emitting_files_6659": + return Set_the_newline_character_for_emitting_files + case "Disable_emitting_files_from_a_compilation_6660": + return Disable_emitting_files_from_a_compilation + case "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": + return Disable_generating_custom_helper_functions_like_extends_in_compiled_output + case "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": + return Disable_emitting_files_if_any_type_checking_errors_are_reported + case "Disable_truncating_types_in_error_messages_6663": + return Disable_truncating_types_in_error_messages + case "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": + return Enable_error_reporting_for_fallthrough_cases_in_switch_statements + case "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": + return Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type + case "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": + return Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier + case "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": + return Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function + case "Enable_error_reporting_when_this_is_given_the_type_any_6668": + return Enable_error_reporting_when_this_is_given_the_type_any + case "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": + return Disable_adding_use_strict_directives_in_emitted_JavaScript_files + case "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": + return Disable_including_any_library_files_including_the_default_lib_d_ts + case "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": + return Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type + case "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": + return Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project + case "Disable_strict_checking_of_generic_signatures_in_function_types_6673": + return Disable_strict_checking_of_generic_signatures_in_function_types + case "Add_undefined_to_a_type_when_accessed_using_an_index_6674": + return Add_undefined_to_a_type_when_accessed_using_an_index + case "Enable_error_reporting_when_local_variables_aren_t_read_6675": + return Enable_error_reporting_when_local_variables_aren_t_read + case "Raise_an_error_when_a_function_parameter_isn_t_read_6676": + return Raise_an_error_when_a_function_parameter_isn_t_read + case "Deprecated_setting_Use_outFile_instead_6677": + return Deprecated_setting_Use_outFile_instead + case "Specify_an_output_folder_for_all_emitted_files_6678": + return Specify_an_output_folder_for_all_emitted_files + case "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": + return Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output + case "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": + return Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations + case "Specify_a_list_of_language_service_plugins_to_include_6681": + return Specify_a_list_of_language_service_plugins_to_include + case "Disable_erasing_const_enum_declarations_in_generated_code_6682": + return Disable_erasing_const_enum_declarations_in_generated_code + case "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": + return Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node + case "Disable_wiping_the_console_in_watch_mode_6684": + return Disable_wiping_the_console_in_watch_mode + case "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": + return Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read + case "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": + return Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit + case "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": + return Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references + case "Disable_emitting_comments_6688": + return Disable_emitting_comments + case "Enable_importing_json_files_6689": + return Enable_importing_json_files + case "Specify_the_root_folder_within_your_source_files_6690": + return Specify_the_root_folder_within_your_source_files + case "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": + return Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules + case "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": + return Skip_type_checking_d_ts_files_that_are_included_with_TypeScript + case "Skip_type_checking_all_d_ts_files_6693": + return Skip_type_checking_all_d_ts_files + case "Create_source_map_files_for_emitted_JavaScript_files_6694": + return Create_source_map_files_for_emitted_JavaScript_files + case "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": + return Specify_the_root_path_for_debuggers_to_find_the_reference_source_code + case "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": + return Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function + case "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": + return When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible + case "When_type_checking_take_into_account_null_and_undefined_6699": + return When_type_checking_take_into_account_null_and_undefined + case "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": + return Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor + case "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": + return Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments + case "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": + return Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals + case "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": + return Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures + case "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": + return Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively + case "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": + return Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations + case "Log_paths_used_during_the_moduleResolution_process_6706": + return Log_paths_used_during_the_moduleResolution_process + case "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": + return Specify_the_path_to_tsbuildinfo_incremental_compilation_file + case "Specify_options_for_automatic_acquisition_of_declaration_files_6709": + return Specify_options_for_automatic_acquisition_of_declaration_files + case "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": + return Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types + case "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": + return Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file + case "Emit_ECMAScript_standard_compliant_class_fields_6712": + return Emit_ECMAScript_standard_compliant_class_fields + case "Enable_verbose_logging_6713": + return Enable_verbose_logging + case "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": + return Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality + case "Specify_how_the_TypeScript_watch_mode_works_6715": + return Specify_how_the_TypeScript_watch_mode_works + case "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": + return Require_undeclared_properties_from_index_signatures_to_use_element_accesses + case "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": + return Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types + case "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": + return Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files + case "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": + return Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any + case "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": + return Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript + case "Default_catch_clause_variables_as_unknown_instead_of_any_6803": + return Default_catch_clause_variables_as_unknown_instead_of_any + case "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": + return Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_in_the_output_file_s_format_based_on_the_module_setting + case "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": + return Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported + case "Check_side_effect_imports_6806": + return Check_side_effect_imports + case "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": + return This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2 + case "Enable_lib_replacement_6808": + return Enable_lib_replacement + case "one_of_Colon_6900": + return X_one_of_Colon + case "one_or_more_Colon_6901": + return X_one_or_more_Colon + case "type_Colon_6902": + return X_type_Colon + case "default_Colon_6903": + return X_default_Colon + case "module_system_or_esModuleInterop_6904": + return X_module_system_or_esModuleInterop + case "false_unless_strict_is_set_6905": + return X_false_unless_strict_is_set + case "false_unless_composite_is_set_6906": + return X_false_unless_composite_is_set + case "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": + return X_node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified + case "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": + return X_if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk + case "true_if_composite_false_otherwise_6909": + return X_true_if_composite_false_otherwise + case "Computed_from_the_list_of_input_files_6911": + return Computed_from_the_list_of_input_files + case "Platform_specific_6912": + return Platform_specific + case "You_can_learn_about_all_of_the_compiler_options_at_0_6913": + return You_can_learn_about_all_of_the_compiler_options_at_0 + case "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": + return Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon + case "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": + return Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0 + case "COMMON_COMMANDS_6916": + return COMMON_COMMANDS + case "ALL_COMPILER_OPTIONS_6917": + return ALL_COMPILER_OPTIONS + case "WATCH_OPTIONS_6918": + return WATCH_OPTIONS + case "BUILD_OPTIONS_6919": + return BUILD_OPTIONS + case "COMMON_COMPILER_OPTIONS_6920": + return COMMON_COMPILER_OPTIONS + case "COMMAND_LINE_FLAGS_6921": + return COMMAND_LINE_FLAGS + case "tsc_Colon_The_TypeScript_Compiler_6922": + return X_tsc_Colon_The_TypeScript_Compiler + case "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": + return Compiles_the_current_project_tsconfig_json_in_the_working_directory + case "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": + return Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options + case "Build_a_composite_project_in_the_working_directory_6925": + return Build_a_composite_project_in_the_working_directory + case "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": + return Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory + case "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": + return Compiles_the_TypeScript_project_located_at_the_specified_path + case "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": + return An_expanded_version_of_this_information_showing_all_possible_compiler_options + case "Compiles_the_current_project_with_additional_settings_6929": + return Compiles_the_current_project_with_additional_settings + case "true_for_ES2022_and_above_including_ESNext_6930": + return X_true_for_ES2022_and_above_including_ESNext + case "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": + return List_of_file_name_suffixes_to_search_when_resolving_a_module + case "Variable_0_implicitly_has_an_1_type_7005": + return Variable_0_implicitly_has_an_1_type + case "Parameter_0_implicitly_has_an_1_type_7006": + return Parameter_0_implicitly_has_an_1_type + case "Member_0_implicitly_has_an_1_type_7008": + return Member_0_implicitly_has_an_1_type + case "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": + return X_new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type + case "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": + return X_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type + case "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": + return Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type + case "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": + return This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation + case "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": + return Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type + case "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": + return Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type + case "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": + return Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number + case "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": + return Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type + case "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": + return Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature + case "Object_literal_s_property_0_implicitly_has_an_1_type_7018": + return Object_literal_s_property_0_implicitly_has_an_1_type + case "Rest_parameter_0_implicitly_has_an_any_type_7019": + return Rest_parameter_0_implicitly_has_an_any_type + case "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": + return Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type + case "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": + return X_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer + case "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": + return X_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions + case "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": + return Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions + case "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": + return Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation + case "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": + return JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists + case "Unreachable_code_detected_7027": + return Unreachable_code_detected + case "Unused_label_7028": + return Unused_label + case "Fallthrough_case_in_switch_7029": + return Fallthrough_case_in_switch + case "Not_all_code_paths_return_a_value_7030": + return Not_all_code_paths_return_a_value + case "Binding_element_0_implicitly_has_an_1_type_7031": + return Binding_element_0_implicitly_has_an_1_type + case "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": + return Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation + case "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": + return Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation + case "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": + return Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined + case "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": + return Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0 + case "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": + return Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0 + case "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": + return Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports + case "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": + return Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead + case "Mapped_object_type_implicitly_has_an_any_template_type_7039": + return Mapped_object_type_implicitly_has_an_any_template_type + case "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": + return If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_Slash_Slashgithub_com_SlashDefinitelyTyped_SlashDefinitelyTyped_Slashtree_Slashmaster_Slashtypes_Slash_1 + case "The_containing_arrow_function_captures_the_global_value_of_this_7041": + return The_containing_arrow_function_captures_the_global_value_of_this + case "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": + return Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used + case "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": + return Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage + case "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": + return Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage + case "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": + return Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage + case "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": + return Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage + case "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": + return Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage + case "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": + return Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage + case "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": + return Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage + case "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": + return X_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage + case "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": + return Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1 + case "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": + return Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1 + case "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": + return Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1 + case "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": + return No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1 + case "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": + return X_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type + case "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": + return The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_type_annotation_is_needed + case "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": + return X_yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_type_annotation + case "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": + return If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_declare_module_1 + case "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": + return This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead + case "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": + return This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_constraint + case "A_mapped_type_may_not_declare_properties_or_methods_7061": + return A_mapped_type_may_not_declare_properties_or_methods + case "You_cannot_rename_this_element_8000": + return You_cannot_rename_this_element + case "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": + return You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library + case "import_can_only_be_used_in_TypeScript_files_8002": + return X_import_can_only_be_used_in_TypeScript_files + case "export_can_only_be_used_in_TypeScript_files_8003": + return X_export_can_only_be_used_in_TypeScript_files + case "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": + return Type_parameter_declarations_can_only_be_used_in_TypeScript_files + case "implements_clauses_can_only_be_used_in_TypeScript_files_8005": + return X_implements_clauses_can_only_be_used_in_TypeScript_files + case "_0_declarations_can_only_be_used_in_TypeScript_files_8006": + return X_0_declarations_can_only_be_used_in_TypeScript_files + case "Type_aliases_can_only_be_used_in_TypeScript_files_8008": + return Type_aliases_can_only_be_used_in_TypeScript_files + case "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": + return The_0_modifier_can_only_be_used_in_TypeScript_files + case "Type_annotations_can_only_be_used_in_TypeScript_files_8010": + return Type_annotations_can_only_be_used_in_TypeScript_files + case "Type_arguments_can_only_be_used_in_TypeScript_files_8011": + return Type_arguments_can_only_be_used_in_TypeScript_files + case "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": + return Parameter_modifiers_can_only_be_used_in_TypeScript_files + case "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": + return Non_null_assertions_can_only_be_used_in_TypeScript_files + case "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": + return Type_assertion_expressions_can_only_be_used_in_TypeScript_files + case "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": + return Signature_declarations_can_only_be_used_in_TypeScript_files + case "Report_errors_in_js_files_8019": + return Report_errors_in_js_files + case "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": + return JSDoc_types_can_only_be_used_inside_documentation_comments + case "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": + return JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags + case "JSDoc_0_is_not_attached_to_a_class_8022": + return JSDoc_0_is_not_attached_to_a_class + case "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": + return JSDoc_0_1_does_not_match_the_extends_2_clause + case "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": + return JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name + case "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": + return Class_declarations_cannot_have_more_than_one_augments_or_extends_tag + case "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": + return Expected_0_type_arguments_provide_these_with_an_extends_tag + case "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": + return Expected_0_1_type_arguments_provide_these_with_an_extends_tag + case "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": + return JSDoc_may_only_appear_in_the_last_parameter_of_a_signature + case "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": + return JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type + case "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": + return A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments + case "You_cannot_rename_a_module_via_a_global_import_8031": + return You_cannot_rename_a_module_via_a_global_import + case "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": + return Qualified_name_0_is_not_allowed_without_a_leading_param_object_1 + case "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": + return A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags + case "The_tag_was_first_specified_here_8034": + return The_tag_was_first_specified_here + case "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": + return You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder + case "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": + return You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder + case "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": + return Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files + case "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": + return Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export + case "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": + return A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag + case "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": + return Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit + case "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": + return Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotation_may_unblock_declaration_emit + case "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": + return Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations + case "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": + return Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations + case "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": + return At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations + case "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": + return Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations + case "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": + return Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations + case "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": + return Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations + case "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": + return Expression_type_can_t_be_inferred_with_isolatedDeclarations + case "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": + return Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedDeclarations + case "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": + return Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations + case "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": + return Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations + case "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": + return Only_const_arrays_can_be_inferred_with_isolatedDeclarations + case "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": + return Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations + case "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": + return Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations + case "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": + return Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDeclarations + case "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": + return Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations + case "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": + return Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations + case "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": + return Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations_Add_an_explicit_declaration_for_the_properties_assigned_to_this_function + case "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": + return Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_supported_with_isolatedDeclarations + case "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": + return Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_supported_with_isolatedDeclarations + case "Add_a_type_annotation_to_the_variable_0_9027": + return Add_a_type_annotation_to_the_variable_0 + case "Add_a_type_annotation_to_the_parameter_0_9028": + return Add_a_type_annotation_to_the_parameter_0 + case "Add_a_type_annotation_to_the_property_0_9029": + return Add_a_type_annotation_to_the_property_0 + case "Add_a_return_type_to_the_function_expression_9030": + return Add_a_return_type_to_the_function_expression + case "Add_a_return_type_to_the_function_declaration_9031": + return Add_a_return_type_to_the_function_declaration + case "Add_a_return_type_to_the_get_accessor_declaration_9032": + return Add_a_return_type_to_the_get_accessor_declaration + case "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": + return Add_a_type_to_parameter_of_the_set_accessor_declaration + case "Add_a_return_type_to_the_method_9034": + return Add_a_return_type_to_the_method + case "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": + return Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit + case "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": + return Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it + case "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": + return Default_exports_can_t_be_inferred_with_isolatedDeclarations + case "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": + return Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations + case "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": + return Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations + case "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": + return JSX_attributes_must_only_be_assigned_a_non_empty_expression + case "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": + return JSX_elements_cannot_have_multiple_attributes_with_the_same_name + case "Expected_corresponding_JSX_closing_tag_for_0_17002": + return Expected_corresponding_JSX_closing_tag_for_0 + case "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": + return Cannot_use_JSX_unless_the_jsx_flag_is_provided + case "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": + return A_constructor_cannot_contain_a_super_call_when_its_class_extends_null + case "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": + return An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses + case "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": + return A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses + case "JSX_element_0_has_no_corresponding_closing_tag_17008": + return JSX_element_0_has_no_corresponding_closing_tag + case "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": + return X_super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class + case "Unknown_type_acquisition_option_0_17010": + return Unknown_type_acquisition_option_0 + case "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": + return X_super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class + case "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": + return X_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2 + case "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": + return Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor + case "JSX_fragment_has_no_corresponding_closing_tag_17014": + return JSX_fragment_has_no_corresponding_closing_tag + case "Expected_corresponding_closing_tag_for_JSX_fragment_17015": + return Expected_corresponding_closing_tag_for_JSX_fragment + case "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": + return The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_compiler_option + case "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": + return An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments + case "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": + return Unknown_type_acquisition_option_0_Did_you_mean_1 + case "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": + return X_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1 + case "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": + return X_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1 + case "Unicode_escape_sequence_cannot_appear_here_17021": + return Unicode_escape_sequence_cannot_appear_here + case "Circularity_detected_while_resolving_configuration_Colon_0_18000": + return Circularity_detected_while_resolving_configuration_Colon_0 + case "The_files_list_in_config_file_0_is_empty_18002": + return The_files_list_in_config_file_0_is_empty + case "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": + return No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2 + case "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": + return No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer + case "Classes_may_not_have_a_field_named_constructor_18006": + return Classes_may_not_have_a_field_named_constructor + case "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": + return JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array + case "Private_identifiers_cannot_be_used_as_parameters_18009": + return Private_identifiers_cannot_be_used_as_parameters + case "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": + return An_accessibility_modifier_cannot_be_used_with_a_private_identifier + case "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": + return The_operand_of_a_delete_operator_cannot_be_a_private_identifier + case "constructor_is_a_reserved_word_18012": + return X_constructor_is_a_reserved_word + case "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": + return Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier + case "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": + return The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_private_identifier_with_the_same_spelling + case "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": + return Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2 + case "Private_identifiers_are_not_allowed_outside_class_bodies_18016": + return Private_identifiers_are_not_allowed_outside_class_bodies + case "The_shadowing_declaration_of_0_is_defined_here_18017": + return The_shadowing_declaration_of_0_is_defined_here + case "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": + return The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here + case "_0_modifier_cannot_be_used_with_a_private_identifier_18019": + return X_0_modifier_cannot_be_used_with_a_private_identifier + case "An_enum_member_cannot_be_named_with_a_private_identifier_18024": + return An_enum_member_cannot_be_named_with_a_private_identifier + case "can_only_be_used_at_the_start_of_a_file_18026": + return X_can_only_be_used_at_the_start_of_a_file + case "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": + return Compiler_reserves_name_0_when_emitting_private_identifier_downlevel + case "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": + return Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher + case "Private_identifiers_are_not_allowed_in_variable_declarations_18029": + return Private_identifiers_are_not_allowed_in_variable_declarations + case "An_optional_chain_cannot_contain_private_identifiers_18030": + return An_optional_chain_cannot_contain_private_identifiers + case "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": + return The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents + case "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": + return The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_private_in_some + case "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": + return Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values + case "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": + return Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment + case "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": + return Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name + case "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": + return Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator + case "await_expression_cannot_be_used_inside_a_class_static_block_18037": + return X_await_expression_cannot_be_used_inside_a_class_static_block + case "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": + return X_for_await_loops_cannot_be_used_inside_a_class_static_block + case "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": + return Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block + case "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": + return A_return_statement_cannot_be_used_inside_a_class_static_block + case "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": + return X_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation + case "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": + return Types_cannot_appear_in_export_declarations_in_JavaScript_files + case "_0_is_automatically_exported_here_18044": + return X_0_is_automatically_exported_here + case "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": + return Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher + case "_0_is_of_type_unknown_18046": + return X_0_is_of_type_unknown + case "_0_is_possibly_null_18047": + return X_0_is_possibly_null + case "_0_is_possibly_undefined_18048": + return X_0_is_possibly_undefined + case "_0_is_possibly_null_or_undefined_18049": + return X_0_is_possibly_null_or_undefined + case "The_value_0_cannot_be_used_here_18050": + return The_value_0_cannot_be_used_here + case "Compiler_option_0_cannot_be_given_an_empty_string_18051": + return Compiler_option_0_cannot_be_given_an_empty_string + case "Its_type_0_is_not_a_valid_JSX_element_type_18053": + return Its_type_0_is_not_a_valid_JSX_element_type + case "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": + return X_await_using_statements_cannot_be_used_inside_a_class_static_block + case "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": + return X_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is_enabled + case "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": + return Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is_enabled + case "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": + return String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es2020 + case "Default_imports_are_not_allowed_in_a_deferred_import_18058": + return Default_imports_are_not_allowed_in_a_deferred_import + case "Named_imports_are_not_allowed_in_a_deferred_import_18059": + return Named_imports_are_not_allowed_in_a_deferred_import + case "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": + return Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve + case "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_or_defer_18061": + return X_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_or_defer + case "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": + return X_nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler + case "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": + return File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module + case "This_constructor_function_may_be_converted_to_a_class_declaration_80002": + return This_constructor_function_may_be_converted_to_a_class_declaration + case "Import_may_be_converted_to_a_default_import_80003": + return Import_may_be_converted_to_a_default_import + case "JSDoc_types_may_be_moved_to_TypeScript_types_80004": + return JSDoc_types_may_be_moved_to_TypeScript_types + case "require_call_may_be_converted_to_an_import_80005": + return X_require_call_may_be_converted_to_an_import + case "This_may_be_converted_to_an_async_function_80006": + return This_may_be_converted_to_an_async_function + case "await_has_no_effect_on_the_type_of_this_expression_80007": + return X_await_has_no_effect_on_the_type_of_this_expression + case "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": + return Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers + case "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": + return JSDoc_typedef_may_be_converted_to_TypeScript_type + case "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": + return JSDoc_typedefs_may_be_converted_to_TypeScript_types + case "Add_missing_super_call_90001": + return Add_missing_super_call + case "Make_super_call_the_first_statement_in_the_constructor_90002": + return Make_super_call_the_first_statement_in_the_constructor + case "Change_extends_to_implements_90003": + return Change_extends_to_implements + case "Remove_unused_declaration_for_Colon_0_90004": + return Remove_unused_declaration_for_Colon_0 + case "Remove_import_from_0_90005": + return Remove_import_from_0 + case "Implement_interface_0_90006": + return Implement_interface_0 + case "Implement_inherited_abstract_class_90007": + return Implement_inherited_abstract_class + case "Add_0_to_unresolved_variable_90008": + return Add_0_to_unresolved_variable + case "Remove_variable_statement_90010": + return Remove_variable_statement + case "Remove_template_tag_90011": + return Remove_template_tag + case "Remove_type_parameters_90012": + return Remove_type_parameters + case "Import_0_from_1_90013": + return Import_0_from_1 + case "Change_0_to_1_90014": + return Change_0_to_1 + case "Declare_property_0_90016": + return Declare_property_0 + case "Add_index_signature_for_property_0_90017": + return Add_index_signature_for_property_0 + case "Disable_checking_for_this_file_90018": + return Disable_checking_for_this_file + case "Ignore_this_error_message_90019": + return Ignore_this_error_message + case "Initialize_property_0_in_the_constructor_90020": + return Initialize_property_0_in_the_constructor + case "Initialize_static_property_0_90021": + return Initialize_static_property_0 + case "Change_spelling_to_0_90022": + return Change_spelling_to_0 + case "Declare_method_0_90023": + return Declare_method_0 + case "Declare_static_method_0_90024": + return Declare_static_method_0 + case "Prefix_0_with_an_underscore_90025": + return Prefix_0_with_an_underscore + case "Rewrite_as_the_indexed_access_type_0_90026": + return Rewrite_as_the_indexed_access_type_0 + case "Declare_static_property_0_90027": + return Declare_static_property_0 + case "Call_decorator_expression_90028": + return Call_decorator_expression + case "Add_async_modifier_to_containing_function_90029": + return Add_async_modifier_to_containing_function + case "Replace_infer_0_with_unknown_90030": + return Replace_infer_0_with_unknown + case "Replace_all_unused_infer_with_unknown_90031": + return Replace_all_unused_infer_with_unknown + case "Add_parameter_name_90034": + return Add_parameter_name + case "Declare_private_property_0_90035": + return Declare_private_property_0 + case "Replace_0_with_Promise_1_90036": + return Replace_0_with_Promise_1 + case "Fix_all_incorrect_return_type_of_an_async_functions_90037": + return Fix_all_incorrect_return_type_of_an_async_functions + case "Declare_private_method_0_90038": + return Declare_private_method_0 + case "Remove_unused_destructuring_declaration_90039": + return Remove_unused_destructuring_declaration + case "Remove_unused_declarations_for_Colon_0_90041": + return Remove_unused_declarations_for_Colon_0 + case "Declare_a_private_field_named_0_90053": + return Declare_a_private_field_named_0 + case "Includes_imports_of_types_referenced_by_0_90054": + return Includes_imports_of_types_referenced_by_0 + case "Remove_type_from_import_declaration_from_0_90055": + return Remove_type_from_import_declaration_from_0 + case "Remove_type_from_import_of_0_from_1_90056": + return Remove_type_from_import_of_0_from_1 + case "Add_import_from_0_90057": + return Add_import_from_0 + case "Update_import_from_0_90058": + return Update_import_from_0 + case "Export_0_from_module_1_90059": + return Export_0_from_module_1 + case "Export_all_referenced_locals_90060": + return Export_all_referenced_locals + case "Update_modifiers_of_0_90061": + return Update_modifiers_of_0 + case "Add_annotation_of_type_0_90062": + return Add_annotation_of_type_0 + case "Add_return_type_0_90063": + return Add_return_type_0 + case "Extract_base_class_to_variable_90064": + return Extract_base_class_to_variable + case "Extract_default_export_to_variable_90065": + return Extract_default_export_to_variable + case "Extract_binding_expressions_to_variable_90066": + return Extract_binding_expressions_to_variable + case "Add_all_missing_type_annotations_90067": + return Add_all_missing_type_annotations + case "Add_satisfies_and_an_inline_type_assertion_with_0_90068": + return Add_satisfies_and_an_inline_type_assertion_with_0 + case "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": + return Extract_to_variable_and_replace_with_0_as_typeof_0 + case "Mark_array_literal_as_const_90070": + return Mark_array_literal_as_const + case "Annotate_types_of_properties_expando_function_in_a_namespace_90071": + return Annotate_types_of_properties_expando_function_in_a_namespace + case "Convert_function_to_an_ES2015_class_95001": + return Convert_function_to_an_ES2015_class + case "Convert_0_to_1_in_0_95003": + return Convert_0_to_1_in_0 + case "Extract_to_0_in_1_95004": + return Extract_to_0_in_1 + case "Extract_function_95005": + return Extract_function + case "Extract_constant_95006": + return Extract_constant + case "Extract_to_0_in_enclosing_scope_95007": + return Extract_to_0_in_enclosing_scope + case "Extract_to_0_in_1_scope_95008": + return Extract_to_0_in_1_scope + case "Annotate_with_type_from_JSDoc_95009": + return Annotate_with_type_from_JSDoc + case "Infer_type_of_0_from_usage_95011": + return Infer_type_of_0_from_usage + case "Infer_parameter_types_from_usage_95012": + return Infer_parameter_types_from_usage + case "Convert_to_default_import_95013": + return Convert_to_default_import + case "Install_0_95014": + return Install_0 + case "Replace_import_with_0_95015": + return Replace_import_with_0 + case "Use_synthetic_default_member_95016": + return Use_synthetic_default_member + case "Convert_to_ES_module_95017": + return Convert_to_ES_module + case "Add_undefined_type_to_property_0_95018": + return Add_undefined_type_to_property_0 + case "Add_initializer_to_property_0_95019": + return Add_initializer_to_property_0 + case "Add_definite_assignment_assertion_to_property_0_95020": + return Add_definite_assignment_assertion_to_property_0 + case "Convert_all_type_literals_to_mapped_type_95021": + return Convert_all_type_literals_to_mapped_type + case "Add_all_missing_members_95022": + return Add_all_missing_members + case "Infer_all_types_from_usage_95023": + return Infer_all_types_from_usage + case "Delete_all_unused_declarations_95024": + return Delete_all_unused_declarations + case "Prefix_all_unused_declarations_with_where_possible_95025": + return Prefix_all_unused_declarations_with_where_possible + case "Fix_all_detected_spelling_errors_95026": + return Fix_all_detected_spelling_errors + case "Add_initializers_to_all_uninitialized_properties_95027": + return Add_initializers_to_all_uninitialized_properties + case "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": + return Add_definite_assignment_assertions_to_all_uninitialized_properties + case "Add_undefined_type_to_all_uninitialized_properties_95029": + return Add_undefined_type_to_all_uninitialized_properties + case "Change_all_jsdoc_style_types_to_TypeScript_95030": + return Change_all_jsdoc_style_types_to_TypeScript + case "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": + return Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types + case "Implement_all_unimplemented_interfaces_95032": + return Implement_all_unimplemented_interfaces + case "Install_all_missing_types_packages_95033": + return Install_all_missing_types_packages + case "Rewrite_all_as_indexed_access_types_95034": + return Rewrite_all_as_indexed_access_types + case "Convert_all_to_default_imports_95035": + return Convert_all_to_default_imports + case "Make_all_super_calls_the_first_statement_in_their_constructor_95036": + return Make_all_super_calls_the_first_statement_in_their_constructor + case "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": + return Add_qualifier_to_all_unresolved_variables_matching_a_member_name + case "Change_all_extended_interfaces_to_implements_95038": + return Change_all_extended_interfaces_to_implements + case "Add_all_missing_super_calls_95039": + return Add_all_missing_super_calls + case "Implement_all_inherited_abstract_classes_95040": + return Implement_all_inherited_abstract_classes + case "Add_all_missing_async_modifiers_95041": + return Add_all_missing_async_modifiers + case "Add_ts_ignore_to_all_error_messages_95042": + return Add_ts_ignore_to_all_error_messages + case "Annotate_everything_with_types_from_JSDoc_95043": + return Annotate_everything_with_types_from_JSDoc + case "Add_to_all_uncalled_decorators_95044": + return Add_to_all_uncalled_decorators + case "Convert_all_constructor_functions_to_classes_95045": + return Convert_all_constructor_functions_to_classes + case "Generate_get_and_set_accessors_95046": + return Generate_get_and_set_accessors + case "Convert_require_to_import_95047": + return Convert_require_to_import + case "Convert_all_require_to_import_95048": + return Convert_all_require_to_import + case "Move_to_a_new_file_95049": + return Move_to_a_new_file + case "Remove_unreachable_code_95050": + return Remove_unreachable_code + case "Remove_all_unreachable_code_95051": + return Remove_all_unreachable_code + case "Add_missing_typeof_95052": + return Add_missing_typeof + case "Remove_unused_label_95053": + return Remove_unused_label + case "Remove_all_unused_labels_95054": + return Remove_all_unused_labels + case "Convert_0_to_mapped_object_type_95055": + return Convert_0_to_mapped_object_type + case "Convert_namespace_import_to_named_imports_95056": + return Convert_namespace_import_to_named_imports + case "Convert_named_imports_to_namespace_import_95057": + return Convert_named_imports_to_namespace_import + case "Add_or_remove_braces_in_an_arrow_function_95058": + return Add_or_remove_braces_in_an_arrow_function + case "Add_braces_to_arrow_function_95059": + return Add_braces_to_arrow_function + case "Remove_braces_from_arrow_function_95060": + return Remove_braces_from_arrow_function + case "Convert_default_export_to_named_export_95061": + return Convert_default_export_to_named_export + case "Convert_named_export_to_default_export_95062": + return Convert_named_export_to_default_export + case "Add_missing_enum_member_0_95063": + return Add_missing_enum_member_0 + case "Add_all_missing_imports_95064": + return Add_all_missing_imports + case "Convert_to_async_function_95065": + return Convert_to_async_function + case "Convert_all_to_async_functions_95066": + return Convert_all_to_async_functions + case "Add_missing_call_parentheses_95067": + return Add_missing_call_parentheses + case "Add_all_missing_call_parentheses_95068": + return Add_all_missing_call_parentheses + case "Add_unknown_conversion_for_non_overlapping_types_95069": + return Add_unknown_conversion_for_non_overlapping_types + case "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": + return Add_unknown_to_all_conversions_of_non_overlapping_types + case "Add_missing_new_operator_to_call_95071": + return Add_missing_new_operator_to_call + case "Add_missing_new_operator_to_all_calls_95072": + return Add_missing_new_operator_to_all_calls + case "Add_names_to_all_parameters_without_names_95073": + return Add_names_to_all_parameters_without_names + case "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": + return Enable_the_experimentalDecorators_option_in_your_configuration_file + case "Convert_parameters_to_destructured_object_95075": + return Convert_parameters_to_destructured_object + case "Extract_type_95077": + return Extract_type + case "Extract_to_type_alias_95078": + return Extract_to_type_alias + case "Extract_to_typedef_95079": + return Extract_to_typedef + case "Infer_this_type_of_0_from_usage_95080": + return Infer_this_type_of_0_from_usage + case "Add_const_to_unresolved_variable_95081": + return Add_const_to_unresolved_variable + case "Add_const_to_all_unresolved_variables_95082": + return Add_const_to_all_unresolved_variables + case "Add_await_95083": + return Add_await + case "Add_await_to_initializer_for_0_95084": + return Add_await_to_initializer_for_0 + case "Fix_all_expressions_possibly_missing_await_95085": + return Fix_all_expressions_possibly_missing_await + case "Remove_unnecessary_await_95086": + return Remove_unnecessary_await + case "Remove_all_unnecessary_uses_of_await_95087": + return Remove_all_unnecessary_uses_of_await + case "Enable_the_jsx_flag_in_your_configuration_file_95088": + return Enable_the_jsx_flag_in_your_configuration_file + case "Add_await_to_initializers_95089": + return Add_await_to_initializers + case "Extract_to_interface_95090": + return Extract_to_interface + case "Convert_to_a_bigint_numeric_literal_95091": + return Convert_to_a_bigint_numeric_literal + case "Convert_all_to_bigint_numeric_literals_95092": + return Convert_all_to_bigint_numeric_literals + case "Convert_const_to_let_95093": + return Convert_const_to_let + case "Prefix_with_declare_95094": + return Prefix_with_declare + case "Prefix_all_incorrect_property_declarations_with_declare_95095": + return Prefix_all_incorrect_property_declarations_with_declare + case "Convert_to_template_string_95096": + return Convert_to_template_string + case "Add_export_to_make_this_file_into_a_module_95097": + return Add_export_to_make_this_file_into_a_module + case "Set_the_target_option_in_your_configuration_file_to_0_95098": + return Set_the_target_option_in_your_configuration_file_to_0 + case "Set_the_module_option_in_your_configuration_file_to_0_95099": + return Set_the_module_option_in_your_configuration_file_to_0 + case "Convert_invalid_character_to_its_html_entity_code_95100": + return Convert_invalid_character_to_its_html_entity_code + case "Convert_all_invalid_characters_to_HTML_entity_code_95101": + return Convert_all_invalid_characters_to_HTML_entity_code + case "Convert_all_const_to_let_95102": + return Convert_all_const_to_let + case "Convert_function_expression_0_to_arrow_function_95105": + return Convert_function_expression_0_to_arrow_function + case "Convert_function_declaration_0_to_arrow_function_95106": + return Convert_function_declaration_0_to_arrow_function + case "Fix_all_implicit_this_errors_95107": + return Fix_all_implicit_this_errors + case "Wrap_invalid_character_in_an_expression_container_95108": + return Wrap_invalid_character_in_an_expression_container + case "Wrap_all_invalid_characters_in_an_expression_container_95109": + return Wrap_all_invalid_characters_in_an_expression_container + case "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": + return Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file + case "Add_a_return_statement_95111": + return Add_a_return_statement + case "Remove_braces_from_arrow_function_body_95112": + return Remove_braces_from_arrow_function_body + case "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": + return Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal + case "Add_all_missing_return_statement_95114": + return Add_all_missing_return_statement + case "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": + return Remove_braces_from_all_arrow_function_bodies_with_relevant_issues + case "Wrap_all_object_literal_with_parentheses_95116": + return Wrap_all_object_literal_with_parentheses + case "Move_labeled_tuple_element_modifiers_to_labels_95117": + return Move_labeled_tuple_element_modifiers_to_labels + case "Convert_overload_list_to_single_signature_95118": + return Convert_overload_list_to_single_signature + case "Generate_get_and_set_accessors_for_all_overriding_properties_95119": + return Generate_get_and_set_accessors_for_all_overriding_properties + case "Wrap_in_JSX_fragment_95120": + return Wrap_in_JSX_fragment + case "Wrap_all_unparented_JSX_in_JSX_fragment_95121": + return Wrap_all_unparented_JSX_in_JSX_fragment + case "Convert_arrow_function_or_function_expression_95122": + return Convert_arrow_function_or_function_expression + case "Convert_to_anonymous_function_95123": + return Convert_to_anonymous_function + case "Convert_to_named_function_95124": + return Convert_to_named_function + case "Convert_to_arrow_function_95125": + return Convert_to_arrow_function + case "Remove_parentheses_95126": + return Remove_parentheses + case "Could_not_find_a_containing_arrow_function_95127": + return Could_not_find_a_containing_arrow_function + case "Containing_function_is_not_an_arrow_function_95128": + return Containing_function_is_not_an_arrow_function + case "Could_not_find_export_statement_95129": + return Could_not_find_export_statement + case "This_file_already_has_a_default_export_95130": + return This_file_already_has_a_default_export + case "Could_not_find_import_clause_95131": + return Could_not_find_import_clause + case "Could_not_find_namespace_import_or_named_imports_95132": + return Could_not_find_namespace_import_or_named_imports + case "Selection_is_not_a_valid_type_node_95133": + return Selection_is_not_a_valid_type_node + case "No_type_could_be_extracted_from_this_type_node_95134": + return No_type_could_be_extracted_from_this_type_node + case "Could_not_find_property_for_which_to_generate_accessor_95135": + return Could_not_find_property_for_which_to_generate_accessor + case "Name_is_not_valid_95136": + return Name_is_not_valid + case "Can_only_convert_property_with_modifier_95137": + return Can_only_convert_property_with_modifier + case "Switch_each_misused_0_to_1_95138": + return Switch_each_misused_0_to_1 + case "Convert_to_optional_chain_expression_95139": + return Convert_to_optional_chain_expression + case "Could_not_find_convertible_access_expression_95140": + return Could_not_find_convertible_access_expression + case "Could_not_find_matching_access_expressions_95141": + return Could_not_find_matching_access_expressions + case "Can_only_convert_logical_AND_access_chains_95142": + return Can_only_convert_logical_AND_access_chains + case "Add_void_to_Promise_resolved_without_a_value_95143": + return Add_void_to_Promise_resolved_without_a_value + case "Add_void_to_all_Promises_resolved_without_a_value_95144": + return Add_void_to_all_Promises_resolved_without_a_value + case "Use_element_access_for_0_95145": + return Use_element_access_for_0 + case "Use_element_access_for_all_undeclared_properties_95146": + return Use_element_access_for_all_undeclared_properties + case "Delete_all_unused_imports_95147": + return Delete_all_unused_imports + case "Infer_function_return_type_95148": + return Infer_function_return_type + case "Return_type_must_be_inferred_from_a_function_95149": + return Return_type_must_be_inferred_from_a_function + case "Could_not_determine_function_return_type_95150": + return Could_not_determine_function_return_type + case "Could_not_convert_to_arrow_function_95151": + return Could_not_convert_to_arrow_function + case "Could_not_convert_to_named_function_95152": + return Could_not_convert_to_named_function + case "Could_not_convert_to_anonymous_function_95153": + return Could_not_convert_to_anonymous_function + case "Can_only_convert_string_concatenations_and_string_literals_95154": + return Can_only_convert_string_concatenations_and_string_literals + case "Selection_is_not_a_valid_statement_or_statements_95155": + return Selection_is_not_a_valid_statement_or_statements + case "Add_missing_function_declaration_0_95156": + return Add_missing_function_declaration_0 + case "Add_all_missing_function_declarations_95157": + return Add_all_missing_function_declarations + case "Method_not_implemented_95158": + return Method_not_implemented + case "Function_not_implemented_95159": + return Function_not_implemented + case "Add_override_modifier_95160": + return Add_override_modifier + case "Remove_override_modifier_95161": + return Remove_override_modifier + case "Add_all_missing_override_modifiers_95162": + return Add_all_missing_override_modifiers + case "Remove_all_unnecessary_override_modifiers_95163": + return Remove_all_unnecessary_override_modifiers + case "Can_only_convert_named_export_95164": + return Can_only_convert_named_export + case "Add_missing_properties_95165": + return Add_missing_properties + case "Add_all_missing_properties_95166": + return Add_all_missing_properties + case "Add_missing_attributes_95167": + return Add_missing_attributes + case "Add_all_missing_attributes_95168": + return Add_all_missing_attributes + case "Add_undefined_to_optional_property_type_95169": + return Add_undefined_to_optional_property_type + case "Convert_named_imports_to_default_import_95170": + return Convert_named_imports_to_default_import + case "Delete_unused_param_tag_0_95171": + return Delete_unused_param_tag_0 + case "Delete_all_unused_param_tags_95172": + return Delete_all_unused_param_tags + case "Rename_param_tag_name_0_to_1_95173": + return Rename_param_tag_name_0_to_1 + case "Use_0_95174": + return Use_0 + case "Use_Number_isNaN_in_all_conditions_95175": + return Use_Number_isNaN_in_all_conditions + case "Convert_typedef_to_TypeScript_type_95176": + return Convert_typedef_to_TypeScript_type + case "Convert_all_typedef_to_TypeScript_types_95177": + return Convert_all_typedef_to_TypeScript_types + case "Move_to_file_95178": + return Move_to_file + case "Cannot_move_to_file_selected_file_is_invalid_95179": + return Cannot_move_to_file_selected_file_is_invalid + case "Use_import_type_95180": + return Use_import_type + case "Use_type_0_95181": + return Use_type_0 + case "Fix_all_with_type_only_imports_95182": + return Fix_all_with_type_only_imports + case "Cannot_move_statements_to_the_selected_file_95183": + return Cannot_move_statements_to_the_selected_file + case "Inline_variable_95184": + return Inline_variable + case "Could_not_find_variable_to_inline_95185": + return Could_not_find_variable_to_inline + case "Variables_with_multiple_declarations_cannot_be_inlined_95186": + return Variables_with_multiple_declarations_cannot_be_inlined + case "Add_missing_comma_for_object_member_completion_0_95187": + return Add_missing_comma_for_object_member_completion_0 + case "Add_missing_parameter_to_0_95188": + return Add_missing_parameter_to_0 + case "Add_missing_parameters_to_0_95189": + return Add_missing_parameters_to_0 + case "Add_all_missing_parameters_95190": + return Add_all_missing_parameters + case "Add_optional_parameter_to_0_95191": + return Add_optional_parameter_to_0 + case "Add_optional_parameters_to_0_95192": + return Add_optional_parameters_to_0 + case "Add_all_optional_parameters_95193": + return Add_all_optional_parameters + case "Wrap_in_parentheses_95194": + return Wrap_in_parentheses + case "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": + return Wrap_all_invalid_decorator_expressions_in_parentheses + case "Add_resolution_mode_import_attribute_95196": + return Add_resolution_mode_import_attribute + case "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": + return Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it + case "Do_not_print_diagnostics_100000": + return Do_not_print_diagnostics + case "Run_in_single_threaded_mode_100001": + return Run_in_single_threaded_mode + case "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_100002": + return Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory + case "Set_the_number_of_checkers_per_project_100003": + return Set_the_number_of_checkers_per_project + case "4_unless_singleThreaded_is_passed_100004": + return X_4_unless_singleThreaded_is_passed + default: + return nil + } +} diff --git a/pkg/diagnostics/diagnostics_test.go b/pkg/diagnostics/diagnostics_test.go new file mode 100644 index 00000000..9f83ae46 --- /dev/null +++ b/pkg/diagnostics/diagnostics_test.go @@ -0,0 +1,145 @@ +package diagnostics + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/locale" + "golang.org/x/text/language" + "gotest.tools/v3/assert" +) + +func TestLocalize(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + message *Message + locale locale.Locale + args []any + expected string + }{ + { + name: "english default", + message: Identifier_expected, + locale: locale.Locale(language.English), + expected: "Identifier expected.", + }, + { + name: "undefined locale uses english", + message: Identifier_expected, + locale: locale.Locale(language.Und), + expected: "Identifier expected.", + }, + { + name: "with single argument", + message: X_0_expected, + locale: locale.Locale(language.English), + args: []any{")"}, + expected: "')' expected.", + }, + { + name: "with multiple arguments", + message: The_parser_expected_to_find_a_1_to_match_the_0_token_here, + locale: locale.Locale(language.English), + args: []any{"{", "}"}, + expected: "The parser expected to find a '}' to match the '{' token here.", + }, + { + name: "fallback to english for unknown locale", + message: Identifier_expected, + locale: locale.Locale(language.MustParse("af-ZA")), + expected: "Identifier expected.", + }, + { + name: "german", + message: Identifier_expected, + locale: locale.Locale(language.MustParse("de-DE")), + expected: "Es wurde ein Bezeichner erwartet.", + }, + { + name: "french", + message: Identifier_expected, + locale: locale.Locale(language.MustParse("fr-FR")), + expected: "Identificateur attendu.", + }, + { + name: "spanish", + message: Identifier_expected, + locale: locale.Locale(language.MustParse("es-ES")), + expected: "Se esperaba un identificador.", + }, + { + name: "japanese", + message: Identifier_expected, + locale: locale.Locale(language.MustParse("ja-JP")), + expected: "識別子が必要です。", + }, + { + name: "chinese simplified", + message: Identifier_expected, + locale: locale.Locale(language.MustParse("zh-CN")), + expected: "应为标识符。", + }, + { + name: "korean", + message: Identifier_expected, + locale: locale.Locale(language.MustParse("ko-KR")), + expected: "식별자가 필요합니다.", + }, + { + name: "russian", + message: Identifier_expected, + locale: locale.Locale(language.MustParse("ru-RU")), + expected: "Ожидался идентификатор.", + }, + { + name: "german with args", + message: X_0_expected, + locale: locale.Locale(language.MustParse("de-DE")), + args: []any{")"}, + expected: "\")\" wurde erwartet.", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + result := tt.message.Localize(tt.locale, tt.args...) + assert.Equal(t, result, tt.expected) + }) + } +} + +func TestLocalize_ByKey(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + key Key + locale locale.Locale + args []string + expected string + }{ + { + name: "by key without args", + key: "Identifier_expected_1003", + locale: locale.Locale(language.English), + expected: "Identifier expected.", + }, + { + name: "by key with args", + key: "_0_expected_1005", + locale: locale.Locale(language.English), + args: []string{")"}, + expected: "')' expected.", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + result := Localize(tt.locale, nil, tt.key, tt.args...) + assert.Equal(t, result, tt.expected) + }) + } +} diff --git a/pkg/diagnostics/extraDiagnosticMessages.json b/pkg/diagnostics/extraDiagnosticMessages.json index edf9c573..aefd5c74 100644 --- a/pkg/diagnostics/extraDiagnosticMessages.json +++ b/pkg/diagnostics/extraDiagnosticMessages.json @@ -42,5 +42,9 @@ "Project '{0}' is out of date because it has errors.": { "category": "Message", "code": 6423 + }, + "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.": { + "category": "Error", + "code": 6048 } } diff --git a/pkg/diagnostics/generate.go b/pkg/diagnostics/generate.go index b89010b0..43bce06e 100644 --- a/pkg/diagnostics/generate.go +++ b/pkg/diagnostics/generate.go @@ -5,6 +5,8 @@ package main import ( "bytes" "cmp" + "compress/gzip" + "encoding/xml" "flag" "fmt" "go/format" @@ -21,7 +23,9 @@ import ( "unicode" "github.com/go-json-experiment/json" + "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/repo" + "golang.org/x/text/language" ) type diagnosticMessage struct { @@ -35,13 +39,44 @@ type diagnosticMessage struct { key string } +type LCX struct { + TgtCul string `xml:"TgtCul,attr"` + RootItems []RootItem `xml:"Item"` +} + +type RootItem struct { + ItemId string `xml:"ItemId,attr"` + Items []StringTableItem `xml:"Item"` +} + +type StringTableItem struct { + ItemId string `xml:"ItemId,attr"` + Items []LocalizedItem `xml:"Item"` +} + +type LocalizedItem struct { + ItemId string `xml:"ItemId,attr"` + Str Str `xml:"Str"` +} + +type Str struct { + Val string `xml:"Val"` + Tgt *Tgt `xml:"Tgt"` +} + +type Tgt struct { + Val string `xml:"Val"` +} + func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) - output := flag.String("output", "", "path to the output diagnostics_generated.go file") + diagnosticsOutput := flag.String("diagnostics", "", "path to the output diagnostics_generated.go file") + locOutput := flag.String("loc", "", "path to the output loc_generated.go file") + locDir := flag.String("locdir", "", "directory to write locale .json.gz files") flag.Parse() - if *output == "" { + if *diagnosticsOutput == "" || *locOutput == "" || *locDir == "" { flag.Usage() return } @@ -63,6 +98,43 @@ func main() { return cmp.Compare(a.Code, b.Code) }) + // Collect known keys for filtering localizations + knownKeys := make(map[string]bool, len(diagnosticMessages)) + for _, m := range diagnosticMessages { + _, key := convertPropertyName(m.key, m.Code) + knownKeys[key] = true + } + + // Generate diagnostics file + diagnosticsBuf := generateDiagnostics(diagnosticMessages) + + formatted, err := format.Source(diagnosticsBuf.Bytes()) + if err != nil { + log.Fatalf("failed to format diagnostics output: %v", err) + return + } + + if err := os.WriteFile(*diagnosticsOutput, formatted, 0o666); err != nil { + log.Fatalf("failed to write diagnostics output: %v", err) + return + } + + // Generate localizations file + locBuf := generateLocalizations(knownKeys, *locDir) + + formatted, err = format.Source(locBuf.Bytes()) + if err != nil { + log.Fatalf("failed to format localizations output: %v", err) + return + } + + if err := os.WriteFile(*locOutput, formatted, 0o666); err != nil { + log.Fatalf("failed to write localizations output: %v", err) + return + } +} + +func generateDiagnostics(diagnosticMessages []*diagnosticMessage) *bytes.Buffer { var buf bytes.Buffer buf.WriteString("// Code generated by generate.go; DO NOT EDIT.\n") @@ -87,16 +159,182 @@ func main() { buf.WriteString("}\n\n") } - formatted, err := format.Source(buf.Bytes()) + buf.WriteString("func keyToMessage(key Key) *Message {\n") + buf.WriteString("\tswitch key {\n") + for _, m := range diagnosticMessages { + _, key := convertPropertyName(m.key, m.Code) + varName, _ := convertPropertyName(m.key, m.Code) + fmt.Fprintf(&buf, "\tcase %q:\n\t\treturn %s\n", key, varName) + } + buf.WriteString("\tdefault:\n\t\treturn nil\n") + buf.WriteString("\t}\n") + buf.WriteString("}\n") + + return &buf +} + +func generateLocalizations(knownKeys map[string]bool, locDir string) *bytes.Buffer { + var buf bytes.Buffer + + buf.WriteString("// Code generated by generate.go; DO NOT EDIT.\n") + buf.WriteString("\n") + buf.WriteString("package diagnostics\n") + buf.WriteString("\n") + buf.WriteString("import (\n") + buf.WriteString("\t\"compress/gzip\"\n") + buf.WriteString("\t_ \"embed\"\n") + buf.WriteString("\t\"strings\"\n") + buf.WriteString("\t\"sync\"\n") + buf.WriteString("\t\"golang.org/x/text/language\"\n") + buf.WriteString("\t\"github.com/go-json-experiment/json\"\n") + buf.WriteString(")\n") + + // Remove and recreate the loc directory for a clean state + if err := os.RemoveAll(locDir); err != nil { + log.Fatalf("failed to remove locale directory: %v", err) + } + if err := os.MkdirAll(locDir, 0o755); err != nil { + log.Fatalf("failed to create locale directory: %v", err) + } + + // Generate locale maps + localeFiles, err := filepath.Glob(filepath.Join(repo.TypeScriptSubmodulePath, "src", "loc", "lcl", "*", "diagnosticMessages", "diagnosticMessages.generated.json.lcl")) if err != nil { - log.Fatalf("failed to format output: %v", err) - return + log.Fatalf("failed to find locale files: %v", err) + } + if len(localeFiles) == 0 { + log.Fatalf("no locale files found in %s", filepath.Join(repo.TypeScriptSubmodulePath, "src", "loc", "lcl")) + } + slices.Sort(localeFiles) + + type localeInfo struct { + varName string + tgtCul string + canonical string // canonical lowercase form (e.g., "zh-cn", "pt-br") + lang string + messages map[string]string + filename string } - if err := os.WriteFile(*output, formatted, 0o666); err != nil { - log.Fatalf("failed to write output: %v", err) - return + var locales []localeInfo + + for _, localeFile := range localeFiles { + localizedMessages, tgtCul := readLocalizedMessages(localeFile) + if len(localizedMessages) == 0 { + continue + } + + // Filter to only known keys + for key := range localizedMessages { + if !knownKeys[key] { + delete(localizedMessages, key) + } + } + + if len(localizedMessages) == 0 { + continue + } + + // Convert locale code to valid Go identifier + localeVar := strings.ReplaceAll(strings.ReplaceAll(tgtCul, "-", ""), "_", "") + + // Parse the locale using language.Tag to get canonical forms + tag, err := language.Parse(tgtCul) + if err != nil { + log.Printf("failed to parse locale %q: %v", tgtCul, err) + continue + } + + base, _ := tag.Base() + lang := strings.ToLower(base.String()) + + // Get canonical form (lowercase with dash) + canonical := strings.ToLower(tgtCul) + + // Filename for the JSON.gz file (use the original tgtCul as standard language tag) + filename := fmt.Sprintf("%s.json.gz", tgtCul) + + // Write the JSON.gz file + // Convert map to OrderedMap with sorted keys for consistent ordering + keys := slices.Sorted(maps.Keys(localizedMessages)) + var orderedMessages collections.OrderedMap[string, string] + for _, key := range keys { + orderedMessages.Set(key, localizedMessages[key]) + } + jsonData, err := json.Marshal(&orderedMessages) + if err != nil { + log.Fatalf("failed to marshal locale %s: %v", tgtCul, err) + } + + var compressed bytes.Buffer + gzipWriter, err := gzip.NewWriterLevel(&compressed, gzip.BestCompression) + if err != nil { + log.Fatalf("failed to create gzip writer for locale %s: %v", tgtCul, err) + } + if _, err := gzipWriter.Write(jsonData); err != nil { + log.Fatalf("failed to compress locale %s: %v", tgtCul, err) + } + if err := gzipWriter.Close(); err != nil { + log.Fatalf("failed to close gzip writer for locale %s: %v", tgtCul, err) + } + + outputPath := filepath.Join(locDir, filename) + if err := os.WriteFile(outputPath, compressed.Bytes(), 0o644); err != nil { + log.Fatalf("failed to write locale file %s: %v", outputPath, err) + } + + locales = append(locales, localeInfo{ + varName: localeVar, + tgtCul: tgtCul, + canonical: canonical, + lang: lang, + messages: localizedMessages, + filename: filename, + }) + } + + // Generate matcher with inlined tags + // English is first (index 0) as the default/fallback with no translation needed + buf.WriteString("\nvar matcher = language.NewMatcher([]language.Tag{\n") + buf.WriteString("\tlanguage.English,\n") + for _, loc := range locales { + fmt.Fprintf(&buf, "\tlanguage.MustParse(%q),\n", loc.tgtCul) + } + buf.WriteString("})\n") + + // Generate index-to-function map for matcher results + // English (index 0) returns nil since we use the default English text + buf.WriteString("\nvar localeFuncs = []func() map[Key]string{\n") + buf.WriteString("\tnil, // English (default)\n") + for _, loc := range locales { + fmt.Fprintf(&buf, "\t%s,\n", loc.varName) + } + buf.WriteString("}\n") + + // Generate helper function for decompressing locale data + buf.WriteString("\nfunc loadLocaleData(data string) map[Key]string {\n") + buf.WriteString("\tgr, err := gzip.NewReader(strings.NewReader(data))\n") + buf.WriteString("\tif err != nil {\n") + buf.WriteString("\t\tpanic(\"failed to create gzip reader: \" + err.Error())\n") + buf.WriteString("\t}\n") + buf.WriteString("\tdefer gr.Close()\n") + buf.WriteString("\tvar result map[Key]string\n") + buf.WriteString("\tif err := json.UnmarshalRead(gr, &result); err != nil {\n") + buf.WriteString("\t\tpanic(\"failed to unmarshal locale data: \" + err.Error())\n") + buf.WriteString("\t}\n") + buf.WriteString("\treturn result\n") + buf.WriteString("}\n") + + // Generate embed directives, vars, and loader functions interleaved at the bottom + for _, loc := range locales { + fmt.Fprintf(&buf, "\n//go:embed loc/%s\n", loc.filename) + fmt.Fprintf(&buf, "var %sData string\n", loc.varName) + fmt.Fprintf(&buf, "\nvar %s = sync.OnceValue(func() map[Key]string {\n", loc.varName) + fmt.Fprintf(&buf, "\treturn loadLocaleData(%sData)\n", loc.varName) + buf.WriteString("})\n") } + + return &buf } func readRawMessages(p string) map[int]*diagnosticMessage { @@ -122,6 +360,45 @@ func readRawMessages(p string) map[int]*diagnosticMessage { return codeToMessage } +func readLocalizedMessages(p string) (map[string]string, string) { + file, err := os.Open(p) + if err != nil { + log.Printf("failed to open locale file %s: %v", p, err) + return nil, "" + } + defer file.Close() + + var lcx LCX + if err := xml.NewDecoder(file).Decode(&lcx); err != nil { + log.Printf("failed to decode locale file %s: %v", p, err) + return nil, "" + } + + messages := make(map[string]string) + + // Navigate the nested Item structure + for _, rootItem := range lcx.RootItems { + for _, stringTable := range rootItem.Items { + for _, item := range stringTable.Items { + // ItemId has format ";key_code", remove the leading semicolon + itemId := strings.TrimPrefix(item.ItemId, ";") + + // Get the localized text from Tgt if available, otherwise use Val + var text string + if item.Str.Tgt != nil && item.Str.Tgt.Val != "" { + text = item.Str.Tgt.Val + } else { + text = item.Str.Val + } + + messages[itemId] = text + } + } + } + + return messages, lcx.TgtCul +} + var ( multipleUnderscoreRegexp = regexp.MustCompile(`_+`) leadingUnderscoreUnlessDigitRegexp = regexp.MustCompile(`^_+(\D)`) diff --git a/pkg/diagnostics/loc/cs-CZ.json.gz b/pkg/diagnostics/loc/cs-CZ.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..df21c307f0aa2a022361f91fcc17198d8f43d1a7 GIT binary patch literal 83850 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 literal 0 HcmV?d00001 diff --git a/pkg/diagnostics/loc/es-ES.json.gz b/pkg/diagnostics/loc/es-ES.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..d068162ce1ed9111a3a71b9554eeace2088fa4a7 GIT binary patch literal 81793 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

rt~+ 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 bWwK&a#(G}G=wJT@00960dntl4aR>zf+p3Ms literal 0 HcmV?d00001 diff --git a/pkg/diagnostics/loc/fr-FR.json.gz b/pkg/diagnostics/loc/fr-FR.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..ac9536dbefcbcaa1a506dd34e449c001fbf11db0 GIT binary patch literal 83443 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

2Zw*X)Ll^Codi&rih4-D!XR4*yb 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 SpZ^B{0RR6?5N4^r9|Zu@-~A#0 literal 0 HcmV?d00001 diff --git a/pkg/diagnostics/loc/it-IT.json.gz b/pkg/diagnostics/loc/it-IT.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..31328e9ee4888cbc7a7b13f47ae796e569c97803 GIT binary patch literal 80082 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

PeUU9L($N{t+~;P)3^;$^J8gaQJ!=A)n4Kr@ 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 literal 0 HcmV?d00001 diff --git a/pkg/diagnostics/loc/ja-JP.json.gz b/pkg/diagnostics/loc/ja-JP.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..035a86ccce7ae0e12f6b90efa4ebe6ac0aeb35b8 GIT binary patch literal 85685 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%0AdTac1X9XP;}V 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 Ytj}eV-+%PK00030{{g!4`$MS(07*6ig8%>k literal 0 HcmV?d00001 diff --git a/pkg/diagnostics/loc/ko-KR.json.gz b/pkg/diagnostics/loc/ko-KR.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..05a48d314259311d5dff441c4171cd674a76a56f GIT binary patch literal 81845 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 z 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 bhSrMRIEBj4cmLl200960mhGO8>mLOGH5fkU literal 0 HcmV?d00001 diff --git a/pkg/diagnostics/loc/pl-PL.json.gz b/pkg/diagnostics/loc/pl-PL.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..33a6f2812b7a91d40298911a6770110826be2ea7 GIT binary patch literal 85864 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 z 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 vfjS%ZGMW`)X%6FF3Wl!XpIH4mYF5AUK^7w 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

;v*aZ~yWF3-Kb*WXaO(2w;tc;_6Y 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

@UUZB^J-Rr)okn6Pa^t02C zM9=@@=HF9m7w^BA$7fj}I)?=eT-&%vcH)Yv=Mg|t*#tyMnL`ZkO%sc|7PQw4RbwxL z45C-JFuX({Bv^pN7O=daH16rG*43-NMyT$Xry8y;sTVj%CqrC*VknaoKhp~%xJ3Lj zE(tMKK75>9Zx&ya))dB@l8bu$RJF=DDnjp3;rN48%BFUdl9k(_^#|7n2n3{iEYCQ* z&WYOqv2UY%Nb?i#pY$L|G((V%h2#|e!Mm?GTnFZkX`q|6wMU*PLn;SlI0# z7|vkTw@)Yuhtw~|WVrQ5`SRv_?Y=oUzWJrQo0V0ZRY@$d@BGF<9LaDQ9CAK}Z2vef z%VZ8}ALf@0!BIw&#S3zlT+U&Q#hIY~E@G$pm{G~I{?*P(2- zDp|e@pUGs@Aq;wvV&o&_om7w$x3JUCWuUm0dH1^>;YplG!+N1ALDaj|FGWG9JPfO8o@+aU`(h|~N#F>3%5i|Q-Jr5a@% zk0lfp10q0O;lXPfBW$Sr)j9Nx!oi0o+MS{l=jsFOTU0Rj_K-!QQ|*_qQ-mPaTz7Vr z3(@^48CIEgl(rCC6V$cHfGBJ}RLir$74BqAu#udYKS=;bcroINE5(CohC}`-Y@5l{ zTF}y{?z46tb$jx`O&~Ttg+Q6ynqesJDOnHmSw6Dxx+;>Je`>8SiEbGCTE3|>Y>KC+ zl&6~TVXcs}KhNC>bx00}r3Q*I(q&?P7%&tE(^T8~v=*?3?%;e`J~yN%_Al7i2V7?s ziv+r-K*9P_h}4c)?Ny`lHbWuNDq?bf-6Z92$%ROW&{Zc_xbHtCno_$SYSTJfq)W7> zC4QTjUj1>FsbxcnhNtR+5|$p@gCh1f%8D0BdHsT`P%JeAMBz)P9-5GOqwK4`DxpRH z?HjTz)oMH=Dw||%6pzOmjUDyOq*QHzT_i;N?_Vg6Fj}+}kv@RGoJgH7Be#bKwTX6g zmmba!IW5FyD^oI%Uc)@b1-EQ5ZNj-bG`t-d3A~6saIyf!VI-fX-+-9|>}Ai*ITyZp z==$ajF8MMtU?FeKeFSSMb!@vnJ5ldl;e27Sy}C+ zT$8`Z5UTJ4_z-9&-DyUg3*O3S|T;B3O0 zP@5&sga99*NfwbG^zcp`x1?kn97 zx}!eEcF$~5li})@OV3GQTocVU33t(|zrno(E6c$ds(7&}mXTqc;HP=#x zOL!Ru>s{Djjk2~cuknqLuLXMxU|1i>$;ld9_B%ziGo_|NEPy&mDk^z%H^ zy>n>;`Zdm8a?MfKor+nSx*P_Joi!4(a(2%RgmR;keqU*1YRT3YW1C8YF3y|{tL;mh z4NqMZg%yT>u3e`9>4lGgaIrOE#W-K$J$^jdNRxrzDhqD=;bPl9m6J~EA>f70^Wshg zGD}&-)w5bBIKOppiy&A1e+W;3(2Ms5`I$VP4yHo#9BZ^XNeMYFig(&vuO*B680-N}GP2G5M>pi#bZ={5IjVR0 zKHTWfl59fojO31=`eT{(;Wh9(9-}njr&eqDsrlVF7k)~=zK%g`_vT-h&W}JehVXpI zKHrY(01;JVN)kX{mN1K*>@7R$2$L8)4H@k3i~T9`P8%9R89s1 zUY45^EyID7Eg@7(#KoQ}!0(};<1@7wMDd?OQ;&(-)o#1NX}c`*ItNH6R^$4H+WbrE zEM#$iKs>E)zsVw}`)$^XUTpU-n6F*LYHg3zkdY=HTofXS%qbp-WK*rc^E{B5ex9)b1DMe9?DlIt(5=utfYgB^`?J~&2|?+e z8kw!A(}}F6886UF2c3i{*F|fQG#AD9F zE@s~Trz`VEfy@2V&szA=tHh!6gakGYOt}?Ve2gztv4Oy*#{d#zcx^(I&l~aJdWqDo z-C$KWM1~S1M20vAh!5lRBSOwmX7V8jyM1NR-%IwLx=5~xaeRc%{w<8ve+*%{+oyNG zZFhrHnJ>Rlu`tv+BlUJF5a>@)r}8o02OP6p=X<+(0aUw*^7z|tNWgD;&IqI+sZ?V`LF zg^YsU>O${q)r+&dm)2!lP+Qm0T9Swc%THar&eONb6D_d%A*OIXsn}pr2sgNh#qBf< zdTaBB5tyBy5XIYcb_93?Pw))G33GLNK+doQgM1$tzKJkJYRsI>9(%iHEy}!LTNMl2 ztI?cR*9YeF8VdTLzA_t}_VuL?uKekh4^0sK|FKnl3#n|*Y;6IC7A+26Xp28|T8!;z zYPAs`?XO*MvcrjS1alP}GwGHkgM7&4R$B5OPvBB(-)y#d!CBZ30H5{N;yZY2_Ww~W z6Zsi%H;~%t(;AJzp-HNzEjFj2CilG~jJnO4{L(~G`I^7I#;cO;D0S6R9AMyBF5JV} zVT&GSZw}|@y(b*nKIwOnEW4C#l`nZ^@~YZ)ewVLFR9J0XZdc%YPQ47OgB>J=^;R~ruAC3y0c|X|Fhqc6HStM-P)P2lV`Nc z_3|vuP_OUJdHplIaAT4HfRqYLyFowlzKG;^-OxGW+ipVW%eq{8pKfjTp?F#USzq?d zJAe40+~cvyScu3A(Y66^It=v^duYh_TqsWBJ#LLg{CJX!|07b|L@fMroM$E1k=;&r zerpUW+kF`>qWZAMkXtZw4bzrR#h8KaTEjdWPzr@fDGS41*w`er_!C`4G<$O1-Nd(m(Z#M8!wrG_JVW&ES09{Ml?D>OD`Sgwy+( z*x3v?DvIBZ;yp~V4+eZ(xtc9eyCXAcN`Tfvmp)Pffo6yR^_=i{UYS`7V}PxN>|Ppg z@Kmfby=%FkB6#L!Eye4zZ+yLyaTCUiA}@>-Y}DOV2CMI1slXauvSLm zPvsh4SuvY7$xs4zcy=TE;l&zxOb3nBYB+!x`A3v2y>Jgou`#Z7!#-ApHXkQyXM=Af zSy}OT$hsjy|IG>;C7{=!`45U(@=@QLKy7PMelPwW6xyXJ8|2xLcxpt;y7OCxPgsE` zplIm{YMf6`KSGSa6Pj?Joqi-=tHh=t?n-n^Yu&Ij_hsfq9_o;ss@U0)!?!f&b)ut_ zOhMNSy#~>Y-sLny*+J3HIq0*RhKX!3Z3VEOu60AyDgL#0JlB`BhLKS*hTB2OK`?)t zSII!t2~k1wT9--&{Lh8y^BAHZ23LZ=(vY64EnaPNTPYYJ3nl4SLktM>S%6NZPhzi2 z*6UzmrJ-S3N7@D>tS{MOzm$ZkGoQG{Vf!ZfP3OD8OOE-nsTewpqkm=uA+dUa5Y?Hse8+7keyF%uB2sUz^{f)1OdLs#!_?&b1#pjNi*BVuQlg;FI11HwEY{e2-9wh~;C3RxxHti2>PiGFDXvW+8AF zz$V+t);2F#)LA=Y0@&&kZhgIq)@A}G-~HHTytuOmfnO7 ziVA&+r@@RKE<-k0oIdmwPvC5&HTzfe5^kR!}(A8IPlbtS~1Q zFjaiUVA#Gxmv1;ztu7zW_Qe*ZM$ri=T27rtNERF&bm8YkXN`*&D%B8b)VTC1srK(H za%zLPtp=Dh4Pv?^fBDwC*WUjA_gF7zllS%yvoB`9pZ$9FZ{n{I8_zf8hQ6qBnhRTi zYTTq^QMVV=Q21iy`t;STLX0^=YktD8njVP{`=E->ap1vM{kEsyk_}O^?700So;?uK zjoL_NykH-Ve4s(3Aiqi z0AhS5S=|f)RfWBk`0_>GD9*u{ZSbn%qzfqS>u^$T@&a@;#9ebz3J0f8SkY&1o;`#wBPp{N>o&xge<2|Oe&y}My3YNH z)jESO2L=U}5k*HeZTdW-TUno3pFWxnRMkx)h7eZ{Fz@X|e_1X>r8;mvbzA=>=S?oCq~W;!*P3+s(^@Z&T1v7BwkjWW`o$Qj{Q}8$0Os`0GmumNWnD4M zfbCef#LAQ>fQuz^7wDXTfvf~VH)0=SQ4dRMYzF-%JuvSjQFEg^mqcIHzLsDE%d2at z?mOI1>|DfhQ+XkB$u%-1n2K){Jo-yslsNr*0YYp(*Y{Jp+WciwCKcPRs<9M+x(29X z_-}kYW}^~+uF654Z6;fY0gs1xZ;dzd3GH=|Ut8-E;q$MsmB7JtsMC0~7A2FD^czlQ z_l)gM<QwJ`_BK(zW;;w-v0jgu8BJ^6`=ld_QmX% zv)|1AVfN+hi`oBf&3-rgV)onF?`OZ6{T6=pOYvn`d}4O|pK#^=i+spS){C&};|s}G z4D{Gy#KFokP#~$Jt$VL}Xp)U5vh=AZoo!^tk}_0c2Qee{s>d{Ne`RN#Rm>?S$dbIC zgsdB^dQ0fl>ArBv*$ymua8GjU{vZUs-oN6yj%~L{D$ZhT6o%0^_M~>0@oUg#&#I&_ z(ZS%hMXTuci=~N2_r571<_H*=`EXa+St@uPishmqnD&D(Bu;c2E>0MFx6L#1qeLI% z-cqu`HXmFEJbqSA3ad(4%qCE|LSbOi02G^8IoUv;RM#%`dTUDf=FsP09lAM6;8UI= zPaAehM*n=Z`j~UP{6IV)mGL25=4+@fb2pNrtSHs)nT` zHcJDGKmgOC5uy4 z=bSn(-7`auXa~qATT)N=sqZ#|E_OM)%!zzhE8U?*p9tZ70XD4S*kg?LiDx5v> zwOE%EaX4?5i)EMQ^?q7mstl!=d4r|UpJ;AFW4(nx4fRyQ1~`qsI(sV5Ff0`ynP$~= z@=kv%pTIq5Lqbz;NRSem{4kCOPd45A4FBiuoS|sjXlW|%KE1K1M zn{BWzkB>GxzA{RsHuC};!*3wj%Uglx{i=rK1-J(d<_uoGIge?<%n2vDKHI=ysgr!1 zlw-~+A(a<~K@h%l`&6yUV?dOulF=_60f!TdYr?e_E|)S)G7JJZ6Ci!)gdkei3=>=u zABqEl3nBx~UV4u~1~HQlkyRkM)qV)vR+^Grds$i4$hizRqB!iry<0QhauA`E6*M?< zp5gx25WJz=OG^aaSKaLKXnfhF^9NFQosa>Z6j?__9oZ#qXX8g72cLZZ6@(fqqKGUX zr}x{bE4o-!^(U7R_7o-$)_NYT${wMbfWpF7yzn5q&q`4FDcKLU1{kG%VKDYLeBNC@ zjfBx~0RZf&5$IK(lvQ|2Y!}ru9c6o2I*#jm*(i@Y#2*YTW9LUC#rhf+tK7}Xo`25lJjwu1fAtDbY+qPU*Y~-=9Sv0h!d;J($R3wL} z=xubI*e+BZ=5=!4SwOg4upB`w7^RedtP#d17MYks6YV9rC+7UmfPv)!B?X@GO~;pK zeQwS0YY@o1_Cv$ss!oW*{<1cMpUZ95>+ri{HD@hC2PPfIyN7W-Dgur>;^?+uu2m9wD(P6TVrOT=Y6-62OL4ki zZ|{j_3;P$d@G2TB_2A$PE6UYJRMJ}Cav(gsYM?53k+Rw0KDvXS7JE?cblB96Xe!$$q^n{+i;9fF;@|z&c@-cW30wDn^nx+QQkc>E1uyO+!lL$8KhD)z^&i;e{_N`m*zs5@rJ-{wBfyB}tQ!sIEQNnf@kqU!5 z6M#wL-l1bDP^fi9r6zKc$4R-H)eud9-oxOc`pGOW(+QRU7MP-pF!yXuBooZrBsr>8 zLzG|TM?z&IbDRRj;p>MWULzXU*9zt2DEk42w4vWRSN zQV|A5%7saO7v;v#)=Dplwi<{a?y|ICJ7Zk5BPK+Q;^Z2TqBv5;c1+Gv^-pGUq1AwD>eE4U-p!44mhC&ZU&`+c24N(SmE1 zdDmDU<^_{4!6GsYg;?nGD2}#}$mX{uxbw56q)BYCOA}4rOpFnIqT*maNHn1XE`p5i z2iD=-g7ozz|6AAwz7@c<+e5r_lKhanE($lN1OWM?3e5;ojZ8N>-a>|%m(XoVerP*4 z=MP!o>vJs@q0wgN57=?F%I7va$Y3Xq^*_t<6#X%hr)JbHNYALmrHvS%$*e7_z#dCs zNtgjAUQU6tCmrm0{{SvCa*Kw{l=>C}7%e}5oBdnn>@sah|3`W7d_`$w z_l*&~v8zwmtU?y=gADi)Kn@iD@?M!tr>Vk<{$H4EbOQ?TKqYN_(U;qN!nqMwbUvOz z#`+W?t+aQNfq(hqe}DQrBY{mBX7CI?2alzrq#wj7^f{bDjP0bA)kVuE!r+1Kt94Jq z5#{|t%Wlk((+3(>>(I8pS5cjXxWeBoM$Wnohe5BkqxeR5>Q?~q3S&y{cj;-KKjL)m zoyH1uU4g;(ToyqGJG_0OoJI3;OiyslT9_+$({eYdvjg-_ZlPP2RdEW-V;qOQVUPJ? zi+aYd+1qwGK5Z%~#0`bVnLI+apw-djdHHO+#yTyJXGlx}`B{jB?J?IY%j-0Us~>Iu zN#)t|qhb5hL8c3r(*#R$yjfmlKXcS<@+8CpFXPaQg+=Bbyt{T^GakL zlvy=K7q_9d8+AO+_TccV6;!m?i~9kvURZav1qv`8`Bq+cVYzy~+qg{kTX%6oL_@+C zPGv>ZV?LvOZTP|pFo^D()x|*~?>ow+NB-4e0IE%kb@Mtv&IHJDOBIame(KteHTe}q z#>Byv-c3scv=72A6%QF4$EFGyze&$^Vf`nxEU`hj zZA4407Rc{QLaeWlc=oyE&9HX}AjkE56(QJL5dqf}ZLRe=>plx_K-@`!2QTqzW;sb5 z;M~tDNKKd7c%0_=txVj`@J6IaucJX2nzmZ-66IuDB-E58mU;#!_9U0Ph4DhZ*D#{q zW93;$=dpdW$aF6K;T96Jo03jTrOl};k8I-@myXG)NpAg9(t5r~ zh+tVe$^9^lg{MIPO?b26FmS^6S7taiZ?Wy7$(#%vn(p+5ETe>N#pIC>yW7D9jg;=f z2?;&9WgiVqxa+O=#MTVAm*S@JBePC5yVu+=yVz8vstknnNOo%zr1vo+9!qhankR`Y zb%Ur43Iyoe7X3`Wk1j`tSlJ=ow&jWGZ!)BmCUCHiMe&NJHy0%<84;h^zSL*rJX7!V zeAoQm@WS8oe4`%=7Sq|<9@Hr_d_T>pL$ zU7cM|oH)U{gvnFqXOlqamR%mdSY^^Gevbo1>=-8#;W;11RSJSAi01rPADbf+?8ES- ztf4+Zpc~u1)Z0~>iwl2R+9CkILqALFR2L=J?hYg5HEeI!lJX3m!e8qkF>2Wip{>nE z4eO^^64$Kzec`TARnep|Qw}fULX4OoLZO16qWj?dC&%Xj-PDbetO9OT;P* z8fzqYq~Q6lRV2W!>~yHmAKKkY=_)MyMc8r@FI2*c(|j~3Xkts%y*};-zdt+bT-(`k zkWn(w!!#KPY;N2R{j3tEQWCXqlLmtoN0VU9u_ejpsk4uRI8W1Y)k27n(t z7TZYJM)6?3e>b=NyOpfLnS_=Mw!0U$Kp$Ccb3T?Gmh+OmPRos^D9*Y89$a z*a*Z@Q3_0#>5u~YL#!yMV+H*J@mHnfACqOnQQwH#U!Z?hn8B_6L(Cpb1_AHoiee1O z=bTdG^M^m|oc)2a9dpw2y!h87+r_i!sPmIsQ4sdk_14P~eFDUOl7mZaXnf$_ zd;6wj36N;?(X52jFc543Y=Lf-Zx#STE)~;~q=r{aHqpSSworkyBc5nKatH&k2W^5m z@t5zteUrvhcB(}6Nf~rE7SArFXV0#8fL#kaRJ`}G$@;A5n;Z;;r?aTO!9UGm33!(M z;WPy~l4z^9y)Ytf9csT>eKHf=aYY5QoegZKvC2t$n=f&WT{%d~J7OJc#7fSX*@z*u zOexbYIt#EYp$4wRVPxL?UQmLN7*M%&#|kpp2w=eqjuQz@IQCJz$!-Gu2pgw@C?~~2 z3dDA_`Uv@N!U7P8C4ntF8&D*Lav;pxfGLQV5=pEi*@9dQl{3Ny7FMcW$mj{vz0fqT z7LJE?qG(|tT6p~m2RQoM0AFZ;t)?7xK1S+He?eU5leSTX(c`g=OJUIBus7t95ks!y zh>xh3cGn9K`|HA`t=h$_ucR;EKR@z_H-nsTEupRtu z3T*t9@2+Y{y&J6hS9WxUJwOFq&A7vR+pB@w_E^u)SKVpP=92h>dRVi@RcS2?A35XN z&!rv;g6kC@8_)%VVil~ZLDcukV>nSVB*x)jTr3i`Ya|VVxX#Xo)gE!-QMHOPlB(lN z5)AOxt)IVxhSte#ozYf+fG~=vvf%`Z=Z!Qr&-PPy-4nNuNmW?z%0U!#O?V|Q=AnA% zcEF`kw2ray?$(xt*<4sq?!Hqw9P*t5?>ie0e(Q};4LnIkcdDi$twnWlq>ij)y)chH zSK(P+Ue%25Sh2cl?e%n*>yJYaccbp;_m}OC^;Mg-_XjkOTbk@vb(xIn1sDZPO=&QK zid7q#zNjtbBfqp%KFz@`G$i;rNW%kHuw&U^u|)c|TijqFDq1$>4dlBUaQ{nL*y>rVW+DC4v`i1&)}AgSYfaoF3!_@DUN&c+R`X7eTV(jyIP(zRCLW3a6r z97CV8h|Rh#nzh;au)5#*{`mv(-y0oh(Q6-8_g_&9=pUeeu|`8|Mrm~b&zs@F8yzuy z!omN3Ma9p|hH2(g5b1!P1iS!ec6DQu)5)I;X?|bZpQ%l)v zfQuU>FP`H8dvgBi`L7654Q|yOj*JuLdT~#4E_~Sb2(d0|F?Ha~DT!Jb_M|*sF}y4x z;&Y#zEV1l-jAt&>*?d4n7_wAKa*@gqxE1kUZfM1t&hj{^4)YPy8xZ@kJ?enykhHa7 z7x|_yJ)p-O!2h3~JqLFCxfT^+aK7^|V4rh_{}g4GY54Ie-V0Csz2JdcFtijq7viW- zR1S`rh~Q}!>+xQf&L1r}2u>O*1keUaL$S997oJ=*2}!IC+m41o5NzQt%r+F%sy)SJ zfc;6X6~oE+75y6kQaGu2@j~WcSE@Md_gZLS7#vEq(?5B9h?P^xlFbn-N2r9#8?AI; z*Sy8W(Xih&30#$wyaDvG1&tjpo(t`6?oP1WR_ED4+BUx<2JJL1`rqlzZ}G@qbO(%v z{b((NepNf5(-o^ZEdAax)?Sg*vYS-td*wum6=f9!iRvN_$V}J`F;NT3Q4p<*b8uTH z3Gg(~8peXEcn}5yzoZd;Ye5~3z9v(#w^Nq8Ky=tuJ4ZF-6VY=#Nvzo#G`~Job1^rS zUy?_DIsZ zFo^Jy@V)VwLe;mdlE9dR1>L zGGC>W1n?_fa7e$V@hI}Dj?;X0AmQWO=YV*dn7We8E`fQwC!R@ZPDeeA!2NTRC*g&~ zQe0li^~qTV?NRYIarm<*xV9)nXFiv>IS)!|Ma#xnCAVR;>z(8sVcYO3ZL`%Z{nmBf zN#0p#p{9R>$CBLiJEI^cLi^I9Yy>#DxM zsL_I>E$Sjq_P_Z=fSUW5eNF-7PS2kC0Ji=s3vVy@%w<}o__x*2{m7J?SN7 z`I^e~zlMo(Z1Uzw;`yhtgj9T6Zu=Oh8f;?@#Gll=0nbm;nu|A&lF1|;%i0SK6VGxW zMZ|b>8i%1QD)lhdT0$0c({t+JH!1AZf(e&lKpAtVbeoiG6XsIx@W)l1mRWU2Q=jR) zqGrktNw$m>@tV?lr`j8Tm1v)gMD7!74majZ>DGDvND6c6p=E7fmRq#zs?w@r0<>=$9(l`2gUaC!9vl^8uq)B0HGMG9>!vFvJ?T z_D`D0;MS6f7w(JBf78()_B65B(}`5PWFfUE?vQwKk+mswE$IcMM%Ug`i-|>znkXN! zz^MlSu2or86${mh!%4ud7z-_JwKEWQhU>TU^7aLb?b8L|%Zz5U9xHtn-RmFKy<}3Q z@hqPRUk_N%D{%**>-Jzfz#AMq2KXrzaet03G{aE17iRUsoele2bja!t^_Tt-a*~f~ zd?_G60uVEo+r0SeqNIAyNl{E+M#e+jaC=zd^k1-@KLzIYy`t=Vr}7;QK|rHY`qZBX z@dX3FySb2sLw?~*NQh3!rH1+C#{g~nSIkxpO%tyv3$HBXcRNLmJFy{1oPsigKu@^( zm^gN{H6*eF!d9RR8NV3rh&M}>wJNQRDo@JluzQ}=UiL{ti?8FxneCCwYLL8u{Nuf> zO0}!5{s;B%)gK4jkYC%`_{HD%Z@zA9d6uf$4s3E2JaR0{@Q@)E8Fs|aK;HTYcHLj> zY`psF4_@8bz!!_gI?j^qto54@E&by~{+jcd$J0S&; z>({Tpj2jAYw!8T_XzesD53;(}3Z1SO0~{ygO#CpJNI4cSto}{%+_-0Fgf<;*#i${wR!-?i7 zN4;S{v4;j;wl+$qNm?)DhCB8KxXyotKgRPP8YXNa7pOX{>hu5+L8e00U>l)dTtxVd zH{KANF8qc^%N?btjm?cby~oqr_x6h_Rpp`pb7Xuyj48uKIVSm`L^z`4yojf5+w4XCk=Vv-Qr$aa>1bwtLZ^JO-6T;+i4X~Co|L&!ti;q z7Z&`8UR>m*4F}V^8cqLM(@+SE)VfubCA@d{j`ej;=jc~Jct5>tMM|Aoeka$s%7;l9w@3f zFyHtr`1RthF~|K!{}hlNz>vTymm6){PsZYYmQ1Qc-CYrePX3eb1WtS1OAbaTPni6Z z=jM9$tONH@Pa`Vz@esRGK~JkV65}T(uQ7Ow+o0)l`4)82SXIpkubtK<@ia}#o9Q&o z$7w#w(n|H!5IJ1!A!VTi-7x)Y(kyWB+jjdkYc)7r2<%n8op}3sg5q=F^*Q98b@D2_V(J#X* z=@sV2aqk9Qx4O~uKCdpEwkPn3!L(RW|kdK zhvZ1~_D`wqi7;=Z9JBFeALSo$J)&MxxR-Ggia(NoGvY}tV7(Y^ti z3gSVq9r{31@Os1R+oUX~Tq3^Z-|7mSECM@8zu+SvqK3%c-6Wd;{{Tg|M*B&bjOtX8 zk@kW6|Ju&ZN7u}-5QzXa$s`*5au1+U$0)OdRTdw4@2w=KmrO*L0tT(}Q)5M(8tWrV zFwk>ZbyV+8I>@PlDFVEmfN->nsYumlTMnI>cC*$b2&DdY&}FpOH5Nae@YS8wG4 z7gUwiV&+3-JFZO%@p}bCy2}i zeVEyXU<}0QpCVomx(ljNpV72ECHwK@{}eW_KTAWInm7pqj*9$lT1q&Y;``kRKX%U-!q4%SPgpJl3v~9`owhk@F)9p@rs4b#?O{yv_@eUjIs0h!`f`k92aYYuq!f}I0#6W#KIo#ng5w^dg4b&}7%5Q6!F*kyT~ zSF*0>cJ$$erR-CwE{e%8HAGV-n;V&1z8UIa#@c58gzA9lz`hF@rE^~BRc;B&w%E8qIS8RH<%q74s(5^wZsjP~TLr_e^{p|LB z8b^cv_Qs73vSu02!#~TGn>b>dHl_^^AKR3O*l0KjEapS;)?f3bC{@5`71hYGG20?v z0iIle*4G&@%zCL4gT5>=;0PimQXkA&BlC;KQ}4wzq&ZXa!#M`oIdgLhw}LQa80xdf zNQj6E^hm=Bt$v7tZ|K{oYmFBK&3fUuY3`l)cR?F(wJD*8U!wT3#2A}MSoOi>dkoV0 zOLtMAXRo|0spyqx39CQ1sfw`YbdbUYk&C8WzNcK%t;!rZSy54?C}pt$;qJo#g?Ik| z2kX z*m#Ovb%^1R_Q^}5Y&jn88Qw5ho0e$EYp!esb&MwGIPp~$Si2u6eJwc+U~XUJfb7d- z2dAX1b>Vn7uJ-l?kI4ls_KA<|7UM%Ps9{5!5ogoh=2IevJVBB%?k{RBo5dO<3tCUe zCm&0QFrar?16qr}8*x!94})ayofIP?C+~KnwRAp`?-J|Rkvu0k!b3G~4Jz%?0A#LI zi_K6pkG!`jv6Cj25dd!2=c>yY2AzeQ5k&|C+%4{c0QzJG#K%9m^-g-fjtARNQYd~Q zZ$kK^4)aSkIo;V2JR*LqK9%h;d@Vv@HCk-29Uy10c+|+R8z9=vjzY*T0R@v^2A>eu z?EljjUdYdl({KR)$%UOo8Sl>W@gyx-)3B+79=IhRh!=i<=_INPuwM+W8=icg3Jp;(cN&D%gSe zAx@AR8=D)mJo{*t#?|4$ZXx4(HVp#Nn&EX61nL2;hd=G$Pw|?q7|*OyMAXG^`j&A8 zC~_qiS>Z;e)FV~Jw`feSy)lc5)z2Tg1l{P=I|WWeYUFudRvr2blU}<7Llt?G5GHAP z>}EMEM$*OXb{F)vw~VG4wA#Sj&=@2aErsL->%2U#B20y+Gh7uTVi=e`8 zr437$!0c`i_(>VWOKEKEpxlD#E&fx#1Kc#t(=rja83{R*+=}s5&~K#lf(FpM(H@NCCQ}T<*zm6r z9EqMF&j%&>AsqgYfY<7t=MQaRJJd#yDbufTM`ER?jxS`zpZre%00960S}m#7&zc4Ra%(dU literal 0 HcmV?d00001 diff --git a/pkg/diagnostics/loc/tr-TR.json.gz b/pkg/diagnostics/loc/tr-TR.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..4ef9c4594f0760287acd06653fc0bb619dbddb1d GIT binary patch literal 81450 zcmV({K+?Y-iwFP!00002|J1!ra~sLEHuzU+dINicQdboSkZjL=ucfAJ_qRt>dv3qi zZl13tEINBjaJ-&`Xl}&6M4?buc`t_O5GmM##R$R ze&@;a@to)U@X?bmzsx@U=Bqz`_T{tZ**AZD@!2S**s{NpIf`Ryz5?o}gdF&9c4MPm1w*CJx; zhSepDW}?VNElRO1cr+7rA=V9#)@@NRdHbedCA)r1!`ZN!mAv6~R<;U8)2w*55VdN& z&(i5>9E^ZIs<{%8DAw-3qpB!bar-8}eN$r}pI@9;^Q__JreF=v8n()SVLz2NHh&5_=UoXcqUx?0n>>~L@k^+<5lW@0I1lNF-jH7mM@g{h2X zo4VTYy4hxul{`x(utFpJ;V4pUCK@;?ycS2%?(H=%3bBq@e)}e>^x0YuorvLnTg5Z} za#Kkz8^H>_9CS3tlavm|Y`D( z7eh9D$!p!EUhAg^yVFbUKI)yxnUJ}V%WT7%hS$29H`jh-PZG9l?+7F?ePoVXH8 z$(pw2S$aIxGZ1p@MQC{oamN{GFFlOxb6?~F&#ia=Ej%xIP@jJLNZYgTc)|qNp z1O4iuWtA+pfyltYaXBw4rDp`|1|zKMOkIg)zVez#l6V4#L^rMF$X1jh+Ok64zPX+= z819;F6x%WxZH44|%6NsaE%OtxdktIac5o&NQQtA}@7r>dHC4v4g3Wl5Rf}-&{y>vy zZ=grsNbM-`BWbTSk62T%tv{amiq&imyIU}&@KE_Tnq@UtyuRdlmRIep;Mt~?^QL7@ zRcGfS&$d;Ym7GaEc&_Gb!!yyK$ktLuWyvJf_uvbCtr}iO`T*R%S=_#f*tWiXQIg_e);#Lgb=;9KGPRinNSh>#tugQI5AVXEIu|-RqLA zqf-A)H9QwmT>tCfJZmPG+|72zvsu;3oafnWn=x56EB)2ZkCF+j{8Kmy{n^y|BHg~a zeG|>tyH{&-WO`q0Sj`r23ncxuE|@G?=OSXC_JG(+1~)F((gxnji-M`uUt3n_|IAU~ z!Rp&f3bL5h%U1tdW$7d~4;GE-sCUu-7A#`t`Zl@`BeqQfwtQFfYlKU<1#S^cB3g1O-n}Y#121ZHfj=o&?JZALwC`RuZQX+K;*#DD*n9W; zeUtOHbI<%fYlb!-Z=F8DdAQB#>Gb#kGc=2@pNr@_JE>ggIYcZknAF$I%AW3a?%zFM z_0(stY8y}rbG~40(KrnjB+H6j@{ExVk|v3k+Vstyq6!bO7TPm!l2%#OM~t+SK`Eh6 zynCUcUp=fiTl4KzRp(if9-nqrP#<ixsXPZ&K!0h|HazbtV9AM|{2#btn}SIuL!C?JEV>l+a(7ciV!?9VKaa$_EeWeU6q+=lzG5N}rL6ENi9sYpa)bs^6pwv#B`x+gHLnJTT_f z-YL$Q5)Ga^Pfs)xCLL!qZm$RxExi6r!>>teovoCqGs&Z$@z?5MFK?#!n zLAzR2io}P|%Dr0)J$rMkOWssX#NNGvn;mHdSc?^P=k$jr4L`wo<2pxb8%)|B130f+ zyY~-R0+NTGGXLQDZ+NEfmU+(MNOnz&f5y4XjFmG1`fnv0{<3+$`RnbU(A;;g`K8uW z3u9A&jqy)7bI@lNY|h_*&#PL`-1t3M&1U+Z|MP9Nu~4f8j$1Xg7QC{B#|pawVJ5d) z5FZ~9#L)ABbqXVDb8*e} zer@%(J;e@=^k20(8s$d)^f#1#zTLf*TrU}IQ>&j8(q?3!&A?K4Qw!H(KIckX(Jh#s z%*@#w!u0q=zd6uIB->J3KB!WajMNJ0+Xs3=9Up`HYppmJyf;E2MI%@tu6cb( zaLl+HWL4|E;kB6C@m96{CrlYPI7`xrK61PN7?K=j3-wACtO2V=Y12;BI3Kk9^(HA+ zgtrTKDfm;k<7RtQyXTZ@6~D6joU_GMyMetbitK8|C8{)_NT7kBGT9bImYl@k%($>N z=Scs3WS<40A4*a-t*$?BqY-p4igvHr?W-DQER7NFtAf2DlD5*UgbID52}!A-7yY%s zQ97h<%0|eRzrT|waP1t^t%Nr3?cKSLN9WK$?{ex44>p+$4R+AO(;2Be?CkM%%!Mep z=g~vgI<2X;YRK0Pa=Yv1q0joBzeSdw9vc_QjDruVQd_1k&Io@Mp=(zk`GvyNa_Nv9nr>9Kz8&-q&aZueHpd+#`)>T4EBFLtiK z$s?YlNc~M;F9uWIea+rGW6917)+&2K*k;37ot0Is4NI8EoYdF>M`|(-EM2mm$~jj; zKicpEbFB5fBH#alT^B4`^Xq8V7OnJ`5XZz{!ny0o0o=%EpMLe^VqS|)lc{D~z`nNy z&ysPX7w=E325DXBL#fSvc$4Yu_?OGI6RAcNsQ;8zzPl;*$$-uP?VE(ofu`DI1;3>G zk2kNX&G3R~RysMod#LaP>5Cw5-$;CiaCo7=0Q_01iSpgeHQ$Osl_=*6{ls#u6^W%p zpN&zFjD^49bt#$#7aAnIy(1~8J5O8xa{Mo&XvPas7b0SfzO-5kx_u+rkVT(!d`Vh( zyZ0EuGSCB(L^WvM~@0I8%2umUUR9X znAA$m=-EXYCzDac*M&Ya``4@HO*G#; zC)Kg%dKwr!n$YxA=hl{%T!5Rol_30hjw6(0hmujQHzH%`Vb4;u>Yn0hD!6e5YO9$V z8QGzFwy5vY#R;M8Mw7s7mI-aa=$Bk_t1Woz3S-1Tj|utnM6n?*-U1j^2)+=)# z1y<+y7_RKowq`jabv^KQi*4n%qR(!-(bt~BBtp4U&6JDtAxtLwYs(eBpsZeJY@wGA zE-fqd>B+MhU!Wexvw1d&PqmnO2E!<{N?7tH+P%GfrRSv2kXFr9C2NM-ZgCW`9731y zw@V(0wLoE_4>_x~@c~edw{p(Wtz6Zu{S0D<1F?OI!@&&`51D_>Rb%GvO%0}7Gq~%Z zvU;DvMViE?CvN6kmV(02!4e#ySCz~WoH@>H^!V}P5zJ-=?*o_nrcrA3nXa!v%oyW@ zJZ6G}a|z7>m7T;>{Tx2iLc|I zL_^QDew;A8I-TedUW9&)FysI+{TuQcdK%f03B`F{k%E9QCXNgqKy-{nIa`SWF7Z0j z%52T)F?C0C=47)C;`SceQoIz>2Re{&_4PYCNZLFvIG!!%&oGWma9B=`webB)x9NiW zppt9p|L^}}a{e3N9og_TEQoG0#JPauqvwkm@(uYDfcMpSeIUL?A%#m;3s4ihSeLeQ zXR4{$ym7PjfI6@mtWZ^!o}B4haZzpCCfc%%HnI`56AToNq5}osR+z}Jz6xcyE|Inj zlx}p?y(Pi>M@EtV_*hI?Xl1D^oupbwe+9PBQD{Y89x|Z@A3rTG)P~LZ&;^;1v73tp z+>{2jKw5U(kgE1{4}FTRR${(_tD~}#*UKzD9-BZt%OeJMq`NaPgMy~C`Okc)(;L`D75#@J34Gv zyWcwFI!VX+l0NB=Q+5F?b}n73dUrEuOS=c#oZaEUt5ww&xj`9Oxr(lJJq;SF(Wn2Y zl_79!*k=qIUGr_0Opar%Jm7DfDy?>Jujjj)+gH1rj%$5n8yLCCdw1{parEWxrdjBF z9XQ^+-wpI4y^hE(l9kNzdYjE!QRLYb%o_i_sVe|;#MyK_(bDBnUT>or+tz?EawB%? za?We;YZ9bZHvnE@_Ex#aqlSFO%8BgZQV4i+$b=8tG3y+jXtaXdYtIHbpHH1lv3tSW7kLB>B|Tdc={&V zx!0`JGLDr?9H2hs%iWEf^TJ$1Trc;G1$sf}Zh@GyGCJ5pb^Or+oICHl zWSu)^?mk{G-)8ZgmojGqm&=Xb#u%ME>)a~VeYcY_fY9AQ9Zce={~(7K$Z8f=NDT~S za1{@(9E5L&2GkQwAG%CN;~ZM2F4#9oPWLZV7p!~dI+3r(SGAfIm&WOx#1mKq^4kb& z;d40x#Wo*Mf$X$E=Hsi?4VDu$h62o}c9XF=t1Ms;Y@wR79Cj`lk4>oRP%PXjdOp-< z#mi`ft&ZS7avqIL)1x~k;X?xSYwW{99xyY1Ch|_ zchh7sNN1&*ZzL%^1;5u;b0N^&>H|^X&rZz`lm**q528NMttSj(K=GQ6?al9ZZa>;P z0M&G7>|(XuyOmC2eZoN882fq%1K$aR4s~MZhlt7GD@h8NnCH(fUbt=?9@+o9?(ABt z>jyidn;Swq(h0!Mo_mw=j*CmBuqx^PmV4g)>F_GKr)5xo4>~ZHqF?|b07tYRXs~;7 zJWV^(IEuC=vVa>x7r&DDjiJNu^&H$u3k*T5;RGK0U}pf;aR9T@dB_G*Fp~KA#4Ol- z(o9o&u>aHGA}@4qGeEGoAt?z2LuM&HcifzFP+6e{vG=(DCO+3H6Sf`x~d%>yEJ zwqy+8x!&|1xGh!PyY1%HHSb={M4>-N7;O?K#uDuH4br$H6#V%bq-?m-;J&;ER>J9a zvntF2>v z0z5RK_Gd+P`>Gv)W!UvlyatcjBIB}wf1)8<^Q>eW3SKw&j67~<6{ zup?$n@o(!QnsRu^4 zQ?Usx`&Vz@;vHN%TsZJD>d6o8nE4|HW-)$jR8|krye5B&x6A+p6~%hrg2D=D$xpGJ zWy|W^1pVe!xnT{2GAX9u?oaPG=_G+?_ytC{*^Eh>hPSTjmXf613hns{JU{KWEsK_- zb@tx4$h@{BFPSJHNPsC=dJiSR5XIcYk319GB;tXUnod&4K=otsU6sK*xUle^xoLCn zoUe^Q!~66K=jk;Ft38muN>TvV^S~;c-ltVrR`T-;<8OtNd&%n=Yee}~mZaeM7}>wT zw=TA_VJ}A!Z`MMFUTvB4qsTPsT*Y84Pie@%y+L^)J<|0U9(0D9}{|myZH$^AE|eE9KtL! z<4v*p0Qyr@lTG5&3BVO0j*4k!D_-`r0rHe!Fc9v#|7Lj)k{^Z1`AbU)kx9NpWsSo2 zlf;B3f>&pEBP0Ck!VBLQ9F#68{B%dxJ!n`K3wJQ_P0P!IFZ2s8^9*!cg8EuwfNmq7 zYNhQYj`gA2{im{dZ=mQGUXC!{aFa=}H$N`A{RvVuP&JSZzeah+qb<8GA=N+EY9OwL zH$~%W>bg}2m67xq$vnEQqA>659;PAc8I=BMK%HvC=VGyi_XIfNihXpe?eC6iGQZP})?$_KhMPK!7j z^jIb7I3658*E$8Ehp~#@%X)Z71CDdw!r4?xSnQy&Top(f1C>b9^mJg5LF@tTR{#ZE za>PtPW(?COxMLrIOl*g}>z%=?j<*LewD77T4A9$4`f55oIT;#kEA2Dd(d@0>%o>xz zGoXm*w(Yj&#^Z%3^Sm49@5229tUu(Ix}YO{bd@FP3D_Y*RfTR8-$$j@s%XSZ(VQEc z`&YbSIcwPdSJT4IJw;cP*GyXiHgU(kY|tPS zivbBhEEnE$Ycs(vg-Jg0#+^HkCWMgzp5=?`h34buyxH?G;;6kK}AXQpKjoArQkfM4R5 z7{~U`T^cam(i2Q4x@(Vu0AyeTxjnMLL_%qbLNr^aiyLKBaW1nY2C@9i$6*#?-BWc@ z^~4n@^4*PVzp7QnYSI#%!2)`F!|Ek(^jqa+eN5n8Sc&Bd{U%e}e>oRn#*CNaG0_qX zP-R+4&H19>Qq=ka51Ar%WGEf9_Mtbx?37kiD(_6BQ?Q3`e_9LAd6RQmbj%@ye;RA3 zD=l(;H=8PJWzAJpXd~MSv9maiF-K|l_Ih_y7F?DbB&rib2%&h47~6}4ua#IwBlu3oMF3Wef1&+0o2C}Cw&A)t zq{r}@+r7P(qT$B3);UpLGvFrNu$s$e#T7IbLu1dNoklll+-%n5BxmQIkqwCo7$g7z zuw4;K3`4J^yF<{~p0-UyN00J2oU-T#Y!1xZ0HDt%G4MzEYe#wd`^HdR^19ZxzrUf$ zwA0GSd~IM)_phCofpIoT&f>65Kkwqurg{pE9@(^aHk{XWerjF zub9wV9G`-!5C1vpjs(7=ZC=k;q%HOset2vrMwxk`bLjqU!tpo-pNQ84Sn|V-%xXp~ z9;~jbD{oaMh&}tpNE|J(*SnjNM{HZOdG8pY5vUs~iXmMLhn5a1V{qUC0zGbx!#%wW zYI~Cy*c9&2_68e1oad__MDH=5#A$4|EPT%g@_PNlatssrph9N<&_VU&!=A?OcN|adc^qe7Y(_P#^Q!xLXyoEdc@v5b4OV zXu>*GxhXgZ1iiM11je;R!XXOMX?2X13<5JN52`amaUc#qFKVDc9cF-R&JXydAxB;vfBeDra9i1b;{3 zb`?JP)vtSOMFYF4C1SR>Rz3n(U?JIdFPL4ov~kM0*QGN%8>X_^#R;x9La znClgaAq(*ZdhyVpi&m`Q(ULd9Q!8h!C0ex2NBCNRgFL$Q{7NFvg|Ey-zjD8M5iu3L z`1RxA*~v`ELP*}7B?JR;)lMO|d(RN8F$V^v(rOQEkkBjJ8yAhiUN0gOvAkI5_B!^S zKVOFCKIavWMq1u```xHaEG6XiWBa_WA&*`uwnX`SY#;3vYgi<-jzb4$^xH-~!ruq2 zI&Kg!6=0bV>DFOJl%(}ervUB0{YmCR4U-#MkQxBveCiPB`SDQKPLvz17lxvxBHHx5 zY#Bsu`r!stYPh}W^M1Tgh9?-qLb`<*4VTInGha+PT8bLYrfd4dd*1C9AKw8K+?6PbY{iRBR@F-;#WgqiwIQ+>gLN;q8&2Uu zEebzpmyG^1BmXvFGknaPgUq3twLSvinrq46*j!_NzOWIKFeqf*+udC2r@!RDGPPxO ze*31JgZ9|gkE3(8Vnkyw6U9w3Za=lkG~BDU44wdY0v%V!woe(wP|M|nCuJ=xzq_1^WD z^AGL6=TJFL4=jR~NI9o)T+i2X@1gjZ0Sf;4P!m3H0nwOZu@MI($Pupucf}i41jpyy zE3H!u_HOdtTy`eL)msUW*=cfi3gEd75!_bSfW86y0Hx7N>|W1=&)QqwzA;#UqOfYA z7%b5h_LcT?XnIWb*j-oU^HTKl+c&1~?iTvJrSW9Hdu-oioYEf-T)!88ppkhfpW#-j zD_^uA0YOt?uEK`Zzyh$XT5ympYgT6865Ydm#pmnK4XKm<&5}2$)DX)HxPP*2I)y4O zgE9vgEU0DpuWS7WN>SOpW`-0|g{+M7arD$t9cU>H3KJ_FIDSOq3#sxtOc0oxiWm{O z%)b5VJX;pkj1@Ek^t>uPh1Bx56dXX4-+px-ExF`Hr{atxs8FeOV{gQ^zYsCn=?N5D zS#^0jUucy+uQ=g(7Yh#bI62RFDVpqieJl0(ny<2H3_jdH-IG=Z-}BPVEWn)hB9gsL zK=USAS9yeK6zHyM)(Dk4>RLxRm*JPZgGg8MB`(R&#SPmGB0=yDh*|I$?91)J&tY4 z;*jMmq_4%`blYnt8;Y_@SAVO!S<&dxqwX*w8U|uQA3c)Qvr;r8OR-5PQS&f-15^TR zYe`ES)2Usc@7X0&eIYup%8e*ME`td9+Ts>sPvHse`Sa{$gV z1*w2=V^G5dh=7$};HIesz!AWD5r`Oce}U+ahhxMVgCDPV zH@nxnn{~8e^#TeIK;+tTR9Rhw=(Pt}j|s?V(Em08m%fU81IOcOz{cHWJO&6MFNFC3 zhU{?q245PCLU|ZU$rUjiBd3D-2BjVV&R8pm;K}I@1Jc)s(=HJDm_`7^Qg|kFrf(F| z0EaBsGJEpX`9c0OByhBmRXrN;v_ARj+)C$=1xzbVsr)bGpd}PCWmL;RVkDB z?AV8r9vwCSdQ-0sa~3%!hZMk~BlD{;N_vHE#X(n5x;yZyD+| z3HZ!ShRe3#o=^WF0};)tV8U#UL5CeVUH6)-ntmiP)(2FD*>n_pJ2?CK=`=`*wYg*`z-Z3 zfA(s&JW9{Y{lG?D2()Pe)a3U{A1GQ%%PMH zB0|XY*yzP)o)AjVc7z}yFbL7RDQqT;p@A9@Dy%<%uxgXhUm!p7;47LQ_Xv9_Irq@Z z8Dv4adps}-v+7iRiS#xIxDWMu;{QuTB!cNFH2`z254B{e3|37)ZJ~G^C%ea*Q2$$B+w2r-tWXxOtC}`?NP+ zXVZBljt)`r4kc=R$N={+36JkR+V|lTe#j&S59HY$<9pbN?3LmP6V+Kk@x72n!z0bm z#s-IM=p3^3V-q9Hk`%Gze|iAbhDF@|i%(;`;k$Jh}Y8mGZXQCp`N*Tucs}TB(?4Z*;YmCt=njSYx|W4tgwq=UxhxO znP_;hik;N1E+uV;nHBQ9&Vz)mJq({iD|oQ49*=T5>GlQZF~R#Cv3nBnqQ~d(fbJr`JJk6d$1uIS_dynn2OLW;5hGZ#~dci8=oF zrxg%;*S4+*RlKXRWIR6EKW;;85|qjZQI8lfq&^&~3(idl3{w*gcN@O1a2k}5;`)B` zG&X{2pf~_UOfTkg5t+gkFqjbVATl0qV$RAQY&N++-Zi;gv58DZU1 z2gVrO9cR#76ils5q7`P=k+0c=zVWzIz(i%~@tI*hG`z9>>Kv%a4Mt4>-zkc2gt`;l zxP9}n7O9XFX8rJ;ckjRiDSOsj2>7nzbHnW5eM|sEB-dp{vCS}JpyXLPh7|56c9w3$ zmL}H(`i1nX8#*7le+49D=xmwyM+5aje44_Yl;S>9*5}GhINNA72$}JbH+0RjIQy*W ztqn#HFd!AILV9`}yKUX>ZmvoDSc(}CEt?<|UK}?-AUJjOo>s$lktqx`bSHi19Pdeb zI`y{bp;V{x9Z?vUxK*zMnO5dxO=1XuQ zKfn05Y@z=fZe4PMn%n0W|3*Mzz$|Hn@VDQqml6Ilh@9NMF*rB)iXMgcHNPURy)Q!hMG8#ry&m4t5l2S3Rs-8^mJ;1_8?XC zmW}=$yL;?)hh<&~Mxr+sHL;PP&#T2K;C5!WuY7Xnz-le29IU}h=rP+<-N#w@acaA; z^A!`aTa2oY2T)mZYS{AzYIIx+IT!WOAnkrn)$f(|>Qt%f)u)>7>z0au9js9$v#Qma z8}6hH$E!@OSZ=f*_#4e0;Yz2Du->azmHQ6eXx2t+wozuDZkvFhve3$pbSr+z>!MaKL)j=Pe#Yp1e!w=RXqMt>J zO0E&sq0N{eQtiK? zND{!Qv1#NaV%p$i*lPaWOn2CbV`8rzhdd1`tl{OR8@ylB}&D(tX#qI|4Zlhma{@N=R z%a9DxOK}-=KGNxY|3wh;k`=-$n*}utcy7OyC0I9PXh8*{nKHToCVTBT7wM^h8SbYsWa9-7RpGnX$<;3kq>#8!+k(s z5&e+-*i*wzU)3VZx001&?v*y6XMxHv*{5(!-b?-UE>R`8G4~B%Ybr09I)a`W<_&~s zFw7$m@YDCJ+9z2`k=c-ia4q(M6ER1`|Dx}d1jhQGVN@Uh!B6@PX&Qed0rLXHG;U;5 zXDP<_{Ne9i!O{K(KZ%;UU8z;nLn6n&DuaPJZ^l={)jxwJ@D>->Od`Knj& zEY7a9)b8Nb$L{F%-0OP}Fo?7sS{fF4Mb>r^YL8k6@>4X74W6Y-=1L!8Jf~ z^(GT?!Ry-AB%nG2=K)tNI)%RrPJfVok&A1f`hN6ir~%kg@Qvzs%^glhQAma}Y8PlP z8B%qi!U5iKG90Xuhp`>$2w%G1+w|l_->Yw^h)cn=YHb+XfOOoXK2zXO8kU&-+{St; zu8g}vZ%2?p*Pqq!JXjZf&~eqJCyIMvF|?*H;Gs9zSut)zZC^}WVbK5&lo6``EaYnQZpNm4=j z!hnoAZ%<8JF#xkGtt_iGdO*C(hWSsU|MlZh_fj=k!I^3xdNfea@X(n&bjv`sd?q7y z?L}EA&+EX7+;wIH7nXGpIWx9hT4;$AgP1y=sd=^GLHIcrHHXldOWorywU|O;36s6o zNry_O!2I%ih%bP(S2`~tX?so+MElTB>BEAB4#3jE&ze$Sh+u-0$@Y@jpu|0=Ntpz& zha_cOWUQ41hpL6#R-@3C2xW-kbhC5{{4$58c|^4r+*~S)2C=9df|TcAr`96M+Zw8w zM#MP*1|SV_bRhZ`>Pl@>Ww}uE3Z(1;p(9Y&$%}b|-vU#+Vm( z4a$JLo!K-wb_rzA5LQB|nyLiHI>rxL{f=})}iH%{x~N~r_jRD`^8@F6?mbtj6*Z0q9Xcz#ynKxw)Iyeog|k0y*CleF*a;D;iQ7g z*zwN8NKl?u^%l#0BEE~NndsXVBxI{>ij3f2wN1g+9m)#`%}`pue;Evoh`UCTCIR%n zFch);Oj-{&lCZ!5*jE6isIGX8R`j!rG)`k}aRMct_(Fri(m zE8y}7T;m~OjF&_FRDc&Q7faFj>hZ}5m3=7$Vl6u__ftwm^(wHH_)r(yY{is5@Cokt z2^Lc!J|dHsYOB@n-qwvCcje0@;}8Oia=1&QcF(wjOxh>)pbCCQcDNe{J`MKCJESyu zNM$ec<|&i_hsQ7XYkq)le#RG7&7q)Lkmq>}rRkp*)tX+o!f`~QbsGOTI_ju)ySH-g zfyK!9dD@C1hf2XEl$_%ps|eh~tEyh>#dDWrdX^#;07`WL{#^@+STx5fo1}7z6}h<_bQBDn9BK{I~b83p5XcPo3Fll^7VQ4kS+~*LBmQVn_;)UH zjDT<^QGae~!7n{FXeuoBDlC!%TqW&xO-BbAi-HKNAPu{KwW)7E{g8W>QGH%O(9@`@h!dk^j4wbm!*@_Q%gnhi*;v#2gQ-)$M5p+$Sra^+0AuF4)7(OG&-d@xVA5;>>OTg5aGsy5S~NJ8(|8=R!#ij! z$_080AW?>bQEs%EiN0O58(8~d1Q?H_sICZd>MAh>O!v- z^V1B?ix9BC^u>R7fS`t<4UFoadf1qc&n#KxL&n&hC7IAY#nNJh4^4_lacq1Bef8GZ zccBe4`bEK(a2HCbKclv);bk^W&?RO#NJkzxXT-|fF#6!vNB)_OlveoWChyI;3p&1i z+Dx?g4eHL!0_Z^zCr+T#4zD-8I}=O%6qNkFeIwB@M|>|mbKMh~^8(;Lc@UOI66|#Kd>>K?i6qUBc z0*3WDlYvhYl~XVL=dSKRKDQAePd#oTpZ0XiYaT@Vh8nS{IxEUr`bY zQtuEkYD8l?J#laxhr$XjnAT{WV&ier8St(nmt{3?i1c+}aDG}u9NIHB>mPXfT_DBe z=7@ni-%+z&6Gq!6bf-hW(0CRC3-I(SJy5Fgysc}1s90Al0)XO-3S|Bs&}oH0hiuOG zm2)8eRoL-QB5h(lU=+w!E3DHz90xFwJ@w4+hl~Ukw>uV!4^vbu9eagRT&|qHnO;+S z+CUK!XX){@+lWI#?{B3LGgIi(PzlCadXi2%be(I_uuXCMW=*J&&OGncY;X({-OI@X zdx_rtS1a47Y@-|lP{xq`1clnac7|b}+fGg+y|16EN+JOPkanYb=F_LaL2)_W>B%_l zsS2GDer5hVf@9H5#tvbDmWlt-qu!A2b+zmSyDkgG8}H@y*u`Bf0$J%sUjjv`)-#|! zvS3Q99a(yEcIQ+_-NrkG1V*NZk&#=7wbk>+Cw;@3Rakz2`}ttCDbf;^V$f+3t^wqM zXh~exTx}{0kii`b-jsA4pY*3j73}JFuP~Yc*^x42m?-YLO~m1yj$>CQ8J&1{|EPOA zCX@6)8z7PIe-VcI(8oi#JR8XJfmDlFKdj?JokQ-$V^ZBA`_xwUEQNkakgxmtzQe%a zz8OS{IX$?O2z51b7wkZ& zFyi@vp|Vj_8a~)&@bUaLCjK^>+iQ20%reFYjOOutc6{OsBG_A zi@YjLb-g)XNAF(owJ37_L2CiG)|AU}&n!Zxp0*NJL~hDVWC~GdmlV$dFygF*jJT6K z#0$MmAOQ^&lp?$))2V+j{vtPJB%();bjOc!ei{81dj5FU%D?=7G0W3mVwR%=vm8b1 zs%#rA5@@>7CHM01jn-(nJFg+LNdMlX8nI{u4S8_V4_qz=>}^@yO3CYe3#Tv0L81GC zt0sC5ZM@gAY3&VTg0wQ9>_0ExbJhF>g~;CTl+}F2{_+o8p0n})50@u;a_8Bj1Uh&8 zbo0jV0?quKhw=OWz2zjf_g`Oq7?VS*jjg=*Lbvx>%+`O*wp|9y;as zIyCUxZUye2=geqR;*RB$@WRK37Vvy`bNgy{Q~si-Mi2Eb|G+7qCI2K-exEZVp|Mp~|{Jd*josI)?aZ@1j157MGxhqLi=j-#bxDE~%eYs^>$xO8~ z=ZFIOIg?o+=c@!rO#$3C*%CiYz?=AmLY(Va#PT z(tjVh#1aI@8^qT@eDJF;WOoO8C~k9J=K?Z4L3(@L; z;=9)vS<#{yvP`iIC*G+}`%Q)IgsplE3uluAQpe8+TRWoe1eHUy^arjRIBn1>grPiK zx_RZQ_0S{d|IQE+OyVRx`1?9VdJNp)cjiiLxfD4NdKtPI(H*bp z$_7~dZpP_A5em%n>Ag}9>CDSdja?NdIu=YtH=AW9A6}?ZU(^KlX1tCtoO zVR-0-h%d)0spF;F9vr=Ib1(}sPEWjyMY}RbmJ+pQ>xZ?9?@D?SpAI!kQu-bZ+mMF| z!B||LPnrlU;FQY2bAyLDg}jl`3!vfhi=X9{ge!nFjvh?LglY`7&u3dyUGAN5uo$5s z+3F#s;9;yTc}*c4HN)(m1w9hP)`di3HZeB0xj{)b9iN=^1oV;3aYbpDczHuUlbDD1 zkXxR)yLlJ6D zJ`Jc7J*!c5_|g2q>OtXnO{_Y6$%1h|zVE=@j=6E_VNN>s?1AOG_i((&#lCKb7(x?Z zXYW5i!E<*Hve4n4yN`{n5GJ>12O*oRSa_h6Bmn|(13@XpyH|=w^Ft%tn_o0yavM2g z3VIuLbNWBUU|S63e6q7RPL93YJd=rF(C3}lp8LIiVQoPd3rJD~wlFB9vq=nuevk#- zEum*nNf3GufJb-q`@PDmd8V3eVF=)w%CE<+d$qaO@a0GFWuI`?tEc{fy#bA9o_khi zQ-SSk&jhYR@&O}?es#$s-KN3o+A4!J+@{{v#4&o^=wpxl@{Y}b z>`!W2ZM3+TOGGH2#mIjCoxZ81b-fKQFrTl%1i~lBr<8%D+S=poF^N2i+dN+%lQ%ty zk*=8ZLrFD~JeXb13>jR>g14(f1qBY##(6AZltAjn7Yj%;CKYCS3XF^2F$wxpN9FMH zW&6#+{PY}HKqWO3GDpo7PSj>oY%RnZY3THCs#+|CWQ9|9r&thnq<=p;iblE#%*BH? zEa$0ZIoL}zr9a)hyJK;osUic3nGTZm;# zzCr^;Oip7s!r$TT2D0ojz(|c#HN2H<4GNrDSOUqS+)+Kik>xo;cZYo~NXK-)Yqa9q{WYHNEIsz{ zidNq|viWcxLMfn%7A_L<8xjZI_Xm%c*XFF1EoG?q&6>*DB*tvJ_gMpbOW$h^D77s; zPRI9M15*Y1XPm#ctnal3*6#Sgb1=E@8u(d~|JY+7Bp?)ln!`N1Ge_u?Wa)8oU>c22 z+d~07CV{rX8+PaV`F(otyXmouha(ty00?<%58G5atI>6|+rWIqA z{nl#Ryb){O3@%bd6eX7T2hN*El{Hj1-o{yLURIX|F3DeRcrC!S2I)7zCO`GYpIf31 zBpdbII0H52Ll;hT&L!U}NJlWO>~5kpD^PzKUQq=8)00QFZgJUh{kG)j}@P;*pg8lCN^cxez47jtNT};p_m{phD@;o3kK0Sd0 z`9u7pMZ9av^4Y~i8v%sU?XhU7U}V^9e{gi%zyP}Qb@RUrFP-zf(Xs06j1j!_Y4G~l z-Mjk@ow$I^7;E0~;kyMd{ue!ZcAlr2|>#`IytA=QP!GmI=BzSPvJ{50q+XVJ*} z#wcRBsiU9|ALV$u{;HhYk_c2f-(CrR$%>W{i{|I-l93Za0rkclQd|tHjU`usq5`P+ zw+d1qvm^y}x(jpM3ELr~b(L!khz_f{?>7Xw@_u^~uK{=lqfvT338rR@b5^*yE~Re$3^gZ!bR1tGW94 z|KPKaUAG@UH$LBwFWlsD3Cof}s*>axQb((7nm{t}7ggCd(FH?x$LInP-C+LXFCp(0 z#1Z+Cm*SF35>U+w+$fNW;u~_N+&?7sE~-KcVj`3ZQ`4r%71S~G0*5GodGNUi($EIr zE!r+Cm_lYTLIJsCHbdv-^N4+Fu=D4FEoG$|F<03%MJv$a++P?WuWsM?Ke7qHPGI5c zFq!dk(`*d`OmZ4el92PO3!vxGta|qfqYC1hW334*R(m~~0J>I13`hAiK0ZF!$;g~=#>`T)3+yI zy1iEm3OWJhOREhq{oa17cqYYirNzDH?`*0}>Eku05EHNK3W3$_CTH+mU1i5fdK{c6 zFMm7mHPaKYW;LtzCILaSHZOqLQ9u3Hoak*(Vl4Tb7h>(ZOC2i=q4yDb89h1&=)Hn( z{T6`}dQq0h$Y&{tIyoA>^*Kmwm)>;(?@exJJFdCn^(9vZSqjPkFGbU!6RoHF<<*tM zqQ1##44Ie6tk7Zk2D~5^;*FNOx4>dukYmXX-JwmP!qgVTq(46N?Rf{n$VqT2xk|$> z#sOk;dX{!_ZMRjCyNAcyPeTGslB?gj$t*TKha&b66Xe)WI}YSy9sSA>|N0b>YvJbt z|N73MpwQ2AL8X=yhh0;;^RuDOxk;U@3)Y#hRzsi=|1^a>OWl&NQ`$qQteothu3&j%K%SYPR+z*d6@~Ij=bx9+qdo|#x6n2mYWG{^yGX`Dm8*6a+UZ-1bkJ7o08M~ft#eQva)(0h;H+sEii z%7Qe-T?{33FFM$nHNi+6yRWNHg%n!}65CyL*s^kNm(#CL3Sx!%wWWOFH`H+@N%^hn zPEkGODIxbNNip_aCLRTJhjNbUI}8mT&&-2LR@iyL%i$Js!)q(^A~NyeNWu4W z>y=9#KsXuN&1ZlG2xR1-63KgaZkxpDx+q-R#Al4elb7Kx*_^GTb@lF*);j3y z%0(eSIjzY}Arvi7O3TC6__Ao@(*Q#($GW`(v_s&;WiWURH1)K7^Mw82o#Xvi7I)Va%+P zdoi=RQGWm}t50%cyt1^?$`%Yu$7jG0?75K9$%-qvt=8SPs)c3K5sooOPY_GTIscws zC*$Mm`HR!($v_MY?B#$>$CBw-#PDU`EawrcS;->S1c(K1X0|w}ty{wCy1H^7oJ|tok3=#@ZXhujLR;H#Fur5d zcwH6Q)r#3H5cIeLA`B5BmM*WVOV(tcUyy;490P;cSEfkO?llx+{rtku{R0zziH@Y9 z3LU1naRAH#&SpiR7h-o{1VV*S7jJ2s!8Ulsfp3qb#)PE1f!pyvs;k8Wi%1HB7(BD9)m% zTH7svHW}e@`R$vnVnxz*Ra|{aOOphx|JxSZBqW02 z*Yun2He0gICM>$IyO>M{x&Yvl)V7;f!DfH+T0kHLa#Ljm2kP-SHPAzhLyWwNKq49y zym8>a-jWQpO|sV&erqZ#x6URp)TV^~{7|zk;wA!VbzmMQ>BrVug^vF4;;SzWSteAm z)iX>S$dpokY*|$3QU8btG_~>$RHO%b_S0r8=F_ECnEZug42gQ*QG!Z7luiRRJ*@KE z$*CA7=alS@O|WGGEwh2~Ip`9WRj*0GFNG9lweKaq(eH^+w>zv0<8doNN?)|)u%sws<}xR0$T-Iw&@$o*5^ zDe}WT3r>nBFub#q0;|N`N8|QQAWR;1c5oaotW-Do+Mi@mM(?gR|+iT?ARYjIbT{Zlzf?|mu<8@J9V*Qy^N&^`DCSvsD5 z&)?K-m}tl6&Y?6QBTjtpQO9lMk<1P?+~ra7D<{WUvM2aqq8`&e2QtC!0(vFYCA+oB z6b=3;2zv}gJAzTuPJ-{7GFL)raO_vf3#yFSN^3UP{Lu2yCAMTFu-IpPK8upwuRW5f zl+LTgRx(h;CCJ7-*q+UI>#YJ7pVO^BbNOuk)O{N2;l}q-N}n8L$GZ=?dcU7Q1FPzu z29}J|!x|VGg!jpiV5hry#Vv{ zQUgIcIjR}kYmlbzIBUiOoHw@e4yF=POISTcRc$@zS;;o!tJa&q3B2GzkO^rsJ;Rrk zloI!a4yBtgDTV0$D7pW6Sco?mNXa%7Fv%KaI|Ud`{^bb-#JlgX-EXs`_yR%Bew*@kC||Fz|E&aoiljLp}U8ePP8!a>= z2Kc}5;4=`E_DFIH%YnSE>Q-7)+u~UvBy)7Ix;R%2R6Bm)+_A)m0TIws_ynvDP>1>y z9BiAl64|!SVuVu|T9%GVM3LT-ANj@TEE3kQ*byLiqbC3+8RnBZ8fZV_a>)yAXH%w> zLom02NwDN=UcWLRgk(>1lj+_h_Q0Z8Z89EDsC{d^9Vn+gDIh z%hd%~^1>^m24F3#ziBg5)V3PqbvJEtTh$8KYmYFL2w&7+>0?ZYFXx~0tL>*C$l!0ek3rx zm63jPwz%e59D8IBR5r7v-*`XhRpmU3Q865-y4enPX85+ffC<*aKB3qmg5W$E3y|j)<-WZ0fjc1-0DGL`rci`G3=p8gfY@>n8b8&@l-^S z+Y`4mNT2tBoG>e1bFHCI!vW0NnmKYv7hBlReQ@sb-i-l(5kc%BC7q>4^*TsfC(uVB zJW%m@kVbE43^toW;1XIgy(Mpua9{DpdJ>eW0uP+u@OCCClomS=I!0n{JyRo3d>TI9 ze5`mA(9&>%%Sun4m~om68n)SRR%dLXH5yvx%Kpm+0$_k!l!Ww?aBEJ`)GqKR5lRY-&E|IdLWHHHDP+ zqR7^KdsWprth&9_0Z&76Jf3#va^yL3d=>^R!_CWk$?4UUY}K$jQoFa;bBNK^{$X75 z!UI5_(-O~zSpI+@#Zvh>9(#Qer&##-Aip3%KK#gR;AS;^_8xy9Qhl;nTSUC^2WSq* z!mq@;VvsB&_E-tWF%$wawG8E!e~2EJ#r;xsP6lxr zc2otcAC`u5-ogJ2IznXzXUQ=RjFbXo^p|KHgiF-*5h6qN0U3nA*;~~l63SSs#i7>GI zfi`Y|A0*gtLG)<~ z6(^pyHnpJ?cwK=8_F@bDC2vbR<~k};Os_{1HRb!QzT3%9^*i2x~f6m6?@1T_CSS6sp- zZdkp0jdeR*{eUoEUEeI{%kxy2e;Gj~Y3FGhSOtBeNXO`H<=EfKg2RE@KR4)LDME*- zekY!@HS4)ZZ8$P^JW%|lP>svV(gzGPvmlx&nruon7VxBF&egVBADI*vq=PLnw@T}C zVS1I{skTC70LqvrzJvs3U3vtMZ$&S(Lzr{@4y` zLl4pmm1_%i&eu3t0mTi47KU=gCGzGTh;)MpIvnZNr|Iv1`@dVoBW(TefBT;S zGo$nqvj^BNtQf`7+D9l144uU>;7~g;9rF|nw(PZPxn(fUt+g&J3in-Aw^U5fuc3s@ z)^`rpHXCTOKz~gc&<(F8D=3yO>g@B2^J?ym;shY&@Yk;E7;2CF)-*xIyC5a9=~EZk+cYV$Bp$RjUSxDS{0Y(ks0Iko@Tsdltr2(b7G)zBtY!R?b;c}Ss-%73HuJB^uIKcn%Z2?dL@Y(Be&~1RM z!J2KV`XT!@*e@6t1)K3gUzK>kIJ4%?hjhMZO?r`2KJ_y?uSFx~tkCw2^0aI^I3P}E z{^2==$oC6Y_Ef|@qlkXx-nq5zO&i~}{#JvGb;#vWGNb|qYY}D_@mv&I#x|nCvhS%igHyJ`hOnmX^fu^y(=simot+}VKooMoA1R$Yo2aX?2~c(=>B zek4qmnnl*^-v)o&Le7g8={V%p`C#z&+RwD|;u!@9PMS{P74voYLd+f`Oo^>T0S@;y za&&S}zwfB^_+7oQ2QEwJ=oA$~YWj6?R5ne=6N-tMGB}=PjVTQB{#|XL4}fPAR?Mu9 zb&mG!BcgA?!O_#xrIeaZ(|Cv~in|IvEpWLERShMxgwS8!ibf5u=VEo&dipbT*S}h1 z{3U=otp-b%F2~}Hpv7vNnli4toJG?U$j1G;r=EtuG@2L$65vQ!mDJuhI2t5TY5h-jx*){w7QPoKuYGHPN9h2g(#O?@d82q2DpfL zklky(jM} z_C22q(qDZ?1xQ^W<+XG)LV9_8kTyC+ZWV)qx9l)ECzJ;<%UD2VW6Eso(=9s#(sHS3<-z%Ctsb8Bk}JiQsLSgW_=A3= z1(XJ$`P;PsaKHoPFA?qDUm$|gIV`Oqfp|z-!=-qT@Y6EGC-uGG!MYL~E88lmDkS5+ zg78>LLf{xq&@~`=4Gr)bzT8F)FU9qN+wS$HFhB(Kq6@?C;vbvY7K~PSkkJ%FqBw}) z*h@7{s45z+6)Y5L!o=bxwfI;gR?9n1CUiuVuLqaLiW%@_P^?JV6g!B%*^SI-XZgzw zlU7wQ1cD3Nd@q4WtpLEy@;uWQ6FeT2j(6l`_G5(Pf3yAkw}8~ar_&q>!vxGDQy!Ku zLdJ^0%sNV#tWm>L9m?l$(o&xTp&FzFnKP{qdpP6ZwLqG<6UdVU0dAnDUGYEAFp>eyVtuL{oK_Hc=9R0Zf`-|8(f7Ey*$sF8bbT3U~1(Lt1?x{d2U!^%uo$$ zq}4f%8+UT%tDLxACb^SGdYBQv)!NDKwYb)XnH!L?%$v$8 z`Yz7Pf+o8y29_lRNGd=GfR8{~wkF96AJ#j?++W}R?^SX&QEF!Z2C=fe zBQk-gX$(w)W@2~D!~BX2dSi+4z=n^Zre|QogIySy>?nft{@l^!UY8XGZOsNHi3|9< z#>s=?JX52vV#r{(HL(5P-!BjYW@f-IfNp_+pR((;f#=ri+@|}yxA~Y%PI~4en6w{Y zKl=9;%|YHZ2Cc#9S%wJ!3x=aRKFj;BjKTQpK}mr}%bd1K4!A^Oi03@BRV%h!;*}`4 zNj-5UJZ?d->;qi{-jDd?u=nHM-MADfZG>Q+l-8h(jWWfI=Y58T^ev56wjC?OU$v%Y zQZ1^w1XxueaxBqlqU089g zT434m`*0V#iwIgZ@2S!W#Oph%w9xvqYogs00)Fgh*h0$5bPQ}T-%&AoOTOljO@)df)U8i281J2*W}PTykz2#P!l@#lI%#Kairi>QiWNTJ4Z|L?o& zt>R&VTLS0{$^+}td!>^!e&E5~v$euvvLGT)g`D*)d}1SGgC3g71#SY?siUHR+?Kba z(*G+~b7yM=SjQ9v@tt$JFlce)N`tCNRQb=)r;+E$VIZRo+ZOEID~m52nt~(z4R^); z9a4+U8Pn%9AcINAz;$t80=A`aYji^{fyort!z1XZBfVeu547|ko%=UQ@~an!L=0zW zbEo|S=)Mf_h7B<2NPcC&jC#u^$D!CCxnB(o(wlV7kHRnedD%7>b0qoIsg|?TtM8VK05kBzDY9mW2M6uj~Zlem~%E z8mBS-Uus~$^QtT>`Mt_mnP*utPRDzvUJJ|NM~$0siwx*vFqgIx_!G&A)YT z_;1rC{ue8A{D<1AhL`y7*8EXcIZvkEzfax2bw8-#;(ucg_lFyI7S!UL*nG}6jnk>z z0fCeU=~$EW!fNfSX=*WR8%!^74@7bd1U3F@4&$kvB4wbObFl>iWzk_@qJmps;!4qQ zxG($aWQEBGIbxj#X6_%OjAe??D?L$DsH=OdsI*cKQI30s|97g7((&G-6iz=lO|JUV zZ#w7ZuCs6yo&!1=28Vv=WQetpb0Rt)TuP@G!O?lf=BwaUs1`u%lZ(Ydzx@EnQdDp1 z3S>u`T`?~YOv{up{0U329Va#u;4$c1B#NohT(kmaW|QOp|5EpUO>*2uzUWt}&`aBn zAzf9|T{9!!y}Oi2+mcODS0nG*_vqYObQfj@?rK!K{tVS*Fv4%=8*H47*j+yA)q2qr z--h}k{v~U8y;a`i!o6Il=RoQQv&>+eP}i&t}}50DLUNa2Q>2L z;(%kTtyFVQ55a{3?e@q%vKM8=S*r&U75fbHj)Mbmpfv5LC$rOohDoEi|L6+UR&{<( zuWy!ug7H&x3Dcws_Ef?yqRh7myS{^h%94n)GuD%jhpM*V0UHm43M@}}`K&wTmWs~d zpq$c73300^7L^-PqXVxEy{Q_#`YqZXLz1flhKmDXgQiMSJ9f(YoW!63{uDhUBB+|+ zhy9bC*?okD@3Nb=Nb;8su$(PpT@75mlbA`l_UGRDc0F^++M+7OhD(Ltf0}n2JBp)* zb(P+64ErsW{?d$AH}AGXv!8(?TMFzAf20e){WDAGm|Jfl>H;>5QVFMy3`OTno}EB! z-~Zx~{lz2qi$Li(j52_041J3H_h0=gKg~bcv@(BD7qZTui+Y)V^5VH=I-1K%r8VIS zD5P$Yu)qZEYBBl==ec9!Ue?()(Ynq^R?3jtH}P#}Tj0K8U~(dO)Yau#M*)zS57 z^vf@PA7O{6T^~MLFGk4V7RKii=3t^t|H9=)jZMD<|N66Ymn8)_kknKFTb9+!^Nnt= zWUI{6H>=qG#OF4REj{fCZw2owt<C{KWR~Ft>h$}%4(_UHuUP@Rlb8UgI z5Dm&Qa$Pm%W41ziWtDlZ<%>O&I)tv zQFge8Aa;7#r?D-pL`av%2E(Ijm^60(?a{2KMO9XKvBfMF>>x@9pcYmDxDrdYA5vaX ziiYIvYOF#7o<%Po9HJhpC8HhNvXL;xU7KsDQwqPPmOk5xNQbHvW)a#%q4pJL7J#vJ zY-0fTMODbPXs>9r1!e!gajqGWl)zi$Qg~UGLFph&_szF>+AGhjTVPI+^3N6zx)mRP zkj0#0)vUx~z#=3_F%a~t$fL}%4C!ueb?@lk4LA%Yq#pnxBmhDwtb(dEFp~CI{ zrD_*foT)0yP+}E6Knf}gPXrPUdpQD_)TO-n7HaQD^6n#W;k_qWX||1wmqP&#=qpxV zP^#@kQTKS>5KIDoY);BiOLMKH-Qxshd1_hqL~?QGU~!u}KR^m;A$=T1U_8uKZ_HDJ z+dRhHt+T@JY7|95TCfA`_+~9@MZ(J5dn@IoSZu=23(vrkWyiqJ&@4&qyn)H#+%Udq zj6OtXZTpk)4kLm3@kQHsQd_hAU8_Qla#|}Qv((17%BHj>4mhe|%U{XsMb|opBGg~) zHl;XfzE4 z>B}XQTsGE`!dhLkEIB>#-aqE>8@TXBK@Jg8th~bNHam1zmS~LW1Tap&g^`#K+*UgD z!B|VkBkkXNM!aMr?KugZR_{ny&@W~k;W%1(mohy zXx*QhZ(P~P4nwf$bcZ28cflxQhKq{zTZ;ufU&lBFFf**lSl1O4@?tms020uS*CztCLXywl~)yZ3LU=Xe}%u0e1o09(zX1On7{lh0-QQcCTw z=H_L6cAh_{8~U{pLE(|-Z^sfOMAzmg$gT9%kn)8_%<3$>at~C~TWGm2Qo_Ah)M5dn zG!Ml1sV)>?oRDYd(Q_9OFyCz~%FR~JdcW2NIgs=fukA8YtEHf1C^Fec=Hk5)(WNX^ z{qZd!fM8~~ot@9lPlB@&6-5?3=pYI~g~~o0kGw1h zd6wF8v-tv}VzePgqi0-|-VNyechRe=?sVCin-9sdKhsTDOHgsD6_j3BF@2>6a=Spn ziAYa-U7#N__4O>X8i-@cyM^HDlbCd4()_CKeGJD$pwYf5B|~z0%2=}xnd#7MSa362 zV5PP#)dQ{}FNL2SpA2;@&`_(ccqQr!^WMp8a|bqWcTv56TX$S+dVBYfwt~HTAvCb0 ziwjw95MYbgYcrWuXB_i#gZ0ZfQfzrEK`!(+vUWSYSpo0gT9jZ&re?F)5UCg1Y^>K( z6My~>Z{<>zg)Mw)1+o9Xe=E=#(sHiK-Sf&&^{UB5`BH2eM*@*$D51wu^DHoPC2NAk zAz1=XCG`4&;1AT;yXdS19cNQ?0>H&ByHSx)5nYFWGUjiKK?k~iHr$wHaeiP_7c{7RDVkz5bY3_%( z!EKALvDhY|L-k)8N&Pq`SO2vUuNR9uHCXGxT0i1SB-3J&z zx60#y?^X5m5>iB_5aBK_3nN7 z2?L6Fp9X>OxY2AcL~+4fC)eQUeug6;=IqkZOMz%krRg8(6zXixcT~L~bKcE6Dv$vi z@jq?xma7);6K8`tgi&A=L7-I;c1iGokTHn=+;b)hFyE3eS*bqy8VnbhT)-pnSZRoj zSawe9psFSZMon~Q;M`luS6i`s1|Dj>;!%D>g=)=aHLt9;2`4Gd&tlkr#~()s5r6;P zZg~Jm@ic06*<(ZywL2THWFyw4(CAL@8nAzo{4pk|mpg9lA=8TD1CE9{&eQ4fuw}qi z<9_1#)}QHXRaZ#ser~mQvJ|dtFX~pTq9>@NgZma{6MluEniz^PAhG(?MQY5qLZuu= z`Rx^FJQ61mxq+fjM(FC^o^QlzZ8~+Np(wO+^KUg~P%PEwGhmNU*OXk7-=MDTYAtGC zpdQ2JF3Ho=nJ>Dy=I9q&R3mC+y20$n`|kjyC9E3h(s&EzAItLncgx2?_f0Dn%e;{5 z_G)|o$8c+AVaTDnY)mADbkz~`-TOq;x zpVHX&UIn*5g}W@s>`*iAvltWqpzU15P@G|(xt6kMazPYrR|;3ex~__DA#=eBIN@Fj z*TID-%^fg3g-Yt=fW;DT`|h=GJ+KZE>9ZjPkuUa zzi&Kl30dgWx?6OpJciLPNWQCZ3ljP7wSw~7kmoX)0XCjK3~45VS=g(!swQ}FGK0-) zyjjw%0krQyeYmz~l$aT`zelTB<6<`Z%ev~;b{Y~4IAeWEbXj+nMSfRP0Mh}yym|A@ z0W~9jD5p;sEpOfdzXilHb^iqkTWs@Eil*JZ4?_%4N8(lVK)W#nX_|F~L?EA?{~=$L z6-02%E05%~$w?f0q#~|PO5}ca{)cEO*5>x|!&_G+({tm;`|9^&`o5?I$i;l-790O2z;Y54x9KfUtD*uR`QGEUI0=8%r@{x8 ze^@GAFn96PV<#MUwZFcvEPDgXP@s9NzUSFD>q<-AD!ie4hnvt-vdAlKW!K^LZt_k8 zlnYYVScW%Jn~}yzX11GBwC3!GP>!vl^C_Tcg5M$?u|Roxp_Vt_%4mXiOc?zc zC}h5C>`%NX9Mv$`D*>ur^abzE;+VYUo@kwRp(U$t-*YN`o96D$IG6xr(12iG+@oLu z9$c@*O=?zK+x6O1{;42FC}e8xs!E#H%pDJ(`~lWxx@`c`eX7Lu%zTDdY!%*h0UZ1N?Y#4QfQU@l-}|@hXEc$alyQoQSK_b=wTMx|Y&1u9z4a{U zQ=Re6&sJ}-AUZ%B-~Sa$!TVmR{k{zpOKrSuNsehPHQe$WjtmwJ;^9bFFPWa5xDFr* z>y`9u1+F`t=SV|Ie)3QS^!<1IX6i)En4y61U9CirCh!K}BfVDjB~}w}87^J@K{vfy zmjr!;>p$=tRC#IK8pL#4oL_nhRrc7?QPj#+L)6BSxcQ@{C`9cN)TAX^gThB^v6BuO zu+uD7qRGvoz-!O2+1b!A72SMWEm;`Vo71n)++`BQ9U3BF0jdbmdJKF=tHTmP%z2%v5@59~U$9o$?$iqwkQhe+jd!O}V8oU_c$oC-k=#O(d)yIBAM6mZkqJ7D+ z-$Ll6I7p-K8HGPda1lEvHYyB{I_q|sffSh7Rw%-_%^Jo7MAnlfs0|J?N@zPL>fPTaN@ibF-bu@gJ~@&)E#Qf4}P8t+w@L zep<*2_?>aP=--nqJ-MfEoJ_*hJ;rgR*xI7 z!Rb9AP_22Jy_vuI^motl3^lc%zBvEm6Z^LpU*=Cg{qor_zk2cIAM-4p#`X)*KR^59 zlj!ODzy81P|N6Q4wg41eTjdu@7x`Ms`l(z?T}ZvyfHozt?}vZ40fw&ZG;$w24w|y5 znobw8_E}id+%)l0XH;VmiIRvZ*@+=n5(z+l)vIA*B}^wVPzE-vZfRJwv~eX%(3*m) zOE27z#b;ShQk_(7Fc>iYE3sHqH8O5jxfFG&%wWah3Icm5dzGbArZYt`;Uh#W5p-!T z%M$o=z_S+GiCnIC`DDVWuibY=#wW10o6Os~G?%@|i2H$Y$|~p^!7|mA^Fv zj3LbWXZ;e2UfD{ZY50$Uy#QBnQHSF=8#jRBvV+A*EdcbUuoclDmy0~bNQQ1JjFS8d zt408qT=-m+CDlZsGCYF77G+oD*>QX_vYrXU=<8fVHuXYUJEJeW91R58nY00Xn^^2I z_Mqx$LimLVDf_tqbT302jvn{Fx~kfzs?HPlUp=*b=Yp1HuNXg`jlH%LYG*Pkin_72D5zHNh$pTg{kTh!z9pcj?ON`@ z&JX%d&UW>^7uvn(^-m{B0R?r$@QJ-4FKgIauY_(;3WuJGay5RVz1ZRTXb=rA9!@P2 zf%ZYKyLCJ4E*Z`yb#lipf~Pm^Z#w92SoU$3VQyV7>G7`hvUN?aL<|1<+zS7J12kNX z@vhb<_EeuR{TTG!fjowQ>uOui7NWTpZ7XX%>^?r-)jfhDt@82hJzIvaaapR7!Ec{h zsFR!b^{cefT#cmv9#a3z3uT&0=!HQ&)2Vd?ED|{+Pq77H^z!#QWc^vsZtwACcNniT zCKxST%VJ0UiSn~$Ek&{MuhWJ5W`Z{-rEU3Nl1zJks1vR}ie8D9o<6)OHc^~}Up2>7 zE0@3pYJAvH9VV_E);At*dwIgHcvhvWTj!~lmrpbAxp~09y&KSVjm!5uf(xieq9EL= zW--s*W;AV0deyAK z&~I+O*GN2MoO#p+Ymqo5Zr&IKmRMg)|;toD&5_Di#ON{RU#`tcJK{cEZya&S*}ASDI;3(40X}Fi+_J@?w=<$Eexw1b=L`^4Tl_sq3$xN>AUs>+A6hN|wz9 zzLfmYKuusF|744WvJ|kN_&0QwKZfs_t5IxcFiR7vP$A7Qb2~!JZSR}^VtfY2G377V zO`avLZX;+T8r-CpSo`>jha19PAYVaokQA?#`togjG7E2P^fl7N25$!`^&u4j(LXk1@;jB zp^b2oW)7~|XPHLlF>H`iX8&r7cAB|1(g_boO`EILN)}4AvfQxRZj>ox75&G6?6(YC zOlmFKR7)Fd$45~>XlI3 zav`r}e;r2?*VKd(9E0T(&C)p!_;l7|`MY`N*pgRj6nhD;3!@jY+@4#ou@7T42@^Mx zHIRf)XWaUwY}5xZ{$b9r>D|sS{N_E5FnE3ERiWfK4~(VhathdDHCG5I2Ah9<^Zhk3 z;1XXi8s=|jH{Z(Z8iZp#V;6BMV*u1=L4IwOhC!>B$@4S1XR}ofIB;#@Jd>e!Y@D`w zoiRRN%dPylIs(;S0BJy$zn=JZ0An54cq!4CMz)N)?Q9l*{8`aLXrqoc2VUFsNvB!x_6Z zL6C~}sYRt*`AwTADd3Y4iRopmSA~}%=@uQ}x(2l=(3x7;Npg|}J-(B?$|l#RUTjCCes{ZUm8~^tdaz0MdwUr~tH=6Qme2trVisKt-%0U#jV<0eqk4c#l^__h zufhpjq>--SLP2kg)7r&X=H!-F2Awsht80N-uEgp$rs-Nz$p>oqF$9x&NnVO}ag~dv z=~k91h2o1&m4pP2%t;H+>*B(=68Mw~m1oC**#gxN*ESxcj~+quJ|<|>O$2_zNI2bB zj)tlvOEm~&YWB4KeRkey_qvw0_>{RSvR$eY%DE8Mh`Dh?@gG3^iMgFp?fgJ@nA>1y? zCE^pz;(is>ar2(&$la#w4vQ00s#dC~j+&eAUoCFlEzO&Dkg2_ZWRfQP7gKt@;f$2|B$8+Jk*1tzPuVHS^cUf^s9PeHrTYe{-=Y%V4{O~XW;OH%Y{FgP{!CzR#ptIb*#gMYWRls{jIrj_;2;THUJ zs(*CUJ(x#_$_RJsHdd^x(lsN)-za-mJ9x_4dIQRd$blJElyWL^}<6??@@E?>7PNeu^I z9vhJ-h{=_#6)?ih8>&X7Xye(8O7rA(ZR@T8NYYfBu4RG5_uo+{f6#iTdHmnqbf9g( zqW#{c0BqT>yVJlXInwMlgUy438#gyMuyou^fBk|gNmfc^Eiuo2_(N9`U0wKN1TER4 zBs%e2UHh?$cwUmR1Hz3El83y6+S%@&J>-!PSZ}qd1(7zxR%o|&xP)B@RT^)&?sThG z(ubyA)&g;b_zE%A=R7?DdgBSU8At^5LsQrlOWXBMMbBoq@*=P+fieR&Zi3SRfs?B2 z>c`P19aUGVXmSoc{N(ZD$3OKq!v?SO6wgAHO?~rD(-a}UT8|0q5--zOEMfB?FnEOT zRPJu?^g@u?bbzDEU*_p)mT?RV15IIy!Ckk!Kk(-~Jx!CX^AEK3euaJgktOT<`XkO1`SnNG z$=4qpMPGk}J^BAmWB=dyEj$mt{%B3N7p%gCd! zj+e(NvhojazJCQSx?--BlPxL>^*EYf>k|jkH@#27s&GG?hhoB{fjca?Fc;G}-IEEk zU%9mx4JLLO{VWnqq?^d>gjgB)^+%H<_wj4-X4^+a_`w}{G(YV<@`HBI+3Cmv@Xt8d zKgX`9w{E0ct^Cri8Fi9Puz!Rc4$P?XO*Rg>&x$a9w3>X z^!R3%YTGoymf`m}hivRU7f`>vlI7Z!!nIAQ=6RMNN6J^`UlS;z5}TEXHli-xf48!t zIej5s*79gYwTnp5X>uB4jI}?xJjMXQ$WZK8Y_F-N-p4d>#&+US6&z~Ay+Fa52!RIl zXo6MMe}Fc|MZ7(=EJdq~L1zIp!5v0k&C5UD@%N4|LZ~n;m2CzFHYnlUy%_GtL7Z%R zb02_!7!9N{XSx%?H8{zW@yCRxf#O{vI zW_yU;fp8X*bxeW|_#H2tPbZ@B!AJb3<{QWd|Ec+=$u9(!2l@)I`7 zNpvCRwOR^Z5B6gZp(pE?8dDLWlkQSP{E>{g$CAoE^pg7fnxESj;OTuA;D;SBCNw@f zfAKkK@N41~8BnG;m>0#aFe?OmZU4&YSo`y2Hno^c(?_V`Kf;8fdxHE&(ZrJbTjmva z7LNO-K-u?k^z}!^GIOQc=IO&446tM*5q$s;wY!0?s%t8tSpjF^m1LxgoccUZGZ3fT zPF+1BavLK5%pH{C3~&%_EUl$GJX=8OLqPadbo0HIj?Ljy?-&eqGly!2Oze>OI9Xgf zL4Hr~A8c36)P+0(rNDu@3k${#?vKdwYRrT;aMhKqT8F+&gExvw4?LW_GLBXq=z66dU0k zLn^BAxL-_^eRZW8@9kL0@XNBATka3onXC00SjL%pTb3QW0)Hx{v!hUu1KcQWmeWzR zwNU*+)Js;RWO_x;5ZbluRgfU5b__N|qwKBPsNZWcsx^ys^?l5*|UTWpaSAb zm62>&kHpsjnpL)x*y6hzTe1l6CB4%Ot)FF66rdu9o}utP6fT5vQ<#AMxU7m!cWz1t zW?6Xj9)=w6GDP;Q=rO|$`)~YZ+rr2hnaO;EDL%%l*osC6o&Bej7!gdbde!#6m0)4!)GH*ii#Q;!x*!WP$iA zTmV13?X=mP9VXE1W%!1hckb24I6Xi(-^%>Yov`SUr#%4Q3^<0LLAjh(3yDeW$I*EY z{DIZhpXx$>lQ-&83m_ARiA0bqtNv8BEGbWqQ(rOepsY*Fh@n=mAokgpy|Qi@eX7IBVN@RDSN_;Zg8MkUFKo(86jM79mcTB;8?qmXal~F;AwVr*2S1P5g@sEF>g&Ud~XO=2KZ*8a!r2ykRJ!Q|w|J>ranA6m2r@DZQmVgiz`mRjxW)S649;=u5bo|I{ zrN=QhsMd06Wv+w57~S_~k9f^a;T%cS+lQ^RA868I5b5Gt<6|{MVF6K-Cvh)KM-@aM zjNDfdAE_ep9h$2hD`~W+vbolz z=Mh@8%o}B{M?%Z0YXHL7N?lMVwjL`zPU9h#>nIYyrXxJ-*|p_WV|+;Nrs`dNZ-k>| za$PqJMwXac)@aWpYsFw?8=(QxRlT0`iet%Wk9 z&5%*$6IGXL*~;kVe>q&(Z(*BhT{7Rcu&$l7rzrhyj0;9I`ODf|PIO+2_6h}xw8g)A z(uXXC>k8*?z`NkmX2=nOD{)VH|DD$gW-AMr%gO?ZE6tk)fx%5xcPp<;{i(hdr7Fy& zpcV_`q$CMU)~|hOF%h`&ud89&;0lb)#eEm_xrVD8p_iwqbfohQUbS?r(0Yh zcE2LWzKSIK0lOi&N)WX*lW{HCONlon9VGBZ6omE}_{t94j|XX>(=40rJD^`gT&}=o zs*o|-CpXC&x9%5LLTNk`w0y~fTYa|w1#a+33es@cO@x9^ZTq}gqj9adP>H>KZU689O+E_Za!T112?L^J`q|5UDPxuE;TEP<@` z9rJ#_H&1@*k$&NL?#|R3V*cqsqSGW zGp$9w?4>M;Pu6UL=CyGop`;brR(T`W0tiAt&@yjdR(UH|Yjb-I?#W+WNuZ23j(00A z^Yr8l$&w?rRM8J_#k{OED`YWdu@sn9o?KR&mB8oYZtdAH9Y=t2_(x#`O z_qyxfI@%_eR0rV$X#7!pcK!$Vjr8R7EJQpzjvqeTpPm1~2`cibZv6Fiuf9(Em(s&J z;}N3Ux?*xIJtmAjJG;FX3`L%Djgp;R*iU^wpPfIg7Uod)*%9DJ$LKm;LsEMeIK|i+ z{3x3I)9d(6WL%!3XhL6&;L5|V0-Mq?qPv)j?bME}ZBe@kz(aW0ono+u^)%t9nB}RL zD^j__CPx?<%s5KXv@AAk6M7FJaKf%OD8CGtIE#`qhI?8C z@}VEXu20+iW!04htrO2pqAqgP=2yn>v#o|Z7n1?{_Oc!+Wz;L>X(<}9fhlk%pr{fK~}6kDfS*-ASCnaMxdj?G&U z!C$a@+eN^#2&9$1z9krav(Mz40U_^rF#CV|%fBOfwf7Jxg?PYYU|eWDKf9J|JA^DRC7W8C&C?^k^{72GE34{y`;5fXp$X$tfw%?DyZQr%6+`sJ z4j(HAWRZ(pS2~xgb-M}R2`7lv#RH@V?`Bg_!E|H2<;4Hq>E=hG6+M&e5$2)^AsLp% zeV8}KSaI4D(_^P5WOVzSVn`ge7VS#7SHW$9zIQxq2EYI|Upp92WB*d78B~e-gVxnf z9u1QNa>#E=Zdy3U9vI*cPH%dT>uW&Ks=36d`Jt09JVEyR-^lt(=u6xp9O=*Gv-3YZ z=6RzLGr7yM2Vv@=mYXB{lCcb#-#(+?_7JOS7N?G4$@Gd!|7HyIiw`&s^3Qt9LT`K` z1Z3es;XOu12zoyf<5f^VzxL?2c)Nq*B|rlK;WbwD0*3|78q(pU5kxz zaNXPGD`o7J2I5)^jdLD+rDbB18iV9gkI|ElH_&=Cj$Lf328G2VY_=O>H{4 zpiA&x+gxH-##+=j-_pZAcyn{R5)w@Y*eSEOI4ZkvYw}mZHcPSE}^fyYAs4Jy}K$*B_z{Q8h)Pbn{AFQGxRpPPB*r zoYNMbrBFw~&_7Qla#@(~cdNA(U$dGpb=5Q;3NWuaU4ZH$iflZA@IThODa(Y4n>-C0 zZd{bt`R%8lKh3lF82ET@{^LvYC%Ji9)kV|Sppnf&tfddiH+e$(3|d^Z!jssPAh2TG zj33^*K)uBecxm>%P;}@bf2OZhU1?IH1nAOJ zRYun`dQrDxWxg&i+8o@X>Z1R;swVF=cuuA*TG#Mh3B+n<2>~YLpZl+<;4*X} zfS4n}oGKdhre!{_rC9a=vq*`Q0Pu%Iu`sQQyx=2gXlSZ64QO~!VS96VQPtACcGb%~ zNx`vu0XQrWMP`i?=!zxSN4oOxN<2fF?&3mygDICrih6N{5N1rpVAzY&6xrFaRavAg z15bNEDXFN1hQO0ol!EKG%_KV%W?)QJ77}Gs?FNUO>x?T5o?(`Ny2`UxL9m$~DX9g(~yt~-0Na_ZJS0|gOvoR^}xvZnd@ zp>Mfqig%kmbD(yDUH+V`wqEIQ2I>95iNs<3;jN zi0lLjZ2DiAI2M)W{dX>8z{y26RY?iyn|Hdrd1su(rPvg*MN{;pY$)Q0m7?-OeFNcq zhz=%ZS)GQuJT|@~fdR35)xrK1$>qnGf5nEKPM*@E%ZCu{{Ly4c__$-;c#XVY08kxf zohh3=7fVD+Hr-m*RBMf3+`4I*Cx`PQJW7@2mO{CDzFEH+-14djEKs#o%eXw)!h zq*j;GLKYaosSSM>>Xq}G1-dppE^GZbde$sG$&{N>Kbt!yvyat-d*KTXC0i;#Kax!_ zhikjL7J`p^jGRu4SWLRDSddYI7~a ztLSr4FUg6vtOTOLX#jza7?56lvH>K6hi}=Ahy)N|QO`*n6)1TMI5W*#IE{UVVOjm~ zwktbAJ21Nhr6<@(QgAyY6=x zqp(^sCGPCROMESDK>Btm*8+OM$ZI_E&=dQl*@i`k#{qXbgM{-3dTZnJuFXY0m#u{u z+u)(n7qYHp!9lwx@pN{JC7|;^Vhx4l18i?0u0*6ZETZhd!z{G-9P}k@&Any7lzLHh zx|KEX>Vh1J_h?qWgr3Nf94RHHkL(2)BAX@2x;!64tM_iVz7l<;#M{-KIZ8s8i?!c2 z7yon=+YXm-hlA@EvhOJ2*8I8_GNAzTCO#50AR_CdkaNH@4_@AU54CA{IFWK3iCH|C ztq2g!ROZECux8hsSH%VsVizO2W&V#WC|tQ?3qlrtV_3;nJPP8Ry*yedJ!X!Aqn=_H z@HLy`gdJ~YiY`Hm1S`k7ugR7 z`=o~ITbuN7GFuxl2!uJ?IG>*n%k~-lh#>=BV#}IAK4h9t6Nu409i!^=@Xv@3;fOG( z$fDs2L}}kk`iZz*%o+!dq|f=0z308|!3kZmC}j1J1wCoAizN9) zDK7H_6*&8sE4K;oeKI%;=VDXSHQQYtY6PzY1&naa^z0+V+`uZ;usHlzj6Airu5bVm zeRgi&Gy;a^$&|5OxY5iz^bJQW^>$(i8pBKro-Fi4OJ>dVf3%_Vey#9Ux?_nLLeaOOeI=0phGj62tObjft*&T=mB1FacVu~)&!d3LcD;MT7Hfvd3 zSQvGjC&$x~S+!1;V{KV=-cEW|o#WNxIVQI5=!gI6bQi6A;=Bbxlr7>_Q4@ z#yvyNx_yf!q>Q?SB=9xp#t;)A1NN@O60qPwimyKyPs@*sCNU3wHn4FETR!b9aE)@; zB%gu3y|V)+Z#q7C+iGRGdAlYsIdt+=lV7Q#klNg=#Rz@cNIE&49-oZN>qtJCHfTrx zz+*9&f#A0@sB5G>sIaVVgeQ+ab}@w%k@@|@g05NrFyT%lRBq8HKbsJ9FBJt1Q1Z^I zmmro4I}7ZR_VjW!l07alrEMZ9OQzG2$r>bbYubQE#4Ek_lg>E89Fvv*T^&?pU`+))9F0Xj}6W%L_0(eaG$mQ}az=QZh~V zGpQ_Y-g$d~QRu*~=`Wu(mG=4{1Z^ntlXzcCaB{pYgLWtEH0;^N-#$#)JKQUjNYweC zyUOf6Hq4t$p~mca$USFs_S`+S43<&*{<~UR__$R{g`LI*axL7#hkjUnQj9TuS-2n^ zBsfxUg&EVw7V_dl`VfF)k^HdHm%{oe^jxy|%s5m3K>ruyb?|z~=3B00p&m!}%cHF~ z9bhIdy3$_}=<#PUAk}yD6?&i2vB+;q(R&x~Yy@m?Ul2*(r%&@V&(h@dHnWTm{sr(~ z{g(KzHl+;LyJP~aP0MwgVwOIU2??9@MV->#F4bjf)0Y>s->I;FqW5BkL( z>Z)p=s=9$=_d=-Btce6`;q7O(Js9R{#F8G_KhlBNa;GeX?b#J9!AI9JFU4G%-r8lv^G;RY zpo3ZzBPipxGB>L;OgsJaF1HM`CnSGh9d|4nx7Kamf2Un_`WWDtmwV$lD$;?0lkjX7 zPhDN0(}siEpJ4En{dxkLLr(|avXD1(`qWH3-Hd znGF?aBFBW)PH9Am6*kC2HG+=_tgvaRFd{jmCPP@1b>mvCTTBmM)>XG= zWX`S<=(6tCgL4R*q2mY{r+ZxE zBcSRnMvpkC7KOIzoLteO>>7pZ3sj6NfafPOsAYW8^IXL~!ohXl?{s$PVu@T$UhlaV{@B7)tx)730i=Dg+p9e_Mkayt}rpC1t{p~OR0digc$+98t z_oEA*Am0sFe}}aMmr$wAc2ndaIcD{7XhT!FmAXI|DNoW3TbCww zn*>Po3CZRFz=E1lH8o`;_+lk)zJ+T9tU!=z!*%{twh~fk6BSJ^s(K-NOP(%^Fz``q8p1u@DxZrcJn;bE9|)I`pdY<$T-tgDQMlizn{UB|kSn+%;U@y3x7Qc&DT-I|*Ol0a0BwC=?66#AS$6LjbsYX)4u<1+2<#VZvIU#%(>FQGg*;xGNVueoY8xm5#qZnt#l*OJY494K%qWUG0Bc-9p(lkzUMFvGQ+%D?p&_$7U87LJ_)vR$&%xsz$nryg#SD7q&UEbLFivV-B+4q zDLA!Dm(sb1j8QSoQ@p60gEXZp#Y9p;UW%CVKY&wRFl9@#^ibWB5*^B2I$v!yo3o?# zF1U`277CdGH!TTYdI9OW60qZG2B*>w|J5-k)^d3_!H_JA4Gzs3SBe@5-##`k%?Gs9 zEVbi&Rhbhh125sBj5ha)*T-+nT9SaZ+cF9k_&I33#C*M&y9IDYoR8W`U@V)2*uGw9 zfsL*h7rWa%h`T=%Sn=$nW#6ES)J#-Hyd=SV?+#$r_8+R61{9;+Xg9(q)7$ z01DnuM5Fv9cv=XDBfwM`rno-GOC^$+qXS8(FAH2aLCQ*i*)OZY*C;SRLUHrGE^gk{ zHdx>qb^d+BJZ(Y3YSy{WMyZ-Xh}gRHprqEjQ1ENY?fvy`6b!1fv(v#PgY{~${~g?3 zsu~L=IK_4{gG!Kd3>4RlR=bc`1OnIO0`;(TA*fvlz7k5EB64C5v3w`AC;!|D&v84as>^KM;uDZ4qOoGoV5>OyF z5ag5fQPheR7B*PeQuY3A-4XMVT&l8=zLbhs{1$Q@WGEno^9*{ z)_RseroY$>aB2rdo{|iT`VK~Dax2i^PR!Xs71yAq0qey40keFnG4DmU!eBYFQ`lqFW{$DB zX_8v!?lA(ioU*Uyz`{MPP_Ja83f$TYg>EHnq_}x{_Fs40J3MUBy?@(zs3au~UqJ3P zH+PPb@wx}fl})(Pf!vg71m{V72JncBs($?VvC=lh5bo}+T=w$(tZrvmgL6m2pzhQe zh8_?ZR$V-#Vb_%^d@+;R_~z)cJ7wJ~2~dP3(sYB1#2OaD?$3yKf0#-*gmtz2H>nhMxq#iv8YF+=x8=gD_5># z^G^C0wkRuo3G5vJ*GWMU=ym)iL_V_IyjT^O{lsP`fv8ldY7ACjMJg1kHg@XwJ8@2e znZTM=SHimAK@(002;mla+k{1K7>Gyq9pB&Naq+lqeBoVBC<=&bR;6%_S6#dAsCjJC z%)QzC7(I;*`Xi5~C#MP8*5vc?I_k%5)Bh3-lWtn?ze9|kvu54ROSQe+7mB0-XO0WG(fu#%Z*F9bf%;7o8PGN5Gbt{%;^(?Ep(*kl9 zRSV}Mattw*-xro}hS&MT9LGq4huNk^D<7)=>8X$$Ilz74(S(i6=8ixuZbQ&9~rxgFDgpRy+}*Svo(w zZ3!#E04X6_T-|(&r9_NzwKbPgKvUQl_KS6!3&&YPK?5KhbAR;w>x(P707?eP=*vO@ zS}4n42v5ybT|;((6G;FGDCvp;7z+MTdbbMn`&+CeWif}S?b^QPw0U;YybXoW z{>y#al-ZAvT%1UiNbRj!yF-h_$5?PKrBv#s$A84Q%#H0QTWz=1-FE7txtaVW4#q5N z7S4N}zOhM2mklS*8LRQuMOUJQxJhHSkykPjrO!=8g-P2LGewH^5Ul?{rZDIsO@5zmbK-ayR+03|WAjtS~k^Il})kE!%NY z>pS3nw~UWYO}|cHi1b*fASB6Wh|x!}Xf~Y|>JHZ`6lv-$C%0s5V0CBT#%ra%O{a{1 zoxfC*{+0_a^`RY^la(TT<`CfBru%ivF!lhOcpwA(Ymw%&IP=g*)-^tTOgnEgX#Zz% zuS0xnvL56BzuWPh+S zK^y11_vTd+NZ1P(_&u!K^E(dEteP(E6kHReuh=&vk3 z)fd&TR4H#cv$y&oHgxfv#e#10N<5_AIUaroCSF0+CYSq$8_lU^@dm))aBgvlQn z0uCIT506x+(U{R<1$L;-&AVko(@6V`3we5yXmycq{dx4OPN z9zDc~)WU3wTNc2CzOw7dj}|50?xh_(gy34DrHxisb>6MaVn7xiyACJjJLZPrMnI5( zRq+7^b1mz+Xw?dTagIr=KI6dXP=5dXY5wH-Q!|Wn9MCL5wh22DcWe6n^QUG&Po6)u zgE^2_z+0nr6SA%C&3Hm$}-tzaeBh;kEN_X zHs67h>;;6#n>7| zo-zTTIa$>p+?HQTEo-VcI|}I2(L55z?mY!r}?FzLUj*;m33X!d3pl+z^~&sKR4IXVSNDx z3#i2C$b11V8gQW6JLe_xLm6Oe4E-}b28O=dY-!>8&Jx0;4rBjmjY1imLv3^Ar(~QbT01^H z-g~CD(G%evVT5kYYEd3!tJ5BaYAPVq13R<*XR)s`3HNo81%Ww^t{J(lAf=vFPEs zn1iv{N@>r8u&x^9_ZF-+I8X8mX3?BAQ0%DlWf!dnco`1yWamT^;pB4&- zKjd&9;JGqlfN)$0Y`N3MV1~Mt7TaN0ma5Mv{$ciuqk}e#`%K8#3Qr$q9zNL8K5)3h zHGTY01AN%U{9t>P8RK-X_m=ZQ{detD_nLv>!<{|+!0-Q<-AEjG_yOFP_+;x@L?Gh7 zkNxSe!H?`nCnt9q=Z9Lbw-0BqD3N0B@B!R^;q{4L9>@zi+ebnoV0pn*#@5HgxUT47 zZF^EgjPOB6KX`y==>v}UUPD6c^+P?!ll_i~6$w}Th;P|};~c(nv-^+i{;wa!bVdhr zXK&SvZa-fYQ1Uy5_@f^M_nVKg1)M&}M0}`KeE4{W3;FngM)+W>xoJiFaEsdbY^VQ6 zujc#B$Jh<*Y@hjnZvQ)1_2J_lF7EiDMtZN+%_YD7+{p$(F(8Zx+;fcR2@9CNaO@#X zRd-g>O962)r)vr{wZG``lL#w`W($^&PlKktR9jfI?Aw8OGR~$s88j6$1qJz@C*}n4 z<*ozJ&;*#Lun|h)@`IZCZ8|VWw+;j`lYb1%S#bfWy$E5_V88?V>N|46FpEa@yABcV zN(NK5tzwW$*qMUYIDhrl3=EjXUN1}x#1FBf9B2EyXGlxxIQ|wcg^z#%Pnm?n160zDq>e7ctJ3mH%Ql+)Y~pHEtr)6502r(V3Og^6Os!DjQddo@ z7O;SfE2;}wJY|1&OcRcp9+I7a$V0-mC%G1_y3R913QQh7V$J%3tdYjulJZCy5Zd>| zaq}*!+OCEaXb8QF{zcCD51)MT=>%unY9G~{*}qS!`$Z{Q^HU2(TIAUop1$;fzy)o- zit6bx@oQ;dNvfMgRm=P=j?-CBNF8O<9mue3qnmHlt4oU=^eu|A%#~hLbuAaI=in*$ zfeU?F&dswKirN20w18az7BWk4QGnxYkNQ-Dfzn@sT>(GQwqhkG_+n2zgMdVP> zJB;=D&AZj|=AGu4bFhRd>uea(u0(1MXHAZFcq0a51V+--3RFq2}2%0#JWp(Si0uX=dp7eny$e zM6eSC^+8&@=xV3B*fZDzd2gMqX&=;UZ7GC4;*TvfdA}L-{mD9SECqR<#mK4P;GMqm z55#zTj~?G$Ey`ZOq-B|?EZPTNFm6RyFuB=bvYSUqvODx*060zbcZ_Z5 z)s2%X+JDJ`Gq92kz_K!=m-(cNR4H4v>Aw}=mpX8a*+MMipe>0N`6c?g=_x>CZvM^q zmC^!a(Bmo5FEuY>VRkqI&uM$QQ%4s{mPH=BVjqXuQyMP7dQn!e+KImxC9beX;gQ8a zRK4NevKI=Jr7Bb~I*$?@Wl0-jacc79G)~XFo;2rQvZS@>V23!tQ3kX;Uq-bK=BBg?I;D_GBOrVNG8-Kd{8?Opc1thE0Uu7X*Esh?w(aI`a>2#4aB? zX@+C#>ED~JD-_wczabqMF18=;GPOgR8lQ}otz(}9XZUY_`QJ+a?Jxh%`I4KeWGbEg zAWkXwn8&T!QC?aojguKn?3KE_LYnsUbo->SIba$=rjf%Gq{i&-Rr`ogNaZw!JJvS4 z{2jC}aqLj7W2j-r+0CelU@Jm?3{rCQpv@_k7NHeA+^{E=ZmeQBgtu52)~qVazQo=I zTOr|iBC(Rh)=4O!(OR3kl3r|xVh2F}O`aVyl~7jiVCCMSbhw0~0$b8_W$p^1X3o0C zU*b8b(Xu-kW@RJsYZ(IC_qC0>UrATfahqAH$>);PJ{CY%TT9pVX}{~}RaKY5X+rzb znr@_BVp%H8im}6`Q&rphyT5cn5XN415_|;; zb#Y;iWB6>*)wR@SuT93bc|ONZ_>vfE7)OeZE=0X7?In^*VeJ>7@WF4@{S#~Vh`Y7f zf?&YeaW*j0{(8sH>^y1tQbOc+Y=zMz!V)u`JkxN<&`@Y$*~9=V>~jSs`z^IyW_GRL za=SJBtyL@8v|_b}J0M$pECw)mO)gYv-t>6eR8bO?l)r*BV>lKORL}bFAvq<)bfZG7 zE?Lxsx^Pv`OcZhCfM%n|XrX5Vg@j1po0!`}c08L7h7~v=OE#2{1r%1{@G&s*YjZC# zZ!<)YMZQq=qANw6U)ExMmH%?Hfa@K3otSQp^DG6fBxsIPSep~#=6ij4^RA(|^<^zC z)G{)yckXq-sP|L+X4J}Nty&7FeH^`x-*`)#JWC;>1ph{HW%rSd-Xn>Pv+Wpu@JVOg z4@hOK>G!OC%g656ecfH&CcE!_Bbh=#-L^Xkv*3-VJmJjlyDlpIYl?L^$8Rc*2%lph zdg@l*BL=k^Q7^eNP?Bc8(2I#)*)P~T3xOn@T31Zd-@A_Q|O8lL_(a2y@Rh}`VPlu zBmM8vY1pUP0P2zE>1;MS%2CmTPqyPbQi66IYC&7k#1l_C0fgWhnz~?MIy=b@vQm56 zdN^P)W$P}Z@I=fQRw@*J*vtM3%r^%Nke;BA2;6VPhE%F~E$U7FRlUKFZMvXT^L%0E zJl=aWzcDXmv{bEFm+mIRoaWZt1+;o)hT=|#e~c!jnon4*y=Umq_Uz>m3adE7+T19h zxh3(}eI{mnxHeL338N~fzgbkPJUva)z2{=`yIq4Ss?}sHU$WPrNDP^8Vu0krkwOSo zwbJa_AY|e693a9*%XVH?i=`RS=k8A-i!NM zk8yloOOwtRN9%ruv!a+n;4oZTcdN0z@@B$TZGte0d5he^S&GH7$%WO^>VvUP;^X7d zjq*~qJ}iz-xbY)y-u>{_;?_p7R&=9q+3K)>Tj-6Gu*F=b4_qBG#Aa-W>k#D7`;YzX;l|#4 zh_SmZpLQ7BR=|@5)o)wrZ-1gRa{j}w(mb6eSx*g`%h-p`4lvvUp+Em77XQ0%O4x5k zJiyybC4(}Oc;4F}JMFi23zs6ehzbf9fEEXOIH;5~jJ3mRAc}r6F*!vb@xeCUymR0y z?W64=0b?T#=D8c+XydP4BQJa7vx8=lnS#z{8{>i2%(_}A4A9OaIwpki{Mier``-NThUSlInYbN}%hVbz9AR7g%Z|snT zz}85j6VDhQ!C^0IPurEJOviFTY#fe$=k_T*PEYol(jFa8@%}re9=HDt+ZhuedT;zJ zKi%{iI|1C|(Wj07S@bij{mB}<$fMh{Hz=Gb%f#X)X|~rS!DmN<3Bl)%%YVzP*u3J{ zytG$!)m>iU#k^?&dRbk#dHU+gy!y@X<2;>CM=yh*?9!2Ex^)U6wgwyC_cbyW;uUCQ zR-;e4p>%cs=XV%+Z$*HoZv2C84u6u38RBf)5Ix1~ekqL&@iDzySCAcoSvkEk zlx#0#t*-5HWsddf@vT<>!o6O8k$IT-`?r!|hf3ocyugcN5>e>&Z3 zZ+DgtSHEf`7MQgTyTeU^oc&y0RJEj}th;)pvuyO?;*AM+OTA#xx6xCPcc36_Nq0ZI zE~F>v+0M&cIog#+pZm^iEcez(Qg(XVocedo#_M(#4Gn`z)kXf<`5&C9WZTwi-nDXz zbBECw=Y^&j{{z9e5W@^tV>rwtMB|4WA_PYFa5j0ZztEN5tg5b|cg4|lk*_z( z+BQXK?|2omuC!XY*MNCUx3?@QzUl}*)?Lr+ge11wRoMGBp_ zsLC?0u4VnQR;~2nZ~SJMI2BYyBB9ar9)_sHgysKybem%R<$KJVFvZhr{nBWbCgP*<+(#v1-jw z-@{Fx*USxSJ{{(>R7;e^1tdjS@#$+NFusS7^)=Pju;xx<-rS~IMzUQ=TSl{`)d#4O zOntZTR35rW(wZ8O1o3H1__*Q8n0w;35#voaP>?`PSE~`NL$Ue1tvgA|U#N%`N=jEX zDpTgA%9CS{F*L>uWW3=b+f$Q18W)m3iYBJ#$&r=(IwD!Dqftp}nNB9Tziny_kuUj&2;;n{Hydbl3((%Ef< z1)fR@iwv=J{YRlFxYq=XQT?3VajXyL3LHG7A?aj%=Rw@X8?a2iqb|(DEW>QWysp`&`WcQ6`O~=Y5}{)kGL@J zHxXkyWp=-jKlB1Ue1JpVvy=M{>D~+V!|bAF`^*k}11;?2zhf7@?_`WD*YxE6zd3&(I9F`ucpcEy8sD;|#*8yd_ z%kc5S8;2nA9b#|Db5tXPLPPh7e*L}Bn1+XN+XnBS8LE?hVs(}Dc%mFC%b=Rs7ZDcn zR+}J9!42DPN0MM^)Ge?IW1wkuf+pEwJ20e`ty-26?a-IfV%Dp=Fw?FF;_b-{ut!g7 za}{2WNV1!GhthMbq;aV?=)#I|K(rc1F%(IoY@2Im((}Vx zsexJGv-3YhqJUCXV~wxlbv#_q<)T`xfSV(C^&crjYH$8cOBAVKx>N8I6k)PJb9)nZ z_z17jl%aA2lsdFfLA*vXh4cZ*^HF;SHW3TAi zYGt-aQI?y0zTu==Sq7_x5oP%TOC44CL$`EMK}6d!G_2FX7zC;Eyb@(gx9Ts)6pw85 zno^s)-K+KP1x2>wY zliv23|060XC>g!SN<^Eg^o0%#kj}s4_}VD+hYUsCD*>WVH0kQ9RU0!)(Y2^y(xdl( z?e)}Y4CK;JAsUNF(3^KZyu}>K;~#N8%^vydo9}B`s_|Jlitaky{kgO}ECT$e>7{5FSC%{@&oXeh-v9L#DiQ(t1(lka4G*^# zM-SBtj}LleRW80SV9RO(zK#sSAGTLBzm|8S@wEjwFSqp#q(EAlrbWGh1V^n3$@mP< zW(iaxe|7V2F#iu93KH$TNhxoZO&5xzuLoLPP z3ijlMnYXhU5;TgHjR!B>iVlK-DnlYQlZ$qLVVB0aCjck$Kr{B`N77JIl zQI@%=>*}R=LNS54DNn09cx-v70{RHXv4O{6u!A}r{;S`v$TNN}Jd zv8lz)w_C;+SQT1yHj6W}lfPIxdUn&?^5)%2@<#Q6?ar%W14BxK#>wpFkX~p{gI?nN zERJK2LGZAPaM#$3H8oi6u-G9fxn+4bql7ZSd+F4(Y&}LTPnWCjB{mtWsDKo z^;&1(#1JVy!dbUv2B;67{Nuwpi(|Nr{n6ZW%my>BUWu*!sI5~3hYZZ`@o++DGZ_BZ zkqb4gXhE@r$}zDNwI9Q4!VJqz!?pE6-*z9n|4|W1T^ZXX!Win70U) z$3xrURt29%{TaH&Qb*2#K0L+Z@Kwh9fYSbarh+6v=zt70Bq;cW=o6rQtP1Dbqmv0) zb|^+FZr;_N;swJ#a|dtyGN21Fuj+*;ON*Rchz3um=A|+|uV2y`D*fQ!?P@NF$;@o> z6l#*dM4*0n3)7*{XX;ap3=L5_|5M{Rxy{@B_)kq(|GpeH(X z+2D|})UG+0+QV9Br$d&&6|C0-KPGmz58GFLHhEJafo9%TRf+uO zZLO{q#9=I}#F!-a3DW4HM7i)@9X_gs^17Wvoo-hOKPSEb+`|X)HedpbHfBCb6=G>D zsZ7mB+i8agTl*4sJm@2hf3N`b%M6?M@@Zn^;_t2W4J}7Rg4kWa{e~T-xO3osMq4z4`tXQiG6edZoJ+ zxturO>$xmTxojoU`xf1ZAuxWglZzL4b-k}?DRUWM9&D7V>CktrFC7C4+KN~1JK0-Z zfJk(0Lp5*+U!X>LTW~+ z=+NdCMD&veIYetxc2}!Q0J2d=?x$=HH+D+{^9v-_&KH#~P(eA)vuWZh8J5)#Z@aRK zFb-b`{xlGpi!D)ET8vRLBrmdUHs+n4#-x=GVKURw>*NhJ55w4$LF3^(o95l_Mt8pq zuT%d({}+W@naiH~Kt#Xw$o_P!8}h~7N^dKK8FzJ=CwZD@h^yzFf;Vo{wvU23)2=Qj zKoen>oZLOmT8a`pL)c1<2~AhFuw}EFL|n6%vcCCNE{!kPZ}iBxX5G!VAEQBGA3HYa zMWtI|HrGp=RLIh4I-Kb38}rZ-N9GESg|%pW{tq$@SO9(EE6uYc2^Pge8GA&;fX0nb zR7mmx24I|tMz(pDq{p`nW9J}jA{c|ugCUUA1l7mhdmPs6-e}B{1%$`LJ&wR|KB5O( zR9nWvp3LcwGopJvqYEqo0;)))Rz%GO+2o6^X{#0d^vkL;_ll)juK{>oRm*N|_HkY1 zS(nP{JFCegAK&CT~z17{pw5s8*VTKsU~Tv^v@CF)Jy zNKr4YaHovTb1_ciC&p)AsFE7mRApxgr5*E>x$2DXz%7HI4EPv?_E3xyyrN>uwQSl@ z3T%W|;eY(k+0$S2F(Zd|J7j{`P5R(H{4bxKe-&V7_BD}^VRvA6fPon!n}Ab#QA=c; zHaRo57wu=wRc+A$-cO$W$9u33C(aJf zclOZ3{!owD(FhKxa2$PsZ2*Y30I!##Qr3%o&1Y~_;2&7_h-k1hYJfos%->U7Js!tI zCtC`fX15ELZ&`!mXz2KX(9ri9{K)P)JG<*RAO2lCP*>i(Pg#5y^Y8!8+)Gt{$60r} z*Y*(7b^fUP;e!au!%leia6`TS^Sq0w{En9@J4kx{M|*hpk(4*jY<6iJ0Af)T{NPr+#Di7x5?A$a79+o~$Z>Ae*i6 z-o5iMZV^?PC$sX;`TP4}g4#Qqp?7wg-)A2Bhx+(kjXizf9q~X%yxsES!?%1?u>5y* z#J}CN44w4pLr=>)JMiy5_Wrq_J>+Qbb^N1bb(F%=?5a z;Ply>aN`+=JW!wiK!a&VR6V1#&tYYGyyo=}NA5`=@_Oh&nii7F&e{?J1vJ{GvI9Q; z&l>PT-~!r~g3#8gD2i1UH?MxmiJ1I7OvG1WC7a|6wRRwF6Uyy<`x&av@~SL+{B(Hz z&+Uc&sX@vf$Eo*svC@ad-}ynae3k-@%!N1)Z|L~J?^7l3=4|v|+ zK3fOf0H@g0P?umyVe)^v`{CnORh>Qz$&IZFpvhbW}kZN-} z9Yamb*T@li^U9UUYbb@FT8fZ`)2S-kifi7Hp`diHBP;+!kSoL;0Vvd7ACRs)4kH@w zr!jeBUgYZr!F!fON7(^Ss0T3@FmSG-Qe64xR$Yox>LyqDYy$aXqsNUI9VPaEUcmpZ z8#78SWiooawEr3aIl!$sz{J_D(UosrQW7_U1)np-23D`;kt_Lfh-_Bl9Ps~6GS3IB2Mx*EdtT-vo7lR+b04^#;O&aGb7P|PICNDdCSGn-8^MkuO?h-3m) z&etOp2X6~mUH5uA% z;EZMWiHC4-l-~BcB5QrYpM%qwu*Db;m819!1)TZp1a{#cvARd|%LG3;M}SZzWBtB) zMd{;PtFBy1ps6ZbUt_k4%I>uXlz+^I=Ep+`W@~AT047e*q!@SwFza{{PjPl8mknWY z%^53hlShVtp{8MSeoM9!zDe!Hb-4fQ>Kyx8JQ?rUX@Bq2AbzTxvM9z=Qw6~g_>Fz zpF6FA$lQqL^$)d2*Xv9Q>yZdZ?lAcIt%Jul?=pBOYNac^Q?Z^+#&b9j=#3?wPy;pU z{<~gOS5y)o@w!?K05lZ94C+y|u4v(&-~4D`%6wae66d-y4e;}vRrMODWrkVSUt<{xScTij#MtfTUU=ULW~K7UWaE%^ zN>$9YEYwmoGEXzcUPtL*;f!>Jf}Kp!&~gM3!dVXpGJ>Bc9tYqAzz={#fun?kq5zJM z!!_?AqVcCIwaG~{I?s#hN}HyZVjWbj${~{~owu9#SF4ZNFaF1NMZp}<_X$(bBQ0oI zNUgS|OspLTrM&z}S`)@fE-Ji`)J^a_>4t>5IFsaB0l&ZSjI9``u?Lut_Aa#d$T5C(|8 z^GP3|01^_1x^T^dfq~5XLA%b!5pixIH&Pc;FSmILQ9S~Cm>tgo7Owl!%9;O&LufVG zGKQeF2Og&?^!3U?ZD%&hedTl>DLg-B$Md_0>O~0@^M_06eetkxtd4K;Qmp{lS1iCA zBlB;5|Czh3@InH|18SJ5J=*PI@@3nU0y$W|`Tb|fxmqZ)EUYye71xrVAV}m$w9q7X zu8NP6Z&Orl5r_*^m3j!k(=T>6!znvYoKeX6(V~jlthd~xU{K8<_Qki?2XEUgd`vS1X z8exqMEW}POh0DglZx;^oZ&P|^D+6*gS@5^_?;(Vt^Z8+&`z`}YK-}R5X=;E79js(f z?>srE$0KQSKyXFNSvgLcJexrgFG@nIwUH|YB6+X6_oEXVD2aq;r*!tWGxEJxW3Pw+ zNmZ!jAtFxhAR?g~NkZwhzu>`QUjK0IeqA}tKdBEL3oPv|$2}$aoFz3wXeWk6ik~nt zcxb(A-sI;`|A0_SgpY%b0Yla2Pyc|pc&^k3ZH}Q<1RY`axI;(?1Gh6mF$2X|mD?@Z z0s6~7i!U=}5EPgg(IAIEpUqCZmJ5DF?|^6|9*td`Kg9G!_elw^nSe8j;y-rOVFH0( z9SIZQ3o9d!&{=>tw(FEYmj|0IT+6DCC&odho|o0ak%5s$LF>_ZzZOitP&#sZ&1RVU zOQ*;uEpw?aRb3&I+iV6| zRsV>TlHXhP`_0R>Kqv0&A0WSIO@P`|&Wd<=HF@CrP65Bp5DV1YG9alNaAbklwanLI zA9*4wO?3G^k~%? zl^q*i8NVg3GZoI`@86JV;x1@bIXs&IP_FaNI%D2rvbi#Os9HvY4R({dR`CK!pb2&} zcMTY4NriC`0{mH37UXiUhmrF%Icwo$?oO4h^B=i=KX8HBm8MAmbM!jf+brLS?{>-(2Eir z)b@J<2(~P&jcm52k!$+arC6@=S}xn#0Putz&Xo%(xH3Xfs%C3HKQbI#Bk|r^mWu8d z#elmnjbq+)C{V_ptHh_l@Vse2_TAtI*)^UH-Y&!RzN+dKtj%f1#0{|Cy7j%e1GXWX zZ^sn6vwhd~2Nk>g3LJwLu=5HGXLKCV8S0xBP+#u>Y@9D~sT`>K^cEv*X?saxcolr$ zPydjg2@LePFHVs47^44^c|n$64O|=czdttMQUMr^KbaRFCGgV+e=;wA7Qi}ct4vx& z?My6cwIVRjOY)+`XT)mY6dBkSYT$raw`HR?b|1o#>P|5r*IY?F_M+$whDiLO2Cz(z zKje>m_z&>w2yI$Cqwvy2Fo$a84%`8GtSSk3el=o*=5h3h-$M?Us_z0OG{vh6wY+c~ z6(+a(CPX{XL+d;!g}elY7fqpF!mZj4IF9{2>`VeCKyOjs!GEFTSdA`NqaV-V0+H9(_ z1aKNSQDD`p20-!P>mc3z_DE zMo+d{tku%}Wd8)M{OY3BtEcK(j&@F)zZgPhK&A6dDH?nCI=#2jdE;qe!`0$n){x*) zZgV?rv)+w@!`~``c%=`HRILs!+jWVsr3mZg4*XqH^^K9gHlM;*>rWKSz*o2w_DmK% z(VsK-!|hWCYY11(P^Wnz&qP}`d8bSNJ4$4yZt7RuEh8Ts+|IS~0JCru&vyKuztdj< z&i@m)hN4Mx7t*h5aSrBDNCxxT=o$THx*Wnt1!Z3ceOKo0PuQBhu;!ljiCF*FB4!#+ zHlnslg6ONYOR<8tzJe#%L8!w~c!W3{z+gRsjvl+AIGz^&-$Uc>Uc?SPw=>du*GTca z`n2?M_=|j&0s;_86FuNWx}b}01nrJsl(u0vH83&#iHNWDUFzG;p}_||^b-yZYzAmQ z;d7F8(fOcvk^ATU&$na321n=??ft$Ygl+z0Ui_Ng1_d)u=a}p_3crlJK@)<$QMAzG zg0b%jYn_}#`#&r00DHIYo~Y!#n;+}PY%#yzoe zPOmrfgiNP7qRvB?!LEfUG3^fG{zm?}g_8yK`>-54DFAp{|LXVu^y|E+pl0l!ex0{k zy~t;TpW+O27c4G^Rvu*um`b;ON5V(R$aXMF-YY8eKCLqNZ`)CCa((Xi)rExU?4mtC zmvwF~ATA9*%YIB&Y12pnGeAry%$0*g68|U~k=Sct zoIQoyG#B9_^S+oK!wl&Dk87sA;n@rPpK$9}t<{I~8N#OhM%5}#Mz=CC2;*ok0#Rr*bvoh< z{on&^-J_s4{MK}+6f!%0PEMF*KVQp^xr^R4Kr|X4I~4{qcwu^-xT zuk5*Gr2o72>y=%>P+zga5{C7@iQ#_L&fEYlS9DUXgPXNCIi*4pAf;I@G92hGjFMum z-*4bJHR>AUwc99gGRVhi<-hr{ym_U4PY|7MuBzO~jR20AK8qXlh&(w=dMWT_f4#1ag|Ryo$N3SBhd< zj^1g>a{^hGz|>yoSf;hprVIIjIFvg<7SAZZmV~)KZ1K}Z)Sg8+grs5Um%$PGqko z`NA$z(N}rW#*$@LLCe&fr7a#exv%<$+v{rAQr*RMGm3$Ys+4bDMz0{h=*V^c*t3`2e2*!mA%Ui;6{MeABg@+aj95IwGzO7; zVHZdOEQU`gUy}2TD{4%i=cQ_7ElR#_FiAsQ%fyIPOb4QO`gsX3XvthEyT9QKisU)i{m%&vpq z{3seusgQ4lPQOdp=elyYsP`#rzpkU9!)hw3)*g9(ZmUKbHk-%b@W1&tb=D--tk+J@ zkQAE$g^Y3rZkzFKDf#DyYL-To{ZG3s)wOi#t@fK>QHLkrUsh#RV|gX+a*()Iq#4h~ zKuY*~saJMpXus283bX4u&Yb>P7^kMbVCNlcTiWvn(&vu3MYvZ*%cxq)*py`Axz%n8B&&gTocp$D$w~v8SY}M zi3Cgz(7+(H<%gPqMl~&+^pFWe3lg)!m0nhL?QZ|Dmx=o6ylV0+pN?lCa~RUo9A_S(Qk8%e z)~GW$_$jR!w$1Aweoi}E>W`8UHao)OKxoH0)0fm1DcvcWIk(#2q_B0y(Y!vF0DA6-$F-$NM&EVK+{0kXUv8LnMvA;5-xuP!% zi@_&O^@>Yw?M>$mbtu=HW*fSl?d=v=!op!&g@YI_Wv57R$N;A!irm*p{>ga%!T7{p zo$i;%_Lq=i$1DDWYKTO2Puq>Gf!iS5m>XGBs#n!EMnM&!*GLeN%qroA<9LIsv-fCr zd~8o6=!7|fFuu<<722*=&4fEO(qcH#GqNpvpII@a{Iwgf4RZMcfCBts3yKSVM^dus zA~kjbGbnvBI=%|2lwPQYmZ(2YsT?FO!dlBn0$qJZWGf%*E$2i9ECZ-Up-jP2EUA#W z!%aCOaL<@u(gz+~`d>st>1Pk_r$`8Pe_HeOaH%oxpeuIB(CQ0*0!Q%^j_%zP+lg$a zFqV20NipikZA}x98EIstwf@)2fU7nT93P|Yq)W^{WL{+C1rAKRjun_xXbR}Ny=pt! z>g7dU>8dq$GeS8b6@R0i({2i&dA}f@W=JCO&NS~_*q4o9r)=U%#$mTWRt)8;zIh4x zwk6CW;d0<3qzm2r_*O{@0g0XYI3NqLt=o00+YbF9`5Lym5idd^`4~zPp5FX;4Xv#e zl!8Axdi1q8&&PD78GCn>QkW)Bb5WnSXc9ubMJE)Sg$e|B-yG+&EDM&9hs5NYLpl)4W2&MD% z7~H6@|Jq??1#AqZm&%@OII>bDZ(fQ;S!w2?h>ktw_ESqH^ zznfLejE5^`9AlF!fC*VyxWj|b;pE7ZRB-F)VdpaqIY$=^&mpe5uTR>swI_?}-bLD;On$AQ>pGNIjZolUWdf z+-OJ12!CY?a=Sfmt$9akPp2CPt3ZAtdwVXb3JR88$scGQHCdRc54vU(Mo>omYni~? zPA|r5Gu9!JPaq$cqN>FCOHSP_-kR45AbRM+v;Nkt4#IntqdEg+)NJ)K2VKLCC{#cb z_G@-BgPL|D^{TEgs~V4T=Tq+4V~~?Ao2u#Rtb+pV?b^=KAK#+4-vx&y*v%1}(50-m zu)T;`9KP5SRpi^M&DZb|G4aG6{GNx-f591o=V2EkPh2M6yj+Ei=XO0BbAeT;`yqwZ zBWTs#yh_$LuQ-i2q(s_1qSf^;X=vYQ1ueMN#IJ?_s>Wn=P7{4MMT1Lw@TE$!8T z`a(Jd&mz5-yw|?Zyh)cbaX)-<^J)zTeDdBUe*}$HVfQ6@m-uE0Cl{%;L6%OW2kfHi zDtHx@&Od!R?QS7qRTy1}8uj};o4{xI^yzfOaQW<_s8-&|SlAhMl8jKpGn~2(?V98% zHr+7#IlS16y3;PZ)2Lws`cd1BfXjc+`15QE_)x=x!ns(fMDR^Z!+|3n_DdrU8Gd*^ znt|fx)ti@y3F-#Ds0zQQ&lsFd7(1j8fh`(-O^+eaJyO8`yoDNeZ728=W*zKLgtZCA zr|k{YT*Q%p`x!9oWMQq)b7A*r-drdHgpwHACMxcx`zK}=RA+g0DeJNlg~_uMa3$XS z8(M}($)cs(VC^D~0BFthib8py@i(aaCfl1=pwgl};ofJ)l6SBcLc8+s_021%HeGOl z6{N00L%)5 z!ECb~B_sP#NT&g+W-ZHz-g{+59FQg22j~iib)`@lDy^zS2xgcca8_1VxzM8A8fEfq z3R8g|V#mHmWX(zdQ4MNyUHi2YTyURV0_ zr%qaMALEL*SBJO~3QCZnjEu3h!?U6f~qRnxum{%8-kv`&jrOMLY%SF4CP9-MC%SCks$a!%VK{`3<%a6>< zK2QL2zjl_|h?*V6z7|ZS!2+h;Qte$SW{8Q z2dc{1Sp8*FR|~Nyw?MF^3)Fxi4W3W$?Vd_Ly#vsfv~c#WuZ1b39s|VIky3YJUl1A?ah0q5niQQyQDxC_{7>Em<=nM>%P*? zeLtH5CGRKXlm_kWDEQH1k2}plDf=2KguTxtSogQdhr29dWPlSl*oHGy*CMIx)nsp! zA%Z&I`{UcYSEk3YH=Dvj?e!RQxO&}q!v&N6t!@;{k_hwb5%&)pb=Ts`JY=+ zBH{-SN|34)2jTM!Ybrlc^-!F$A>v|E;Es};?>n*j0?&^)TM;jdMywN244D+}Or<(T z2c_#kO9>t?7# z%{cVck<$c5t~MXEsW6V(H13nQx*28MCItG9*MBWn15?XtUm%)jcSJlzb;RpUI!kjQ zwNq~Gg0OS9R)&$idcS3!Vs7|X_{7LwAolf<;|OVWqRLgwJPx(+g!Q-<5##s3cO=aQ zw!r64|B#Qt*JF?C;C*T?z?~t(xslBP;%)T#(?4KN0;)EFwYu;=I)4I$ARfP?cd4QM zBPlxpxV3M%@@V|T`=ci~LMZKEEgOOV&x_x2SSXiniiaVn0SLncc~f3#pajfxa$*JX zSF}$%MYl{9r^mVFXHQF%=&=R1gMb8NRVzfYDsdOs2?0;Z z$HXU}XD5?z^f2w75#Z|%K@lr=ttdA$=3qh{%&FP2^3i}5oyFMK1TgPzZKn8=aV*dmjJbIlgjd10Fz?$M??ql0g zd)yu^?PH?e=Gl}ocXkdKq0QZ}K$GUGQWyp}o$vi6K~sV94f(>_{U$0HDWyJdE*Q=L zWMP*j`*a_JIs!4gyxHa_$eQ~}%K&e8tZa|QsiAT@`krLS_(G8Oy49uKwCE9lF@FrL zq8hd18}c(ys|H1`@zO*$5Z9;O^(htjG3}LwUME`GPtoOFD6_FfpSyu;I2ZD44!6q) z+GWZ-fC{;^%B3@VlF`3nbC0RH|2}>4^Y`BO_cC9$nEgptFIB{kbX%4#Ijz-XiHwFW z=E8g_7L&j z>81YaOmq1{8367I*bk5yp_&%cUlB2XQ$zJ+NR)}4?jFhk4bz+NRd9tm@JC3KyLM?6 z1zoBfAJUxWR9UQzJ zl3gf(#f6z3E-jVL3CO*5T3?utw-{@!v{B1^CAU{qUG(E@P35%4aO6=Ov0(30>h=jT z*!jPY5~0OKBkIK5{CK^@Bal}=#fKi4PYx|Z-FzQ%zj6EY3uHQ>x<8p0uJ$#m*9{2B zECZ4TLH-L~DojbsRQASN%F`1BdETfyO z6sGZB=KS2H6rNR9leG&HL3pzhP_>^{y6;Q&=(=F$U5EzUGncXs4v@H)0gD21vW8pV zX;uKG#)Ul{Ae#zqBTN_?^!AI~o(!l?0nr8Jr)3kMl^LBup1#uD?{BIyX+$l~tU%Q& zfhs%7Qj5)}I}6jlHqr^w8U{hgRnV2BcQ?MJEW2;AbbRj|Cos4G(&ZUElr#uZ%2Kuu0^SJLUv&&YdG+xMm-&#qhhip-wri zogKa)=WNqfXYY1FMsgj#AkzaReAorKQ&5O5rzu}~dqnaPM9cSIse$7VMMt zovaw8O(XPDR%e4!M+rrZ_kFv(4Cnf;fw?T3gH!tx2rv3}M?0q;xW?Szf?atb%xCnr zwJp0o@!?!Q$Q1YKM+dL3{ln)wCRp9*qp3ZM2E_sL3=>Na7<%_AIbzl_x!N&GgVo)8 z{rqLM6eY)}v1WNGwgBeu3c%>&wMN!}ngr;L`78ye&=+)LEWs^@>^+pJ(cHY+fs}-) z%@E9e@8-u^KTbwX{XtWY-Y2=7uZr;+AizmeIW9PB{dcId?B@ZUz6W|TOQ9e&qQ4Sl zgWG~g;>2bxpm=Q%-b6Diz}at7!=H>?#XJfthHc_zni2B}B6Jzd$n;$CEaaEY$57ip z!uLiAzKFAY^GXNGJ@O$81n%N9=wNBEhTGcGAo4F{f22Oz`{k*D_Gh+&UOD^0bM zni59F00;x@PXGm6!}fEj5x$C!V8E9^2t?5J4fhR&-~d34APO&5L0|#c*BD<%`0=WO z@U&Pj)OlOAn5C~wprl|JX%y97iw(fDZ?R4gV(DrAwB2k<51o={8Khz%68Y-p$CZOx zG3vTdtR4eu1>*=iCa{Cw&j-gZtd5Dkd`QSsniz1yz*&4F`GmSc*W$S@aSqtLzQ%LQ5wo3C{IR`V4liM_+wirjI#=E}n$gbM+7BZ7TXCJ+JmK+Fl@ z83Hj86zN}x0>aP>s|H~p*66ejZUTVQRr&$0vsAGPD5r%oc0U>O~STvm9x`Gn0*5azN{g>xsQ8I)Rn zxZR>FQaF$qxDRZ+f6DSMgUAQ_28*F~uc zpCsdM61z+(VU`kR(EP|#gunW4KwsQ$+qG%0SthsYrG_2Fbf46b4@coW;*&MeZlElj zn^#-%h}#X=adF=|(vaisz6MJ*rj(!jYubI|*>wM?Fl1sNPlJY&m&j`3VZeCr7ug2UJ>|%sPK%w%!Lu5~w zeb27H>+}VK1RrV?t{3)PHlNH7oiV)cYb{qCwcZsTS%Lc^TlLOYWr%!?+8WEJr42eA zpN6EZ2&EAb5gpD$Hya`9jEI*Yg$AKH;n)k;D}-T(>ZQXYuDp7jr`ZW+O?BCtj@XrZ z^9o8$hn-oatih^qRp#Jv!2^I@+TV`9^9IE`8H%qIhcTW06k~!)a?${Y#)qnCH>?QB zUqgxitOgZzZBi=N@}R7K!?<&+vpmHFycLa}$Lk&L5SeT1F5)*5jR86)Ve4Q<235M=nLP~r|QRYxjG zk#Wy08Ja_8>NB?SYH8wB_k$f7bC34%`%j;K?GxEy(*ls+J>3=uNqMNV;slBUP)ta= zUWroZAj6>4_x4nv=|yS(?#debbmqtlPx_g`mjWD9Hk$`q%$M3~SFW~j#EeH?1M3ud z0ADyf8}fDFj^cA{`@|$0dvA#41=}P9PEx2@>-klN(yJr?h-YM?wLkEJ>MmzA3emlT-cVM=vIjxIS?*`SKB9zFRNOXo zm1k4Hf$;WVA6g-#jz;buXXioyifYqF(C#QMU5L}j>7MV{`q5E)z>wp?BH~&Y6va>` zr!Ls}t_HP3dV~5-@3dXW=1O9nh;dJ585H@2^ANKbThGoYYDYOca1xtnq7Lse4PEXX zeJP>h@OEKv?#JCD#_4&}aRj%5LyXEQqYXQRfw(_;43~h8a<sj_kwTf#60KrZJ)%aQJxU6-T8Ty`oZk>x&E4Eab0rJ) z*r5s$=_VC>>$nf*NeI38H!B?i87c(%GC)CqtRt*drJiV^a);m;osI(t z(OM3rwFA+BJs#e?l-tmQGLWloO-+U}=Ex6nv#d4<-laMV<*aITk!SOh362i<#0W{Q zSA4e;8v~WhRp|+;I2>8nOl7N)GI6(ftb!7(Y!DYMY%8d)v?Nizm|u#O%#F2fwpAMr zFO#2Db_mnn5M0Fv!EqpUgih9ogK*0zF4WEU3stLVILSBL^Hvj|H?di{)rbi#;Pwla z4ftbizrC3-gijS*Jh@T&yp;L!LX|}a+&7fZ*dJ@D^D9}iiiPZCGV6_h2*m2BhbQ3Z z??u@VVx05zxbMj-aKb|vTy+=MzuzXbYYvLi)9GoFhp0X0I|$z*!qActjk z-&uAHZip*KV`dZ(z3CYk`9dsLA&&7}f5-Ik>?7x~9@%B+ZQCo;72XTCG&6uzz=6pflEiNjaqZ zP*D7psD*CiwY^l=3X*PCzjT5H{H35>OS2RkM^Q6;HPNQ<_)CD>qbb(vW@iPt>2F>J z;P$xm$SaoM{#tKDt*nwDHXA8w$E4G0z<42tqBEl#Z=;OCMU>*+3(s=OT1y8}#KGu@W zkF8C^(kDGyFfA+?qoloZ(=K)i&mFb+QG^y@L&E_Zc?diajgNJ3Yv%UC)&gS#Dx&HZ!obdka-O*~*gw&So z7+`IEqurboZ0wMh;qk{f$Bs+Zuo{8RzmvBefx#WS7th z6GzN}mort`vjA0ONXmla87jS3jYQ%qcRGW1`5X60?;05ciLHWJMV3{soUlPTF&;ijF*4WhGqwEyk0h)z3*l; zkpp10x7}>Wp%#02^Ut3?sg_ou1OF=qTr}vswJI?3A72CZU0)tgsBS>Nolnw?#(nc@ zE1ly4nX>5~c2#FsE6;;XqknLH1|ERQot_|MvaNuzdoR*XTwBYZbP!Ipw4*tB zh&^}9aNcH@?H}&`T?M*G;dMAW+>Gxsg0=M<>fl`#R_agiNe6ckMCl8AJMZ2{;Pu=o z;10of2>ouSyZbxv0b*l(@lDbc;;+e$HMT;9%L=|#6k;>#I-$h7NOkq2JM@g}$L0q| ze9PXtWrXaEm>jaJ4jl1ei|k>Cr*p9|O)Zv<%d`MDE=TUM!<^me@Q^w&)wXRsM@G@U zgHaPPGy|k!90#z58OO0h9DiC0bKzp0i*4StH5@6GrhF4mYLQJ&>Bz*05qBxOyPCKt zfQZ7{b{h`_9viOx1TL4JADD7$vEqp0Xas$@>rL?dS+g%dlXrAfoF4umVNM(tvL3+l zqAVc~%FD9D5Hg5OQ8qoD@aX}bJYmB*N=Ddp@(Tn#cZ;C_KG&Ud*GmZN8vL;}xGi_k z@F>ITC+x@;GB;|yAv9-rz+9*^Sld_tz7(Z355{?#XZdVCcIGEcaIz3aHICQISpdl= z5IiW$5XZw{5ocSuCGVs0PV#)r_hpI9X;C#0gP=JXr(_oN zz_X5ewP8K{8LF9L*Ls|gn%w+YH-v=>v}gk^Uq7S>H5ffaKKBS#5v2_dBMoQAZte6@ zz$iQWDCVp%$kf9LED`m!E-$+t!(`0Oaz z-u$R#eGcVjqxXW(8pZTFU)cD_|7g#C86 zE_jP}YfrRqVqf$?=&i$e)Kur^C9Oe-)|o)HoKDB5{R9$rCWa6*fql5T+Bi9y$UXN; zf6!!b2Qx}jKmg}f@jAJJKfn5J2C;3zF;;1dFYK0)txj<(k zXv&MW$;Gm10Ua4#ka;#gp`Go#djsxI^dtk3hbW*1JOl}io#aHA5_KBl;RyVa15RG> zsNU6|YBm4>LLM)>{$SWtKENPB=Cu038(FRekCn81C%b%Td)r>K2)98#%I@I^De$#0 zc2OW@1HRiEFyDzP2BVeN@xUjNX*Z6#M_AZB^1v3_F^vM~11F4e6t1}a4YKK z^$+W1Cp*hSK7_okn^!JHiK2@+Y=1}f1G;GhqZa_C%gYI^H^NQe-$_A50IX%!Fhi?~U7H)MD7;A^;1 zAb>%D2Ko!qWs$|>B5G7S$~7^bw8Toc^7J?Zj7DrOqML#+?4k{ok}$)hM?LmbRquDX zweSX{U@#HWZEHbHROw=m%;tB@XhlH? zd9oxRe=OUi-_Zn|%rh2%-jWhFK=IYdd+DvvE6sB;eXdkucv4blrvLrMfHzlKy6=(F3 z%cmcW-u-keYbhG5Hv%9ZCB56}82|Ls@%-ClXi+5OKS1n0$SD}gc@K#e_n4=lS)kN^ zco7ft-sVUV_V%sz#RHGpaTy|(b(d)TKzbe{8^|#qqUX_hdW=W`|KWKLlV^{hzh{pk z#&OQiGr-RC^S7ep!GAkyA4bSS6g?Z#D1&uEM7XTp;!@hV2V-wgvh>8YM^@a(xJi(PimM*M)FjuqBeSyh{d z+vZh~rxPgUiPzVewJd0}6F<`bT3=tsHaGVqq)4m(w9;t)YN?%>EITyv*pN0GxU0qT zf|3KF;6+-!x$$4osI@9Z4S)j1+Wh$1m-y=}o!X1(A7veGCNO9*=!8W+{vrktL!G=g zYRuzKOC#|9ypN)7bG=#TDmPYRF61R;vP0A;PjhvatH$xzkg6qeEw7@yEx+M-%-Zd+ z{A3I%`u{9yBa-KOvrbgB>gdS~TiRh1QP}QHZVk$XK8F z5$c-Ial0vfc%?dXtX#;!qpMtER3aA*agJtrMwA?&u6pvU2yIiYWy4tJvY^)%l4^m_ zy7A)=Vgyj1rK*>0De98v`8OAGZ6su(PH?)Pu-^6=MvT6V*7{27LPZ?&P8^&M9`wU< zdTGstx@ylax}mS_{UMpPfukhOl&;|G|Shxx%%$HJ8R7H#tj( zn&gOR`x*tbV!LCy{KZyn319qV?-yrK#Zq?|j$Pgxi+V-^P^f?o?j?|QE7FPl0$LUa!Lc(x}XKt5rUi_NA~ORO81!Oa)X!XDR;@*so`ke90Q z6~Y#E&sz^sbS|~5)v}l50AENJRBDY5+-we%8bAm+3e36%I;O(eRjpdP643I8bH7*j z5DVdo1!I;i_OX!p8b1-q6=L z)2CA&g7l{!T-#Vk<#1QQC!VL{sa@WmKAlD=$b7NW3*7nL9YcWlqWe28Nr;ehuOo0; zg177@g6y0Hor}5_TbkZU?-ax!sk&BoYY9Myh}MakKJ9P&ZrgCz7wTHRWoK0#z7(Zk z5DRC(4q|z3E*~e)rjyhA3Q3yCB0?PU`7@F+s5lvRP;(wU=KBnh!zX3a$^6#Q{#1jD zsch)VI?l5FDpCgm@Af96GP^9#=GnLhNVlT{Quo&itbkRg`ttU!zrL#SLY;xS-;ha3 z!81ikzX9w5!Zy}YY&GOc0G>m7da$gYwAMPJNmnbCoQZl>zWxDkT7ATP_2^ zmPBLIAQwkCkT^nFxMJIz1n-a*FV{l|h4X0XF7t(tDQt4&Ll6?r7DREOQ zo8J+9=U0>-@-?g_ytkpG*@vh_0qPAB`R3X2$@I4UG}_(6M^LGZd7WXU{i7`88Nc%( z+Ue`~Wke$^A-%5?n*K?KK1s88H1zQPod$|U|J@UBb~4|$$L+@K6!G_MLF&Nizu9rx z{ptkf-aCxfVw=|zT#ULws-(4oJS_wuh;jfnR_ksWw4DRZ7^A0YfIQf7(b(bf;=kuXr{y^(PhBkL1Zl$JVKZojScU~jcMwN*yde%PA#^i+DpWSj39gm z^{AtS?Y<|$B_5G@f42X^tja#U{>~vCe)Ui0^TBbv{SCicU_vGe_A(mB5t6gr0@L}9 zo$4%bA_qfDdF{}5dftOtF5B9uOUd1ACRdG-%+0khKx3HReca)B#1|_Mt~t>oy9F1Q*!Y z3Vz}mWFm)PIX}dp4Qcwt2}*Y>%1u5WkLSIXAw0!XRl9}bo)vy5N41l4Pvbz~8-&i~ zHfqG7jDG8{huB|_A{#GYXcRJL^z$jbu^0zW2dw121THP-{xjm-I^N%xrW4=SF82-k z{UZNN>>pylM(a(pwNrR{Tcb|*0#J|c;t78C1LrH<-yLXm4=``&D;po+{vV%qpz&|X zjXJt>3_uto>ke(i;S)A<6IN-lEj=kJit;uy)#RJXD2fs(otvtympkiAn(jL(ROn$i zBAY=<+ZST1#i|i21sGrf#}YF{9ndf2tvAv>mF{{f_-i_v6B7YY7AcUD-eUw=Jc5({ z2&@ijW#lj*ATQ?g?i^Nj=V7tHr6bLRV;$p1O* zoF9BJ^!^S!GAkQDb8%TZY|CZY7PxZlWUCUNnWfnTLTbRxwv`m4Udk2iEf*#Y3)T0< zj=ONQ4jgNgi|MzP$;}1eRf3iV)`$jt_e zx$GG?B9iwr?ZBZf@?Sw5=JTiS&s=Bk&V`@CJe^K50xus*v9mUkYdHM1puN<|j$Q|5 z>i$suM81AGNK1`QaLzFVz)(wjU4U9$NV$PP!KN}sEy``K^qI14=Gk=aZ*ia(vVHJy z8rHrZC1>Kgq%s8EKm}-WDU-#`t1ZJH_5uv@8D8;=#eH_g)w$CCzo>5e ztS!$}SrR&TSuVtK1!>id$*U`PMmyUn9s7`wJi^P=@y`Xu>qe}_8X+ZN&T9&x7Q&&@ z2uj>2s#0tb4K6Yi%IH=u)uI;lmXGLC0l$)6Peh5CPAI(I;kb0goT3&>m@=y^Y)iqa zgK3FybmcpB4f~Z6G(Riy%*ui(6WMno!oXdrbqtjMz=GN>2YF!5)9{wmh4{_E4$ba$fBoFbOxCviXG5lL7-7O%i90XLHZYrx<8}MiKFqV$|Ff)^ptf zc047$P#Tay4F4@;%YSSdSu3-;=L)mS$erIKXz^#Awd8VAG^Px3r|G+0Vw~AzpO-=D zd~L1WA~+_Q6EUtEj#m*>K5rOx`iFkuztZHu-}2EQPt{PY0)5`LBrq%KL)$QY{XLL zrrDMp(21>OGL>pX+Ha{63dp}VR5YgUBD=@SiKH%fzVVk;6Y?etb<+pWLkI2aua44)}S%L}PHkyxc8 zsRucSCyml9s257y#stghPKKzq?KnM--Hx0ImF;i)`B^@h<0(0$JBK)uouspa`(hKc zuPb}KMphmnorQ#*r5Q!40etn3s&JG%Dlz#J54%d$fVIpoHPqu430W;z!l-g$< z-70vx^Fw(4=ATaNyDXr|Z42lpm7J6sP9MEf_7p6ezU)|;ElDSc=zWQy{owK3QTir? zS8kp7`SGra?*@&uxSP=T{Rm`N-}@{|CkLHHfj;vck7v^^O0^sw)`7=SdfRaXPG8K( z{i(-g8qvJ%@WzJ^54!tlM#){r%(WZhom|~u6l{Hm?_isUM=dA&I(*xp6PFG2DkfJj z);G1hR8?!hmq(_0jC^47>|`=1DO0_=p~agY^%7KCW~0X+vy9SPcgnsiKsX-~XkSn; zG}(_#AI}Dx+Z~=}lXJJwaMtSwJ=ph%3vX&!sHNR+J94MeJk7F>B8}V=?NJA!bs!gQ zQ&&a11VpYTlrTA1$fm0DQq<=J)#NgUvJ)S6B42GA$pfxXcbhYpVK$j$TqGXWjeUZy2A9bp zW9!^R)+(hqLOV9EVaY{;4}iE~pA6P3Hx*(vQvsQPUmXY)P_Re%`W-$9s~p@wH& zhv{mtxo`Z5U2P=caE$X=M4RhMb|IOEr@Dog9r;GE`t1ZelAj8Frcl~Rt}?86?QY$(t@mFDCZ9K0sE|G!GWm`!R17)+&|FLy8*deFskM z>7mkw#rKdByQO;g^o|b|m<5^cB5z?Qa1G>If#eRU?ecVrxcjnHHC)aRQ1EPaj<^nU zG``VZiy!xRl&C?XQUdxygLV8&?dr>g7{L*9X8he7lWjZKXN2_$tyw|?ZP!M32 z-A}L@;kEZJ`9pogmH|!F3F&t$CKU{0X5Dk-cD!RY-frT-pgR5T2fotPmCkz;fF7zT zWCVVqN<|B^BmC=^xVLX_s-j{s+ve#(ZBkMYPR`yAe8aO_8y;wG(E@SwhB9iWW8~5b z%{W{WNQ-1xL3jpIb#) z)Bek*C+KzVeM`8tMTzjG!|P;stDW^?JDKn4WG(KyV6LDnif`A!e$@4z-P&oRzgtfa zYw|F;Ybll&aACl)WtDok_fN)`9J zUf%<2zl035GEY;0To@c$v=Ol8I6C544>T;_Dn_~oTLtKX{jD`}y(vW_xs>Bw?Y(&^ z7Gg7^ynl3a}c06(JIH2IiDsVCY3EU#a8NQ`7Myq5c7Hyfx z#x6pp9Dqx(6bo6})oM4|7fy#jcy46DU=KIWrpRSoS2gpjX48{_21ftTm=Exc58w?> zC<5(n00fP)nIOnE&QHf@t)*$idgB~m5J(^Avtx!X1b;@<>%etOT%BTlPK9Wl-b%P% z9zW)twi=Ori`%aV(?kAD4C&cMA1+wqw2;a@o@bLkM%RfztSd?XQp=`aE ze%m75iTSPgEhIXYW#B9~(B%~O!r_YlD@99ybVq)02*9 zY&HQW6UIMy4U2POGuIdprbOV!1eR(XJ~q!6*)5>!dr&|o*eTG~M-z(MV4q0rLR=|V zcyo(@SdDEzBJ5H7-$}d~;7O#RL4uqM7mIS0a8}?6`jG{`);a>tv&bBHYoL%4& zb6#?2{PU-O$j@qVju(w*L2!S{&&0B+>TN#urDVBTRvToP0alT=Eb^GYVh-BW=THBT zY(#zYJqt~6xO_U7;ECi+ENZp#IdUtpF=7oVqaJ>b6Bq=P79h0n1}O|lFnvbA{;bXd z`m(3}G400Z+wgqiDTGBX)cJ+1^K61VFK2M*Rc9jyDq2X?8606ev*1|@@suOVB1w^H z(6z(90h*EvOv+u0mCPHn%oh@(QGhi@{61uJ*2@cN8gy7U7XriUWX?IVZ3nN|)cNcb z($qir0A6?bv9(wwA1scN#w`E#mw(55!C7{6Iy++(;D0s!2B_DJp)iGA|2<^wswU5-JxECe3vvFXQbx5bp*%LZP&ePl zu!buDHHt#xLlhcpfAc{WP=wN+euOElks@k)d8WPzQg<1DGTzU+e7*QLauxvn?@4$CGoK< zeI{#wT(XL8YwVSEf?@7k1wuCezEE^J`qQ=mmF_|$YO8{~9+W;&8<#AZQA*+N{~doq-4A29bn=`gRrxvm;|B;-o5klo4ncrrA)BfdEo6u+bVAMhm& z555d|x?Ol!G)MdIw&7xI$_Z{DC%iWwZ^p&B54R{fvjzPA3y$I)SM#1e+63fR^9X;7v zm!NbX8UVpsyPgZVv+$qL0f<}8ukapbT&FhM$x6_A>$Ysvrj)(>O!@#ym#~_xa*F=- z+Fpn^-&ZU4VIfZ~@+u@oG_QXkTSlT6DEc^sT5^Q(K~M{i--uvHLyvdxET)IxS&*Po zCy}H=rO8yafi{j+UOBpiv9q1uLSc&0-AiFBoV*gpz2EXHM456N<$SX!_+CM9! zn*5?^HV%{yNdw^ji%92}it>T!__*GfaHiF_#& z!r4f^tZ*v*t4eQLm*X}=W#l)&9Kf^Mtm<{`si6KPc4!CsI*N@sl`PGt<9SdLdmim0 zSlFQ|H6X{ujB&P0Mk$UwqyqauKgwe3;04*A0SH|;s^+-}aFb?prsI%mPX}6rjNjOW z6w-g_$+i|-!B4D0OBjj=V6?LObpAqW+1PX3y#B!(1ta?s zru;G3MpllUTu37pB3X%s1c6H9rpi}RZt|*a3h+At(AmG#Vgt@QM;z#Lt_;;zv)}~POM}A}415`(`W^si z!L77KCr?j^kd4N(5tNR23Qwo$srP{f2Ir7%#@L?}tV7+%>*#LgebbfWLK_5W5p|b( zKPFapMWKyD`e-$_C=2j9DIGbVY!{HX68uKqr3TY0v~V`xb@KVsKa60WX)awqLye9H z8Xb7AJG&F`QSKR2Z_(VgX6DhFam(e-Yb6G(UsT1m|Gf|wgHVSSNH!jSV*5qy0sPzk z$Bf}Bt-|@{CF~ja80R-XUKVn@`-A_nYT=@=dt1}>4QuR-&@MXu8Uaq3)AZP_uN{t- zaL?c37a{?$2m*3Zgo6XPR3aDod08z)>D=k_@o@@YM$58WB;H43@f1q-mLgw~RgEA5 zXw_Xjq~P}H3*wPAplHP2DeiCvXQi$R$Npng!LpFG6>sW*Gx+bLWK{}-SzLwmnGjwp zwRcfZK!zB0SK%}=A?*+m3BQ+%Z11q>Wo z2ks6hDn@nvO?Zzl4+^X^XXfKEsjz53+}>b5rr0pn8J)>179U2}yr=A8HwdU&yWEFo zsx}S6L4Z1!r^i_cSW=!KyHUE_KK9O~z?HQP#q})(8>%x-{99?YIX|O=S{hBbVw-S*z|!EoJ`o1;;)^0_rga2o};);x|&~*$Knw zRaR$`*9<8BaVSXfSR=Yah;PMNij@yTd$U4BLg~=ErMd$w!xOf!yBdcfA!7`Fex!NaXks;xj4)ET|fN-@!N{ zZXQQRzS!p0B7w{UJm#c9roPW~BkO8|$z!1OQzXoVdg-dmrl&KO&g0p~I_+@cG1;t? z4$=S39`uzCNm-YX+XuTBAl94efO_mrJoPYy2oT>#NvZQZ+~~6 zXJAftf4P%`#}1?Y2?jv2rG6Y4(&cnzpQVGl1%C#|$uAOW;=OOP@7^E%Cy(GxOVbYT z0tP)UZEV-Wh4|im3MQbqtft=b&P`IOE^rkVkE2^Qv?|~nK%2(0f zc09{M*OaW10JnQ*h(!+rg0oqX5AGqP^{XdZI!@Y@NlRaTNZQT^xudA=%b2{d3)81L z$`_3le0iZthC2AQ{WDqe7sR6h;!<7*aRD)g#XLKioUn@;KQ_V$h_a!?Dv}Uu%|ia; z^1>~KS)pC`mDPvjK zfye>mx@GnHWvd<4TY$SbsP}!?Ah&jZms<3$5H1B5VtEUt3(Q?>8d+P?X2H1;@GnC^(iRG;JtZaJHA#LmiyCXnyel1y+?!vK#a7;jXfMwFlRS|kS zlqa+!+vJw{x^1Fjd~Z8#4rg~TIbh#>A)vQEa)KB7P~7f^n4#M}JTsnUv)8c`kxLH( z0%iP}<2;)%NY9Aa8n@CY3H0WSHUJ z7tUFNj<l^IU*o zrrq*_-oX5I9Baw+1VvC}q@zfff%7MuPq>8>C#Grc9o`Z+K+m@g z;y+Hl-jTe7TDl(~xS6}RsOh4;$JFj2{Q>vgKCPS)kh%bWb(T-ZffsU!)H%lUg}sl8 z3Ez`kY0rj8<+bM^1oaCxTXSgr3oeo7mzaGbFWoVNR90)paVxfM2G&7&C;~HW&(yT z;eh*eYp&ItSC1G$(&O43H(;WE8$z~zsuydF_ zNe>>UV?78p{0EM8Q_Cgn>)G)<7$jc5#Z_;&+Up-`u|h9Kc%Sp1uVup)!&z1Ps`Z}T zke-aw-g($5R)75xQ+8E{rQCKCqe7?>Gw^p*7-v{vd>4V~@`|K}rvZr3Djw;4Jm3X- zXM?cMJ60kPpgSa&t_vG72CzwwPscqYO|tYbfRX4^qcVGVsF%yZ)M4y!emZCs4&){C zzS$XtI`>Xt+)dR|rMf-8!wEQ|KeM|hyz2RdAlJ*jcoJoIJ8l!q>T*dPNFEex260PO z&637!v!{ES#Sh8S#SZExZht=5{()^CM0DiHjDXveCFo?+@oZp0p&^9oHW-HntGDh* zUvv)vd)n4?ob48H(7?L~&k_n6g3yq73#Db1J^4+A=?my|7>+{ExiSzE#^Y!-YPLFA zw7e8>Uo?6b)@@knJIVp_v9I;cMQJsbZEhqWez63BsN&nG1z~5rUjveNRdb~BG&`B>lp*$}hKu!x!^0!`Nf));!9Q{+E)I4HdgOhFjKWNA<1ck;lcUJZL0i$v# z;JK?&BJEl)6tFE;8u2j4ll>d==6iWrOJMiGNYfp=1wTg`eonK=o^3)wgN_^ugNmhE zHS+GA2k2yu;yLHpVciZ9LK*gK1oA~$xCaOVu03lM%0foNA7`g`96o3*SQ~jROU6%T z`y&q`=44}*hRAOP7|f+!mKCiE2fsPRb^Yuart^8#6B6cXk*qud=gs%%@aDLjNQ(}rWs!b%ZQ=N&~(21n6P*J#&F^R@eT6%fBF3O74FehcAtq)|MCWZnG6)_Lj2 zR_O7&5;|eUU4@Li@w>8o?>)i_251*CWH*?2#Aon`l||(K5Adf=dg2p*;Y22&!Py&H(x$U&Y^fB*rx-l#ygF$ zYBMOg9n1+Z6XM)3M0eObM#_8|UMR4L26n=BBLM|0JDJ2;%J`Z0tOYppcCC7BH;H0w z!^@pu$@yC6F{!nvSB`rIBT)fgQuA~& zXQ8&v_#(uC;feiEjH=#sa_+wD(kwVF?lU?6GjHezpX$@`|EH$n!2*=Dh>}m>!Qr}q%{t9s|%(^Y~&lmSPWK@@8xiY&l z4R6c9B(&_?5)XaOHGS1Vz^Waomv1L562X(Kkb3(dvO=>1f{KM{YO!o?2^pZjF2n{n zyH0RdX6R6JZSIQ~kOPm%P`V5#LykH zVB&t%n>FTHlx6+|zAQoFKpFK6@1;wb=*>Ez=aLVeB>w;=zy7s@TI+tdhpH=l*H2GDYPT*X5 z2E9Fd^icx9ukOw`>Ri=F33l|@c65~d$-GG3`;&R`Q34%&VE8}qA*pPG$o&5Hm;V9H z{OvFQ?!AC4!00~_RBw2vP5;w$MBzLs9B57EO|{8Oc_~W@AF4p0A_hDUi-7WEk9=Hg zwzCn-&*u7j*N?z;1NaTGVsvuz$}|XKx`i=?TnrV=diDxkE*LuR=@MAstsGh=zPAnE zkDxLMm7*ettkc!LwO8?gJL7<9wF_J6T$rt1G9)8=espIX!X*x*Aw34qLGKA96UTS33M7pK2tpyMlNeVlEnXc`X9Qd_<4mzG>g_o#8(@LUT9A?QfoTAnR5&9vXSRN?9o5&KH#Nx8k=}&iS3?hEVbz@a(%zJiXFsR3`v1baK@ROQD7J;`^m6r;wkbG?YN2=R@XcipdA~{^%%K+4X79 ze89!)XQ~u}LDn^Mu)O3JQNalpBZSF&gUw~-WOqx2H|ty|EiM0q8)CeO1OaOsk; z11UTgvL+&qSgUO3tMQC8}9FHLKm8w`C~slrI{o3uBd@*2qqV zaf;UxJp;sPfML0mJ5r20two7TYQ1qeaP)JUo*eIN9}76>jrgaXNlcyYtFz$4MWqgl z>2ar`mgUm9NQasrP}Y;-V)=1YAOxQ7U9wZz+_fYv%2g}FNw{e7OmPd3uJ&8S-z)ss z3ZL#0o@FNQmU;Z3GKZw`L#933KkXr9Ts`otpNZ1Qyw#<>MFHW(SY3$}^4TdW)n5=9 z%qT=I;Pf_DQ?o6Mx=qoM8`^;*@C$p^?r#JFEy!95=al_hRa53{Syh{N;i|GK^8}Oj z&Z;^gpFwf+qdvcR^*^`ed+X%h+hLXBWpu!VKD5c(9n&5Ctn=Ms-^bQHmk7^kH-ZaC zc$p|rhYOLxmuDwffqpI<#HBR$AHEzDWEt6)Mln1&X`U`MTAh(<5ETXi2JDqGGH5XV zABgJj|8sVVZpU9Mz9TR0(h-Fkx;Zm-S5L5TKr_7-SF6va4Hh>V1=`}6VR$M;v*09B^% zo&*^-vR=J7T`$F^X#uzB zysp{}-jqDmTIh3ogx6xZlHh2?V&-ShRznHb5JoM5T%B^RcVt{|#YzAM)Op>y8#C6j zO4)R)PrJaqAgt24ebicIVAMt*Cz~LfLn#|C?oopOiT)2VPP-UYqS$GQ(XD2-rjct5 zlf|fkvr`CL;&aI_e({Us*&_q6rOzI@fLHX!qoYS!UU9Gb)kS5b&&7p^H!IX)RVDp^ zx6oV9({+kGm9KwrRVA1wL_Rp+1#_{j10iQ3JnKbuWsQ~qSNA8gSvw|4lW)ov(dazK zM%6Y?RGq7{ywWm0DrctN)oR z+z!MFP@M(K*DjMcFIx=}14K3Y$URnLg{Obk>MsjOw%KwP6?mR9TxMek$}mKB`(q6t zeXgvH`T2-al@{gaPygVvM`E`evK;ugCj70@&$~{%h|{wRlr$!G&shp%A90S(QCzd` z7%~x1jFep}UB9gxh`AHxjmf2M>Mg2?z*rNdRYpVUftX<1)+eR0D6(JjL^aCPk(NX?on^l1>n(Qgs z8e4=V(&msx6`;?PH|Q!mzgTf@bK{Vfl&snS*36mVT+W>Ho$uqS0UxgO-g3CyU|Fd~ zib0la3T`h7%Ag}G^oMXy9V-~i$H@=uq&`lEDp=6SiwFa>sS>B$A-)lQ-Pl?5x9<05 zpnOcTm*6 z>?P8{K5L1Tp>RvaJ^5i0%f+pOBt>2flI5)k4fgiET0molW`X8Ay6VL?m{3tVv9eBd zkGBt=sYQ0Xo;PthV`D>NYqiHQ!s0p|f9^RWo7O;sjNp-54jeToH|$676y#I#XLHArYpT~n^)CIHnp*0JN$x<62N2a z7rkl&j!tsi5AIay_An411-RGl%UP?Qj;WyXM3*Tkplw5|9Hz=ZA-t{hH2uiZQ;SB1NaCtqxUXi zB#IVUftQOuy|m;Vwn7;_L$2=fFK^o?4sr5|!9SK${la8T?79s`YOrq~j z(sX>v9o084*FHP0C}5g|^#?e`f*klwQAFogAQJ2ldbx0<#xo{x@MYcrPx{s1yR$rx z_wEtcM75a4Q{mZRya)?TbiVA&XT)p?Zz}cI_Ay%2OA@P*wi{CF&%(Ql#x3OUgJxi;GugLvlaf_@^vz6e&D+ss4PO|q2!OzIJBm;1~BC6Z}s$cg$~_UcQ5Nfet^1%@Uix z5)^}XmYz2-Oi!FWlGVl;3A?*9<9ITu4Ch6InU2G?;|P#e= zI5c36+KYrWb^LgK#}Lj$#tMAEmYbL@oP>;4@#t&jLr5izzGsZ~b9F9*xgm{#1YWWwAj3Ed6V- ztM>H)yM3a2OD(7gc!cpqM!w+|`q&1y8lPX-ef{8IFbGd!bG5~Wf{s(#^mmC$ z>KdAY)nt++_?x#M-KP)B4?|PG464+p<6SFH?y#(bi&sg#mC9BV`rU$lm)J*jq-tZT z3(r4m8$(`8lGT>W)*$x520Q?!JNHj^=Z@N`6NNCIYTwU^9Mv&{#jlbqXWLBC?J`Z6 z2=6faE>Vn67{0W^J05B&7=ssy86`jAAYsT6@v*{_FGgY3v`wio@9!XE(JM%EBHkS| z9IDV%vN*l{+oXOc^NWuvXs%65SL*S6WY;wx(K@$nBPws^fpDY04u#Ji!mFN7QZ%6tq9Tr%2GuB1_LUsE)Qy+7t2L~`KTtxviunAybBe^> w`!7Me&&sGHJ)mxz;qAMuG&>ywdeiYU-bO?cfZr$|MZhTeDu2y|EPcZhtEFx^!KOq!eFky z=e?frN(2@YYuAyYHHfdb9Bu|ISDM_|ykZQTNSCwQTsN?i(X|#Te7s z>V}s5XESA4iv^_B4c zWP5WP7u$Y*FIZlO2XMq!^_3s%7uX;8(Cm$=1@;#{ffys0pY5!CqY}-@aw-+m_66NV z$My}&)+@ELZ&k}CJjm$u7@@tK(9G!`PRHq zAcJq*kTqi2zFxL`(>2QR6JdC|p;uj}YP$ZIZW|R-&*gjRB;c!TVGEPt@^?6C>&ANX zU^#elH>^Jj=4V=uj+m+DnYwwt>e#03TSl3!oK9SCUh8?U=Qq~KN4B2{HWoW8-*hJD znvD%Qa&WrB>B;aWJBPvC^DYzd!^RG_?VBT}%f{|a8Cx8(@a9wHYzpz@vgrnuP4+c$EuJ-E8-C3-b*-a)qu0wV(gcKKL$}+9tB#r`FQt@cv|L z;{~UpIBK{?5k6Jf@H{*V>g6(Y*Yr&HtXa}aPHm`c>eZTE^lOIixcUcHNgs1+dc`zs zMzZM@jjE|zK5|NS(LFtv*Vs7?HWpjoJ#0PMYc^(r7mIlJnlD#cH*dF=E(dedjIfJ4 z;-oeY?uWOwg87Hxr61Z4FW}|{b2H(>a=3Co*xCukpS54!X+M~5AAHx`x$^I+>v0Wx z#FVQVGW8*+W|z#8J~XBqw&RboM`JJL^02Rh;`a2V;LcNieV+t#4~fI_2k^9tJ%vHU z_Y_AR&V7kpV~{PU%7!=kmzq&#|12TzfNc|31^Aiaj?~!Op04GyjPbXg?9q{f>ky1T z50|gt6<|Nzy^0qBKXrR+qV?UwcRRP|gUzKVyE%+ZXXtaY=pzA+3v9vl%pzWmVfAMZ zX=aDgV$6L^KVv)RY`tPuhIFkDK7A_1ot4{R{X+2k`_{d+aB4odc8eW@t)2Fh2e^!I zYC-*HYw2=xceQh8B0)d_cyL__O+~05R&WZ&jNe?zJ zML*E9=H5bZ?I4(+Q9nU+8LIZf&VW<%L0>7E!$z&_OC<_!->7lc)D4o5S}xb~UJqjg zjfa`jJ@m%uo{Z3%T1%JNoS-bB)S+{pa)jAYld=XTVsvEnGv?Si$1UkOt#5!f1`ZmV zcy0>^lxo!Y51kvE!N#H(+^JLyCVE}d^VlLS4|s^dv?a3yf{Z;>t@&mtt^?%y*$Ug6 z4_cdxLe`_q3dS$AHyfS$Vlel-{b0TQ;zh7Or%akQ9<9wahfUYCizX>+iliNOor-Sx z9%tN4QotixU!gxq3Z9VW-fS@b3|TSl_}#0){>|2nb(NJIK^$%bdLkW^BaH(E=VV@qf~+E!0SYqK8A+(b=FFpyXE<>1Cvvr$K} z!VZ7*Bp4rVVe&96Pp06{l!DUR$ix?0_wOVF6o9{@L?12Jo*D55B zJg^}mOBiyTGSid|*EPm;W@NELb^@k4kqH+z+Us?c!_9+bW+(2>hIf~mjTb1keym?W zjkDSK{>S6n!*0q+Pf@NCt&52EL^d|$U4oH^YC6rAqK1XC-)qpQL6f;gn&=p^@=mN>OQ{{bt* z8xdI0tAc>e67Rp3TKf!tG0klShKtAGN%wlZh!X>inwKlsVnQUSJy- z(-3UmvTNp>8{QFfyAP~eKIq{VcNa7JFp7?{w9~1|Mv?A-u7}ZU#OBwgNsQwCI0V7G`$!qtb0JyQWbZOWgWgws!!{1NzF( zzi0a0(&gl3#%~QK1k9+K5Xvq)u0barKRo@(lv-YF<3P{1rS6y0`k1uDv4h*|&Astp zZVUg3njP-OPy5sD`ZV4Y{1r7mNekLW#j;WJ#P>F;Rnu_wisLfN1&Az?x|ZUE%Jste zlSWgpG0%?QGTR4yUYyBhV}mZsnWK zJ%6kWAGKCC^;~a`ZAoYER(o@moruX@aW6CSrFY<^Ot}6aSXmTbtP2T(-=ihzJ5{}G zo~4_KSHy8S0TJ)JmLG@{gM9p8hDlL4q>OO`8F;!|OP4zjo&`@XD#S36WHPC5jo4_K za|M7~e^t}1SiXd-%~2K9ZE_LiG4fynYc=vLOxttJhVy-dUs8~hLJ3uH|w*KL%yzZKRsaY;lXhu!_ z53Wf zc;QujnWlMFUr|NQkM)b~t>>)=o6VOi!PZVD@?b`N5uaOvoS+nE3SvI zX}Q}IbxkH6_NH2U*IO5N5>)u3hR^OV`t+lTi|zNocB`p3CM@PaH9sG$h+2 zI!jbbjf|?uoU&|`3q20haUwRj-Qixn&&|CB9G!{9&86nf74h8L zVxiV~%T|M;#Nbpth)xEx70V_b7HL6qFBW*K@_mc}!kED4R26OJX0!1aJ}DW~&BiW% z66D7J`M>fX{C8x@G2JLZCInqv*?3DUo)tQ__Cj~pbV#&>&d$ekCick0O`K1a>y1mNk zMS4fnSnzZ$uc4h-Z#Eut14H5Ykk_G_1bh;9f4!}dt-tMd7N4rxIr61uV-}dwRIu}mygO41_;tf8 z^qrtEBq1l|M12Rz8iTU9p-A5s~39n>@Ig!?q=R8xnmhp%C;x)KROR~T6Z>uJE!ZgC9`b$ zl%EFaV{CiaMe+3aow8%&Ooh~$f~otR+pEpJH8PU-p1qg(BKu|6xoXuCq^wyL)ANl= z)dTCwsrl8K&kl>axc)wxGBRU$=V`dGjcd!C_#*q|35ZL)xE@UIGPb(-3{J`qK!Rl9 z5h)itwZJ39O=8-qA{b)cB&`>s!QzxMDTKFtYC&b`=tB}t63Tn(YQjrGMI1#kfY`}3 z;^HaS3t5nAs+cN+_`QPv236pYSyT7s(EWhele!;AZ^KbUaNQ?u?ePS)Ty7w~_(;N8 z_r;S*uWAJTsA+RIVlJC!D?35P`H74w>6tlb+9xtmjY=#4*d8+Jc<_#b;}ilzRgcV; zAxC82fTHc1MhQMfuD3TQBDCD@OT^|{PxhF8iUBmFb$&Wre8xj(Y+S}_zMjsU?%`ug zaUCIE4NWqkqehxvV@2u;vPZ7~BbedTf*OmCtqEUFl24wllF^CCy?Y8cs&aVPY~or|M*$A77CSLdEZbmd~oB8frzb^HX&WUXarfyL-q($@egiC z7K0igj}sp~aKg)4NZq3&oUD=Y`S~sz5c>p&q3Z7yAEd9KMJJ<+$++Zvc=s}X4d9R9 z++MDS%YRRuGIFm(;2G0`@*paeS=7imr1);P_AW=$WnwZUCA&A5?duoAss}bbOE-PM z)K8Fw9InK`$NB`x#CrJ=b7br!=PLa#?g`;Rq>#T=eW7Tu(%Z(&mhY55aH#AQ&*-^OOs$G` z7vzh$X4$}uP6yQFA;UBO{qlBm_YVFu*q-Q2 z&V&ow=%k^5>%@4lx%1QhbaQVlytfu!dC_bzqk%>~-IHNAVf=^I(&gsCOzU7%uA++< z)!^G3_t@sLgBa!Zy8Beo1DWQv?LJ=@DF+UpLnljP9$lx2tGd~I?@{Bcx^L?EQsXnv z8%4i7raQJ7nFJ!liAm@>Z+si99dPe(l3hfmIwn7a>W}1nDsRO4mae?ft1^{HWSHX` zDcZpKM@ zl#w|=uH*RRB9QDra2(a%09CqVy4G28oo1V{4w==O0- z;DTxxu!S_Pw{EP9Tze)Kp1x?^xQD8BG=m0&#{Hev?xPr=Nv>Cxe#yl`$T=E|_M`D5j`g zi|!6AhjBS_bC1*vx5PsoMW<3Ve2CSMKUSW|#5-C(#{^MuZ@0NSE0dUn`?7QE`|zvP zW@8qg5S0|sUuS~x{a|w^LY^>f&Kg!3T&0RPT0nEBwRE|&au;P8&uQNX=C%~UDg9|YxuQ!lj$>26NpXXDNcj6srQ+Bh zpW;q0I8tX#cgXOq$|rhG12a09XY;-IENN>e!$*}#A z?~{)agmUM>v)1mTSM_BiUM;8;3-pSPJ#3BWpL;xiitRro74cZ9;R}aU9s`BJ^Y5`b zkqR|=44}C?!A=B?dXkOGL@LjL!a0E*MhgzO5iTSfn&F)a)!>4(6u9TU(K+j>30UzjVnwFUnAL+Z;g+gW`pG&|FogM*Hc#puW#^Z-w`^ z_7{SwXRW8-1pC4Xf%0GEx*S^cz&KFZ9A;w4F6p3sQR1AaQj8DsK2s_BvsqAlc5a0W zJ36nexc6~fTa@93UR?+ZN>rCRxl%@@eEoyIHZ*Ng82{HH-VSdyc+*-}*sSb*qrnrG3 zGcK=3O_vRd0fIRzE_fF*Qk<5mGF){$OJwqJYsQ1S&Eu#!4dPEpw{GzDH2U~jOP5tG z8MSiqH!92NLZKJ4-ytgvL<=V5C|`vh)e8Onv8@uq3y*O7A6Hv@w}bI#G0_$wL42AL z_fufHWGNmUj3=r_vQ(k0N5(_wr*nEv>(_+TU1Mg5zrbxaCH@=PK&cYPThKTVq9vmj$ zHe63CkX3||s2MnG@eFr`S}hL_2fVPD`jCN#2f%=fPd+%+!cSMiA(Ha`Ho(*UDI>Q%u*9PXE2)uzge(7fuG_eyA99xg0Joe zQ`_P4jnH^T(rGrB&q2;9zMR3|$=4Ns3)3FaX(ilvYKVL=3y~$Jcd0HQ zP8V$ik6s^Zc!gsOWr6U&*xWXrB!trx#q{Cj!H?*-RF(L>ps<+5I}Jd6r^V|Gz+F;5@Nqq7*t zBK2)FlT+Sy&YG^v zj7{~Eti3jt!!ED!s!D&hxKy|M#xHH=%ZKcDW2 zJjARv#o53N%PhRvhqKDpGLo^K?)f77CD{t-c&P8UH(xOGAK}Wn3=dy^V6gkhT}K;o z4XS1~T-Q0LY)~GvTY~v(t<8;K^(iGW;fSk`B8&))AT~(3oTl6$eVU+;7vxIy29AVK zav~az7(7*L%4Y|1hm6}zZ92UCi^(ZPgyyqaR+XXBSi$q0R_t}0c|5sg@?(~w9ENm) z?FpPkokCru@KdqtfcHz~Kjanm9lc_lG0};QPE;F$JLK{m%x4Gt)sv0yWxn|GbPqGZ zw5vtqp6zcpXrG|XIi@t!ZRgJ4l~iRp+|yY?^K;2GU+sl~x4U7AnlJMgT1`i*qpzecw;~n7ES5uGFh>A4x@P>2fTxMvj`TIGNJXgNBFX?W$8Jei}W)x4dD-Ck$IUP*iOa z6fVW@CExf=H`xD3&5Ys>=J{&bDzZgqu?}W?A|u|)1Yb|9F;mIAH&%rp&%7m{|14v8 zna|$NH22n;2QTT>TT!1{Y!$X{*=5T%6+W8^FKp4^vNRi1XV@N0zli}V*`zua3XpwEp+Hav$xV)dt!=2%7sEm{i&GH^ zP{k*g?38PeKn&wm+!pLQFtJ&@AF8WTnSoq(N9vL^8B-W}fo05PceE~B`#{9gD4?8D|b7SGr`<_bty0rjK?JR!FS=z zH?e8B<|Sr>gwn3F^=HK~lmm-xi_suLdXs-{CSP}U_RH^E2iT(0OCMA z{~iTG^I(FsgZe&GHfY?~Y;2MAi+A{xeO;%dV{ojAQSzmv0iCnTWqs5vS9Ql7F>LFv zCa)2T<^f`y=d-b@NwFoy`Zy-(1tn^^2IZ+unNE+M8&;d=OsP`e}czH6K@PFB2k zISq9E%jKwZ*BREcN~$WN4Hu2FVnutpHqeXN*ut|!yPklL5$FX>kC=M)x|2#ztyTbY zE8?L$YR-7L@YvHP`~!X9FzGgV=h8vy{3!^iDI};7UkU-Kc>rdy1}Rz^LQ1P~=hQt2 zZ*8?--fit|$Os`!$_qtgtrCV!Yc}NY6>@_EqNf2|oy%0(2#Q|k(m}ZVIFeXjE(?Xq zN^NKm9UVktq=CVPq#ypCK1cjpsH19t3L;)=?(H=XZl>?L)On+14T?omBE`yNk_hLV zda1EU)pszbxN5jiLptWvz=bp78WsIdRLol(HH&9H=4cn}oe|SV#evG}!Aqg*g#sXR zW3ol^x`$Kq&BktP{c5l~#}0O*-nq0MOicjFIihf!pt(+*AjF<=d29B=>PwMK} z(X6%DsG#}TP8`SUGp5^?9FuYfhlfqT7$}*#S+RWmb9O=4$taHMg)D+0ak>x`8dKY3 zfi6!Jm46>!`>}oz(%EL3`%A&Wli>PHbMM>M{R_d|wP13WX;E{J1)xUwZ9TlVrml;Q z{CQl^7*Chx;9`#H*}5;Gog(Wi6u^cL4z43*D5F%U0n+1ORfuAg86yKEb6#dtD3q|T z$7GhNrkmj*^UBr`V!~Ci;uZW_mhJhbQDUc8B53%dW(A%CL0Bk2?1uozw&t3R$0&Cg zJuoaciW-~2SAWA3%B|pf_}v2)ONANYo0pn<-%%7~c^yX-M>Dx54}%hjeWl1*AP!u$ zs1E&+BaY$j|54h8Lp8fpHeHa+RGDBqAL@lZ$R(xhCR{>7^wQ-+G`t2^yS6V1jhA#3nIa&j=;hdyfwKPEUHvILqz=T`oZ6Up#J1K3nf0|=Vn z`S${RoTizd5h1VU-gvP3DA=A0CT=$yvylgK@IYfGn4c!H2t+ak9FX#*cp|PS%%VrJ zazmOKmw3FU^Y-Y;Y z`p0yzwkQ#6@M}eL8s)9C^J5Hz*?`a3G@_#fu5S^ zjL(RPguc_Q#w%9tpX&un4RxPb^%a{5%Khc&=~-r}otX5hYn_E;UfEV7H;~PNFiy)n z6U~@nH7zOqnC$fB#TA-dcCas!fu9}7bGYo~iMXz$WQQLHRE zOZV$=B>oB(a9Rks(iaD6kOs`N;K@aiN1D7jk``WHh7s>`1|ey>&RMGjiXeQjaQSgK zH{X15M~!*6Cm*9?k{nHVKe0S0mNlL>OHQ4Iag>eK2E`IIN#V`2>|*qIz+X;5XWh4E{4ln;q{s3!LrC0jA1^dp_SvPh|`DBq=+Xd;p#pd z-?<-?>LY&d2!M1NzOzlK6e{is2hjbcutT+eFbfpaP)Np*fGOBW;eR*a&_lK+3hwvj z5Td$PKwo#-hN!53{}l+LeEo=-?Zmpi0GK=OhL*>0HY@_+u|=7zfP`c(podq@`nE-> z2y(-S`y6qbe738G!XibeLiH;j-v4C(L)CCLLK_D!YI<$xmVM9JT zV9)R27y56+mHtfthkhxF79gM3fG%6yzY3Y1mZw|xu;W$))E2--L4eXByiL-OT@rzw zUKj-LO}Md&-Z5}H0K6O|a{shH9o~A;THO^XWNh=7E~hkhw7L1FB;KR|lZ#?U=*0z^ z8@{LdUbNoqU<9L_N}Qo_65>xIsD@&^5}XnK8da%|N0=<8$zdEyP9N0?-()6K7KO(y zm%{`nWeoMK#hr6$1OE&(Z%i;(=6-E7Z$VJZ5{Tkeq?5+s=K3H=Lu7EEIjW|JV#>ud z$2Xt43+!EQH#!c7x;qwGsULqZKBG|AyMFluUU{^N&?r*?AX-GMlnOJ=)Pw@J5|lz_ zc@RO*X^>rcRG~3eJ<3LH7(!_5%1AGnbX34jscirDs=gBOLt_=;=H1TiaS5<{ymh|z z65&k12%gT?sU5qZ`p5;;_hTEv3~Hr+PjX?@xa}AHc;KnXX;=yU&-s8vINOEeeZVg3 z{8=9lBELBelX+kB1Ew#4fI7Y#5yV~5HeJhy%``el9`78w7 z_;8u#&ehK1Q$d`ftvPNS`rWEj%#vmJW_e7uM2>eG%Jm{Ru>ixES`aXtr1(93gurIl zGf4L3RUyq1K9Uq4fR*Tn#2E8HMD8a$q7Wa5`c!ywP1!QMv>I=fr9ps{S*GQfGbbv!f(uN1=q04M71y!Ybmw-**63(G>{F)MdiabG^O&skFtK z+{8MAhCke4+9TIf1&R*>n~PQyDcz=zTol(SyS59}eX~+68-A?qa84@>9I_ITj{}%x zFgAEQFTAQR;~e6jI2Xo;!}SN@%1d?i$~rvXNP|a`pC#&-6A>bEcjo#4-X++)+kBDM z0b_oaX`T=r!i%6x%@M}p9ngPnPx`(=*+w?f{`?Kw(jP(VFVUD@*LtB~EJ-wBkNwQf z^syxzqdmRa=$#%tq{}<>6d>5^*J)5My1er*bZD1%brr|N&ML@FO?K)!gh?J5GU$VP zo!1Q(eD0n9t!s?vRo57)7);v{Fx;RSiJa`uz4QDbI5Qug`VW1W{Tq&Wt{=6KV0$9- ztIxgjnQ-M|_``a$F`N1L)PH1JS0=;Ff2aXuRF5!1MaIUjh!%QRkVs#a^QF|d{fOz~ zy;NZlJlVy}W0#b=&SOe6RZ}m@LD7)$=~T@^{Zq-ukZv} zNQ!8e^(5j|ID`nvB-sVy!S!@92Ge&3b-lEGA;6xmr@QV;B21JL!$*_?wa}0N%(?{c zX=qPBg+gr9@IC_BQ8d$IioCHjI$4GtXsd(?LLB0e?S*TNi~?+*t_@)R4PJY|TKZ3% z?4&Z;|H^;x-`SVFJbFvgjTd@1ZSA>BNgj!?uX`!M=?`L>{M~o zuA3+yiGhvlTz{c{$ynSiIZYSr`UGlyLClbZt?!CfZ|hEt=_dFsMBK~M zy-}mYWxHq`YFIW#<0-}!Z0-cN*E>t|?Zr6)q!bXP!RkWi(z@!<6#Z!v=8k$04KIQa zmeWAH#KyF!_r#8)zzP!+)ojBZi?o;L_bV%_KYtEXB)~%!js*|7aZAM86p=?YrI=nD zj9+>~%t%ziP2D_ex??`1m*7%C_Ci|Q$EQAUicl}qD|3CP{*_&6Rm zui>l{gQkv5A&3S22D4aIi`W*ikRL($&=?uDWjGbS@TtXmV#|SmCPB2}a@2*u2x>G` zCI)-hW>D(~q_g(R+nvej@Ya?Z45idqd348we^?eOfol(<_!JEu!yF%_F|ug3Rva~4 zqv)%Rd1BaMdXCzIL0UP+g)zg21kMJX7vWf@yefbY!yHlZ(<#&UGH;!II}_fY3|=nA z(Zg&yDsR37%RXzAEd|aVz+KIfcuLO^baD5E&`RN~u_b)-_h9~Eu(`zU5IzGKbL_I; zoFd98{X~@Q>z-M$iU63a^<#}H^!~;|<6vqcn0pRAzIlFy!V}E%RkO%w&gHN^arXwu zwu>o%UD1>X6MzML@u6x-6yA_@=(qIBS4+Wj(|B`!$3={bTl?ALUqb#a*=0#J`unNz@_vl z3C2IrRs0N?6MhBX)iw0?r{e5Hyde;&7c|q8ge`aj@I1TD_Fl$!Ya$hiuTU`V!wVws zY_e;~>v|(rj4)Io)HRyu4UpB(G2Ru+6og!0nU9E~{@|Nn?qX!^n|Fgbo^JpxJ@}DI zZ|tJn4+N-z`+;pf@MNj|U6gUTDH}Prh(YP=mOX5`t^i;qEY%MpkYDIMLn%)J>z#Mf z9?gWa>*2x%H`ykbq9^iLfKVb!;?_1l2qNXn>CNzhqs%aZ0q%i#Wg z2t^|P^TP`v_pf7#vI;bXY6}(q!cm~&B&be^I2V#sr_*V~LxnMyh}PdoQgR5%+%Bm1WPU>d)fsta_!SqWAb+K;{sCVs$%D!AU? z{OP0LeV~8(htEFx^!KOq!XQR$u)`vA?lK zKC*@D4hwkUlXb&-E<5LVU-b`9X<04HED?w~p>REzZSKxy@FxO-$2l@G*9Nfeg?;uL z3)~kaYsB(ZEexV5W$XHGi zYe3LhnrAXmcq}-~x%?W@dAMdbWXc>IAuSHo@&;ohP(~6+gv0edwL$i8pm`dw`;rRr z3$8?Jb#M7zv}&Ud+Vhb-f$sIe^Y4kHEnN;)7Ln6qT}=#F{5R0-*MQt_$FqD>sd0r{ zaL#ehunm$YwlIiB8{_?J&4Xn;anNlDd{?V8!TglKSdep+%MuDgt(paJe`dXt*dpg? zmHh{FA1)NIKoEu}AQ%|_r~PT{E#JBLZFBcdbAP|NGs`T-<$AcVts*@LDwtja^21et zDGa;B)@r$W$*h`o$+U}1F|>wt2iqJY8NC3!i)2uJ=F|eUI){mZxvzrpXU!KY?SCwE z9_+joJiHj*T@Idq-+nn6F5i1wQc)#98M_(kr^40iER z7D_s<>^zN5&TmCKf|#g0dGaK^3SXYbg^*{+=&7v2`0S4gXLN=Y#2BSG+OWs;LO*7+ zPmH$?Hf0=%2U0~oCJiX=C)%*8*(u7QU)7flTbBL4|LG^6{QCDF=)e2u_aExN{oSws zClkAn{1IF`Xzr~t@qK@?y}3=#e)@ZzUIF3`j!{qbcu6`X{(%gL zBNmCeJ*k_hX<2ZtA-D~XjH?9kydB!7m>5snRE0#cW(5R;X#Z=EspMj&h-~* zqhidPoXmsyT!BhZ+m{Y-py2uUY+KbK!J|;*9jWmno z@NIf7`FE`Vkg(M1Y+KeFsP+XJXxt4X_b>5GDm`j@oK(6ZT~?AL<{^`SjK=K=f>Y{F zpJ=#pJo*55lwUZ@#~X*{tX2R_J31lC)j;@dab<$dOL$q1KfZ&SjjrVfq??w?-V_A* z*c3sdA&lf>%p!t{S^*;G$6SbT{vB@?$&R!F7(~aNCdy5YHyL=tfj#u_QcmN3Z|c^3|IX-v8##OQCiTE$sHJx z)vI-B$Z+T>)AlWPh6?@iTYheAo4TQDk!*n$dt1lw(XQPCQj)3#T-CJB9TqeZHK^;j%FT2e|^M%-)#i zn-#r~QyBs#T7u0Y<;=<&nlng^aQ0?S_i&`9(>)oqqA+G)R7#@!9H)_5Fwze2NSLZf z2~;u6KH~2ATux!VcY?iL(Uy&Nayryf3mLBUU=;V^~i}X>XgC znA*iNeuC|Z;L+9A-c&Gmty90ig->MZq?%{-PZ{qmJIn-#z#aZ zRlVG3G6;maW@Cd8)t0{tmLqM&-jC(h;-}2&@5BGA%7f)W=>q0LaqgrQ`ty-n^yDVB z!xMbw$)2h=h?9r>CzS{_Yc?Cz$wkEyp*AeyyMm6v->ty^f&C#~dqi%5rSz{^JbYJh;zPlj%vJ#K#Ym z5LdBs5Ry+Hdyb7YiU9Lh;a$cBcm|vRS&pXlqdLP0i%BRo-$R`Dciu@%CXw754>PBG zM5AtAD2&4<_fD)PZYg`FuZS-Nd{E+k+D^#?PEL(9ps|%@cuYp?TL0h?>uMfA0>$OI z5KQUz!wZOh9G~%Y525W~`WXs2J~!~~_RCvh04f4iT18b2f7BC$G#eXTzbK>#GbZV} zrdM?^{s31c!pXJXZ2uukgX-sJtviii_l88wO|od1n;-(UUi5s4D+CD|huj}}FMi7N zdF}9F@O(4=IXwws`>n1AJ#7khA}pD84O!lhwwq-VtoO*d)enyP1BM7+)tA{YC-K?i zQi8!sPDc)j&|ZrOj8+OFzQ}#~Iy5+-teYIg2Xv??;FZ>kI@B?~2s^*a>ne^F6Y~?d zgYmU+V-@4$-KcVaDCqy-J9=@{ut!XU?a*&1>UcTE4x9mAg~fd-go3|@#0q2&jT z_?k#GYEt2yr{RqqN;%uT{_mOg*7IO{rM-2Na?}VlE9RKT*VL4_aB4wqNZb9~|1%cc z_e(4of9byF=H41c#@Hhzr*i1+j;<0e9*2*X0uS>pep9nyt#-AdTe^ptC}+vR4p~M+ zH7IfDKjv}7g$A2f+TV_6ep9nEl9z$7{CBZr%)`k1*{)VHR_2{|*yQh&%(Iza!R+r2 z)$Bk2Yu7mNU$VxZ_NQByp9S-?D946sksbv?Rb!I?zJiwtHWtIpfBYhQV*q@K?$&JE zbi3^mJLM_-Q88$e`+|@sxPG*zB0D5cKB*^Nx9D@z^ZyKXY1c<8PI1)u^S^XI2492C z{a0;B8$D*|8zOf|VPK$}&q6&SDlY!}9JWh>7e(N6fpX!wkWCh{YI0CcFJL}^ zbVqV*Bf^^FGs;>Nct&-st2sgVxuO(`DtRgmO{UgSo*QI)VxG0(=|gHBUIZUg*ZN{k zJCR=pL`x&%No)cAW`hub z`Sari2Gkuz>y31+zaTx^6dd>^A_iCighfin2^9RotEBoT=*LThs^K_4`viF~{%FM9izT*sMje#(nZ~E8*kMUSzD;05BY~|t?NA+SEj=R=3sHp-e1HWd1jrm}1t=ZU6 z=M}Ya=`(u1;reRE3e@L8EqnqftFJF22Gyc0th-?c1&cX=OGhSRbboy6Khy~J=iYe{ zz83YMx&CanFJ3?S@u~k10cvU}0dNiPyz{wt9>dhZ%f-Ze6gwrQ#j#WIBc&>tOc2Xy zSOAumAVy`lTRSO8kSbaLPthZIP9!G&86+^ICvp^I(UTFW6azBp7f3F#O+A;xOtypT z(fB1frEi-ho}Ms}E2!t3vQ?k#Q3Vo}aK;gq1QL9P zf)4R-j4plRa7qFSh#=>z>5|Xi8^Uz{VPez-CW2TdqVTIElKpdfp|@Yrs?oC#Y?2EY zH6Miui-!}fI}5EFPpA}(mraO-am-La5qDA{2t-{}rgU8uR4xvgVr9N*vjqqkqo~P~ zFQhIYHKV4vztsNb?^uSR8b`RSCW zm^lgy*}bU?u2=e0aRx401lVJ!+#^PtHLN5HhTxWIy-e0|Cak{xv4YF}Lo zo_~*t1#c6P7);3mM7chg&E}{xtz@i;xQ%=bx=3@lYmxThQ81k6dJN{X0PYiPPf(X? zCEufS=|Id7%kGHI^SM`Yin`~Il{t2d@2DO1*eqFf7J_gI?>`sC%8|+ByRSD9plrpv zPBU9ed|zC0?#+nFycO&K%0M;0JVSrZ|C>=8IICT%n|o{QEjFw4A-yfvfgdIDA+p)5 z>~&1fu#peneXnYk0WlV`CN_bw8N69XTLbaX`%C8PMmEf2)Q5P-NyRSO`3s z-!nzMo0_{+=!f2-*uaw9L(n0aYV8i7$@cQPnyJ)mY+wcf?T(t^3ZwzZjEQ|YxsWdm z000wC6kOS2@==Op`7W%0QE5cLHHIv^gsK`Gk!rO(Ch|QI1BboixYmee8)d286|kuh zPRj%p8%RKFvH@S!SD?)0Rec$T1$QrRp^MHg+?Qr!HkiG~*b&yk0!WTRIskU}_(S_{Fxf#U6XMNB?tFXlak#OHb?q^fmiH-f4{y7dNV^ai5NIb0o=eJ+e9vdC}#vu1*i0_=mhlQ?B? zMQZV(dYuTfwYx&?|!aeiQaPewGYye%u`qw03*eD`K6=eoq`auHA;tqpo z4#uBR@3DhrwrLylttWe}y+`4dm%;qvzaPCMnIX$|>`=mFR&2_S9Z`=y7#kOX3)uHY z@5hxHbvRYzR*W%S;AAVniMz z8?tP99A`}%$PtTBo7>`6t6~PRA%m&K_JeK{da-T>9NrEvdujxo3w}=0#f%YsAj>as ztjz%$PE5f6iodG_{eMMcz@H!oJ4Ta3W#R%hLAHn$rgoxTpNI^(X2m(nQ>M)GRnxV= zwE;=(fHX>SLsU$QF0yETAKpt=#*L=#cW$o+n|C{prv*ZN?28UtX1OHzC_#k+j0%(v z!ZW;jhmi8i5^rnNDsz^4)?$~xYPz~M0LEi$>KWU2V09#ZAr`8*kib8P_>b^vCRkp_ z+YS1p1QbVFA*L)*^|Fln_0i`QO+y;HaVKBeyPxuqO9Tky!&7c~;-DNRCGpBoy4&nU0X zhhIf(X1m7rOL>-Jdun{$DVYM}mO2=U6KtL}$~A*C8~{&8&|RSYkTuSYjg3Z{pt4B z8vlu~W}AC!;l^sXu*3eS6gE?4!}672{D=0|!`9ve_NIhEo(FRmJGaI&qrPAD-h21m zl6lrFGxg_W#rdmME*mEucjVo_j=uB$@82ysMep7J+Z=jV()sQmxj*gQQ*tZ#mR2eT zlmXbL{wZ&end^_hOh_aMD%=7NLY}!1>#S)LPw_{=LWVSO)jr^z8KL?N+s$*pjc9R4 zfg>y|w70Ic_HHxovdi=XvL(<32H61N)B>jKN2)mR(8#Xy@MsJ&<$a#O`hjJP*pBC0 zMNcniU|fiV)ArU^;lhUcw5U&$Tn5)}*t%J%`eVFgKR1xgM=DigS*(&lf|tMbw_Q=S zA0tpq$zywJAKF5;uTP~oHaO+SD8N_AVHM>;3OI0t>Ur!!o*ez1cX+Wqi7agG3vV%b znrwWYK5wL(Qgq_pLno%rKyNg$GfbX$DCe&+tAL5SKY6BZTO*^42P>W_-_bp*3+gE8eW?Jh%1e;3&oh?{h?kql49aiD9sm|@y zaAOrYI!gRVQroNgGUPE~wpHex4=@=CUjLPCo`(cSVnlH zCUQ;BbkCX|PZtAuY*sAaN9RaFhblSeZ0x6%8^}V{QE+fQn7bBC?k1F?tHG0tBzHNH z&Hbg$HQIQAX(_DQNA;0W#DO$y}hKv7&u#D5a_|VsBbK|eg%_JKVk~Q@gj9| ze9|ZbJPe*nxfW1Shf};2hpSq;94&17v3~LGqliFeTq;?FXYZNtg`ijRpwNmCw1WJA z2}0yr%cgHa`^SQo$M!PQ%!t{2NWVuAxuoh)vOKtrsu9A@ieA719~FX2STfE1rPjj> zj5zA7c1@s;9b+oXF1jY^=2+K&(-x>5p)w;OpW$5J-0e)x;TFibYN9d~OC>x2*-}G5 zg+VB2Y3|LckrcFwP-#$yQhdBTszI%Y95(?E!vi8E@|E{aM^_&$m9k60!-1nNPkgJxqx zC{Yor1(r~k;h7~1I-=vontphSBtI7Bajy*49tZQ78Q&bPkvA#%itSF6d;umbRsgJ6 zZcNp58OJ1zm*67E7KK9q&zFRsM#~f2=HJB!4C?y=PBOWlxELZ!@^B7GWP;5EH_@s2 z>@U_g)l9PW5fkDm zK~${ia&BDYT>>aaK)R$w)S)jYebDIk4i}$wZm+hk?0`N=P?N3otHJIZ(+znmfnar^ z{qTZ_bA&4oR9c727N}q@na7q#tJh%lpw_d+F|z?XN=$s;dVE2=kG=u6K7hqfK;6QE zE$*KySwfY8>!ZA&xBA~Br)by;s%0^+_e^Il6*-@9_0wR#M zFWd;`r#N8bhS~%y2|I-jOqAZD9Sydi30KyB2_o$%_Aw`R0EungX*73N|2f2BAh=|@ z)>$6g;o6V@ASACO1d26E5_ki)t)yTXW2@KGJ@De`o=hZ@4~J#9iRX+$C|%eB z?9{oAqXJ*39g=(|tZlQTduOa_714*CGqoz)NGO1*I3>N1(|A7!upp2kk$f8LJZm;? zP-^Of&0upWyuX7AKHF4)J8eJzq5X0)SYD?(6%M8&vX_F@on~Vrytfu!d68V2Xb2?G zt_|09&dDDJ^EtqyB1{+FeUIJa&5dC7DgK2>glL=KD~3m_lItr))k z@hMV>bA5=IGW#f)dWPW?3>H(C-u?Yxe=hU!sf?%$Q9JUz4uJn+2Ll!Jk_95U> zu{_^6BQvRO(*n#tc+RU04_igcw4o2~S<@{WRi){iuJr;eK%7BOZAWvULG49QMxM8i z<~y%( zI2SriMM{#oEj~{|vY4Sim=~!k5{XL;@kRDas%>MYe0&Jrsa1hPAEX4b)ZwuAstQxC zjL2>&0v7s?UN!-bGpj{XdrrXbCo+=06J^sskv0giG}-9FcLbLh%xC-Zku)iV6LdI) zCU!ZGjm@*fMMEVR`2YOulizW`ENC>vNRMPCVWv20-I99tUIt;X(2X3MP0g|v2~sk5 zm#50+dJB=|Py#ehxyGFqv&uYOfoB?-lA4tWlohsHk)*QB=^lEDaY*H~;R~41qzvgh zG57}f0@(3xe7$pNU5ufkG$aQZvPLZ1XO=EB4_5F`v)D&II#`B~+R?su;kBk8@8{>e^sJKUJQOCw8&W?c?Wi1>}sT53N}i~9F8T&@$@%DmX{xg zo>o4L;(Ll@!tg1g>|MDu5kTjB4wBJuSe4T=OBU1KRd8n-Ja(bcgNs>l@KfvrmCfk! z;h%<5*?lLD*qbfT*2=Flxhu~THJpu|bFn^E1q6nc6m?*0F@qJ=1X1!9Wo${w7oAAi z$ZqrG)p^8L3bAtRso3b)%^;U2O_#CwTx58$<@j7C%IFeIj>m3B{Yp8(=Xfe;8ixzU zpB>8NB41OvipuvT37~$;lq(tezBnqs&WRfimnIt@c6{xqo1Pd}=I%>YneRVjU^RRIJWrl9sR>oT*VyBV{>Ko^k-0=jJ{%Y z5jDWTa*+{^lreA}9eb?e)V!z;-K!4NMe?Px3dlw{iXS9|E?lPk@#ak27xb?jbwR{| zjZoXCzDZV1%AB#ryiw5uh_RAz-ibF&;xG+~_uwZlDEn-M2o=ycU-&>{Z^!g2rd~zX z&|QJ*E~$a%(A|9<5$(FQD%1V|`BIc}6fle&Oz#Hw?x9zbDqbKj<@xvF%)MYmc-L#? z5=Z7g{7mMRibb*6(=Qo2kzXurw8R-z!ra|YYRX8-^OM(7XhIg397$N&atPH=$cB@c z&1gU;`!7XCB&5lrw2)ISWEA`fGef#9mIjQ&2dG`XvdlJ1b$W7dXF);qe38V;Yb{-l zAqt2HG&(=St81vpWBp3>%ta`rZv!qgO8$*r&Auq~2=BlE(Tta!#m(p)jf_qAOH}*9 zUPizlGE_E*^}Wdvc)wLF{b7tEf)GOGhE&Oud|f2tCsu}SC8BU6kY<0Jb#+4#?9Uz- zMKA>`GdV>>S#aEhvXF~HU?x=trn$%ZTa2gdk_elzBZ~fd-w}0rGP9J;7y$=qKfHiC zAm*xyywXVDi|Aakddtx*8*+~Z^SOceu))N5`@#)TP8>hEyup~rJ<3YAjlc-?Wba>1 zfs3Z-5Jm@-*5DY+Pp!Nb^G53JWEFRB@8K17>R1RO?Kw5KXfiXB++l3%O^Wp?DQpxx zEONXBbu^Q*~dJeCYd)4TI%X-2|r>ZBE;O1@Ry_rwG_njlj;>3iuTs$+SH{4KHn zu32;{6->z&$pnWbHxy)+K_Z_a*xPMyZlVN4auOL1J^!uegOC3B;rpL``p5rAFJPn= zhhV>$MXO?zb<-;vRa5uOztl{-Xkwq0A)|Ok6r83;qYcGGqRhxVc6?EKV8?=~!OR8h z{?1#f~_nOGApQEhRIsZ%NNaf!~y*b9DcA$&H~xwRK= ze3MM8`B{sD^cd0RwChsY;tI!H9OY`uX!Hi;<^D@nEJ3rxvK5t%V*QcAR*NIF#Lg=_ zt9fx&sU3avtm2}B?FoSfL~5QWWF3DdbiAK)Vr4%|Xy!#-_Z1Lk^=VAJ7wHiqlM}Kz z2<$up^r7`ac_wW$e4%Dz78~gy`gs!0LrtYnCx=8Ru2(8_W9UkuJDgfT?ee%|z~>ou z7~^GP4zHXutb*2fj&2Qu?q}IleI`JS4ZWmm1K0z$3mM_YYUXs$zn$*MbT0fOc<~s2 zz%~`Zo%`$qK{P15a=o>=*xFwRCT@2oXTrOeWeb(5+jxE{82UE`w?(J~vd_!; znp)@p#oU;C#Sb_7tkAhD*^*Mzz(*9FZ3eU0Xq}sOkybUz3yGFEgIR(FfEU${Hk^W# zw}sY^@8@O5RiqRY`1I-37qQzUF1qV00&!efX`gtHz{I<*Hx6-v@At>vPo13_SEf1( zWW#4TLfk5$5OPifYp(t6I966A-3V%CcQCglnrz8mmBO1NXaOkrp&GPP5{wA@#-4R7 zXnkYYV~nWW;Y6uLQdp_l`Q~!Cd=LN5#zMI8SjSOGo>~Y=_WP*mnoI#Du^g;2D~UH- zS-}RqqC0P_6zv09QO8wUj6L9>8pwL_PO!X=6JW3*F@#i4jcT=Q;T{Rdl@ZfNEK$$& zh1KfuR)v6v2qG(|K_dcw_pf2aU@$+8W^!i4^xySNKOTPxy97)*BEAM z0d1Zm{!2JrhpDMOV`lV9bi)VeI)f09m4Z9>m`*Ue9W1XWKLE)D=w+{_NUN{l@ZtcF z?}g~1k>+QU%VR>I>Y7EfL|Ale7onQ2T-MK+W9J;V1p6$mXr#C^*Vh~U%80K5dGwSE zi;QdOGAaeZ*V7p6490)x+}I2@7IBT7GTg^v8Y&FbDhueBSmWLSf!R?^0KlNjn=x%@ z(hCDXEd|Hp%p|T%B$P#`j1=5a1G0{-F1m1E7V*S+rz|zjMPg`b0keIQYJ9A;Axei* zxO%+A=KeSs*`bNeDxuNoxmzmLiY}Q%3fXYEfh_cI4)&h4U*03rD`82iQHbbdyh}l@ z55x#PxO+Y25m4B%w?URYpBK&FRp}fXK_wQK1n~kgE_s$*N}Doh|KjMT#~Zwm5o@v~ z7qZmF_TYNvRs9ynF?&_NO$cwY&h%CN7LEZwLh14?J{0^3lkBdLO0Vvt*eQX)Oh*${ zTF93cO1UTWckaM(JTu`M;2<9bEsIN7Yc{S5RULYoA?m>_dIUtaH#r61S5)LV0>}qu z+4K=5sAhxAiLi`8szJg!=WzM4kT1j-fMKMLqxeTLqKHFamX0!z@P;Ob0NYOYjS1e6*`oQJOv=@?(2q#k8pEH`N_UB*m${v~0kIBAgCMb(;#O-iFG zsu?kM4i!&-@&Kvuw+8y-ILkZ*S&vvTPElS&wJjkO5qJSVBzS;Wt+i_!MPJtoS!fON zpTYC*gZ)db8|(io|G|IHhz7SD-;iboBRzQjJw$(vqJO$4^YN+w$dJ*$`J&m_#cPX4 zpACa0Sm1-sLV!!8)^kiY73@)sI*H6P#5Cfk zRjh%Wzp49OC}398K7A+Td}{w=c7*9IDe5TTGVB09_Z=wRHqIHAuWS8~h>r1<;N`9M z=C)}31y5j)yGYC?tLJ(PSmZ_^CE^vz^+XJk$V-TRfx0}QYR4+^W#1!mGQq)hN^$0OTEWI* z@Z>Hp6S|BA{K#+6T|*t%pWh3X*VQU6&|GIbE8j%Vsk%&dEJ(yAzE5xRXxQdC0IGz% z=(KM&Vny9veZt>_xhk9z9%#u*=mYb-<@qv8ogEs?REIc?vd>i_m||=@>IbYE#WTi;iBTlPtN(~ZI6#N0@xB5YF z(LF-fY;4F9u9|0Na3&DZ)054;)hJ1V!AHI9gV`)(abZ0wLHTiKx$?TGwZ?E9(>Sm( z0u{0Xo#+XV&MRJwXk>uYN5xRS>Doq_f_j##10tg`Pd{WM(mc!S!T2){+9=SJ@ryAv zg%1Z!zm_hOlvG{Lak?mCij80+wYvonayW5wZRaivN;w9AOru*|^_n-7)$Xal$= zY5xUmmnRk&ezg`{`>MG+(cIf>9^6!=B0;k(K0Aa8*YF5fkDB>MciyrUj9kddEEK?e z43^ggk}YOlvKxrU;`+nR?NzqFFlvU43ebmX`wG|wxHx{?YBp2CM)4ftl!PU?Lw5*# zBVuBll@<%Tahy3oqb(alW|)xCtDjYjv9Tq#&fi#QpCha(Y1W5Xq1`O z>?w*JeN$jBL+W=OfVdic*Ujnh=2P`s{#@vC;(awG@iT(P#zL4AY6P#2lnAYr+y{eohR@b?n#QJ zZYlK23*rpx=6T3j5-Jd#+7dSA05ymiJyZh~FK{pPXCpicvnNzlCtSYQS$s;zd3C9I za2r(`fjtr-jMrLwW0kUHpW%%gEOx7nG9=+(27%+cW*JgMcxwlyx}k%F3gHR`Xq`Z` zZBMkmdl<|;?_7To&aR1m@&KlIw{v@3v;b#wF>wkj46Sve7mDEUQmDo@|qQN_2g%Y)TN!S);~?6GNhpI^^3T+BI> zp<;sCC}O@$Y>q~M!+jQ9&8-;s|^C|}3t z1E64}b0IA!w-qxHl9wF#0tXP;NM>v*q@A;>;z~QV=O7H$B+duy%b ztLg$N&1QZEQ)tw09L}z{<|ia!VBV24*c0Ud;4>FHuG1$l&sPmwNFI)ZGE84d$;0+W zAyLmLm2`IWHSvv@*i#x)TzFMqrYRL<$p1r3{6FBY0C}e-ZU?(JM81VM$kZq1=5~B- zHv5v6=VNtg(O{~Ml57^?jfkYtKcFUf1zS7B)L@3rk7?-rzR)Ec3BaK}-85YZ@tt1pA?iDu(UxUd|q+{c*# z<^=kj@n-2VCxvS&D%MT2u@NN}cFV2VzEx4M$`x#Lz(FxE!t&w!pZuCWc0sfVqmV&k z25t9@do4x6v5olWr+{vmQX-Wv_NeB%idnlH|gIo%_T zX|`9YElqQ}0IPX?11k#=V%)i~G2Xeoiu$!Qvz9IgjYfEL8!>fKK847ieq)_KmzPAO zYyL;+{6FnaH(y+3ivQ^zq4)D*aiS9ydo!-q3)NrI@pBNgBZ3rdUh4R9o!%k$4KR8- zRgRrvUS|6#B##FRW51YK5jQoLE=M%fu2V#;%WQvNa{Lrav&-Nz-JEH=m~+mQ39bwm zuz(5=Dypy<`VqQHEZ++@@2b5lX=L9uY;V|cE08Bpwo2H(gvYQ%@&G#SDu#Q;Ea`@) z)-c(gFbKwgVe)P?7PDvjBvnwh5l$_%mM^q!uHn56mmdpvttfjE!7*a)le<6dPq!Xy zHeaq_enEI^E4;rG&TPJ_FZ0Tj6$)PN5eyUwMu2g^47S!%eC?p@nF$Rqhh=Pd%pkU< zs(Lg=ty;F=Z3$=*1;^2Pu@+fD!RbuS1gkUg0b(hN*dZg4hj@&4yI>yz4ukJhbwoEr z7bmo4B4(#i=dtc{3Y0^^1Hs^Z7CgC#9o?FZ4a{VgDFSNp(JxD{S}P?=5Opn&r9H=6 z1$o|;3Pqtn{8N_}g`q_J7)3v_Y@ThVb}rHez~g$z(wI4dS!k(^vxKO6RbPfV!54=L zR1C)Q&6is9OfS~j)ptZfd>o-c%WK(VelCetjL7|H$E>VT?t$_R4<+;zZY=f~pr#C_ zXiY%<`bG`cl$voQZAL?GCMcExG)^&ng7HhOr}u-er?CYC{*z;_JZbL!y>+J%%umNs z#SbA}f`LW%TK*l1nM7k=*YqM)(^@Z7r>caDS5@+38y$9d!lP&PTrNkqrM2hL*H#~1D7DqnQX z5oklCgfqd>m&>CR-S{?`x-B>%y5}M!jM+woFKquqyPE_hWRHJ;BVz)=IM%!CY!&|dhr4`)0Dlkqnr+aWL(W4hKPRY>^zpHDFQ21uKU|Lqo z;{RzpGYmVXf9~lJgf1Y6f(6T3ZavJ-m$XAOcrzzhheN#o;-zXN% zsxLJSc^n|y)RrIuY;&1T;`^>ORP! ziz_=}{ZZ%61a+hVHk(4TdI)qw_spWhNaPUh@k2ql+ldrG++zH{0d^4jy5`_e$G(R-PzUdg+C#JQ9BM0tdIpE`ZD1q zZ|&X2usroz>y>&HP)^;UC{YQx z7llB*9cW{tLWklK+AnW6ckdAIhxG3DrGw_~*G!#JKv<8noHtwq#k3 zyvagJmhZUwDY|0?4ZASyFSP$Z=Kj37jq6$$#=i=R|756=gKh#K>GM0kb8=$kUgyTc z8zps8b$Q>uO`u7340bc!fMi~ms~}69Bu=&^Q3I*LrX)rd2idYjf|T@K6m$dp%U|KG zz1G@84*7%qB@FG=a*%-NkVEPkz7;1+orvcy+2V4(r<`FVMYI^rgLSvPNQBn(UAH~c2 zvReLV%>d)n1bIPTNUF2s07N{NvmXfC78%%+Z5VQkiX^|g+7R}5^m|~ zqhM)94WToqZF)*od7}Pg)tJVg{`gy?-}sM-ie-G{l`PNr!1O*b{^O$$c*_5fHDWss z-C9y)lOv~eLb0e3Be>J31#8c_^h2$&^Ca`9KmPVieES&&f5{;};E)>*qp2C)y2he@r>-m@1{Fy>Gs5Z9d@by%b*G4(B%& zQ$RFN&TzJ?pSQdrmtaq2K$2JR5sYz-`eTj{k#VcYi|FnMxGpEs?2K;-h3ZeUb=8P|Y zqefx6C|mmJ8Y>1r6M9EY-$5+BRD;(}0OZw`7f*l~J<1M0bdv3deymcVVz9+S7$Tn#`b~E!4A- zd4iI3`7IXS1yQFbfQ=oDQz@+2_$Vb3=S@;n0LF51Z3+cUHsaUI=%C1y#*Dc6kx28e z=6Ejqk&PTS%jL?b=T=8X0s4ST-vzr;993x)3WWlv9l}2n4;aBou1_A^UI`z}G+tjl zq77U~8s=jfa5=K`l*?zp2bcYG#mS9Hij!tT3dU;;*H>0 z?cfqc6~pBh$EmSG%py{mj~E*!SYH!sKl|$JK>}RM^NJh|T~x1Xo2rgP*%~p66AA58 zo=aRP^vVSh(8Q0EDyEP#NI#r8~C^b8Yi{F4CX7Olu)*Z*at3~ zMLfC``VoMEep1;U%7k~`g!A7-UgC>qRMQH1*71`fbP1Mn`5NtForL#YN4Y*K=o(=e z>4Fu?roHX<<;-9YD~fHG7YBP-fkN5@3I(kKN#`FmLd7}85sexOW$>G!|Sq?8a> z5LOcMc`(so2T?CgadRM#fQMjZT|F9zg)B4JlV0{U|5QMDJJiXALE6;` z37_oS!%cuvg=ZG&%Lsk}09_!acHDCT3SG#e3xl%4CvB^%MT&@dOLU(8IV4Ll>mpu#)~;*m+i`gF=SOPSe7G?N^G*6J!gDC zC#LhZ8Np^tGDk#dBRb6J!|Z#6Q!>8+Q=4%aLb!H>(h;EBs}HF+#W9LaD?xPJ*u8qN z{9NSGH0oc4U(YvQt>EdX^`sWo1&wtl>U(G2z0iY!#1 zi?(l=x78&_Kmh3w84?Ty>0BU)}MYrDA zsS}KM=ElM5UHosQ9=bl@hI?#OT^6-;s1HCK$sr)VbyWJqE_3biNY-oxy>Q zQ}J-m!uAay&nXBG=51{y_R!nfDqh|mtlmWt8s?vK8BpYS5@MkEqsq;fWXnsoEyB&m zks3u1F*W%`A+FA9!UH>=0s7sa7#niSev+8T7(f;Hh;0db$lAp%skRRRTS~>l`O#jY zHdwoHaA_TL&XP@&-$VTv8tTv-(q{_lPbnB_G6i#4*3fgkvM^u@L_PI-jM?d|bKdq` z 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

)v-g!!g~HQc8V3i#eqrsodW9Q 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 M|HcAn`O91c0QYV5cK`qY literal 0 HcmV?d00001 diff --git a/pkg/diagnostics/loc/zh-TW.json.gz b/pkg/diagnostics/loc/zh-TW.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..d95f48c53ae028cd03328867fa91ee5f59c4b2e3 GIT binary patch literal 81323 zcmV*5Ky<$!iwFP!00002|IGbuR~uKhFN%Ma`sa<3|2R%m1rm^R_u1W@r0-2eXQyvF zJfcW4`2n@> zy^r4ur)%NLbYo|uxw#cAZ?wjCTem0P`)}|4R?q5Xr)UjXrmGhW+je|?(A2A*S=7&1 z{)leax>c??uCEu(LdkFq-*RkS&Grqv_wjp~Z?oTJl=_cPTK5iviF1wfcf#k3&8f*? zb}N`z3!dBy{&BIsyWY6G@l$P_MynXEQ8sU;3Mt@6U<>g86gd z;%@NcMCzqjZvM=Xvis*oHM$i z`=b@JXb$NGqf{C+3a50()t%F(TXKvde9@onVG{#dO6E75T1E*smK#r3>$`K!b8o^+ zYr)C}`!kZu{8Ssu{D#xaDB;wSlKBm%%fAf{XInS!%B*r`oO0Q;eZg(Pv3Vf3 zTa}UtKV;l_jJ+P2JsMwWZtOSj-$U+#*@p=6LsMhSLzgW5qbcC9hK7d(9&*6s%j zbB&Fs-AAi>rf#0CIJRl~mQi9er?b_Q)86~|z2CuCM7+K`7tC+rz~Ss<0M4pq4LLOM%>mR+>$VZCDbzUkW1!Hm|*sW5hpl5W{_ zOG+l&N1TOc4cmrabxmFC&9h;Ht@ZkwmB#j)#-rQy-Ay*5!z+!IvBu(B5S4^e%}0X8wP$D%x?uN8^QKiFtOISc0QP&Yp!2t-JWP%f5MJ5l9IldxQ{z>B)8vG z%N5;sbVDy0gJwy0hT*wFk-ky0rsn8cpjbx z`ED7yYkH=8+AQitr#e_N^-9$)_*KJqT>Vq4sE;~Ty=)pbW83r!M#a=EA4MX&W1z3 zBkZS%kJKEjs?2L+>wK^>ha5NWJ__d7Nv2A_X)P}VQ?JCD0x7Yl;=IG*FS1(uB{6i+f;I0G{JK@T7Yiu|CVUh`z zn=|YO2aDn2ZsXed=H^v4jk^aQF*cuEi_4sD%sPYLm<1o%a9j`%u4fkT#tg}S_K)oW_eK8df@=beB*|;Zmfh8Gr`WY#;vt*Y9aXHPW|u#UH|C^_5D}u zlbbW))RO!^8`sX)_f}iiFSJd8?X!8-H|-+GWvguY)@gbbO4cb;&+4DB-GuW4 z_I$Tm@C|mvPaCDG>FHWO2qYBd!TziI!ESJCFI;&n7{NLHd@x%-oC(&)6?le!s*T6? z2tS(BQ_+~Ywx9{0@$&(aRrtNQ*@ zFtNkVkF*`}$;i47I}%RS2eqYW4jI*wAE{7qF-MHkrf$&7sj2FFAHT;g+Qg2Mp$}xG zi8GAq5GJ2>_K)-&tucHJPsvD@;xrq*;4{P z(R%ZJof!flJ%6rQI~Pp6LTQbAUfHUIBK{yB75OxHaJGeh!ljR) zS8eNWRkn!vd?ZegVN#%htDR>!9eFNzSWr$jw(kT>Pe`kQDS#S^)D>^EJm{1%3jXCd z(<+<(h*ONTW0(tU2E639d{)kkI38VUiz$!MB-ymsaSWGUv+KHgt$8qw6Y4k{+!^4L zDU`>W5W7UjJXSC{l0TBF_|`M4m^wT7?CFwu>@>Nb4`${0k+3>?evwpri}~5QQ698F z1#@iQJnO&P9NFeEU9s`~c5wGxFmXS4^7_Ai^H8C8hm3;x?px=$Y;w$|sqfFUZruH^ zofbD%oFU}S^Iay(>?+85Bn!gA9%Ztvx07r`Zo{ivN(M=QWr}3rKRJiMwPBC)^A+)D zd%n(e36}{lFJ^EUl}d@JbiNY_We@aYyIQ7)$pf1s#{Qt=l$auIxUMm(Gb;@24;U(= z1XHWw(oQ(P&{*9g6J+g55}<`>8e-Y+kAFKKrRQ7B23>!!;J{o(peY z0nKBqwR|s_x*~Kc+#)by*w)48C-EDfV4+}o%&Mw_Rbudo@ROtU_AwFNoLOtGj|H1o zgZZUkcbBmvaVjo)t2W;nyM$aLJ8>>7+hT^V^>@?lc4-IAh!MwSi)y-7LGa|b;y+

T#rYtH`G996pL}r#(t-vam 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 z z)H^U)h0PMD)$(|2>2JaGv*y~hlP6EgT~sW@qbu#-88N}N?<}Z22yQ%YKEBwtSC^fx zzPthidjfJU`|Z~>)$lpTRLv_8><%$e<@?MvwBJ<_Cffa-{yRwDDVIZTKo`29%5x;m z=FEcYEuoWjVH+o*4XJ5?Gy`TGCHME`6}%QUdCd!%zmpS<=ij4o*8cZQx{4)&CK9*+ zYqx;ylAz3x=YbJWo{}AfveL$cgV&c=5G3&7EFU3$oM9h#(J$Ol%NsI0vnVn(D0{9i zk1=vO9xrSD;&i5qz7$O^`jS{WQ<N0 z>kF7X(%Ilt&WnQDSwYAVtSms6I~Rd9{F_sM(gqxT5N}@rQ_KIP4d_MBc191#klhzb z^qW(E$~0!Cg2yiqz7_vn-&*&7nm7PqHcG2YZ*U5+KSwqXIrhy+`dS{G%tPkjkl|=* zt}hn>a+A``@)>{OqKut}C=|gAn9{X1z)L%M@}xZ=Vdp{F1{^#2c?Y@C_UOlSv0?qR zp?Pjm>o>ro4~QUyWKKqkQyel}58Z~|kdCoIvI{s>9tSV-9Iem?Nslz+Cr&^s@2X=b z`ZGaoqWSo58P6@k?S5yjF}~g0nGi-paO1f@v4B3L#@omK{N?6@pZw*uchzwudc*KY z^WIitc?ZAKT$%D0rv)8iFuq2RwzakTo7MW(EFyIUub%jmtM%;*&3iw7!gjNmjhKlO zc{gPGW_*a*Q=%$)@s!XUL-!bkYE8|<<8sMg{Hp{;9JPyZIsWxme?0a1?|-KivRHo) zi_88F7AdD9?;PN#EhTJT0$z$R-22s?gCPJR^Lq2{7{Ldl_8b>D&Qux~jB0HFv`+2L z^~R`Bqvh2gC2H=X2q)8J8E1v^{;y%$w8SSegl=sGh3d&>*{Vfypb@PAayBJSc3PVb z+5~)mt>5rGgMgigywJ1;3Qx0jZ-1{97Bhp>02^6fIXOoM8zT~fMhPQdyZEVi{fN1 z7eT}fSIV9_QZ^DfPc*NlRfes{bSep7W%8c?Vh*AY*Zt~jSYQD{N*$HVqKp}tTC^%~ zhOqEI?d!36)qMMUReynPAXL-aSFPgb7?5r}x+@7BMU|0!*%1xMlZ)3uX~KNY&@h+c zQ&28KB^8=l=g-Ux>~K~Prs|N3cN8zz`m&n?>4fH{Z}S-pg6mELbxWMJ{W zJeGwvste7#Z!^&DCm(;TpVm(fyC3s5GW9pBt)(Z;$5jCo&bG__XN~8Z&1X~1wTmD8 z;|Krt=@-BJf3)BK;fv3I|GQI61%o#g9AN&=0xBKsYp_k&to~o1+x^xq8Ln1PA#tF2 zugbo@a1k{t#Iep(XmCebNfd*>WuVffTOfL(~-l9@M@^NNX{|+SHJpK!Li0>8n9x5 zE6>>>=8Re zZlxa|wlG_yP=MS)d^T{;3&RhAG3swt8$WC}AIzihVGRcY(^Yqvn!Qf7EdqT`5+A$d z&>J4J6M)59FBa{J#>0{%t{jpT2 z8tF-L%wQ|Q?4$bI1?m{?a`e{9?N%&o#VCPiz_cO`0@f@FMl`qMsas6Ag($JkivZ71#wv8hbKGPk*IftL}PYW^Q#biLY7_Pfa6TpDVGd~b)S!PFLjpbl7G>aX+E0@ zmX`gMT_A0}-q^h_6tKfdL4jW)?LaP3cxc2p&{am_7{gr(pGkzxh|<(}E~ecyoqy@?&iNPSxnlE+Z?fM4QxtkxL{@AJ);cZywi|L#68W(bf^{sT zRWvS0YGq4m*gPjCeaW|4J_~e;0?eA1Pyzy@=hW5pf4A_AjX<2lj_8Wpf(K9Sf?NP#^Bm7r=`+`4tKX`QKU3Hwj zRf6o3^P+J#my{I8{ZEGg!ofB*I7^ zEi;q&)t%S_*s*+K-6M<6MPY&y61a)ht^6_bRwG!J$B6-I+=P_xELuOfmqWOaT znXJ7bUE-Ig=q(|8OLQfg+5>q%yry;n5-;XS%YsCIl5Kras8wvCi9QUzf%Q#1Sb%*| zNQ4J`Fa#Y15mM!S$8EI`xr?Lc0pfhW>49Plqe1&l{3L`ZhswHq7V_2wwl6cWkPlnv zOpWt*T32h#o_q5qI8Rgy>_~9LFCkak8ea*P$Tdq4LN43I)0(2>!#l{Yt@-m+|IS5! z@*a^xkyug)V6R^Gsw56i;el$1GmFGfUbF`-^FJW;LO&w)4AM_{xa7BFIGV1eDZNOL5dmJo{5?*6QGa`ZEjjUe z#~Q)l_-r+poJFsiKlu_hwy>ULVWYXb)?B|PQUhha?=UI8k7-e2nSJDd@z#83MMR>+FA=ZiCYRJvrc1X*yV?!ElX34i;3%pg8@`%4d>Qdr9yr1lvMmQEAB#2)F>vY0i4J*x zo4wE-o{POL^$0^*Y9+raf2Uhhb4qut?I_1p6flp@R_u%2(#2-F5fFTU^1?r!b@Y)D zLqrw-fXqG>%3Fhbj1Vr_kfnQ^J?BvI6nUfBU(p?lkUJE09QWUBH`g~CH|`KlzLfA5 z6_PeiNsbE-htbePjrNx=B9IQ_b34&ya{3SSY^)eP7oB~8io<|0!sE;Kw5^jf4f zlYBDZr64yh0JagVCC4vAZ;*gL3x{WE70kK@?;qGD1Ja9OTApEn0!6oi?xtJ?YOk~& zfPE(?XrrblIS$1m;xFC}CZ2_5sE;SesUfY+zl5?zktw6(ePK)$Pr_b`qeOSZ=i;PnBK%XL%B7fm135tg#Kw6XAIuh56CIv95QV13ShMWkn#~0IL`W$2_608+vu$n`W;GzTVAEF z&c8uNCs;~U{M$}$NrVFlE+ACJxYdH>f!%WiT&9i(AwjCfoV75T5yvRPNh@^s=H<;4 zyt)=V*_6L5Q`QX|p0sQOwj;{n63VO6gGJw*Nn>8r!13hj>RfZJO0{p?9mSu zJ#^Sk1*5AzA{~4iu!7i&tMp=}NSdS^Y`a5Y*(Gv*A*kL21BZ1(INi`w*WY(;N2TW( zXmA>$MdV6%A14@t+%s-o0g;VdBc50*xzRJJ$#2+xZ(qz06idrXHqS5b3KhAr3$Bo) zSpdU?z7u(*1zj(zuCbv~G0dRLu8 z$cD!5{dd**)Rv}l|7cYV}Dr!%tREX}#VZ|Ym@FjUy9YX-bV0wvC3e#{K>suEOE2>C^BzO+n;SZwP z)3dLX2)Mzv4~R=7k=Hg-K|^H^m@H`LU~s*CdxODsw1n~QD1F0rBsgRql~+*zBk<+v zB^kI_B&UK#dbqyB#Za<+S%LO+v;m>Rham8?Jz+TpdX|nRacmDMYEO3z39!C(QHJ}9 z_p*N%XzfK-KG&xt_o9sN0i{XsL$1AcxZ5mZA4u&q-$AGF^UUG8j+1sPS*RS1c|;Dq zT6mCUoP4;ePn%YWU42SOe+ueoW9=~>V~jJ%wt8nhbALJ7PUt!a^CA$FAOe_r&=8tzUmMcFrhm!zj9(ynJb<4dAQgB%S!pR3*GR)s0gPfP}LQ}wMX-JsH%GWB-;O)|RNygSA$wHwdT<|K|-o<_(9lW9Jj^{-uR-oNW_ zPG!C>oBdyBVo9mk0yEYOSIsJUW~n0H09KNS)stuA%in&+lT>*$x>#|*M+b!>;EE-k zD9){`^HOn<`>qzGWCTHtjR~%BRDb&!6*k{^?9VX0m8wd{w?(#Vgu-Ebn}~Cx9#nY* zlpm13ps?5}TW@s408|OJN3u3?QDQC`v0mgig+B%Injx|sA~`;*gDe8R)i zbn5~wD{E15Z;KLe@-Bk|RD>qTsf_+_?tjdHYfDbPkQVc2m?rhV=rlzVW-{MEL7eVp zD3dDl?Vi&F(;+LVM+%o{N>1_}My4qi+DMgcsz?ruATWk2dTjD zwy3OuVpG74fo)Py^U~mu;Zs0C0uqcUB+Yci+V09web3}Q{DF|p(+5Leo$x*?s!Cid zvL`Wvn?(HfEYk$at{n?;71XR`$i2QTB5%n+S0p16&Dn0r9TsxEBw~P(Tt)uNLj0GL zt0}*Pq`IGFMVEeU2&+lEslckg(OMJbb4E zIf9%{F~_S2pyR+6m{s7*2r+i ze>~It@n+`4XPIBXH$P@yVhzcJ;pEGZ;uNMO$AfvYq2q=wWg@H*AL7sANbq1oVn$QyKjij-m4m7=&{mfGdv4 zMamMy82{{^!!NOa;O`xS?L_w9wxb#Dur^>j!@8%P)s!5Z^sk_|uRi!B!>rfE3z(^x zp>Ez)$Ec%s)iM0rN!HarX8!D+%X~;*{YS7^3KdK2RtGh9|*!v zi1#X}Rk6sI{1MkSgn~jDhMZ_nyse=z3uY{aq2Qt;b>tgL&G-qc`lz+(#eLQ(Wun-= zG&vDxSoY7(dwdST`OAwimF_H+zu+{mb>rllf{(R1Jtg>`#WZluDn4!PL{9PIO0fg! zlF(EHZB8x-#`7SjnqubBq(!-Fo}4={0Q!m*rr&edx3uqjv)Qb?nf=ZAV0|Ur(gJ!G z({|t1VtY6dFu)a(1NdgbW$kK89s=%hS2a%(h|F*_s*vnl;J+R7Dbm#5eD_`lXkwC} zD{%9sZVxWJK#3DRJ^27pI&|U~p(elg8EQWMTi9Bg1GN7{9rhHdy?Iq^pTuCr6va*! z0sXyMWsh{5^R=h^2fMEGx%MJW(R(&_5CE!Ua!maVZr)}U)}LHr#KoPGn`sCZ#8ag`J3QQMDqFs z?OZWELSbp2p8DnIpKE2zjaTxR;`G&5#c1Fm17FMd>sNyf3VI~ULXy>|$e!Mt1$g(a z|MtIuw;k)V#Iu5Rq`XOFM&@O7GT2r&T5G|+8m1xv$|!FGFmN1gz_fS@BQ=r(ocKs1 zUU7(8p|A5+Y|HgD!>SDP$gzAogE_?3mlyfyu(-t8j|;En&_IHgx-$Os)#mgJMx0|; zHe2QUSL!>Pjqz=)q-EAC4>lZ7l9K82lZfZW+qF5&M9nAWO)hIf)jXJ9!VooPHOlEtsGic7(a`1g6IHiBvM(w0w`POetIhks zB-lHFG`8%)BN5vGTOSk>A!ItYCm zQr!K8)zl^;v43-Tgr|bg$BNQJD-dZ)$^i&}!#|Ys0Ajr**{`$vQ_!k$3R>CA9T%)K z%GrIz+Eb`36G};vawnw$cvvA#efvU;BRSiFKw*+#Cv&C7c#)4jR|9(4HMELVW^V;l zJG<;nCmpZQ2YTAq@U5@^zBAWaUSS$7=xP4r>zS{`Pri;fMt4`(Qhx82@cYmVxRr_R z1&%)ZqwP?tR@t^k-iP0S>25hlMd`qEFkm|wvK*T~J@;$V|8-mk`_9y%9S6j8et5@0 zV%E|nKA=wu?&(C+o!d8q2I3yEeaaoMLI{c>;3kQ1H)B=Vpy3hjkPH9fg&veBNJZ!D z*X(@@X^PDOdIlru)qt6G)^v^Vl@|X%{7>q)K`?4J3xSd(=7=w5^c;(@c?rEj**ly!J@6IeUv*z~UBrF{= zwquL}N+1Cg6o-Jq9}5L=P{NnNySBeY)K%5pHN7+T+T;nz%yv~x_jFg+uj*G9;1747 z>Ay8Ar%(Umbh85gCv_P)8SJyCkw1Gzj|DQy9%%e(dT=&I#~srppqTBr!aNctzpArm z&mP0~fC}o-un!3Bilo!ZGQ%)7y6=ak??%{G^c8hG9EWvmgWorGDcs2R&hi^UrF@iV zu_QllHtc3SD7L?r#Jw(_EIcJIjIPN|F$rfE1w^Z`zNy(<97)XE|M_bxF%P>m?S0zP zH*(abEi${d#pWmjMOu-(mjhk^x1HQu_9lSAwb~XL-C)%%MdjS0XRO`|JV$On(}lME zw4Y|8gAx2ZEsQ@^Gb!KB#ful6W(A*aRzR-xgUXpoByRA?;*Etk6*^}O;Ipu(mv8}k z7DjzdArI`Pm=}ilS-!zA(bDV77lZV|sGld8&vEe0#5bhRY=}+%lXg3*A4nQ>+dbqh z(Gl{*TT(X5rMf7mwyAM1EBLqlv;FRWFcNmg~-9^8?hVPmAw@-BsRo zMbS(sV4QVcIdn__`iPJ^4MdbBeRP|3P4k|C@1Fm7HX7Q?xFFP}j>9P~{g6%iI} zPDs_^goZig7Q#8{xrObtZ;bW40%M5;WO>Cv$)zUCPfU&GqH!9%OrcdhtP9(&N2{1C ztB3+DLEM)f5f=tsA(Bg?E223O&9+3UtvTnGS>sggA01&-@$A*mM61j)6&)x;hTK-) zgH5JHi^AD5rCYb&=UDKriq5}9;$SlV*utU8mC=Wg>7kuMby0;W$>LnHB@5-Z|1>>aWzw7PNJ=m(B*z)1dl}Vqetf$xg`2%Sk>5y+^_o5wtQlQsnpH*X z_6ly!{C4S3V*}7^aC_Ui0@a+QddSzM7>o^-I-a5Nd`>MNb0x~v*(gv)Ct1_d08V2( zBM(z4igkK`CLYI|yz- zbRYTkOB{55_6BA^Vs{Ar(NSQjYNY&KN~sphZlTu;l5iVZ z6n&!s*%_v(NYF)eCmLjNet2j2;0^R<21G4qQ_;QXW^v^wRwoZ|RSDP`M0I)}z249*WcHtKP);Lkkkn6)97`B^OeqLILRc;*PC)3`V%g8ZkiMVq)y_1M zyAtEs=SeWCW_TQx3v&XofnP5(ojestVBS$Sa4iGc9IvWm;))`KniQ8*;XwA7kM84Qgbf`qJRD04+LI ze7s7vT?fBB(4lCY$FU}kg4Uz9De}plYRk!9*(9DN_#+47nVQRUv;i>tTXr2B}}C# zfm;fOSQr8*EIFGqN1jZusyx-5`@DMH!?-6_i>m&8M~wd$uxxrh^3)KEGy*nsnaeYX zat_Qq^Rl7A%#t2nVdeJid5Epe#7lzuk;=W~^3^NizggfQS79|P4gd`J#t!9xhqDj{%);iCMPaS0); zG$&ji{)wa=aT3h*qB&@~qqRV-{0Wy}Ri|nXMaLYDR{eZ)xvEB_m?#Zeb@1RbT3>KR zl%|)H&Z=Dh1;O#3f2!D$KLt>Fmd>8f^>I<5A~}d$A39g=LVgJJk{>!H z9Ux1VydV_OZbWeuqyROtR5Ca*-8vGQ^-@9URan)&^>P2j6VAYK@c7Bz_S4~mdkEF^x3#i1ONb8G^zjq literal 0 HcmV?d00001 diff --git a/pkg/diagnostics/loc_generated.go b/pkg/diagnostics/loc_generated.go new file mode 100644 index 00000000..c71b3dcf --- /dev/null +++ b/pkg/diagnostics/loc_generated.go @@ -0,0 +1,151 @@ +// Code generated by generate.go; DO NOT EDIT. + +package diagnostics + +import ( + "compress/gzip" + _ "embed" + "strings" + "sync" + + "github.com/go-json-experiment/json" + "golang.org/x/text/language" +) + +var matcher = language.NewMatcher([]language.Tag{ + language.English, + language.MustParse("zh-CN"), + language.MustParse("zh-TW"), + language.MustParse("cs-CZ"), + language.MustParse("de-DE"), + language.MustParse("es-ES"), + language.MustParse("fr-FR"), + language.MustParse("it-IT"), + language.MustParse("ja-JP"), + language.MustParse("ko-KR"), + language.MustParse("pl-PL"), + language.MustParse("pt-BR"), + language.MustParse("ru-RU"), + language.MustParse("tr-TR"), +}) + +var localeFuncs = []func() map[Key]string{ + nil, // English (default) + zhCN, + zhTW, + csCZ, + deDE, + esES, + frFR, + itIT, + jaJP, + koKR, + plPL, + ptBR, + ruRU, + trTR, +} + +func loadLocaleData(data string) map[Key]string { + gr, err := gzip.NewReader(strings.NewReader(data)) + if err != nil { + panic("failed to create gzip reader: " + err.Error()) + } + defer gr.Close() + var result map[Key]string + if err := json.UnmarshalRead(gr, &result); err != nil { + panic("failed to unmarshal locale data: " + err.Error()) + } + return result +} + +//go:embed loc/zh-CN.json.gz +var zhCNData string + +var zhCN = sync.OnceValue(func() map[Key]string { + return loadLocaleData(zhCNData) +}) + +//go:embed loc/zh-TW.json.gz +var zhTWData string + +var zhTW = sync.OnceValue(func() map[Key]string { + return loadLocaleData(zhTWData) +}) + +//go:embed loc/cs-CZ.json.gz +var csCZData string + +var csCZ = sync.OnceValue(func() map[Key]string { + return loadLocaleData(csCZData) +}) + +//go:embed loc/de-DE.json.gz +var deDEData string + +var deDE = sync.OnceValue(func() map[Key]string { + return loadLocaleData(deDEData) +}) + +//go:embed loc/es-ES.json.gz +var esESData string + +var esES = sync.OnceValue(func() map[Key]string { + return loadLocaleData(esESData) +}) + +//go:embed loc/fr-FR.json.gz +var frFRData string + +var frFR = sync.OnceValue(func() map[Key]string { + return loadLocaleData(frFRData) +}) + +//go:embed loc/it-IT.json.gz +var itITData string + +var itIT = sync.OnceValue(func() map[Key]string { + return loadLocaleData(itITData) +}) + +//go:embed loc/ja-JP.json.gz +var jaJPData string + +var jaJP = sync.OnceValue(func() map[Key]string { + return loadLocaleData(jaJPData) +}) + +//go:embed loc/ko-KR.json.gz +var koKRData string + +var koKR = sync.OnceValue(func() map[Key]string { + return loadLocaleData(koKRData) +}) + +//go:embed loc/pl-PL.json.gz +var plPLData string + +var plPL = sync.OnceValue(func() map[Key]string { + return loadLocaleData(plPLData) +}) + +//go:embed loc/pt-BR.json.gz +var ptBRData string + +var ptBR = sync.OnceValue(func() map[Key]string { + return loadLocaleData(ptBRData) +}) + +//go:embed loc/ru-RU.json.gz +var ruRUData string + +var ruRU = sync.OnceValue(func() map[Key]string { + return loadLocaleData(ruRUData) +}) + +//go:embed loc/tr-TR.json.gz +var trTRData string + +var trTR = sync.OnceValue(func() map[Key]string { + return loadLocaleData(trTRData) +}) diff --git a/pkg/diagnosticwriter/diagnosticwriter.go b/pkg/diagnosticwriter/diagnosticwriter.go index 2f2dd92b..7cc7c755 100644 --- a/pkg/diagnosticwriter/diagnosticwriter.go +++ b/pkg/diagnosticwriter/diagnosticwriter.go @@ -12,6 +12,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/diagnostics" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/scanner" "github.com/buke/typescript-go-internal/pkg/tspath" ) @@ -30,7 +31,7 @@ type Diagnostic interface { Len() int Code() int32 Category() diagnostics.Category - Message() string + Localize(locale locale.Locale) string MessageChain() []Diagnostic RelatedInformation() []Diagnostic } @@ -98,6 +99,7 @@ func CompareASTDiagnostics(a, b *ASTDiagnostic) int { } type FormattingOptions struct { + Locale locale.Locale tspath.ComparePathsOptions NewLine string } @@ -139,7 +141,7 @@ func FormatDiagnosticWithColorAndContext(output io.Writer, diagnostic Diagnostic writeWithStyleAndReset(output, diagnostic.Category().Name(), getCategoryFormat(diagnostic.Category())) fmt.Fprintf(output, "%s TS%d: %s", foregroundColorEscapeGrey, diagnostic.Code(), resetEscapeSequence) - WriteFlattenedDiagnosticMessage(output, diagnostic, formatOpts.NewLine) + WriteFlattenedDiagnosticMessage(output, diagnostic, formatOpts.NewLine, formatOpts.Locale) if diagnostic.File() != nil && diagnostic.Code() != diagnostics.File_appears_to_be_binary.Code() { fmt.Fprint(output, formatOpts.NewLine) @@ -156,7 +158,7 @@ func FormatDiagnosticWithColorAndContext(output io.Writer, diagnostic Diagnostic pos := relatedInformation.Pos() WriteLocation(output, file, pos, formatOpts, writeWithStyleAndReset) fmt.Fprint(output, " - ") - WriteFlattenedDiagnosticMessage(output, relatedInformation, formatOpts.NewLine) + WriteFlattenedDiagnosticMessage(output, relatedInformation, formatOpts.NewLine, formatOpts.Locale) writeCodeSnippet(output, file, pos, relatedInformation.Len(), foregroundColorEscapeCyan, " ", formatOpts) } fmt.Fprint(output, formatOpts.NewLine) @@ -248,33 +250,33 @@ func writeCodeSnippet(writer io.Writer, sourceFile FileLike, start int, length i } } -func FlattenDiagnosticMessage(d Diagnostic, newLine string) string { +func FlattenDiagnosticMessage(d Diagnostic, newLine string, locale locale.Locale) string { var output strings.Builder - WriteFlattenedDiagnosticMessage(&output, d, newLine) + WriteFlattenedDiagnosticMessage(&output, d, newLine, locale) return output.String() } -func WriteFlattenedASTDiagnosticMessage(writer io.Writer, diagnostic *ast.Diagnostic, newline string) { - WriteFlattenedDiagnosticMessage(writer, WrapASTDiagnostic(diagnostic), newline) +func WriteFlattenedASTDiagnosticMessage(writer io.Writer, diagnostic *ast.Diagnostic, newline string, locale locale.Locale) { + WriteFlattenedDiagnosticMessage(writer, WrapASTDiagnostic(diagnostic), newline, locale) } -func WriteFlattenedDiagnosticMessage(writer io.Writer, diagnostic Diagnostic, newline string) { - fmt.Fprint(writer, diagnostic.Message()) +func WriteFlattenedDiagnosticMessage(writer io.Writer, diagnostic Diagnostic, newline string, locale locale.Locale) { + fmt.Fprint(writer, diagnostic.Localize(locale)) for _, chain := range diagnostic.MessageChain() { - flattenDiagnosticMessageChain(writer, chain, newline, 1 /*level*/) + flattenDiagnosticMessageChain(writer, chain, newline, locale, 1 /*level*/) } } -func flattenDiagnosticMessageChain(writer io.Writer, chain Diagnostic, newLine string, level int) { +func flattenDiagnosticMessageChain(writer io.Writer, chain Diagnostic, newLine string, locale locale.Locale, level int) { fmt.Fprint(writer, newLine) for range level { fmt.Fprint(writer, " ") } - fmt.Fprint(writer, chain.Message()) + fmt.Fprint(writer, chain.Localize(locale)) for _, child := range chain.MessageChain() { - flattenDiagnosticMessageChain(writer, child, newLine, level+1) + flattenDiagnosticMessageChain(writer, child, newLine, locale, level+1) } } @@ -345,21 +347,21 @@ func WriteErrorSummaryText(output io.Writer, allDiagnostics []Diagnostic, format if totalErrorCount == 1 { // Special-case a single error. if len(errorSummary.GlobalErrors) > 0 || firstFileName == "" { - message = diagnostics.Found_1_error.Format() + message = diagnostics.Found_1_error.Localize(formatOpts.Locale) } else { - message = diagnostics.Found_1_error_in_0.Format(firstFileName) + message = diagnostics.Found_1_error_in_0.Localize(formatOpts.Locale, firstFileName) } } else { switch numErroringFiles { case 0: // No file-specific errors. - message = diagnostics.Found_0_errors.Format(totalErrorCount) + message = diagnostics.Found_0_errors.Localize(formatOpts.Locale, totalErrorCount) case 1: // One file with errors. - message = diagnostics.Found_0_errors_in_the_same_file_starting_at_Colon_1.Format(totalErrorCount, firstFileName) + message = diagnostics.Found_0_errors_in_the_same_file_starting_at_Colon_1.Localize(formatOpts.Locale, totalErrorCount, firstFileName) default: // Multiple files with errors. - message = diagnostics.Found_0_errors_in_1_files.Format(totalErrorCount, numErroringFiles) + message = diagnostics.Found_0_errors_in_1_files.Localize(formatOpts.Locale, totalErrorCount, numErroringFiles) } } fmt.Fprint(output, formatOpts.NewLine) @@ -418,7 +420,7 @@ func writeTabularErrorsDisplay(output io.Writer, errorSummary *ErrorSummary, for // !!! // TODO (drosen): This was never localized. // Should make this better. - headerRow := diagnostics.Errors_Files.Message() + headerRow := diagnostics.Errors_Files.Localize(formatOpts.Locale) leftColumnHeadingLength := len(strings.Split(headerRow, " ")[0]) lengthOfBiggestErrorCount := len(strconv.Itoa(maxErrors)) leftPaddingGoal := max(leftColumnHeadingLength, lengthOfBiggestErrorCount) @@ -470,7 +472,7 @@ func WriteFormatDiagnostic(output io.Writer, diagnostic Diagnostic, formatOpts * } fmt.Fprintf(output, "%s TS%d: ", diagnostic.Category().Name(), diagnostic.Code()) - WriteFlattenedDiagnosticMessage(output, diagnostic, formatOpts.NewLine) + WriteFlattenedDiagnosticMessage(output, diagnostic, formatOpts.NewLine, formatOpts.Locale) fmt.Fprint(output, formatOpts.NewLine) } @@ -478,12 +480,12 @@ func FormatDiagnosticsStatusWithColorAndTime(output io.Writer, time string, diag fmt.Fprint(output, "[") writeWithStyleAndReset(output, time, foregroundColorEscapeGrey) fmt.Fprint(output, "] ") - WriteFlattenedDiagnosticMessage(output, diag, formatOpts.NewLine) + WriteFlattenedDiagnosticMessage(output, diag, formatOpts.NewLine, formatOpts.Locale) } func FormatDiagnosticsStatusAndTime(output io.Writer, time string, diag Diagnostic, formatOpts *FormattingOptions) { fmt.Fprint(output, time, " - ") - WriteFlattenedDiagnosticMessage(output, diag, formatOpts.NewLine) + WriteFlattenedDiagnosticMessage(output, diag, formatOpts.NewLine, formatOpts.Locale) } var ScreenStartingCodes = []int32{ diff --git a/pkg/execute/build/buildtask.go b/pkg/execute/build/buildtask.go index de9600e1..0fe4a2b2 100644 --- a/pkg/execute/build/buildtask.go +++ b/pkg/execute/build/buildtask.go @@ -220,7 +220,7 @@ func (t *BuildTask) compileAndEmit(orchestrator *Orchestrator, path tspath.Path) Config: t.resolved, Host: &compilerHost{ host: orchestrator.host, - trace: tsc.GetTraceWithWriterFromSys(&t.result.builder, orchestrator.opts.Testing), + trace: tsc.GetTraceWithWriterFromSys(&t.result.builder, orchestrator.opts.Command.Locale(), orchestrator.opts.Testing), }, JSDocParsingMode: ast.JSDocParsingModeParseForTypeErrors, }) diff --git a/pkg/execute/build/compilerHost.go b/pkg/execute/build/compilerHost.go index ea94fb32..893480ba 100644 --- a/pkg/execute/build/compilerHost.go +++ b/pkg/execute/build/compilerHost.go @@ -3,6 +3,7 @@ package build import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/compiler" + "github.com/buke/typescript-go-internal/pkg/diagnostics" "github.com/buke/typescript-go-internal/pkg/tsoptions" "github.com/buke/typescript-go-internal/pkg/tspath" "github.com/buke/typescript-go-internal/pkg/vfs" @@ -10,7 +11,7 @@ import ( type compilerHost struct { host *host - trace func(msg string) + trace func(msg *diagnostics.Message, args ...any) } var _ compiler.CompilerHost = (*compilerHost)(nil) @@ -27,8 +28,8 @@ func (h *compilerHost) GetCurrentDirectory() string { return h.host.GetCurrentDirectory() } -func (h *compilerHost) Trace(msg string) { - h.trace(msg) +func (h *compilerHost) Trace(msg *diagnostics.Message, args ...any) { + h.trace(msg, args...) } func (h *compilerHost) GetSourceFile(opts ast.SourceFileParseOptions) *ast.SourceFile { diff --git a/pkg/execute/build/host.go b/pkg/execute/build/host.go index 6f0e569d..06ed463d 100644 --- a/pkg/execute/build/host.go +++ b/pkg/execute/build/host.go @@ -6,6 +6,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/compiler" + "github.com/buke/typescript-go-internal/pkg/diagnostics" "github.com/buke/typescript-go-internal/pkg/execute/incremental" "github.com/buke/typescript-go-internal/pkg/execute/tsc" "github.com/buke/typescript-go-internal/pkg/tsoptions" @@ -45,7 +46,7 @@ func (h *host) GetCurrentDirectory() string { return h.host.GetCurrentDirectory() } -func (h *host) Trace(msg string) { +func (h *host) Trace(msg *diagnostics.Message, args ...any) { panic("build.Orchestrator.host does not support tracing, use a different host for tracing") } diff --git a/pkg/execute/build/orchestrator.go b/pkg/execute/build/orchestrator.go index 3ef04b9e..85eae230 100644 --- a/pkg/execute/build/orchestrator.go +++ b/pkg/execute/build/orchestrator.go @@ -364,11 +364,11 @@ func (o *Orchestrator) getWriter(task *BuildTask) io.Writer { } func (o *Orchestrator) createBuilderStatusReporter(task *BuildTask) tsc.DiagnosticReporter { - return tsc.CreateBuilderStatusReporter(o.opts.Sys, o.getWriter(task), o.opts.Command.CompilerOptions, o.opts.Testing) + return tsc.CreateBuilderStatusReporter(o.opts.Sys, o.getWriter(task), o.opts.Command.Locale(), o.opts.Command.CompilerOptions, o.opts.Testing) } func (o *Orchestrator) createDiagnosticReporter(task *BuildTask) tsc.DiagnosticReporter { - return tsc.CreateDiagnosticReporter(o.opts.Sys, o.getWriter(task), o.opts.Command.CompilerOptions) + return tsc.CreateDiagnosticReporter(o.opts.Sys, o.getWriter(task), o.opts.Command.Locale(), o.opts.Command.CompilerOptions) } func NewOrchestrator(opts Options) *Orchestrator { @@ -392,9 +392,9 @@ func NewOrchestrator(opts Options) *Orchestrator { mTimes: &collections.SyncMap[tspath.Path, time.Time]{}, } if opts.Command.CompilerOptions.Watch.IsTrue() { - orchestrator.watchStatusReporter = tsc.CreateWatchStatusReporter(opts.Sys, opts.Command.CompilerOptions, opts.Testing) + orchestrator.watchStatusReporter = tsc.CreateWatchStatusReporter(opts.Sys, opts.Command.Locale(), opts.Command.CompilerOptions, opts.Testing) } else { - orchestrator.errorSummaryReporter = tsc.CreateReportErrorSummary(opts.Sys, opts.Command.CompilerOptions) + orchestrator.errorSummaryReporter = tsc.CreateReportErrorSummary(opts.Sys, opts.Command.Locale(), opts.Command.CompilerOptions) } return orchestrator } diff --git a/pkg/execute/incremental/buildInfo.go b/pkg/execute/incremental/buildInfo.go index 10c18bde..d4cb0781 100644 --- a/pkg/execute/incremental/buildInfo.go +++ b/pkg/execute/incremental/buildInfo.go @@ -201,7 +201,8 @@ type BuildInfoDiagnostic struct { End int `json:"end,omitzero"` Code int32 `json:"code,omitzero"` Category diagnostics.Category `json:"category,omitzero"` - Message string `json:"message,omitzero"` + MessageKey diagnostics.Key `json:"messageKey,omitzero"` + MessageArgs []string `json:"messageArgs,omitzero"` MessageChain []*BuildInfoDiagnostic `json:"messageChain,omitzero"` RelatedInformation []*BuildInfoDiagnostic `json:"relatedInformation,omitzero"` ReportsUnnecessary bool `json:"reportsUnnecessary,omitzero"` diff --git a/pkg/execute/incremental/buildinfotosnapshot.go b/pkg/execute/incremental/buildinfotosnapshot.go index ecd3d886..2c2a497b 100644 --- a/pkg/execute/incremental/buildinfotosnapshot.go +++ b/pkg/execute/incremental/buildinfotosnapshot.go @@ -79,7 +79,8 @@ func (t *toSnapshot) toBuildInfoDiagnosticsWithFileName(diagnostics []*BuildInfo end: d.End, code: d.Code, category: d.Category, - message: d.Message, + messageKey: d.MessageKey, + messageArgs: d.MessageArgs, messageChain: t.toBuildInfoDiagnosticsWithFileName(d.MessageChain), relatedInformation: t.toBuildInfoDiagnosticsWithFileName(d.RelatedInformation), reportsUnnecessary: d.ReportsUnnecessary, diff --git a/pkg/execute/incremental/snapshot.go b/pkg/execute/incremental/snapshot.go index 9179771a..24414dae 100644 --- a/pkg/execute/incremental/snapshot.go +++ b/pkg/execute/incremental/snapshot.go @@ -137,7 +137,8 @@ type buildInfoDiagnosticWithFileName struct { end int code int32 category diagnostics.Category - message string + messageKey diagnostics.Key + messageArgs []string messageChain []*buildInfoDiagnosticWithFileName relatedInformation []*buildInfoDiagnosticWithFileName reportsUnnecessary bool @@ -165,12 +166,13 @@ func (b *buildInfoDiagnosticWithFileName) toDiagnostic(p *compiler.Program, file for _, info := range b.relatedInformation { relatedInformation = append(relatedInformation, info.toDiagnostic(p, fileForDiagnostic)) } - return ast.NewDiagnosticWith( + return ast.NewDiagnosticFromSerialized( fileForDiagnostic, core.NewTextRange(b.pos, b.end), b.code, b.category, - b.message, + b.messageKey, + b.messageArgs, messageChain, relatedInformation, b.reportsUnnecessary, @@ -301,7 +303,12 @@ func diagnosticToStringBuilder(diagnostic *ast.Diagnostic, file *ast.SourceFile, } builder.WriteString(diagnostic.Category().Name()) builder.WriteString(fmt.Sprintf("%d: ", diagnostic.Code())) - builder.WriteString(diagnostic.Message()) + builder.WriteString(string(diagnostic.MessageKey())) + builder.WriteString("\n") + for _, arg := range diagnostic.MessageArgs() { + builder.WriteString(arg) + builder.WriteString("\n") + } for _, chain := range diagnostic.MessageChain() { diagnosticToStringBuilder(chain, file, builder) } diff --git a/pkg/execute/incremental/snapshottobuildinfo.go b/pkg/execute/incremental/snapshottobuildinfo.go index 0a56d9a0..ab52192e 100644 --- a/pkg/execute/incremental/snapshottobuildinfo.go +++ b/pkg/execute/incremental/snapshottobuildinfo.go @@ -128,7 +128,8 @@ func (t *toBuildInfo) toBuildInfoDiagnosticsFromFileNameDiagnostics(diagnostics End: d.end, Code: d.code, Category: d.category, - Message: d.message, + MessageKey: d.messageKey, + MessageArgs: d.messageArgs, MessageChain: t.toBuildInfoDiagnosticsFromFileNameDiagnostics(d.messageChain), RelatedInformation: t.toBuildInfoDiagnosticsFromFileNameDiagnostics(d.relatedInformation), ReportsUnnecessary: d.reportsUnnecessary, @@ -154,7 +155,8 @@ func (t *toBuildInfo) toBuildInfoDiagnosticsFromDiagnostics(filePath tspath.Path End: d.Loc().End(), Code: d.Code(), Category: d.Category(), - Message: d.Message(), + MessageKey: d.MessageKey(), + MessageArgs: d.MessageArgs(), MessageChain: t.toBuildInfoDiagnosticsFromDiagnostics(filePath, d.MessageChain()), RelatedInformation: t.toBuildInfoDiagnosticsFromDiagnostics(filePath, d.RelatedInformation()), ReportsUnnecessary: d.ReportsUnnecessary(), diff --git a/pkg/execute/tsc.go b/pkg/execute/tsc.go index dacd5739..38b8563f 100644 --- a/pkg/execute/tsc.go +++ b/pkg/execute/tsc.go @@ -15,6 +15,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/execute/tsc" "github.com/buke/typescript-go-internal/pkg/format" "github.com/buke/typescript-go-internal/pkg/jsonutil" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/parser" "github.com/buke/typescript-go-internal/pkg/pprof" "github.com/buke/typescript-go-internal/pkg/tsoptions" @@ -61,11 +62,8 @@ func fmtMain(sys tsc.System, input, output string) tsc.ExitStatus { } func tscBuildCompilation(sys tsc.System, buildCommand *tsoptions.ParsedBuildCommandLine, testing tsc.CommandLineTesting) tsc.CommandLineResult { - reportDiagnostic := tsc.CreateDiagnosticReporter(sys, sys.Writer(), buildCommand.CompilerOptions) - - // if (buildOptions.locale) { - // validateLocaleAndSetLanguage(buildOptions.locale, sys, errors); - // } + locale := buildCommand.Locale() + reportDiagnostic := tsc.CreateDiagnosticReporter(sys, sys.Writer(), locale, buildCommand.CompilerOptions) if len(buildCommand.Errors) > 0 { for _, err := range buildCommand.Errors { @@ -81,8 +79,8 @@ func tscBuildCompilation(sys tsc.System, buildCommand *tsoptions.ParsedBuildComm } if buildCommand.CompilerOptions.Help.IsTrue() { - tsc.PrintVersion(sys) - tsc.PrintBuildHelp(sys, tsoptions.BuildOpts) + tsc.PrintVersion(sys, locale) + tsc.PrintBuildHelp(sys, locale, tsoptions.BuildOpts) return tsc.CommandLineResult{Status: tsc.ExitStatusSuccess} } @@ -96,8 +94,8 @@ func tscBuildCompilation(sys tsc.System, buildCommand *tsoptions.ParsedBuildComm func tscCompilation(sys tsc.System, commandLine *tsoptions.ParsedCommandLine, testing tsc.CommandLineTesting) tsc.CommandLineResult { configFileName := "" - reportDiagnostic := tsc.CreateDiagnosticReporter(sys, sys.Writer(), commandLine.CompilerOptions()) - // if commandLine.Options().Locale != nil + locale := commandLine.Locale() + reportDiagnostic := tsc.CreateDiagnosticReporter(sys, sys.Writer(), locale, commandLine.CompilerOptions()) if len(commandLine.Errors) > 0 { for _, e := range commandLine.Errors { @@ -113,17 +111,17 @@ func tscCompilation(sys tsc.System, commandLine *tsoptions.ParsedCommandLine, te } if commandLine.CompilerOptions().Init.IsTrue() { - tsc.WriteConfigFile(sys, reportDiagnostic, commandLine.Raw.(*collections.OrderedMap[string, any])) + tsc.WriteConfigFile(sys, locale, reportDiagnostic, commandLine.Raw.(*collections.OrderedMap[string, any])) return tsc.CommandLineResult{Status: tsc.ExitStatusSuccess} } if commandLine.CompilerOptions().Version.IsTrue() { - tsc.PrintVersion(sys) + tsc.PrintVersion(sys, locale) return tsc.CommandLineResult{Status: tsc.ExitStatusSuccess} } if commandLine.CompilerOptions().Help.IsTrue() || commandLine.CompilerOptions().All.IsTrue() { - tsc.PrintHelp(sys, commandLine) + tsc.PrintHelp(sys, locale, commandLine) return tsc.CommandLineResult{Status: tsc.ExitStatusSuccess} } @@ -161,8 +159,8 @@ func tscCompilation(sys tsc.System, commandLine *tsoptions.ParsedCommandLine, te if commandLine.CompilerOptions().ShowConfig.IsTrue() { reportDiagnostic(ast.NewCompilerDiagnostic(diagnostics.Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0, tspath.NormalizePath(sys.GetCurrentDirectory()))) } else { - tsc.PrintVersion(sys) - tsc.PrintHelp(sys, commandLine) + tsc.PrintVersion(sys, locale) + tsc.PrintHelp(sys, locale, commandLine) } return tsc.CommandLineResult{Status: tsc.ExitStatusDiagnosticsPresent_OutputsSkipped} } @@ -185,10 +183,10 @@ func tscCompilation(sys tsc.System, commandLine *tsoptions.ParsedCommandLine, te } configForCompilation = configParseResult // Updater to reflect pretty - reportDiagnostic = tsc.CreateDiagnosticReporter(sys, sys.Writer(), commandLine.CompilerOptions()) + reportDiagnostic = tsc.CreateDiagnosticReporter(sys, sys.Writer(), locale, commandLine.CompilerOptions()) } - reportErrorSummary := tsc.CreateReportErrorSummary(sys, configForCompilation.CompilerOptions()) + reportErrorSummary := tsc.CreateReportErrorSummary(sys, locale, configForCompilation.CompilerOptions()) if compilerOptionsFromCommandLine.ShowConfig.IsTrue() { showConfig(sys, configForCompilation.CompilerOptions()) return tsc.CommandLineResult{Status: tsc.ExitStatusSuccess} @@ -240,8 +238,8 @@ func findConfigFile(searchPath string, fileExists func(string) bool, configName return result } -func getTraceFromSys(sys tsc.System, testing tsc.CommandLineTesting) func(msg string) { - return tsc.GetTraceWithWriterFromSys(sys.Writer(), testing) +func getTraceFromSys(sys tsc.System, locale locale.Locale, testing tsc.CommandLineTesting) func(msg *diagnostics.Message, args ...any) { + return tsc.GetTraceWithWriterFromSys(sys.Writer(), locale, testing) } func performIncrementalCompilation( @@ -253,7 +251,7 @@ func performIncrementalCompilation( compileTimes *tsc.CompileTimes, testing tsc.CommandLineTesting, ) tsc.CommandLineResult { - host := compiler.NewCachedFSCompilerHost(sys.GetCurrentDirectory(), sys.FS(), sys.DefaultLibraryPath(), extendedConfigCache, getTraceFromSys(sys, testing)) + host := compiler.NewCachedFSCompilerHost(sys.GetCurrentDirectory(), sys.FS(), sys.DefaultLibraryPath(), extendedConfigCache, getTraceFromSys(sys, config.Locale(), testing)) buildInfoReadStart := sys.Now() oldProgram := incremental.ReadBuildInfoProgram(config, incremental.NewBuildInfoReader(host), host) compileTimes.BuildInfoReadTime = sys.Now().Sub(buildInfoReadStart) @@ -296,7 +294,7 @@ func performCompilation( compileTimes *tsc.CompileTimes, testing tsc.CommandLineTesting, ) tsc.CommandLineResult { - host := compiler.NewCachedFSCompilerHost(sys.GetCurrentDirectory(), sys.FS(), sys.DefaultLibraryPath(), extendedConfigCache, getTraceFromSys(sys, testing)) + host := compiler.NewCachedFSCompilerHost(sys.GetCurrentDirectory(), sys.FS(), sys.DefaultLibraryPath(), extendedConfigCache, getTraceFromSys(sys, config.Locale(), testing)) // todo: cache, statistics, tracing parseStart := sys.Now() program := compiler.NewProgram(compiler.ProgramOptions{ diff --git a/pkg/execute/tsc/compile.go b/pkg/execute/tsc/compile.go index 8e607d63..62669006 100644 --- a/pkg/execute/tsc/compile.go +++ b/pkg/execute/tsc/compile.go @@ -7,7 +7,9 @@ import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/compiler" + "github.com/buke/typescript-go-internal/pkg/diagnostics" "github.com/buke/typescript-go-internal/pkg/execute/incremental" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/tspath" "github.com/buke/typescript-go-internal/pkg/vfs" ) @@ -56,7 +58,7 @@ type CommandLineTesting interface { OnBuildStatusReportEnd(w io.Writer) OnWatchStatusReportStart() OnWatchStatusReportEnd() - GetTrace(w io.Writer) func(msg string) + GetTrace(w io.Writer, locale locale.Locale) func(msg *diagnostics.Message, args ...any) OnProgram(program *incremental.Program) } diff --git a/pkg/execute/tsc/diagnostics.go b/pkg/execute/tsc/diagnostics.go index d829ac0d..ffddd4eb 100644 --- a/pkg/execute/tsc/diagnostics.go +++ b/pkg/execute/tsc/diagnostics.go @@ -8,16 +8,18 @@ import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/diagnosticwriter" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/tspath" ) -func getFormatOptsOfSys(sys System) *diagnosticwriter.FormattingOptions { +func getFormatOptsOfSys(sys System, locale locale.Locale) *diagnosticwriter.FormattingOptions { return &diagnosticwriter.FormattingOptions{ NewLine: "\n", ComparePathsOptions: tspath.ComparePathsOptions{ CurrentDirectory: sys.GetCurrentDirectory(), UseCaseSensitiveFileNames: sys.FS().UseCaseSensitiveFileNames(), }, + Locale: locale, } } @@ -25,11 +27,11 @@ type DiagnosticReporter = func(*ast.Diagnostic) func QuietDiagnosticReporter(diagnostic *ast.Diagnostic) {} -func CreateDiagnosticReporter(sys System, w io.Writer, options *core.CompilerOptions) DiagnosticReporter { +func CreateDiagnosticReporter(sys System, w io.Writer, locale locale.Locale, options *core.CompilerOptions) DiagnosticReporter { if options.Quiet.IsTrue() { return QuietDiagnosticReporter } - formatOpts := getFormatOptsOfSys(sys) + formatOpts := getFormatOptsOfSys(sys, locale) if shouldBePretty(sys, options) { return func(diagnostic *ast.Diagnostic) { diagnosticwriter.FormatDiagnosticWithColorAndContext(w, diagnosticwriter.WrapASTDiagnostic(diagnostic), formatOpts) @@ -123,9 +125,9 @@ type DiagnosticsReporter = func(diagnostics []*ast.Diagnostic) func QuietDiagnosticsReporter(diagnostics []*ast.Diagnostic) {} -func CreateReportErrorSummary(sys System, options *core.CompilerOptions) DiagnosticsReporter { +func CreateReportErrorSummary(sys System, locale locale.Locale, options *core.CompilerOptions) DiagnosticsReporter { if shouldBePretty(sys, options) { - formatOpts := getFormatOptsOfSys(sys) + formatOpts := getFormatOptsOfSys(sys, locale) return func(diagnostics []*ast.Diagnostic) { diagnosticwriter.WriteErrorSummaryText(sys.Writer(), diagnosticwriter.FromASTDiagnostics(diagnostics), formatOpts) } @@ -133,12 +135,12 @@ func CreateReportErrorSummary(sys System, options *core.CompilerOptions) Diagnos return QuietDiagnosticsReporter } -func CreateBuilderStatusReporter(sys System, w io.Writer, options *core.CompilerOptions, testing CommandLineTesting) DiagnosticReporter { +func CreateBuilderStatusReporter(sys System, w io.Writer, locale locale.Locale, options *core.CompilerOptions, testing CommandLineTesting) DiagnosticReporter { if options.Quiet.IsTrue() { return QuietDiagnosticReporter } - formatOpts := getFormatOptsOfSys(sys) + formatOpts := getFormatOptsOfSys(sys, locale) writeStatus := core.IfElse(shouldBePretty(sys, options), diagnosticwriter.FormatDiagnosticsStatusWithColorAndTime, diagnosticwriter.FormatDiagnosticsStatusAndTime) return func(diagnostic *ast.Diagnostic) { writerDiagnostic := diagnosticwriter.WrapASTDiagnostic(diagnostic) @@ -151,8 +153,8 @@ func CreateBuilderStatusReporter(sys System, w io.Writer, options *core.Compiler } } -func CreateWatchStatusReporter(sys System, options *core.CompilerOptions, testing CommandLineTesting) DiagnosticReporter { - formatOpts := getFormatOptsOfSys(sys) +func CreateWatchStatusReporter(sys System, locale locale.Locale, options *core.CompilerOptions, testing CommandLineTesting) DiagnosticReporter { + formatOpts := getFormatOptsOfSys(sys, locale) writeStatus := core.IfElse(shouldBePretty(sys, options), diagnosticwriter.FormatDiagnosticsStatusWithColorAndTime, diagnosticwriter.FormatDiagnosticsStatusAndTime) return func(diagnostic *ast.Diagnostic) { writerDiagnostic := diagnosticwriter.WrapASTDiagnostic(diagnostic) diff --git a/pkg/execute/tsc/emit.go b/pkg/execute/tsc/emit.go index bb8895a5..0d7fbb15 100644 --- a/pkg/execute/tsc/emit.go +++ b/pkg/execute/tsc/emit.go @@ -10,17 +10,19 @@ import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/compiler" + "github.com/buke/typescript-go-internal/pkg/diagnostics" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/tsoptions" "github.com/buke/typescript-go-internal/pkg/tspath" ) -func GetTraceWithWriterFromSys(w io.Writer, testing CommandLineTesting) func(msg string) { +func GetTraceWithWriterFromSys(w io.Writer, locale locale.Locale, testing CommandLineTesting) func(msg *diagnostics.Message, args ...any) { if testing == nil { - return func(msg string) { - fmt.Fprintln(w, msg) + return func(msg *diagnostics.Message, args ...any) { + fmt.Fprintln(w, msg.Localize(locale, args...)) } } else { - return testing.GetTrace(w) + return testing.GetTrace(w, locale) } } @@ -133,7 +135,7 @@ func listFiles(input EmitInput, emitResult *compiler.EmitResult) { } } if options.ExplainFiles.IsTrue() { - input.Program.ExplainFiles(input.Writer) + input.Program.ExplainFiles(input.Writer, input.Config.Locale()) } else if options.ListFiles.IsTrue() || options.ListFilesOnly.IsTrue() { for _, file := range input.Program.GetSourceFiles() { fmt.Fprintln(input.Writer, file.FileName()) diff --git a/pkg/execute/tsc/help.go b/pkg/execute/tsc/help.go index c3f7914a..c374e598 100644 --- a/pkg/execute/tsc/help.go +++ b/pkg/execute/tsc/help.go @@ -8,18 +8,19 @@ import ( "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/diagnostics" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/tsoptions" ) -func PrintVersion(sys System) { - fmt.Fprintln(sys.Writer(), diagnostics.Version_0.Format(core.Version())) +func PrintVersion(sys System, locale locale.Locale) { + fmt.Fprintln(sys.Writer(), diagnostics.Version_0.Localize(locale, core.Version())) } -func PrintHelp(sys System, commandLine *tsoptions.ParsedCommandLine) { +func PrintHelp(sys System, locale locale.Locale, commandLine *tsoptions.ParsedCommandLine) { if commandLine.CompilerOptions().All.IsFalseOrUnknown() { - printEasyHelp(sys, getOptionsForHelp(commandLine)) + printEasyHelp(sys, locale, getOptionsForHelp(commandLine)) } else { - printAllHelp(sys, getOptionsForHelp(commandLine)) + printAllHelp(sys, locale, getOptionsForHelp(commandLine)) } } @@ -63,20 +64,20 @@ func getHeader(sys System, message string) []string { return header } -func printEasyHelp(sys System, simpleOptions []*tsoptions.CommandLineOption) { +func printEasyHelp(sys System, locale locale.Locale, simpleOptions []*tsoptions.CommandLineOption) { colors := createColors(sys) var output []string example := func(examples []string, desc *diagnostics.Message) { for _, example := range examples { output = append(output, " ", colors.blue(example), "\n") } - output = append(output, " ", desc.Format(), "\n", "\n") + output = append(output, " ", desc.Localize(locale), "\n", "\n") } - msg := diagnostics.X_tsc_Colon_The_TypeScript_Compiler.Format() + " - " + diagnostics.Version_0.Format(core.Version()) + msg := diagnostics.X_tsc_Colon_The_TypeScript_Compiler.Localize(locale) + " - " + diagnostics.Version_0.Localize(locale, core.Version()) output = append(output, getHeader(sys, msg)...) - output = append(output, colors.bold(diagnostics.COMMON_COMMANDS.Format()), "\n", "\n") + output = append(output, colors.bold(diagnostics.COMMON_COMMANDS.Localize(locale)), "\n", "\n") example([]string{"tsc"}, diagnostics.Compiles_the_current_project_tsconfig_json_in_the_working_directory) example([]string{"tsc app.ts util.ts"}, diagnostics.Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options) @@ -96,50 +97,49 @@ func printEasyHelp(sys System, simpleOptions []*tsoptions.CommandLineOption) { } } - output = append(output, generateSectionOptionsOutput(sys, diagnostics.COMMAND_LINE_FLAGS.Format(), cliCommands /*subCategory*/, false /*beforeOptionsDescription*/, nil /*afterOptionsDescription*/, nil)...) + output = append(output, generateSectionOptionsOutput(sys, locale, diagnostics.COMMAND_LINE_FLAGS.Localize(locale), cliCommands /*subCategory*/, false /*beforeOptionsDescription*/, nil /*afterOptionsDescription*/, nil)...) - // !!! locale formatMessage - after := diagnostics.You_can_learn_about_all_of_the_compiler_options_at_0.Format("https://aka.ms/tsc") - output = append(output, generateSectionOptionsOutput(sys, diagnostics.COMMON_COMPILER_OPTIONS.Format(), configOpts /*subCategory*/, false /*beforeOptionsDescription*/, nil, &after)...) + after := diagnostics.You_can_learn_about_all_of_the_compiler_options_at_0.Localize(locale, "https://aka.ms/tsc") + output = append(output, generateSectionOptionsOutput(sys, locale, diagnostics.COMMON_COMPILER_OPTIONS.Localize(locale), configOpts /*subCategory*/, false /*beforeOptionsDescription*/, nil, &after)...) for _, chunk := range output { fmt.Fprint(sys.Writer(), chunk) } } -func printAllHelp(sys System, options []*tsoptions.CommandLineOption) { +func printAllHelp(sys System, locale locale.Locale, options []*tsoptions.CommandLineOption) { var output []string - msg := diagnostics.X_tsc_Colon_The_TypeScript_Compiler.Format() + " - " + diagnostics.Version_0.Format(core.Version()) + msg := diagnostics.X_tsc_Colon_The_TypeScript_Compiler.Localize(locale) + " - " + diagnostics.Version_0.Localize(locale, core.Version()) output = append(output, getHeader(sys, msg)...) // ALL COMPILER OPTIONS section - afterCompilerOptions := diagnostics.You_can_learn_about_all_of_the_compiler_options_at_0.Format("https://aka.ms/tsc") - output = append(output, generateSectionOptionsOutput(sys, diagnostics.ALL_COMPILER_OPTIONS.Format(), options, true, nil, &afterCompilerOptions)...) + afterCompilerOptions := diagnostics.You_can_learn_about_all_of_the_compiler_options_at_0.Localize(locale, "https://aka.ms/tsc") + output = append(output, generateSectionOptionsOutput(sys, locale, diagnostics.ALL_COMPILER_OPTIONS.Localize(locale), options, true, nil, &afterCompilerOptions)...) // WATCH OPTIONS section - beforeWatchOptions := diagnostics.Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon.Format() - output = append(output, generateSectionOptionsOutput(sys, diagnostics.WATCH_OPTIONS.Format(), tsoptions.OptionsForWatch, false, &beforeWatchOptions, nil)...) + beforeWatchOptions := diagnostics.Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon.Localize(locale) + output = append(output, generateSectionOptionsOutput(sys, locale, diagnostics.WATCH_OPTIONS.Localize(locale), tsoptions.OptionsForWatch, false, &beforeWatchOptions, nil)...) // BUILD OPTIONS section - beforeBuildOptions := diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0.Format("https://aka.ms/tsc-composite-builds") + beforeBuildOptions := diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0.Localize(locale, "https://aka.ms/tsc-composite-builds") buildOptions := core.Filter(tsoptions.OptionsForBuild, func(option *tsoptions.CommandLineOption) bool { return option != &tsoptions.TscBuildOption }) - output = append(output, generateSectionOptionsOutput(sys, diagnostics.BUILD_OPTIONS.Format(), buildOptions, false, &beforeBuildOptions, nil)...) + output = append(output, generateSectionOptionsOutput(sys, locale, diagnostics.BUILD_OPTIONS.Localize(locale), buildOptions, false, &beforeBuildOptions, nil)...) for _, chunk := range output { fmt.Fprint(sys.Writer(), chunk) } } -func PrintBuildHelp(sys System, buildOptions []*tsoptions.CommandLineOption) { +func PrintBuildHelp(sys System, locale locale.Locale, buildOptions []*tsoptions.CommandLineOption) { var output []string - output = append(output, getHeader(sys, diagnostics.X_tsc_Colon_The_TypeScript_Compiler.Format()+" - "+diagnostics.Version_0.Format(core.Version()))...) - before := diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0.Format("https://aka.ms/tsc-composite-builds") + output = append(output, getHeader(sys, diagnostics.X_tsc_Colon_The_TypeScript_Compiler.Localize(locale)+" - "+diagnostics.Version_0.Localize(locale, core.Version()))...) + before := diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0.Localize(locale, "https://aka.ms/tsc-composite-builds") options := core.Filter(buildOptions, func(option *tsoptions.CommandLineOption) bool { return option != &tsoptions.TscBuildOption }) - output = append(output, generateSectionOptionsOutput(sys, diagnostics.BUILD_OPTIONS.Format(), options, false, &before, nil)...) + output = append(output, generateSectionOptionsOutput(sys, locale, diagnostics.BUILD_OPTIONS.Localize(locale), options, false, &before, nil)...) for _, chunk := range output { fmt.Fprint(sys.Writer(), chunk) @@ -148,6 +148,7 @@ func PrintBuildHelp(sys System, buildOptions []*tsoptions.CommandLineOption) { func generateSectionOptionsOutput( sys System, + locale locale.Locale, sectionName string, options []*tsoptions.CommandLineOption, subCategory bool, @@ -160,7 +161,7 @@ func generateSectionOptionsOutput( output = append(output, *beforeOptionsDescription, "\n", "\n") } if !subCategory { - output = append(output, generateGroupOptionOutput(sys, options)...) + output = append(output, generateGroupOptionOutput(sys, locale, options)...) if afterOptionsDescription != nil { output = append(output, *afterOptionsDescription, "\n", "\n") } @@ -172,7 +173,7 @@ func generateSectionOptionsOutput( if option.Category == nil { continue } - curCategory := option.Category.Format() + curCategory := option.Category.Localize(locale) if _, exists := categoryMap[curCategory]; !exists { categoryOrder = append(categoryOrder, curCategory) } @@ -181,7 +182,7 @@ func generateSectionOptionsOutput( for _, key := range categoryOrder { value := categoryMap[key] output = append(output, "### ", key, "\n", "\n") - output = append(output, generateGroupOptionOutput(sys, value)...) + output = append(output, generateGroupOptionOutput(sys, locale, value)...) } if afterOptionsDescription != nil { output = append(output, *afterOptionsDescription, "\n", "\n") @@ -190,7 +191,7 @@ func generateSectionOptionsOutput( return output } -func generateGroupOptionOutput(sys System, optionsList []*tsoptions.CommandLineOption) []string { +func generateGroupOptionOutput(sys System, locale locale.Locale, optionsList []*tsoptions.CommandLineOption) []string { var maxLength int for _, option := range optionsList { curLenght := len(getDisplayNameTextOfOption(option)) @@ -206,7 +207,7 @@ func generateGroupOptionOutput(sys System, optionsList []*tsoptions.CommandLineO var lines []string for _, option := range optionsList { - tmp := generateOptionOutput(sys, option, rightAlignOfLeftPart, leftAlignOfRightPart) + tmp := generateOptionOutput(sys, locale, option, rightAlignOfLeftPart, leftAlignOfRightPart) lines = append(lines, tmp...) } @@ -220,6 +221,7 @@ func generateGroupOptionOutput(sys System, optionsList []*tsoptions.CommandLineO func generateOptionOutput( sys System, + locale locale.Locale, option *tsoptions.CommandLineOption, rightAlignOfLeft, leftAlignOfRight int, ) []string { @@ -230,11 +232,11 @@ func generateOptionOutput( name := getDisplayNameTextOfOption(option) // value type and possible value - valueCandidates := getValueCandidate(option) + valueCandidates := getValueCandidate(sys, locale, option) var defaultValueDescription string if msg, ok := option.DefaultValueDescription.(*diagnostics.Message); ok && msg != nil { - defaultValueDescription = msg.Format() + defaultValueDescription = msg.Localize(locale) } else { defaultValueDescription = formatDefaultValue( option.DefaultValueDescription, @@ -250,7 +252,7 @@ func generateOptionOutput( if terminalWidth >= 80 { description := "" if option.Description != nil { - description = option.Description.Format() + description = option.Description.Localize(locale) } text = append(text, getPrettyOutput(colors, name, description, rightAlignOfLeft, leftAlignOfRight, terminalWidth, true /*colorLeft*/)...) text = append(text, "\n") @@ -260,7 +262,7 @@ func generateOptionOutput( text = append(text, "\n") } if defaultValueDescription != "" { - text = append(text, getPrettyOutput(colors, diagnostics.X_default_Colon.Format(), defaultValueDescription, rightAlignOfLeft, leftAlignOfRight, terminalWidth, false /*colorLeft*/)...) + text = append(text, getPrettyOutput(colors, diagnostics.X_default_Colon.Localize(locale), defaultValueDescription, rightAlignOfLeft, leftAlignOfRight, terminalWidth, false /*colorLeft*/)...) text = append(text, "\n") } } @@ -268,7 +270,7 @@ func generateOptionOutput( } else { text = append(text, colors.blue(name), "\n") if option.Description != nil { - text = append(text, option.Description.Format()) + text = append(text, option.Description.Localize(locale)) } text = append(text, "\n") if showAdditionalInfoOutput(valueCandidates, option) { @@ -279,7 +281,7 @@ func generateOptionOutput( if valueCandidates != nil { text = append(text, "\n") } - text = append(text, diagnostics.X_default_Colon.Format(), " ", defaultValueDescription) + text = append(text, diagnostics.X_default_Colon.Localize(locale), " ", defaultValueDescription) } text = append(text, "\n") @@ -327,7 +329,7 @@ func showAdditionalInfoOutput(valueCandidates *valueCandidate, option *tsoptions return true } -func getValueCandidate(option *tsoptions.CommandLineOption) *valueCandidate { +func getValueCandidate(sys System, locale locale.Locale, option *tsoptions.CommandLineOption) *valueCandidate { // option.type might be "string" | "number" | "boolean" | "object" | "list" | Map // string -- any of: string // number -- any of: number @@ -349,11 +351,11 @@ func getValueCandidate(option *tsoptions.CommandLineOption) *valueCandidate { case tsoptions.CommandLineOptionTypeString, tsoptions.CommandLineOptionTypeNumber, tsoptions.CommandLineOptionTypeBoolean: - res.valueType = diagnostics.X_type_Colon.Format() + res.valueType = diagnostics.X_type_Colon.Localize(locale) case tsoptions.CommandLineOptionTypeList: - res.valueType = diagnostics.X_one_or_more_Colon.Format() + res.valueType = diagnostics.X_one_or_more_Colon.Localize(locale) default: - res.valueType = diagnostics.X_one_of_Colon.Format() + res.valueType = diagnostics.X_one_of_Colon.Localize(locale) } res.possibleValues = getPossibleValues(option) diff --git a/pkg/execute/tsc/init.go b/pkg/execute/tsc/init.go index 83668542..f2453ccf 100644 --- a/pkg/execute/tsc/init.go +++ b/pkg/execute/tsc/init.go @@ -11,17 +11,18 @@ import ( "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/diagnostics" "github.com/buke/typescript-go-internal/pkg/jsonutil" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/tsoptions" "github.com/buke/typescript-go-internal/pkg/tspath" ) -func WriteConfigFile(sys System, reportDiagnostic DiagnosticReporter, options *collections.OrderedMap[string, any]) { +func WriteConfigFile(sys System, locale locale.Locale, reportDiagnostic DiagnosticReporter, options *collections.OrderedMap[string, any]) { getCurrentDirectory := sys.GetCurrentDirectory() file := tspath.NormalizePath(tspath.CombinePaths(getCurrentDirectory, "tsconfig.json")) if sys.FS().FileExists(file) { reportDiagnostic(ast.NewCompilerDiagnostic(diagnostics.A_tsconfig_json_file_is_already_defined_at_Colon_0, file)) } else { - _ = sys.FS().WriteFile(file, generateTSConfig(options), false) + _ = sys.FS().WriteFile(file, generateTSConfig(options, locale), false) output := []string{"\n"} output = append(output, getHeader(sys, "Created a new tsconfig.json")...) output = append(output, "You can learn more at https://aka.ms/tsconfig", "\n") @@ -29,7 +30,7 @@ func WriteConfigFile(sys System, reportDiagnostic DiagnosticReporter, options *c } } -func generateTSConfig(options *collections.OrderedMap[string, any]) string { +func generateTSConfig(options *collections.OrderedMap[string, any], locale locale.Locale) string { const tab = " " var result []string @@ -40,9 +41,8 @@ func generateTSConfig(options *collections.OrderedMap[string, any]) string { } } - // !!! locale getLocaleSpecificMessage emitHeader := func(header *diagnostics.Message) { - result = append(result, tab+tab+"// "+header.Format()) + result = append(result, tab+tab+"// "+header.Localize(locale)) } newline := func() { result = append(result, "") @@ -143,8 +143,7 @@ func generateTSConfig(options *collections.OrderedMap[string, any]) string { } push("{") - // !!! locale getLocaleSpecificMessage - push(tab + `// ` + diagnostics.Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file.Format()) + push(tab + `// ` + diagnostics.Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file.Localize(locale)) push(tab + `"compilerOptions": {`) emitHeader(diagnostics.File_Layout) diff --git a/pkg/execute/tsctests/readablebuildinfo.go b/pkg/execute/tsctests/readablebuildinfo.go index c47d041f..8ef45e14 100644 --- a/pkg/execute/tsctests/readablebuildinfo.go +++ b/pkg/execute/tsctests/readablebuildinfo.go @@ -62,7 +62,8 @@ type readableBuildInfoDiagnostic struct { End int `json:"end,omitzero"` Code int32 `json:"code,omitzero"` Category diagnostics.Category `json:"category,omitzero"` - Message string `json:"message,omitzero"` + MessageKey diagnostics.Key `json:"messageKey,omitzero"` + MessageArgs []string `json:"messageArgs,omitzero"` MessageChain []*readableBuildInfoDiagnostic `json:"messageChain,omitzero"` RelatedInformation []*readableBuildInfoDiagnostic `json:"relatedInformation,omitzero"` ReportsUnnecessary bool `json:"reportsUnnecessary,omitzero"` @@ -254,7 +255,8 @@ func (r *readableBuildInfo) toReadableBuildInfoDiagnostic(diagnostics []*increme End: d.End, Code: d.Code, Category: d.Category, - Message: d.Message, + MessageKey: d.MessageKey, + MessageArgs: d.MessageArgs, MessageChain: r.toReadableBuildInfoDiagnostic(d.MessageChain), RelatedInformation: r.toReadableBuildInfoDiagnostic(d.RelatedInformation), ReportsUnnecessary: d.ReportsUnnecessary, diff --git a/pkg/execute/tsctests/sys.go b/pkg/execute/tsctests/sys.go index 09b3d1ff..2a7a66ed 100644 --- a/pkg/execute/tsctests/sys.go +++ b/pkg/execute/tsctests/sys.go @@ -3,9 +3,7 @@ package tsctests import ( "fmt" "io" - "io/fs" "maps" - "slices" "strconv" "strings" "sync" @@ -14,8 +12,12 @@ import ( "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/compiler" "github.com/buke/typescript-go-internal/pkg/core" + "github.com/buke/typescript-go-internal/pkg/diagnostics" + "github.com/buke/typescript-go-internal/pkg/execute" "github.com/buke/typescript-go-internal/pkg/execute/incremental" "github.com/buke/typescript-go-internal/pkg/execute/tsc" + "github.com/buke/typescript-go-internal/pkg/locale" + "github.com/buke/typescript-go-internal/pkg/testutil/fsbaselineutil" "github.com/buke/typescript-go-internal/pkg/testutil/harnessutil" "github.com/buke/typescript-go-internal/pkg/testutil/stringtestutil" "github.com/buke/typescript-go-internal/pkg/tsoptions" @@ -23,6 +25,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/vfs" "github.com/buke/typescript-go-internal/pkg/vfs/iovfs" "github.com/buke/typescript-go-internal/pkg/vfs/vfstest" + "golang.org/x/text/language" ) type FileMap map[string]any @@ -95,6 +98,20 @@ func NewTscSystem(files FileMap, useCaseSensitiveFileNames bool, cwd string) *Te } } +func GetFileMapWithBuild(files FileMap, commandLineArgs []string) FileMap { + sys := newTestSys(&tscInput{ + files: maps.Clone(files), + }, false) + execute.CommandLine(sys, commandLineArgs, sys) + sys.fs.writtenFiles.Range(func(key string) bool { + if text, ok := sys.fsFromFileMap().ReadFile(key); ok { + files[key] = text + } + return true + }) + return files +} + func newTestSys(tscInput *tscInput, forIncrementalCorrectness bool) *TestSys { cwd := tscInput.cwd if cwd == "" { @@ -114,6 +131,11 @@ func newTestSys(tscInput *tscInput, forIncrementalCorrectness bool) *TestSys { }, currentWrite) sys.env = tscInput.env sys.forIncrementalCorrectness = forIncrementalCorrectness + sys.fsDiffer = &fsbaselineutil.FSDiffer{ + FS: sys.fs.FS.(iovfs.FsWithSys), + DefaultLibs: func() *collections.SyncSet[string] { return sys.fs.defaultLibs }, + WrittenFiles: &sys.fs.writtenFiles, + } // Ensure the default library file is present sys.ensureLibPathExists("lib.d.ts") @@ -126,24 +148,12 @@ func newTestSys(tscInput *tscInput, forIncrementalCorrectness bool) *TestSys { return sys } -type diffEntry struct { - content string - mTime time.Time - isWritten bool - symlinkTarget string -} - -type snapshot struct { - snap map[string]*diffEntry - defaultLibs *collections.SyncSet[string] -} - type TestSys struct { currentWrite *strings.Builder programBaselines strings.Builder programIncludeBaselines strings.Builder tracer *harnessutil.TracerForBaselining - serializedDiff *snapshot + fsDiffer *fsbaselineutil.FSDiffer forIncrementalCorrectness bool fs *testFs @@ -171,11 +181,11 @@ func (s *TestSys) FS() vfs.FS { } func (s *TestSys) fsFromFileMap() iovfs.FsWithSys { - return s.fs.FS.(iovfs.FsWithSys) + return s.fsDiffer.FS } func (s *TestSys) mapFs() *vfstest.MapFS { - return s.fsFromFileMap().FSys().(*vfstest.MapFS) + return s.fsDiffer.MapFs() } func (s *TestSys) ensureLibPathExists(path string) { @@ -223,8 +233,8 @@ func (s *TestSys) OnEmittedFiles(result *compiler.EmitResult, mTimesCache *colle if result != nil { for _, file := range result.EmittedFiles { modTime := s.mapFs().GetModTime(file) - if s.serializedDiff != nil { - if diff, ok := s.serializedDiff.snap[file]; ok && diff.mTime.Equal(modTime) { + if serializedDiff := s.fsDiffer.SerializedDiff(); serializedDiff != nil { + if diff, ok := serializedDiff.Snap[file]; ok && diff.MTime.Equal(modTime) { // Even though written, timestamp was reverted continue } @@ -278,12 +288,13 @@ func (s *TestSys) OnWatchStatusReportEnd() { fmt.Fprintln(s.Writer(), watchStatusReportEnd) } -func (s *TestSys) GetTrace(w io.Writer) func(str string) { - return func(str string) { +func (s *TestSys) GetTrace(w io.Writer, locale locale.Locale) func(msg *diagnostics.Message, args ...any) { + return func(msg *diagnostics.Message, args ...any) { fmt.Fprintln(w, traceStart) defer fmt.Fprintln(w, traceEnd) // With tsc -b building projects in parallel we cannot serialize the package.json lookup trace // so trace as if it wasnt cached + str := msg.Localize(locale, args...) s.tracer.TraceWithWriter(w, str, w == s.Writer()) } } @@ -412,13 +423,18 @@ type outputSanitizer struct { outputLines []string } +var ( + englishVersion = diagnostics.Version_0.Localize(locale.Default, core.Version()) + fakeEnglishVersion = diagnostics.Version_0.Localize(locale.Default, harnessutil.FakeTSVersion) + czech = locale.Locale(language.MustParse("cs")) + czechVersion = diagnostics.Version_0.Localize(czech, core.Version()) + fakeCzechVersion = diagnostics.Version_0.Localize(czech, harnessutil.FakeTSVersion) +) + func (o *outputSanitizer) addOutputLine(s string) { - if change := strings.ReplaceAll(s, fmt.Sprintf("'%s'", core.Version()), fmt.Sprintf("'%s'", harnessutil.FakeTSVersion)); change != s { - s = change - } - if change := strings.ReplaceAll(s, "Version "+core.Version(), "Version "+harnessutil.FakeTSVersion); change != s { - s = change - } + s = strings.ReplaceAll(s, fmt.Sprintf("'%s'", core.Version()), fmt.Sprintf("'%s'", harnessutil.FakeTSVersion)) + s = strings.ReplaceAll(s, englishVersion, fakeEnglishVersion) + s = strings.ReplaceAll(s, czechVersion, fakeCzechVersion) o.outputLines = append(o.outputLines, s) } @@ -500,83 +516,7 @@ func (s *TestSys) clearOutput() { } func (s *TestSys) baselineFSwithDiff(baseline io.Writer) { - // todo: baselines the entire fs, possibly doesn't correctly diff all cases of emitted files, since emit isn't fully implemented and doesn't always emit the same way as strada - snap := map[string]*diffEntry{} - - diffs := map[string]string{} - - for path, file := range s.mapFs().Entries() { - if file.Mode&fs.ModeSymlink != 0 { - target, ok := s.mapFs().GetTargetOfSymlink(path) - if !ok { - panic("Failed to resolve symlink target: " + path) - } - newEntry := &diffEntry{symlinkTarget: target} - snap[path] = newEntry - s.addFsEntryDiff(diffs, newEntry, path) - continue - } else if file.Mode.IsRegular() { - newEntry := &diffEntry{content: string(file.Data), mTime: file.ModTime, isWritten: s.fs.writtenFiles.Has(path)} - snap[path] = newEntry - s.addFsEntryDiff(diffs, newEntry, path) - } - } - if s.serializedDiff != nil { - for path := range s.serializedDiff.snap { - if fileInfo := s.mapFs().GetFileInfo(path); fileInfo == nil { - // report deleted - s.addFsEntryDiff(diffs, nil, path) - } - } - } - var defaultLibs collections.SyncSet[string] - if s.fs.defaultLibs != nil { - s.fs.defaultLibs.Range(func(libPath string) bool { - defaultLibs.Add(libPath) - return true - }) - } - s.serializedDiff = &snapshot{ - snap: snap, - defaultLibs: &defaultLibs, - } - diffKeys := slices.Collect(maps.Keys(diffs)) - slices.Sort(diffKeys) - for _, path := range diffKeys { - fmt.Fprint(baseline, "//// ["+path+"] ", diffs[path], "\n") - } - fmt.Fprintln(baseline) - s.fs.writtenFiles = collections.SyncSet[string]{} // Reset written files after baseline -} - -func (s *TestSys) addFsEntryDiff(diffs map[string]string, newDirContent *diffEntry, path string) { - var oldDirContent *diffEntry - var defaultLibs *collections.SyncSet[string] - if s.serializedDiff != nil { - oldDirContent = s.serializedDiff.snap[path] - defaultLibs = s.serializedDiff.defaultLibs - } - // todo handle more cases of fs changes - if oldDirContent == nil { - if s.fs.defaultLibs == nil || !s.fs.defaultLibs.Has(path) { - if newDirContent.symlinkTarget != "" { - diffs[path] = "-> " + newDirContent.symlinkTarget + " *new*" - } else { - diffs[path] = "*new* \n" + newDirContent.content - } - } - } else if newDirContent == nil { - diffs[path] = "*deleted*" - } else if newDirContent.content != oldDirContent.content { - diffs[path] = "*modified* \n" + newDirContent.content - } else if newDirContent.isWritten { - diffs[path] = "*rewrite with same content*" - } else if newDirContent.mTime != oldDirContent.mTime { - diffs[path] = "*mTime changed*" - } else if defaultLibs != nil && defaultLibs.Has(path) && s.fs.defaultLibs != nil && !s.fs.defaultLibs.Has(path) { - // Lib file that was read - diffs[path] = "*Lib*\n" + newDirContent.content - } + s.fsDiffer.BaselineFSwithDiff(baseline) } func (s *TestSys) writeFileNoError(path string, content string, writeByteOrderMark bool) { diff --git a/pkg/execute/tsctests/tsc_test.go b/pkg/execute/tsctests/tsc_test.go index fe49d0b2..de719dd7 100644 --- a/pkg/execute/tsctests/tsc_test.go +++ b/pkg/execute/tsctests/tsc_test.go @@ -205,6 +205,14 @@ func TestTscCommandline(t *testing.T) { }, commandLineArgs: []string{"-p", "."}, }, + { + subScenario: "locale", + commandLineArgs: []string{"--locale", "cs", "--version"}, + }, + { + subScenario: "bad locale", + commandLineArgs: []string{"--locale", "whoops", "--version"}, + }, } for _, testCase := range testCases { diff --git a/pkg/execute/tsctests/tscbuild_test.go b/pkg/execute/tsctests/tscbuild_test.go index bfd908aa..b4e646e6 100644 --- a/pkg/execute/tsctests/tscbuild_test.go +++ b/pkg/execute/tsctests/tscbuild_test.go @@ -148,6 +148,16 @@ func TestBuildCommandLine(t *testing.T) { files: FileMap{}, commandLineArgs: []string{"--build", "--help"}, }, + { + subScenario: "locale", + files: FileMap{}, + commandLineArgs: []string{"--build", "--help", "--locale", "en"}, + }, + { + subScenario: "bad locale", + files: FileMap{}, + commandLineArgs: []string{"--build", "--help", "--locale", "whoops"}, + }, { subScenario: "different options", files: getBuildCommandLineDifferentOptionsMap("composite"), diff --git a/pkg/execute/watcher.go b/pkg/execute/watcher.go index a4b693ba..a318043e 100644 --- a/pkg/execute/watcher.go +++ b/pkg/execute/watcher.go @@ -54,7 +54,7 @@ func createWatcher( } func (w *Watcher) start() { - w.host = compiler.NewCompilerHost(w.sys.GetCurrentDirectory(), w.sys.FS(), w.sys.DefaultLibraryPath(), nil, getTraceFromSys(w.sys, w.testing)) + w.host = compiler.NewCompilerHost(w.sys.GetCurrentDirectory(), w.sys.FS(), w.sys.DefaultLibraryPath(), nil, getTraceFromSys(w.sys, w.config.Locale(), w.testing)) w.program = incremental.ReadBuildInfoProgram(w.config, incremental.NewBuildInfoReader(w.host), w.host) if w.testing == nil { @@ -131,7 +131,7 @@ func (w *Watcher) hasErrorsInTsConfig() bool { } w.config = configParseResult } - w.host = compiler.NewCompilerHost(w.sys.GetCurrentDirectory(), w.sys.FS(), w.sys.DefaultLibraryPath(), extendedConfigCache, getTraceFromSys(w.sys, w.testing)) + w.host = compiler.NewCompilerHost(w.sys.GetCurrentDirectory(), w.sys.FS(), w.sys.DefaultLibraryPath(), extendedConfigCache, getTraceFromSys(w.sys, w.config.Locale(), w.testing)) return false } diff --git a/pkg/fourslash/_scripts/convertFourslash.mts b/pkg/fourslash/_scripts/convertFourslash.mts index 3573bec5..d4dc96c9 100644 --- a/pkg/fourslash/_scripts/convertFourslash.mts +++ b/pkg/fourslash/_scripts/convertFourslash.mts @@ -137,7 +137,7 @@ function getTestInput(content: string): string { /** * Parses a Strada fourslash statement and returns the corresponding Corsa commands. - * @returns an array of commands if the statement is a valid fourslash command, or `false` if the statement could not be parsed. + * @returns an array of commands if the statement is a valid fourslash command, or `undefined` if the statement could not be parsed. */ function parseFourslashStatement(statement: ts.Statement): Cmd[] | undefined { if (ts.isVariableStatement(statement)) { @@ -222,6 +222,8 @@ function parseFourslashStatement(statement: ts.Statement): Cmd[] | undefined { case "baselineSyntacticDiagnostics": case "baselineSyntacticAndSemanticDiagnostics": return [{ kind: "verifyBaselineDiagnostics" }]; + case "navigateTo": + return parseVerifyNavigateTo(callExpression.arguments); } } // `goTo....` @@ -1469,29 +1471,9 @@ function parseBaselineMarkerOrRangeArg(arg: ts.Expression): string | undefined { return getGoStringLiteral(arg.text); } else if (ts.isIdentifier(arg) || (ts.isElementAccessExpression(arg) && ts.isIdentifier(arg.expression))) { - const argName = ts.isIdentifier(arg) ? arg.text : (arg.expression as ts.Identifier).text; - const file = arg.getSourceFile(); - const varStmts = file.statements.filter(ts.isVariableStatement); - for (const varStmt of varStmts) { - for (const decl of varStmt.declarationList.declarations) { - if (ts.isArrayBindingPattern(decl.name) && decl.initializer?.getText().includes("ranges")) { - for (let i = 0; i < decl.name.elements.length; i++) { - const elem = decl.name.elements[i]; - if (ts.isBindingElement(elem) && ts.isIdentifier(elem.name) && elem.name.text === argName) { - // `const [range_0, ..., range_n, ...] = test.ranges();` and arg is `range_n` - if (elem.dotDotDotToken === undefined) { - return `f.Ranges()[${i}]`; - } - // `const [range_0, ..., ...rest] = test.ranges();` and arg is `rest[n]` - if (ts.isElementAccessExpression(arg)) { - return `f.Ranges()[${i + parseInt(arg.argumentExpression!.getText())}]`; - } - // `const [range_0, ..., ...rest] = test.ranges();` and arg is `rest` - return `ToAny(f.Ranges()[${i}:])...`; - } - } - } - } + const result = parseRangeVariable(arg); + if (result) { + return result; } const init = getNodeOfKind(arg, ts.isCallExpression); if (init) { @@ -1507,7 +1489,35 @@ function parseBaselineMarkerOrRangeArg(arg: ts.Expression): string | undefined { return result; } } - console.error(`Unrecognized range argument: ${arg.getText()}`); + console.error(`Unrecognized argument in verify.baselineRename: ${arg.getText()}`); + return undefined; +} + +function parseRangeVariable(arg: ts.Identifier | ts.ElementAccessExpression): string | undefined { + const argName = ts.isIdentifier(arg) ? arg.text : (arg.expression as ts.Identifier).text; + const file = arg.getSourceFile(); + const varStmts = file.statements.filter(ts.isVariableStatement); + for (const varStmt of varStmts) { + for (const decl of varStmt.declarationList.declarations) { + if (ts.isArrayBindingPattern(decl.name) && decl.initializer?.getText().includes("ranges")) { + for (let i = 0; i < decl.name.elements.length; i++) { + const elem = decl.name.elements[i]; + if (ts.isBindingElement(elem) && ts.isIdentifier(elem.name) && elem.name.text === argName) { + // `const [range_0, ..., range_n, ...] = test.ranges();` and arg is `range_n` + if (elem.dotDotDotToken === undefined) { + return `f.Ranges()[${i}]`; + } + // `const [range_0, ..., ...rest] = test.ranges();` and arg is `rest[n]` + if (ts.isElementAccessExpression(arg)) { + return `f.Ranges()[${i + parseInt(arg.argumentExpression!.getText())}]`; + } + // `const [range_0, ..., ...rest] = test.ranges();` and arg is `rest` + return `ToAny(f.Ranges()[${i}:])...`; + } + } + } + } + } return undefined; } @@ -1794,6 +1804,212 @@ function parseSortText(expr: ts.Expression): string | undefined { } } +function parseVerifyNavigateTo(args: ts.NodeArray): [VerifyNavToCmd] | undefined { + const goArgs = []; + for (const arg of args) { + const result = parseVerifyNavigateToArg(arg); + if (!result) { + return undefined; + } + goArgs.push(result); + } + return [{ + kind: "verifyNavigateTo", + args: goArgs, + }]; +} + +function parseVerifyNavigateToArg(arg: ts.Expression): string | undefined { + if (!ts.isObjectLiteralExpression(arg)) { + console.error(`Expected object literal expression for verify.navigateTo argument, got ${arg.getText()}`); + return undefined; + } + let prefs; + const items = []; + let pattern: string | undefined; + for (const prop of arg.properties) { + if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) { + console.error(`Expected property assignment with identifier name for verify.navigateTo argument, got ${prop.getText()}`); + return undefined; + } + const propName = prop.name.text; + switch (propName) { + case "pattern": { + let patternInit = getStringLiteralLike(prop.initializer); + if (!patternInit) { + console.error(`Expected string literal for pattern in verify.navigateTo argument, got ${prop.initializer.getText()}`); + return undefined; + } + pattern = getGoStringLiteral(patternInit.text); + break; + } + case "fileName": + // no longer supported + continue; + case "expected": { + const init = prop.initializer; + if (!ts.isArrayLiteralExpression(init)) { + console.error(`Expected array literal expression for expected property in verify.navigateTo argument, got ${init.getText()}`); + return undefined; + } + for (const elem of init.elements) { + const result = parseNavToItem(elem); + if (!result) { + return undefined; + } + items.push(result); + } + break; + } + case "excludeLibFiles": { + if (prop.initializer.kind === ts.SyntaxKind.FalseKeyword) { + prefs = `&lsutil.UserPreferences{ExcludeLibrarySymbolsInNavTo: false}`; + } + } + } + } + if (!prefs) { + prefs = "nil"; + } + return `{ + Pattern: ${pattern ? pattern : '""'}, + Preferences: ${prefs}, + Exact: PtrTo([]*lsproto.SymbolInformation{${items.length ? items.join(",\n") + ",\n" : ""}}), + }`; +} + +function parseNavToItem(arg: ts.Expression): string | undefined { + let item = getNodeOfKind(arg, ts.isObjectLiteralExpression); + if (!item) { + console.error(`Expected object literal expression for navigateTo item, got ${arg.getText()}`); + return undefined; + } + const itemProps: string[] = []; + for (const prop of item.properties) { + if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) { + console.error(`Expected property assignment with identifier name for navigateTo item, got ${prop.getText()}`); + return undefined; + } + const propName = prop.name.text; + const init = prop.initializer; + switch (propName) { + case "name": { + let nameInit; + if (!(nameInit = getStringLiteralLike(init))) { + console.error(`Expected string literal for name in navigateTo item, got ${init.getText()}`); + return undefined; + } + itemProps.push(`Name: ${getGoStringLiteral(nameInit.text)}`); + break; + } + case "kind": { + const goKind = getSymbolKind(init); + if (!goKind) { + return undefined; + } + itemProps.push(`Kind: lsproto.${goKind}`); + break; + } + case "kindModifiers": { + if (init.getText().includes("deprecated")) { + itemProps.push(`Tags: &[]lsproto.SymbolTag{lsproto.SymbolTagDeprecated}`); + } + break; + } + case "range": { + if (ts.isIdentifier(init) || (ts.isElementAccessExpression(init) && ts.isIdentifier(init.expression))) { + let parsedRange = parseRangeVariable(init); + if (parsedRange) { + itemProps.push(`Location: ${parsedRange}.LSLocation()`); + continue; + } + } + if (ts.isElementAccessExpression(init) && init.expression.getText() === "test.ranges()") { + itemProps.push(`Location: f.Ranges()[${parseInt(init.argumentExpression.getText())}].LSLocation()`); + continue; + } + console.error(`Expected range variable for range in navigateTo item, got ${init.getText()}`); + return undefined; + } + case "containerName": { + let nameInit; + if (!(nameInit = getStringLiteralLike(init))) { + console.error(`Expected string literal for container name in navigateTo item, got ${init.getText()}`); + return undefined; + } + itemProps.push(`ContainerName: PtrTo(${getGoStringLiteral(nameInit.text)})`); + break; + } + default: + // ignore other properties + } + } + return `{\n${itemProps.join(",\n")},\n}`; +} + +function getSymbolKind(kind: ts.Expression): string | undefined { + let result; + if (!(result = getStringLiteralLike(kind))) { + console.error(`Expected string literal for symbol kind, got ${kind.getText()}`); + return undefined; + } + switch (result.text) { + case "script": + return "SymbolKindFile"; + case "module": + return "SymbolKindModule"; + case "class": + case "local class": + return "SymbolKindClass"; + case "interface": + return "SymbolKindInterface"; + case "type": + return "SymbolKindClass"; + case "enum": + return "SymbolKindEnum"; + case "enum member": + return "SymbolKindEnumMember"; + case "var": + case "local var": + case "using": + case "await using": + return "SymbolKindVariable"; + case "function": + case "local function": + return "SymbolKindFunction"; + case "method": + return "SymbolKindMethod"; + case "getter": + case "setter": + case "property": + case "accessor": + return "SymbolKindProperty"; + case "constructor": + case "construct": + return "SymbolKindConstructor"; + case "call": + case "index": + return "SymbolKindFunction"; + case "parameter": + return "SymbolKindVariable"; + case "type parameter": + return "SymbolKindTypeParameter"; + case "primitive type": + return "SymbolKindObject"; + case "const": + case "let": + return "SymbolKindVariable"; + case "directory": + return "SymbolKindPackage"; + case "external module name": + return "SymbolKindModule"; + case "string": + return "SymbolKindString"; + default: + return "SymbolKindVariable"; + } +} + interface VerifyCompletionsCmd { kind: "verifyCompletions"; marker: string; @@ -1905,6 +2121,11 @@ interface VerifyBaselineDiagnosticsCmd { kind: "verifyBaselineDiagnostics"; } +interface VerifyNavToCmd { + kind: "verifyNavigateTo"; + args: string[]; +} + type Cmd = | VerifyCompletionsCmd | VerifyApplyCodeActionFromCompletionCmd @@ -1919,6 +2140,7 @@ type Cmd = | VerifyQuickInfoCmd | VerifyBaselineRenameCmd | VerifyRenameInfoCmd + | VerifyNavToCmd | VerifyBaselineInlayHintsCmd | VerifyImportFixAtPositionCmd | VerifyDiagnosticsCmd @@ -2036,6 +2258,10 @@ function generateImportFixAtPosition({ expectedTexts, preferences }: VerifyImpor return `f.VerifyImportFixAtPosition(t, []string{\n${expectedTexts.join(",\n")},\n}, ${preferences})`; } +function generateNavigateTo({ args }: VerifyNavToCmd): string { + return `f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{\n${args.join(", ")}})`; +} + function generateCmd(cmd: Cmd): string { switch (cmd.kind) { case "verifyCompletions": @@ -2082,6 +2308,8 @@ function generateCmd(cmd: Cmd): string { return `f.${funcName}(t, ${cmd.arg})`; case "verifyBaselineDiagnostics": return `f.VerifyBaselineNonSuggestionDiagnostics(t)`; + case "verifyNavigateTo": + return generateNavigateTo(cmd); default: let neverCommand: never = cmd; throw new Error(`Unknown command kind: ${neverCommand as Cmd["kind"]}`); diff --git a/pkg/fourslash/_scripts/manualTests.txt b/pkg/fourslash/_scripts/manualTests.txt index bc1045b9..1dfd6557 100644 --- a/pkg/fourslash/_scripts/manualTests.txt +++ b/pkg/fourslash/_scripts/manualTests.txt @@ -2,6 +2,12 @@ completionListInClosedFunction05 completionsAtIncompleteObjectLiteralProperty completionsSelfDeclaring1 completionsWithDeprecatedTag4 +navigationItemsExactMatch2 +navigationItemsSpecialPropertyAssignment +navto_excludeLib1 +navto_excludeLib2 +navto_excludeLib4 +navto_serverExcludeLib parserCorruptionAfterMapInClass quickInfoForOverloadOnConst1 renameDefaultKeyword diff --git a/pkg/fourslash/_scripts/updateFailing.mts b/pkg/fourslash/_scripts/updateFailing.mts index 5e56c019..5ddf6558 100644 --- a/pkg/fourslash/_scripts/updateFailing.mts +++ b/pkg/fourslash/_scripts/updateFailing.mts @@ -13,7 +13,7 @@ function main() { const go = which.sync("go"); let testOutput: string; try { - testOutput = cp.execFileSync(go, ["test", "./internal/fourslash/tests/gen"], { encoding: "utf-8" }); + testOutput = cp.execFileSync(go, ["test", "-v", "./internal/fourslash/tests/gen"], { encoding: "utf-8" }); } catch (error) { testOutput = (error as { stdout: string; }).stdout as string; @@ -21,7 +21,7 @@ function main() { const panicRegex = /^panic/m; if (panicRegex.test(testOutput)) { fs.writeFileSync(failingTestsPath, oldFailingTests, "utf-8"); - throw new Error("Unrecovered panic detected in tests"); + throw new Error("Unrecovered panic detected in tests\n" + testOutput); } const failRegex = /--- FAIL: ([\S]+)/gm; const failingTests: string[] = []; diff --git a/pkg/fourslash/baselineutil.go b/pkg/fourslash/baselineutil.go index c086aab3..181d9e47 100644 --- a/pkg/fourslash/baselineutil.go +++ b/pkg/fourslash/baselineutil.go @@ -38,8 +38,13 @@ const ( type baselineCommand string func (f *FourslashTest) addResultToBaseline(t *testing.T, command baselineCommand, actual string) { - b, ok := f.baselines[command] - if !ok { + var b *strings.Builder + if f.testData.isStateBaseliningEnabled() { + // Single baseline for all commands + b = &f.stateBaseline.baseline + } else if builder, ok := f.baselines[command]; ok { + b = builder + } else { f.baselines[command] = &strings.Builder{} b = f.baselines[command] } @@ -334,6 +339,7 @@ type baselineFourslashLocationsOptions struct { startMarkerPrefix func(span documentSpan) *string endMarkerSuffix func(span documentSpan) *string + getLocationData func(span documentSpan) string additionalSpan *documentSpan } @@ -384,7 +390,7 @@ func (f *FourslashTest) getBaselineForGroupedSpansWithFileContents(groupedRanges return nil } - content, ok := f.vfs.ReadFile(path) + content, ok := f.textOfFile(path) if !ok { // !!! error? return nil @@ -416,7 +422,7 @@ func (f *FourslashTest) getBaselineForGroupedSpansWithFileContents(groupedRanges // already added the file to the baseline. if options.additionalSpan != nil && !foundAdditionalLocation { fileName := options.additionalSpan.uri.FileName() - if content, ok := f.vfs.ReadFile(fileName); ok { + if content, ok := f.textOfFile(fileName); ok { baselineEntries = append( baselineEntries, f.getBaselineContentForFile(fileName, content, []documentSpan{*options.additionalSpan}, spanToContextId, options), @@ -430,7 +436,7 @@ func (f *FourslashTest) getBaselineForGroupedSpansWithFileContents(groupedRanges if !foundMarker && options.marker != nil { // If we didn't find the marker in any file, we need to add it. markerFileName := options.marker.FileName() - if content, ok := f.vfs.ReadFile(markerFileName); ok { + if content, ok := f.textOfFile(markerFileName); ok { baselineEntries = append(baselineEntries, f.getBaselineContentForFile(markerFileName, content, nil, spanToContextId, options)) } } @@ -440,6 +446,13 @@ func (f *FourslashTest) getBaselineForGroupedSpansWithFileContents(groupedRanges return strings.Join(baselineEntries, "\n\n") } +func (f *FourslashTest) textOfFile(fileName string) (string, bool) { + if _, ok := f.openFiles[fileName]; ok { + return f.getScriptInfo(fileName).content, true + } + return f.vfs.ReadFile(fileName) +} + type baselineDetail struct { pos lsproto.Position positionMarker string @@ -482,8 +495,12 @@ func (f *FourslashTest) getBaselineContentForFile( } textSpanIndex := len(details) + startMarker := "[|" + if options.getLocationData != nil { + startMarker += options.getLocationData(span) + } details = append(details, - &baselineDetail{pos: span.textSpan.Start, positionMarker: "[|", span: &span, kind: "textStart"}, + &baselineDetail{pos: span.textSpan.Start, positionMarker: startMarker, span: &span, kind: "textStart"}, &baselineDetail{pos: span.textSpan.End, positionMarker: core.OrElse(options.endMarker, "|]"), span: &span, kind: "textEnd"}, ) @@ -885,3 +902,7 @@ func (t *textWithContext) getIndex(i any) *int { func codeFence(lang string, code string) string { return "```" + lang + "\n" + code + "\n```" } + +func symbolInformationToData(symbol *lsproto.SymbolInformation) string { + return fmt.Sprintf("{| name: %s, kind: %s |}", symbol.Name, symbol.Kind.String()) +} diff --git a/pkg/fourslash/fourslash.go b/pkg/fourslash/fourslash.go index 65e10bf6..677a3eee 100644 --- a/pkg/fourslash/fourslash.go +++ b/pkg/fourslash/fourslash.go @@ -18,6 +18,8 @@ import ( "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/diagnostics" "github.com/buke/typescript-go-internal/pkg/diagnosticwriter" + "github.com/buke/typescript-go-internal/pkg/execute/tsctests" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/ls" "github.com/buke/typescript-go-internal/pkg/ls/lsconv" "github.com/buke/typescript-go-internal/pkg/ls/lsutil" @@ -31,6 +33,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/testutil/tsbaseline" "github.com/buke/typescript-go-internal/pkg/tspath" "github.com/buke/typescript-go-internal/pkg/vfs" + "github.com/buke/typescript-go-internal/pkg/vfs/iovfs" "github.com/buke/typescript-go-internal/pkg/vfs/vfstest" "gotest.tools/v3/assert" ) @@ -42,9 +45,11 @@ type FourslashTest struct { id int32 vfs vfs.FS - testData *TestData // !!! consolidate test files from test data and script info - baselines map[baselineCommand]*strings.Builder - rangesByText *collections.MultiMap[string, *RangeMarker] + testData *TestData // !!! consolidate test files from test data and script info + baselines map[baselineCommand]*strings.Builder + rangesByText *collections.MultiMap[string, *RangeMarker] + openFiles map[string]struct{} + stateBaseline *stateBaseline scriptInfos map[string]*scriptInfo converters *lsconv.Converters @@ -139,7 +144,7 @@ func NewFourslash(t *testing.T, capabilities *lsproto.ClientCapabilities, conten t.Skip("bundled files are not embedded") } fileName := getBaseFileNameFromTest(t) + tspath.ExtensionTs - testfs := make(map[string]string) + testfs := make(map[string]any) scriptInfos := make(map[string]*scriptInfo) testData := ParseTestData(t, content, fileName) for _, file := range testData.Files { @@ -148,10 +153,20 @@ func NewFourslash(t *testing.T, capabilities *lsproto.ClientCapabilities, conten scriptInfos[filePath] = newScriptInfo(filePath, file.Content) } + for link, target := range testData.Symlinks { + filePath := tspath.GetNormalizedAbsolutePath(link, rootDir) + testfs[filePath] = vfstest.Symlink(tspath.GetNormalizedAbsolutePath(target, rootDir)) + } + compilerOptions := &core.CompilerOptions{ SkipDefaultLibCheck: core.TSTrue, } harnessutil.SetCompilerOptionsFromTestConfig(t, testData.GlobalOptions, compilerOptions, rootDir) + if commandLines := testData.GlobalOptions["tsc"]; commandLines != "" { + for commandLine := range strings.SplitSeq(commandLines, ",") { + tsctests.GetFileMapWithBuild(testfs, strings.Split(commandLine, " ")) + } + } // Skip tests with deprecated/removed compiler options if compilerOptions.BaseUrl != "" { @@ -178,7 +193,9 @@ func NewFourslash(t *testing.T, capabilities *lsproto.ClientCapabilities, conten inputReader, inputWriter := newLSPPipe() outputReader, outputWriter := newLSPPipe() - fs := bundled.WrapFS(vfstest.FromMap(testfs, true /*useCaseSensitiveFileNames*/)) + + fsFromMap := vfstest.FromMap(testfs, true /*useCaseSensitiveFileNames*/) + fs := bundled.WrapFS(fsFromMap) var err strings.Builder server := lsp.NewServer(&lsp.ServerOptions{ @@ -221,16 +238,23 @@ func NewFourslash(t *testing.T, capabilities *lsproto.ClientCapabilities, conten scriptInfos: scriptInfos, converters: converters, baselines: make(map[baselineCommand]*strings.Builder), + openFiles: make(map[string]struct{}), } // !!! temporary; remove when we have `handleDidChangeConfiguration`/implicit project config support // !!! replace with a proper request *after initialize* f.server.SetCompilerOptionsForInferredProjects(t.Context(), compilerOptions) f.initialize(t, capabilities) - for _, file := range testData.Files { - f.openFile(t, file.fileName) + + if testData.isStateBaseliningEnabled() { + // Single baseline, so initialize project state baseline too + f.stateBaseline = newStateBaseline(fsFromMap.(iovfs.FsWithSys)) + } else { + for _, file := range testData.Files { + f.openFile(t, file.fileName) + } + f.activeFilename = f.testData.Files[0].fileName } - f.activeFilename = f.testData.Files[0].fileName _, testPath, _, _ := runtime.Caller(1) t.Cleanup(func() { @@ -241,7 +265,9 @@ func NewFourslash(t *testing.T, capabilities *lsproto.ClientCapabilities, conten } func getBaseFileNameFromTest(t *testing.T) string { - name := strings.TrimPrefix(t.Name(), "Test") + name := t.Name() + name = core.LastOrNil(strings.Split(name, "/")) + name = strings.TrimPrefix(name, "Test") return stringutil.LowerFirstChar(name) } @@ -262,8 +288,8 @@ func (f *FourslashTest) initialize(t *testing.T, capabilities *lsproto.ClientCap } params.Capabilities = getCapabilitiesWithDefaults(capabilities) // !!! check for errors? - sendRequest(t, f, lsproto.InitializeInfo, params) - sendNotification(t, f, lsproto.InitializedInfo, &lsproto.InitializedParams{}) + sendRequestWorker(t, f, lsproto.InitializeInfo, params) + sendNotificationWorker(t, f, lsproto.InitializedInfo, &lsproto.InitializedParams{}) } var ( @@ -364,7 +390,7 @@ func getCapabilitiesWithDefaults(capabilities *lsproto.ClientCapabilities) *lspr return &capabilitiesWithDefaults } -func sendRequest[Params, Resp any](t *testing.T, f *FourslashTest, info lsproto.RequestInfo[Params, Resp], params Params) (*lsproto.Message, Resp, bool) { +func sendRequestWorker[Params, Resp any](t *testing.T, f *FourslashTest, info lsproto.RequestInfo[Params, Resp], params Params) (*lsproto.Message, Resp, bool) { id := f.nextID() req := info.NewRequestMessage( lsproto.NewID(lsproto.IntegerOrString{Integer: &id}), @@ -407,7 +433,7 @@ func sendRequest[Params, Resp any](t *testing.T, f *FourslashTest, info lsproto. return resp, result, ok } -func sendNotification[Params any](t *testing.T, f *FourslashTest, info lsproto.NotificationInfo[Params], params Params) { +func sendNotificationWorker[Params any](t *testing.T, f *FourslashTest, info lsproto.NotificationInfo[Params], params Params) { notification := info.NewNotificationMessage( params, ) @@ -431,6 +457,39 @@ func (f *FourslashTest) readMsg(t *testing.T) *lsproto.Message { return msg } +func sendRequest[Params, Resp any](t *testing.T, f *FourslashTest, info lsproto.RequestInfo[Params, Resp], params Params) Resp { + t.Helper() + prefix := f.getCurrentPositionPrefix() + f.baselineState(t) + f.baselineRequestOrNotification(t, info.Method, params) + resMsg, result, resultOk := sendRequestWorker(t, f, info, params) + f.baselineState(t) + if resMsg == nil { + t.Fatalf(prefix+"Nil response received for %s request", info.Method) + } + if !resultOk { + t.Fatalf(prefix+"Unexpected %s response type: %T", info.Method, resMsg.AsResponse().Result) + } + return result +} + +func sendNotification[Params any](t *testing.T, f *FourslashTest, info lsproto.NotificationInfo[Params], params Params) { + t.Helper() + f.baselineState(t) + f.updateState(info.Method, params) + f.baselineRequestOrNotification(t, info.Method, params) + sendNotificationWorker(t, f, info, params) +} + +func (f *FourslashTest) updateState(method lsproto.Method, params any) { + switch method { + case lsproto.MethodTextDocumentDidOpen: + f.openFiles[params.(*lsproto.DidOpenTextDocumentParams).TextDocument.Uri.FileName()] = struct{}{} + case lsproto.MethodTextDocumentDidClose: + delete(f.openFiles, params.(*lsproto.DidCloseTextDocumentParams).TextDocument.Uri.FileName()) + } +} + func (f *FourslashTest) Configure(t *testing.T, config *lsutil.UserPreferences) { // !!! // Callers to this function may need to consider @@ -594,14 +653,44 @@ func (f *FourslashTest) getRangesInFile(fileName string) []*RangeMarker { func (f *FourslashTest) ensureActiveFile(t *testing.T, filename string) { if f.activeFilename != filename { - f.openFile(t, filename) + if _, ok := f.openFiles[filename]; !ok { + f.openFile(t, filename) + } else { + f.activeFilename = filename + } + } +} + +func (f *FourslashTest) CloseFileOfMarker(t *testing.T, markerName string) { + marker, ok := f.testData.MarkerPositions[markerName] + if !ok { + t.Fatalf("Marker '%s' not found", markerName) } + if f.activeFilename == marker.FileName() { + f.activeFilename = "" + } + if index := slices.IndexFunc(f.testData.Files, func(f *TestFileInfo) bool { return f.fileName == marker.FileName() }); index >= 0 { + testFile := f.testData.Files[index] + f.scriptInfos[testFile.fileName] = newScriptInfo(testFile.fileName, testFile.Content) + } else { + delete(f.scriptInfos, marker.FileName()) + } + sendNotification(t, f, lsproto.TextDocumentDidCloseInfo, &lsproto.DidCloseTextDocumentParams{ + TextDocument: lsproto.TextDocumentIdentifier{ + Uri: lsconv.FileNameToDocumentURI(marker.FileName()), + }, + }) } func (f *FourslashTest) openFile(t *testing.T, filename string) { script := f.getScriptInfo(filename) if script == nil { - t.Fatalf("File %s not found in test data", filename) + if content, ok := f.vfs.ReadFile(filename); ok { + script = newScriptInfo(filename, content) + f.scriptInfos[filename] = script + } else { + t.Fatalf("File %s not found in test data", filename) + } } f.activeFilename = filename sendNotification(t, f, lsproto.TextDocumentDidOpenInfo, &lsproto.DidOpenTextDocumentParams{ @@ -611,6 +700,7 @@ func (f *FourslashTest) openFile(t *testing.T, filename string) { Text: script.content, }, }) + f.baselineProjectsAfterNotification(t, filename) } func getLanguageKind(filename string) lsproto.LanguageKind { @@ -744,7 +834,6 @@ func (f *FourslashTest) verifyCompletionsWorker(t *testing.T, expected *Completi } func (f *FourslashTest) getCompletions(t *testing.T, userPreferences *lsutil.UserPreferences) *lsproto.CompletionList { - prefix := f.getCurrentPositionPrefix() params := &lsproto.CompletionParams{ TextDocument: lsproto.TextDocumentIdentifier{ Uri: lsconv.FileNameToDocumentURI(f.activeFilename), @@ -756,13 +845,7 @@ func (f *FourslashTest) getCompletions(t *testing.T, userPreferences *lsutil.Use reset := f.ConfigureWithReset(t, userPreferences) defer reset() } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentCompletionInfo, params) - if resMsg == nil { - t.Fatalf(prefix+"Nil response received for completion request", f.lastKnownMarkerName) - } - if !resultOk { - t.Fatalf(prefix+"Unexpected response type for completion request: %T", resMsg.AsResponse().Result) - } + result := sendRequest(t, f, lsproto.TextDocumentCompletionInfo, params) return result.List } @@ -994,14 +1077,7 @@ func (f *FourslashTest) verifyCompletionItem(t *testing.T, prefix string, actual } func (f *FourslashTest) resolveCompletionItem(t *testing.T, item *lsproto.CompletionItem) *lsproto.CompletionItem { - prefix := f.getCurrentPositionPrefix() - resMsg, result, resultOk := sendRequest(t, f, lsproto.CompletionItemResolveInfo, item) - if resMsg == nil { - t.Fatal(prefix + "Expected non-nil response for completion item resolve, got nil") - } - if !resultOk { - t.Fatalf(prefix+"Unexpected response type for completion item resolve: %T, Error: %v", resMsg.AsResponse().Result, resMsg.AsResponse().Error) - } + result := sendRequest(t, f, lsproto.CompletionItemResolveInfo, item) return result } @@ -1113,10 +1189,7 @@ func (f *FourslashTest) VerifyImportFixAtPosition(t *testing.T, expectedTexts [] Uri: lsconv.FileNameToDocumentURI(f.activeFilename), }, } - _, diagResult, diagOk := sendRequest(t, f, lsproto.TextDocumentDiagnosticInfo, diagParams) - if !diagOk { - t.Fatalf("Failed to get diagnostics") - } + diagResult := sendRequest(t, f, lsproto.TextDocumentDiagnosticInfo, diagParams) var diagnostics []*lsproto.Diagnostic if diagResult.FullDocumentDiagnosticReport != nil && diagResult.FullDocumentDiagnosticReport.Items != nil { @@ -1135,13 +1208,7 @@ func (f *FourslashTest) VerifyImportFixAtPosition(t *testing.T, expectedTexts [] Diagnostics: diagnostics, }, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentCodeActionInfo, params) - if resMsg == nil { - t.Fatalf("Nil response received for code action request at pos %v", f.currentCaretPosition) - } - if !resultOk { - t.Fatalf("Unexpected code action response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) - } + result := sendRequest(t, f, lsproto.TextDocumentCodeActionInfo, params) // Find all auto-import code actions (fixes with fixId/fixName related to imports) var importActions []*lsproto.CodeAction @@ -1237,22 +1304,7 @@ func (f *FourslashTest) VerifyBaselineFindAllReferences( Position: f.currentCaretPosition, Context: &lsproto.ReferenceContext{}, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentReferencesInfo, params) - if resMsg == nil { - if f.lastKnownMarkerName == nil { - t.Fatalf("Nil response received for references request at pos %v", f.currentCaretPosition) - } else { - t.Fatalf("Nil response received for references request at marker '%s'", *f.lastKnownMarkerName) - } - } - if !resultOk { - if f.lastKnownMarkerName == nil { - t.Fatalf("Unexpected references response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) - } else { - t.Fatalf("Unexpected references response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) - } - } - + result := sendRequest(t, f, lsproto.TextDocumentReferencesInfo, params) f.addResultToBaseline(t, findAllReferencesCmd, f.getBaselineForLocationsWithFileContents(*result.Locations, baselineFourslashLocationsOptions{ marker: markerOrRange, markerName: "/*FIND ALL REFS*/", @@ -1282,22 +1334,7 @@ func (f *FourslashTest) VerifyBaselineGoToDefinition( Position: f.currentCaretPosition, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentDefinitionInfo, params) - if resMsg == nil { - if f.lastKnownMarkerName == nil { - t.Fatalf("Nil response received for definition request at pos %v", f.currentCaretPosition) - } else { - t.Fatalf("Nil response received for definition request at marker '%s'", *f.lastKnownMarkerName) - } - } - if !resultOk { - if f.lastKnownMarkerName == nil { - t.Fatalf("Unexpected definition response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) - } else { - t.Fatalf("Unexpected definition response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) - } - } - return result + return sendRequest(t, f, lsproto.TextDocumentDefinitionInfo, params) }, includeOriginalSelectionRange, markers..., @@ -1375,28 +1412,38 @@ func (f *FourslashTest) VerifyBaselineGoToTypeDefinition( Position: f.currentCaretPosition, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentTypeDefinitionInfo, params) - if resMsg == nil { - if f.lastKnownMarkerName == nil { - t.Fatalf("Nil response received for type definition request at pos %v", f.currentCaretPosition) - } else { - t.Fatalf("Nil response received for type definition request at marker '%s'", *f.lastKnownMarkerName) - } - } - if !resultOk { - if f.lastKnownMarkerName == nil { - t.Fatalf("Unexpected type definition response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) - } else { - t.Fatalf("Unexpected type definition response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) - } - } - return result + return sendRequest(t, f, lsproto.TextDocumentTypeDefinitionInfo, params) }, false, /*includeOriginalSelectionRange*/ markers..., ) } +func (f *FourslashTest) VerifyBaselineWorkspaceSymbol(t *testing.T, query string) { + t.Helper() + result := sendRequest(t, f, lsproto.WorkspaceSymbolInfo, &lsproto.WorkspaceSymbolParams{Query: query}) + + locationToText := map[documentSpan]*lsproto.SymbolInformation{} + groupedRanges := collections.MultiMap[lsproto.DocumentUri, documentSpan]{} + var symbolInformations []*lsproto.SymbolInformation + if result.SymbolInformations != nil { + symbolInformations = *result.SymbolInformations + } + for _, symbol := range symbolInformations { + uri := symbol.Location.Uri + span := locationToSpan(symbol.Location) + groupedRanges.Add(uri, span) + locationToText[span] = symbol + } + + f.addResultToBaseline(t, "workspaceSymbol", f.getBaselineForGroupedSpansWithFileContents( + &groupedRanges, + baselineFourslashLocationsOptions{ + getLocationData: func(span documentSpan) string { return symbolInformationToData(locationToText[span]) }, + }, + )) +} + func (f *FourslashTest) VerifyBaselineHover(t *testing.T) { markersAndItems := core.MapFiltered(f.Markers(), func(marker *Marker) (markerAndItem[*lsproto.Hover], bool) { if marker.Name == nil { @@ -1410,14 +1457,7 @@ func (f *FourslashTest) VerifyBaselineHover(t *testing.T) { Position: marker.LSPosition, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentHoverInfo, params) - if resMsg == nil { - t.Fatalf(f.getCurrentPositionPrefix()+"Nil response received for quick info request", f.lastKnownMarkerName) - } - if !resultOk { - t.Fatalf(f.getCurrentPositionPrefix()+"Unexpected response type for quick info request: %T", resMsg.AsResponse().Result) - } - + result := sendRequest(t, f, lsproto.TextDocumentHoverInfo, params) return markerAndItem[*lsproto.Hover]{Marker: marker, Item: result.Hover}, true }) @@ -1481,14 +1521,7 @@ func (f *FourslashTest) VerifyBaselineSignatureHelp(t *testing.T) { Position: marker.LSPosition, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentSignatureHelpInfo, params) - if resMsg == nil { - t.Fatalf(f.getCurrentPositionPrefix()+"Nil response received for signature help request", f.lastKnownMarkerName) - } - if !resultOk { - t.Fatalf(f.getCurrentPositionPrefix()+"Unexpected response type for signature help request: %T", resMsg.AsResponse().Result) - } - + result := sendRequest(t, f, lsproto.TextDocumentSignatureHelpInfo, params) return markerAndItem[*lsproto.SignatureHelp]{Marker: marker, Item: result.SignatureHelp}, true }) @@ -1602,17 +1635,7 @@ func (f *FourslashTest) VerifyBaselineSelectionRanges(t *testing.T) { Positions: []lsproto.Position{marker.LSPosition}, } - resMsg, selectionRangeResult, resultOk := sendRequest(t, f, lsproto.TextDocumentSelectionRangeInfo, params) - markerNameStr := *core.OrElse(marker.Name, ptrTo("(unnamed)")) - if resMsg == nil { - t.Fatalf("Nil response received for selection range request at marker '%s'", markerNameStr) - } - if !resultOk { - if resMsg.AsResponse().Error != nil { - t.Fatalf("Error response for selection range request at marker '%s': %v", markerNameStr, resMsg.AsResponse().Error) - } - t.Fatalf("Unexpected selection range response type at marker '%s': %T", markerNameStr, resMsg.AsResponse().Result) - } + selectionRangeResult := sendRequest(t, f, lsproto.TextDocumentSelectionRangeInfo, params) if selectionRangeResult.SelectionRanges == nil || len(*selectionRangeResult.SelectionRanges) == 0 { result.WriteString("No selection ranges available\n") @@ -1759,22 +1782,7 @@ func (f *FourslashTest) verifyBaselineDocumentHighlights( }, Position: f.currentCaretPosition, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentDocumentHighlightInfo, params) - if resMsg == nil { - if f.lastKnownMarkerName == nil { - t.Fatalf("Nil response received for document highlights request at pos %v", f.currentCaretPosition) - } else { - t.Fatalf("Nil response received for document highlights request at marker '%s'", *f.lastKnownMarkerName) - } - } - if !resultOk { - if f.lastKnownMarkerName == nil { - t.Fatalf("Unexpected document highlights response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) - } else { - t.Fatalf("Unexpected document highlights response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) - } - } - + result := sendRequest(t, f, lsproto.TextDocumentDocumentHighlightInfo, params) highlights := result.DocumentHighlights if highlights == nil { highlights = &[]*lsproto.DocumentHighlight{} @@ -1981,10 +1989,6 @@ func (f *FourslashTest) editScript(t *testing.T, fileName string, start int, end } script.editContent(start, end, newText) - err := f.vfs.WriteFile(fileName, script.content, false) - if err != nil { - panic(fmt.Sprintf("Failed to write file %s: %v", fileName, err)) - } sendNotification(t, f, lsproto.TextDocumentDidChangeInfo, &lsproto.DidChangeTextDocumentParams{ TextDocument: lsproto.VersionedTextDocumentIdentifier{ Uri: lsconv.FileNameToDocumentURI(fileName), @@ -2020,13 +2024,7 @@ func (f *FourslashTest) getQuickInfoAtCurrentPosition(t *testing.T) *lsproto.Hov }, Position: f.currentCaretPosition, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentHoverInfo, params) - if resMsg == nil { - t.Fatalf("Nil response received for hover request at marker '%s'", *f.lastKnownMarkerName) - } - if !resultOk { - t.Fatalf("Unexpected hover response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) - } + result := sendRequest(t, f, lsproto.TextDocumentHoverInfo, params) if result.Hover == nil { t.Fatalf("Expected hover result at marker '%s' but got nil", *f.lastKnownMarkerName) } @@ -2131,13 +2129,7 @@ func (f *FourslashTest) verifySignatureHelp( Position: f.currentCaretPosition, Context: context, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentSignatureHelpInfo, params) - if resMsg == nil { - t.Fatalf(prefix+"Nil response received for signature help request", f.lastKnownMarkerName) - } - if !resultOk { - t.Fatalf(prefix+"Unexpected response type for signature help request: %T", resMsg.AsResponse().Result) - } + result := sendRequest(t, f, lsproto.TextDocumentSignatureHelpInfo, params) f.verifySignatureHelpResult(t, result.SignatureHelp, expected, prefix) } @@ -2173,19 +2165,13 @@ func (f *FourslashTest) BaselineAutoImportsCompletions(t *testing.T, markerNames Position: f.currentCaretPosition, Context: &lsproto.CompletionContext{}, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentCompletionInfo, params) + result := sendRequest(t, f, lsproto.TextDocumentCompletionInfo, params) prefix := fmt.Sprintf("At marker '%s': ", markerName) - if resMsg == nil { - t.Fatalf(prefix+"Nil response received for completion request for autoimports", f.lastKnownMarkerName) - } - if !resultOk { - t.Fatalf(prefix+"Unexpected response type for completion request for autoimports: %T", resMsg.AsResponse().Result) - } f.writeToBaseline(autoImportsCmd, "// === Auto Imports === \n") - fileContent, ok := f.vfs.ReadFile(f.activeFilename) + fileContent, ok := f.textOfFile(f.activeFilename) if !ok { t.Fatalf(prefix+"Failed to read file %s for auto-import baseline", f.activeFilename) } @@ -2218,13 +2204,7 @@ func (f *FourslashTest) BaselineAutoImportsCompletions(t *testing.T, markerNames if item.Data == nil || *item.SortText != string(ls.SortTextAutoImportSuggestions) { continue } - resMsg, details, resultOk := sendRequest(t, f, lsproto.CompletionItemResolveInfo, item) - if resMsg == nil { - t.Fatalf(prefix+"Nil response received for resolve completion", f.lastKnownMarkerName) - } - if !resultOk { - t.Fatalf(prefix+"Unexpected response type for resolve completion: %T, Error: %v", resMsg.AsResponse().Result, resMsg.AsResponse().Error) - } + details := sendRequest(t, f, lsproto.CompletionItemResolveInfo, item) if details == nil || details.AdditionalTextEdits == nil || len(*details.AdditionalTextEdits) == 0 { t.Fatalf(prefix+"Entry %s from %s returned no code changes from completion details request", item.Label, item.Detail) } @@ -2302,14 +2282,7 @@ func (f *FourslashTest) verifyBaselineRename( NewName: "?", } - prefix := f.getCurrentPositionPrefix() - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentRenameInfo, params) - if resMsg == nil { - t.Fatal(prefix + "Nil response received for rename request") - } - if !resultOk { - t.Fatalf(prefix+"Unexpected rename response type: %T", resMsg.AsResponse().Result) - } + result := sendRequest(t, f, lsproto.TextDocumentRenameInfo, params) var changes map[lsproto.DocumentUri][]*lsproto.TextEdit if result.WorkspaceEdit != nil && result.WorkspaceEdit.Changes != nil { @@ -2382,14 +2355,7 @@ func (f *FourslashTest) VerifyRenameSucceeded(t *testing.T, preferences *lsutil. } prefix := f.getCurrentPositionPrefix() - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentRenameInfo, params) - if resMsg == nil { - t.Fatal(prefix + "Nil response received for rename request") - } - if !resultOk { - t.Fatalf(prefix+"Unexpected rename response type: %T", resMsg.AsResponse().Result) - } - + result := sendRequest(t, f, lsproto.TextDocumentRenameInfo, params) if result.WorkspaceEdit == nil || result.WorkspaceEdit.Changes == nil || len(*result.WorkspaceEdit.Changes) == 0 { t.Fatal(prefix + "Expected rename to succeed, but got no changes") } @@ -2406,14 +2372,7 @@ func (f *FourslashTest) VerifyRenameFailed(t *testing.T, preferences *lsutil.Use } prefix := f.getCurrentPositionPrefix() - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentRenameInfo, params) - if resMsg == nil { - t.Fatal(prefix + "Nil response received for rename request") - } - if !resultOk { - t.Fatalf(prefix+"Unexpected rename response type: %T", resMsg.AsResponse().Result) - } - + result := sendRequest(t, f, lsproto.TextDocumentRenameInfo, params) if result.WorkspaceEdit != nil { t.Fatalf(prefix+"Expected rename to fail, but got changes: %s", cmp.Diff(result.WorkspaceEdit, nil)) } @@ -2451,15 +2410,19 @@ func (f *FourslashTest) getRangeText(r *RangeMarker) string { } func (f *FourslashTest) verifyBaselines(t *testing.T, testPath string) { - for command, content := range f.baselines { - baseline.Run(t, getBaselineFileName(t, command), content.String(), f.getBaselineOptions(command, testPath)) + if !f.testData.isStateBaseliningEnabled() { + for command, content := range f.baselines { + baseline.Run(t, getBaselineFileName(t, command), content.String(), f.getBaselineOptions(command, testPath)) + } + } else { + baseline.Run(t, getBaseFileNameFromTest(t)+".baseline", f.stateBaseline.baseline.String(), baseline.Options{Subfolder: "fourslash/state"}) } } func (f *FourslashTest) VerifyBaselineInlayHints( t *testing.T, span *lsproto.Range, - userPreferences *lsutil.UserPreferences, + testPreferences *lsutil.UserPreferences, ) { fileName := f.activeFilename var lspRange lsproto.Range @@ -2474,20 +2437,15 @@ func (f *FourslashTest) VerifyBaselineInlayHints( Range: lspRange, } - if userPreferences != nil { - reset := f.ConfigureWithReset(t, userPreferences) - defer reset() + preferences := testPreferences + if preferences == nil { + preferences = lsutil.NewDefaultUserPreferences() } + reset := f.ConfigureWithReset(t, preferences) + defer reset() prefix := fmt.Sprintf("At position (Ln %d, Col %d): ", lspRange.Start.Line, lspRange.Start.Character) - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentInlayHintInfo, params) - if resMsg == nil { - t.Fatal(prefix + "Nil response received for inlay hints request") - } - if !resultOk { - t.Fatalf(prefix+"Unexpected response type for inlay hints request: %T", resMsg.AsResponse().Result) - } - + result := sendRequest(t, f, lsproto.TextDocumentInlayHintInfo, params) fileLines := strings.Split(f.getScriptInfo(fileName).content, "\n") var annotations []string if result.InlayHints != nil { @@ -2565,14 +2523,7 @@ func (f *FourslashTest) getDiagnostics(t *testing.T, fileName string) []*lsproto Uri: lsconv.FileNameToDocumentURI(fileName), }, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentDiagnosticInfo, params) - if resMsg == nil { - t.Fatal("Nil response received for diagnostics request") - } - if !resultOk { - t.Fatalf("Unexpected response type for diagnostics request: %T", resMsg.AsResponse().Result) - } - + result := sendRequest(t, f, lsproto.TextDocumentDiagnosticInfo, params) if result.FullDocumentDiagnosticReport != nil { return result.FullDocumentDiagnosticReport.Items } @@ -2665,7 +2616,7 @@ func (d *fourslashDiagnostic) Category() diagnostics.Category { return d.category } -func (d *fourslashDiagnostic) Message() string { +func (d *fourslashDiagnostic) Localize(locale locale.Locale) string { return d.message } @@ -2792,24 +2743,82 @@ func (f *FourslashTest) VerifyBaselineGoToImplementation(t *testing.T, markerNam Position: f.currentCaretPosition, } - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentImplementationInfo, params) - if resMsg == nil { - if f.lastKnownMarkerName == nil { - t.Fatalf("Nil response received for implementation request at pos %v", f.currentCaretPosition) - } else { - t.Fatalf("Nil response received for implementation request at marker '%s'", *f.lastKnownMarkerName) - } - } - if !resultOk { - if f.lastKnownMarkerName == nil { - t.Fatalf("Unexpected implementation response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) - } else { - t.Fatalf("Unexpected implementation response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) - } - } - return result + return sendRequest(t, f, lsproto.TextDocumentImplementationInfo, params) }, false, /*includeOriginalSelectionRange*/ markerNames..., ) } + +type VerifyWorkspaceSymbolCase struct { + Pattern string + Includes *[]*lsproto.SymbolInformation + Exact *[]*lsproto.SymbolInformation + Preferences *lsutil.UserPreferences +} + +// `verify.navigateTo` in Strada. +func (f *FourslashTest) VerifyWorkspaceSymbol(t *testing.T, cases []*VerifyWorkspaceSymbolCase) { + originalPreferences := f.userPreferences.Copy() + for _, testCase := range cases { + preferences := testCase.Preferences + if preferences == nil { + preferences = lsutil.NewDefaultUserPreferences() + } + f.Configure(t, preferences) + result := sendRequest(t, f, lsproto.WorkspaceSymbolInfo, &lsproto.WorkspaceSymbolParams{Query: testCase.Pattern}) + if result.SymbolInformations == nil { + t.Fatalf("Expected non-nil symbol information array from workspace symbol request") + } + if testCase.Includes != nil { + if testCase.Exact != nil { + t.Fatalf("Test case cannot have both 'Includes' and 'Exact' fields set") + } + verifyIncludesSymbols(t, *result.SymbolInformations, *testCase.Includes, "Workspace symbols mismatch with pattern '"+testCase.Pattern+"'") + } else { + if testCase.Exact == nil { + t.Fatalf("Test case must have either 'Includes' or 'Exact' field set") + } + verifyExactSymbols(t, *result.SymbolInformations, *testCase.Exact, "Workspace symbols mismatch with pattern '"+testCase.Pattern+"'") + } + } + f.Configure(t, originalPreferences) +} + +func verifyExactSymbols( + t *testing.T, + actual []*lsproto.SymbolInformation, + expected []*lsproto.SymbolInformation, + prefix string, +) { + if len(actual) != len(expected) { + t.Fatalf("%s: Expected %d symbols, but got %d:\n%s", prefix, len(expected), len(actual), cmp.Diff(actual, expected)) + } + for i := range actual { + assertDeepEqual(t, actual[i], expected[i], prefix) + } +} + +func verifyIncludesSymbols( + t *testing.T, + actual []*lsproto.SymbolInformation, + includes []*lsproto.SymbolInformation, + prefix string, +) { + type key struct { + name string + loc lsproto.Location + } + nameAndLocToActualSymbol := make(map[key]*lsproto.SymbolInformation, len(actual)) + for _, sym := range actual { + nameAndLocToActualSymbol[key{name: sym.Name, loc: sym.Location}] = sym + } + + for _, sym := range includes { + actualSym, ok := nameAndLocToActualSymbol[key{name: sym.Name, loc: sym.Location}] + if !ok { + t.Fatalf("%s: Expected symbol '%s' at location '%v' not found", prefix, sym.Name, sym.Location) + } + assertDeepEqual(t, actualSym, sym, fmt.Sprintf("%s: Symbol '%s' at location '%v' mismatch", prefix, sym.Name, sym.Location)) + } +} diff --git a/pkg/fourslash/statebaseline.go b/pkg/fourslash/statebaseline.go new file mode 100644 index 00000000..475d7ae7 --- /dev/null +++ b/pkg/fourslash/statebaseline.go @@ -0,0 +1,509 @@ +package fourslash + +import ( + "fmt" + "io" + "iter" + "maps" + "slices" + "strings" + "testing" + + "github.com/go-json-experiment/json" + "github.com/go-json-experiment/json/jsontext" + "github.com/buke/typescript-go-internal/pkg/collections" + "github.com/buke/typescript-go-internal/pkg/compiler" + "github.com/buke/typescript-go-internal/pkg/ls/lsconv" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/project" + "github.com/buke/typescript-go-internal/pkg/testutil/fsbaselineutil" + "github.com/buke/typescript-go-internal/pkg/tspath" + "github.com/buke/typescript-go-internal/pkg/vfs/iovfs" + "gotest.tools/v3/assert" +) + +type stateBaseline struct { + baseline strings.Builder + fsDiffer *fsbaselineutil.FSDiffer + isInitialized bool + + serializedProjects map[string]projectInfo + serializedOpenFiles map[string]*openFileInfo + serializedConfigFileRegistry *project.ConfigFileRegistry +} + +func newStateBaseline(fsFromMap iovfs.FsWithSys) *stateBaseline { + stateBaseline := &stateBaseline{ + fsDiffer: &fsbaselineutil.FSDiffer{ + FS: fsFromMap, + WrittenFiles: &collections.SyncSet[string]{}, + }, + } + fmt.Fprintf(&stateBaseline.baseline, "UseCaseSensitiveFileNames: %v\n", fsFromMap.UseCaseSensitiveFileNames()) + stateBaseline.fsDiffer.BaselineFSwithDiff(&stateBaseline.baseline) + return stateBaseline +} + +type requestOrMessage struct { + Method lsproto.Method `json:"method"` + Params any `json:"params,omitzero"` +} + +func (f *FourslashTest) baselineRequestOrNotification(t *testing.T, method lsproto.Method, params any) { + t.Helper() + + if !f.testData.isStateBaseliningEnabled() { + return + } + + res, _ := json.Marshal(requestOrMessage{method, params}, jsontext.WithIndent(" ")) + f.stateBaseline.baseline.WriteString("\n" + string(res) + "\n") + f.stateBaseline.isInitialized = true +} + +func (f *FourslashTest) baselineProjectsAfterNotification(t *testing.T, fileName string) { + t.Helper() + if !f.testData.isStateBaseliningEnabled() { + return + } + // Do hover so we have snapshot to check things on!! + _, _, resultOk := sendRequestWorker(t, f, lsproto.TextDocumentHoverInfo, &lsproto.HoverParams{ + TextDocument: lsproto.TextDocumentIdentifier{ + Uri: lsconv.FileNameToDocumentURI(fileName), + }, + Position: lsproto.Position{ + Line: uint32(0), + Character: uint32(0), + }, + }) + assert.Assert(t, resultOk) + f.baselineState(t) +} + +func (f *FourslashTest) baselineState(t *testing.T) { + t.Helper() + + if !f.testData.isStateBaseliningEnabled() { + return + } + + serialized := f.serializedState(t) + if serialized != "" { + f.stateBaseline.baseline.WriteString("\n") + f.stateBaseline.baseline.WriteString(serialized) + } +} + +func (f *FourslashTest) serializedState(t *testing.T) string { + t.Helper() + + var builder strings.Builder + f.stateBaseline.fsDiffer.BaselineFSwithDiff(&builder) + if strings.TrimSpace(builder.String()) == "" { + builder.Reset() + } + + f.printStateDiff(t, &builder) + return builder.String() +} + +type projectInfo = *compiler.Program + +type openFileInfo struct { + defaultProjectName string + allProjects []string +} + +type diffTableOptions struct { + indent string + sortKeys bool +} + +type diffTable struct { + diff collections.OrderedMap[string, string] + options diffTableOptions +} + +func (d *diffTable) add(key, value string) { + d.diff.Set(key, value) +} + +func (d *diffTable) print(w io.Writer, header string) { + count := d.diff.Size() + if count == 0 { + return + } + if header != "" { + fmt.Fprintf(w, "%s%s\n", d.options.indent, header) + } + diffKeys := make([]string, 0, count) + keyWidth := 0 + indent := d.options.indent + " " + for key := range d.diff.Keys() { + keyWidth = max(keyWidth, len(key)) + diffKeys = append(diffKeys, key) + } + if d.options.sortKeys { + slices.Sort(diffKeys) + } + + for _, key := range diffKeys { + value := d.diff.GetOrZero(key) + fmt.Fprintf(w, "%s%-*s %s\n", indent, keyWidth+1, key, value) + } +} + +type diffTableWriter struct { + hasChange bool + header string + diffs map[string]func(io.Writer) +} + +func newDiffTableWriter(header string) *diffTableWriter { + return &diffTableWriter{header: header, diffs: make(map[string]func(io.Writer))} +} + +func (d *diffTableWriter) setHasChange() { + d.hasChange = true +} + +func (d *diffTableWriter) add(key string, fn func(io.Writer)) { + d.diffs[key] = fn +} + +func (d *diffTableWriter) print(w io.Writer) { + if d.hasChange { + fmt.Fprintf(w, "%s::\n", d.header) + keys := slices.Collect(maps.Keys(d.diffs)) + slices.Sort(keys) + for _, key := range keys { + d.diffs[key](w) + } + } +} + +func areIterSeqEqual(a, b iter.Seq[tspath.Path]) bool { + aSlice := slices.Collect(a) + bSlice := slices.Collect(b) + slices.Sort(aSlice) + slices.Sort(bSlice) + return slices.Equal(aSlice, bSlice) +} + +func printSlicesWithDiffTable(w io.Writer, header string, newSlice []string, getOldSlice func() []string, options diffTableOptions, topChange string, isDefault func(entry string) bool) { + var oldSlice []string + if topChange == "*modified*" { + oldSlice = getOldSlice() + } + table := diffTable{options: options} + for _, entry := range newSlice { + entryChange := "" + if isDefault != nil && isDefault(entry) { + entryChange = "(default) " + } + if topChange == "*modified*" && !slices.Contains(oldSlice, entry) { + entryChange = "*new*" + } + table.add(entry, entryChange) + } + if topChange == "*modified*" { + for _, entry := range oldSlice { + if !slices.Contains(newSlice, entry) { + table.add(entry, "*deleted*") + } + } + } + table.print(w, header) +} + +func sliceFromIterSeqPath(seq iter.Seq[tspath.Path]) []string { + var result []string + for path := range seq { + result = append(result, string(path)) + } + slices.Sort(result) + return result +} + +func printPathIterSeqWithDiffTable(w io.Writer, header string, newIterSeq iter.Seq[tspath.Path], getOldIterSeq func() iter.Seq[tspath.Path], options diffTableOptions, topChange string) { + printSlicesWithDiffTable( + w, + header, + sliceFromIterSeqPath(newIterSeq), + func() []string { return sliceFromIterSeqPath(getOldIterSeq()) }, + options, + topChange, + nil, + ) +} + +func (f *FourslashTest) printStateDiff(t *testing.T, w io.Writer) { + if !f.stateBaseline.isInitialized { + return + } + session := f.server.Session() + snapshot, release := session.Snapshot() + defer release() + + f.printProjectsDiff(t, snapshot, w) + f.printOpenFilesDiff(t, snapshot, w) + f.printConfigFileRegistryDiff(t, snapshot, w) +} + +func (f *FourslashTest) printProjectsDiff(t *testing.T, snapshot *project.Snapshot, w io.Writer) { + t.Helper() + + currentProjects := make(map[string]projectInfo) + options := diffTableOptions{indent: " "} + projectsDiffTable := newDiffTableWriter("Projects") + + for _, project := range snapshot.ProjectCollection.Projects() { + program := project.GetProgram() + var oldProgram *compiler.Program + currentProjects[project.Name()] = program + projectChange := "" + if existing, ok := f.stateBaseline.serializedProjects[project.Name()]; ok { + oldProgram = existing + if oldProgram != program { + projectChange = "*modified*" + projectsDiffTable.setHasChange() + } else { + projectChange = "" + } + } else { + projectChange = "*new*" + projectsDiffTable.setHasChange() + } + + projectsDiffTable.add(project.Name(), func(w io.Writer) { + fmt.Fprintf(w, " [%s] %s\n", project.Name(), projectChange) + subDiff := diffTable{options: options} + if program != nil { + for _, file := range program.GetSourceFiles() { + fileDiff := "" + // No need to write "*new*" for files as its obvious + fileName := file.FileName() + if projectChange == "*modified*" { + if oldProgram == nil { + if !isLibFile(fileName) { + fileDiff = "*new*" + } + } else if oldFile := oldProgram.GetSourceFileByPath(file.Path()); oldFile == nil { + fileDiff = "*new*" + } else if oldFile != file { + fileDiff = "*modified*" + } + } + if fileDiff != "" || !isLibFile(fileName) { + subDiff.add(fileName, fileDiff) + } + } + } + if oldProgram != program && oldProgram != nil { + for _, file := range oldProgram.GetSourceFiles() { + if program == nil || program.GetSourceFileByPath(file.Path()) == nil { + subDiff.add(file.FileName(), "*deleted*") + } + } + } + subDiff.print(w, "") + }) + } + + for projectName, info := range f.stateBaseline.serializedProjects { + if _, found := currentProjects[projectName]; !found { + projectsDiffTable.setHasChange() + projectsDiffTable.add(projectName, func(w io.Writer) { + fmt.Fprintf(w, " [%s] *deleted*\n", projectName) + subDiff := diffTable{options: options} + if info != nil { + for _, file := range info.GetSourceFiles() { + if fileName := file.FileName(); !isLibFile(fileName) { + subDiff.add(fileName, "") + } + } + } + subDiff.print(w, "") + }) + } + } + f.stateBaseline.serializedProjects = currentProjects + projectsDiffTable.print(w) +} + +func (f *FourslashTest) printOpenFilesDiff(t *testing.T, snapshot *project.Snapshot, w io.Writer) { + t.Helper() + + currentOpenFiles := make(map[string]*openFileInfo) + filesDiffTable := newDiffTableWriter("Open Files") + options := diffTableOptions{indent: " ", sortKeys: true} + for fileName := range f.openFiles { + path := tspath.ToPath(fileName, "/", f.vfs.UseCaseSensitiveFileNames()) + defaultProject := snapshot.ProjectCollection.GetDefaultProject(fileName, path) + newFileInfo := &openFileInfo{} + if defaultProject != nil { + newFileInfo.defaultProjectName = defaultProject.Name() + } + for _, project := range snapshot.ProjectCollection.Projects() { + if program := project.GetProgram(); program != nil && program.GetSourceFileByPath(path) != nil { + newFileInfo.allProjects = append(newFileInfo.allProjects, project.Name()) + } + } + slices.Sort(newFileInfo.allProjects) + currentOpenFiles[fileName] = newFileInfo + openFileChange := "" + var oldFileInfo *openFileInfo + if existing, ok := f.stateBaseline.serializedOpenFiles[fileName]; ok { + oldFileInfo = existing + if existing.defaultProjectName != newFileInfo.defaultProjectName || !slices.Equal(existing.allProjects, newFileInfo.allProjects) { + openFileChange = "*modified*" + filesDiffTable.setHasChange() + } else { + openFileChange = "" + } + } else { + openFileChange = "*new*" + filesDiffTable.setHasChange() + } + + filesDiffTable.add(fileName, func(w io.Writer) { + fmt.Fprintf(w, " [%s] %s\n", fileName, openFileChange) + printSlicesWithDiffTable( + w, + "", + newFileInfo.allProjects, + func() []string { return oldFileInfo.allProjects }, + options, + openFileChange, + func(projectName string) bool { return projectName == newFileInfo.defaultProjectName }, + ) + }) + } + for fileName := range f.stateBaseline.serializedOpenFiles { + if _, found := currentOpenFiles[fileName]; !found { + filesDiffTable.setHasChange() + filesDiffTable.add(fileName, func(w io.Writer) { + fmt.Fprintf(w, " [%s] *closed*\n", fileName) + }) + } + } + f.stateBaseline.serializedOpenFiles = currentOpenFiles + filesDiffTable.print(w) +} + +func (f *FourslashTest) printConfigFileRegistryDiff(t *testing.T, snapshot *project.Snapshot, w io.Writer) { + t.Helper() + configFileRegistry := snapshot.ProjectCollection.ConfigFileRegistry() + + configDiffsTable := newDiffTableWriter("Config") + configFileNamesDiffsTable := newDiffTableWriter("Config File Names") + + if f.stateBaseline.serializedConfigFileRegistry == configFileRegistry { + return + } + options := diffTableOptions{indent: " ", sortKeys: true} + configFileRegistry.ForEachTestConfigEntry(func(path tspath.Path, entry *project.TestConfigEntry) { + configChange := "" + oldEntry := f.stateBaseline.serializedConfigFileRegistry.GetTestConfigEntry(path) + if oldEntry == nil { + configChange = "*new*" + configDiffsTable.setHasChange() + } else if oldEntry != entry { + if !areIterSeqEqual(oldEntry.RetainingProjects, entry.RetainingProjects) || + !areIterSeqEqual(oldEntry.RetainingOpenFiles, entry.RetainingOpenFiles) || + !areIterSeqEqual(oldEntry.RetainingConfigs, entry.RetainingConfigs) { + configChange = "*modified*" + configDiffsTable.setHasChange() + } + } + configDiffsTable.add(string(path), func(w io.Writer) { + fmt.Fprintf(w, " [%s] %s\n", entry.FileName, configChange) + // Print the details of the config entry + var retainingProjectsModified string + var retainingOpenFilesModified string + var retainingConfigsModified string + if configChange == "*modified*" { + if !areIterSeqEqual(entry.RetainingProjects, oldEntry.RetainingProjects) { + retainingProjectsModified = " *modified*" + } + if !areIterSeqEqual(entry.RetainingOpenFiles, oldEntry.RetainingOpenFiles) { + retainingOpenFilesModified = " *modified*" + } + if !areIterSeqEqual(entry.RetainingConfigs, oldEntry.RetainingConfigs) { + retainingConfigsModified = " *modified*" + } + } + printPathIterSeqWithDiffTable(w, "RetainingProjects:"+retainingProjectsModified, entry.RetainingProjects, func() iter.Seq[tspath.Path] { return oldEntry.RetainingProjects }, options, configChange) + printPathIterSeqWithDiffTable(w, "RetainingOpenFiles:"+retainingOpenFilesModified, entry.RetainingOpenFiles, func() iter.Seq[tspath.Path] { return oldEntry.RetainingOpenFiles }, options, configChange) + printPathIterSeqWithDiffTable(w, "RetainingConfigs:"+retainingConfigsModified, entry.RetainingConfigs, func() iter.Seq[tspath.Path] { return oldEntry.RetainingConfigs }, options, configChange) + }) + }) + configFileRegistry.ForEachTestConfigFileNamesEntry(func(path tspath.Path, entry *project.TestConfigFileNamesEntry) { + configFileNamesChange := "" + oldEntry := f.stateBaseline.serializedConfigFileRegistry.GetTestConfigFileNamesEntry(path) + if oldEntry == nil { + configFileNamesChange = "*new*" + configFileNamesDiffsTable.setHasChange() + } else if oldEntry.NearestConfigFileName != entry.NearestConfigFileName || + !maps.Equal(oldEntry.Ancestors, entry.Ancestors) { + configFileNamesChange = "*modified*" + configFileNamesDiffsTable.setHasChange() + } + configFileNamesDiffsTable.add(string(path), func(w io.Writer) { + fmt.Fprintf(w, " [%s] %s\n", path, configFileNamesChange) + var nearestConfigFileNameModified string + var ancestorDiffModified string + if configFileNamesChange == "*modified*" { + if oldEntry.NearestConfigFileName != entry.NearestConfigFileName { + nearestConfigFileNameModified = " *modified*" + } + if !maps.Equal(oldEntry.Ancestors, entry.Ancestors) { + ancestorDiffModified = " *modified*" + } + } + fmt.Fprintf(w, " NearestConfigFileName: %s%s\n", entry.NearestConfigFileName, nearestConfigFileNameModified) + ancestorDiff := diffTable{options: options} + for config, ancestorOfConfig := range entry.Ancestors { + ancestorChange := "" + if configFileNamesChange == "*modified*" { + if oldConfigFileName, ok := oldEntry.Ancestors[config]; ok { + if oldConfigFileName != ancestorOfConfig { + ancestorChange = "*modified*" + } + } else { + ancestorChange = "*new*" + } + } + ancestorDiff.add(config, fmt.Sprintf("%s %s", ancestorOfConfig, ancestorChange)) + } + if configFileNamesChange == "*modified*" { + for ancestorPath, oldConfigFileName := range oldEntry.Ancestors { + if _, ok := entry.Ancestors[ancestorPath]; !ok { + ancestorDiff.add(ancestorPath, oldConfigFileName+" *deleted*") + } + } + } + ancestorDiff.print(w, "Ancestors:"+ancestorDiffModified) + }) + }) + + f.stateBaseline.serializedConfigFileRegistry.ForEachTestConfigEntry(func(path tspath.Path, entry *project.TestConfigEntry) { + if configFileRegistry.GetTestConfigEntry(path) == nil { + configDiffsTable.setHasChange() + configDiffsTable.add(string(path), func(w io.Writer) { + fmt.Fprintf(w, " [%s] *deleted*\n", entry.FileName) + }) + } + }) + f.stateBaseline.serializedConfigFileRegistry.ForEachTestConfigFileNamesEntry(func(path tspath.Path, entry *project.TestConfigFileNamesEntry) { + if configFileRegistry.GetTestConfigFileNamesEntry(path) == nil { + configFileNamesDiffsTable.setHasChange() + configFileNamesDiffsTable.add(string(path), func(w io.Writer) { + fmt.Fprintf(w, " [%s] *deleted*\n", path) + }) + } + }) + f.stateBaseline.serializedConfigFileRegistry = configFileRegistry + configDiffsTable.print(w) + configFileNamesDiffsTable.print(w) +} diff --git a/pkg/fourslash/test_parser.go b/pkg/fourslash/test_parser.go index 36ca7d3c..934e2435 100644 --- a/pkg/fourslash/test_parser.go +++ b/pkg/fourslash/test_parser.go @@ -44,6 +44,13 @@ func (r *RangeMarker) GetName() *string { return r.Marker.Name } +func (r *RangeMarker) LSLocation() lsproto.Location { + return lsproto.Location{ + Uri: lsconv.FileNameToDocumentURI(r.fileName), + Range: r.LSRange, + } +} + type Marker struct { fileName string Position int @@ -64,6 +71,16 @@ func (m *Marker) GetName() *string { return m.Name } +func (m *Marker) MakerWithSymlink(fileName string) *Marker { + return &Marker{ + fileName: fileName, + Position: m.Position, + LSPosition: m.LSPosition, + Name: m.Name, + Data: m.Data, + } +} + type MarkerOrRange interface { FileName() string LSPos() lsproto.Position @@ -79,12 +96,20 @@ type TestData struct { Ranges []*RangeMarker } +func (t *TestData) isStateBaseliningEnabled() bool { + return isStateBaseliningEnabled(t.GlobalOptions) +} + type testFileWithMarkers struct { file *TestFileInfo markers []*Marker ranges []*RangeMarker } +func isStateBaseliningEnabled(globalOptions map[string]string) bool { + return globalOptions["statebaseline"] == "true" +} + func ParseTestData(t *testing.T, contents string, fileName string) TestData { // List of all the subfiles we've parsed out var files []*TestFileInfo @@ -128,7 +153,7 @@ func ParseTestData(t *testing.T, contents string, fileName string) TestData { } - if hasTSConfig && len(globalOptions) > 0 { + if hasTSConfig && len(globalOptions) > 0 && !isStateBaseliningEnabled(globalOptions) { t.Fatalf("It is not allowed to use global options along with config files.") } diff --git a/pkg/fourslash/tests/gen/declareFunction_test.go b/pkg/fourslash/tests/gen/declareFunction_test.go new file mode 100644 index 00000000..1c4ebd12 --- /dev/null +++ b/pkg/fourslash/tests/gen/declareFunction_test.go @@ -0,0 +1,26 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestDeclareFunction(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @filename: index.ts +declare function` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{}), + }, + }) +} diff --git a/pkg/fourslash/tests/gen/navigateItemsLet_test.go b/pkg/fourslash/tests/gen/navigateItemsLet_test.go new file mode 100644 index 00000000..c4f9774d --- /dev/null +++ b/pkg/fourslash/tests/gen/navigateItemsLet_test.go @@ -0,0 +1,46 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestNavigateItemsLet(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @noLib: true +let [|c = 10|]; +function foo() { + let [|d = 10|]; +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "c", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "c", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[0].LSLocation(), + }, + }), + }, { + Pattern: "d", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "d", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[1].LSLocation(), + ContainerName: PtrTo("foo"), + }, + }), + }, + }) +} diff --git a/pkg/fourslash/tests/gen/navigateToImport_test.go b/pkg/fourslash/tests/gen/navigateToImport_test.go new file mode 100644 index 00000000..87edf960 --- /dev/null +++ b/pkg/fourslash/tests/gen/navigateToImport_test.go @@ -0,0 +1,55 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestNavigateToImport(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @Filename: library.ts +[|export function foo() {}|] +[|export function bar() {}|] +// @Filename: user.ts +import {foo, [|bar as baz|]} from './library';` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "foo", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "foo", + Kind: lsproto.SymbolKindFunction, + Location: f.Ranges()[0].LSLocation(), + }, + }), + }, { + Pattern: "bar", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "bar", + Kind: lsproto.SymbolKindFunction, + Location: f.Ranges()[1].LSLocation(), + }, + }), + }, { + Pattern: "baz", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "baz", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[2].LSLocation(), + }, + }), + }, + }) +} diff --git a/pkg/fourslash/tests/gen/navigateToSymbolIterator_test.go b/pkg/fourslash/tests/gen/navigateToSymbolIterator_test.go new file mode 100644 index 00000000..464735bd --- /dev/null +++ b/pkg/fourslash/tests/gen/navigateToSymbolIterator_test.go @@ -0,0 +1,34 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestNavigateToSymbolIterator(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `class C { + [|[Symbol.iterator]() {}|] +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "iterator", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "iterator", + Kind: lsproto.SymbolKindMethod, + Location: f.Ranges()[0].LSLocation(), + ContainerName: PtrTo("C"), + }, + }), + }, + }) +} diff --git a/pkg/fourslash/tests/gen/navigationItemsInConstructorsExactMatch_test.go b/pkg/fourslash/tests/gen/navigationItemsInConstructorsExactMatch_test.go new file mode 100644 index 00000000..be945642 --- /dev/null +++ b/pkg/fourslash/tests/gen/navigationItemsInConstructorsExactMatch_test.go @@ -0,0 +1,49 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestNavigationItemsInConstructorsExactMatch(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @noLib: true +class Test { + [|private search1: number;|] + constructor([|public search2: boolean|], [|readonly search3: string|], search4: string) { + } +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "search", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "search1", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[0].LSLocation(), + ContainerName: PtrTo("Test"), + }, + { + Name: "search2", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[1].LSLocation(), + ContainerName: PtrTo("Test"), + }, + { + Name: "search3", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[2].LSLocation(), + ContainerName: PtrTo("Test"), + }, + }), + }, + }) +} diff --git a/pkg/fourslash/tests/gen/navigationItemsPrefixMatch2_test.go b/pkg/fourslash/tests/gen/navigationItemsPrefixMatch2_test.go new file mode 100644 index 00000000..19ff6846 --- /dev/null +++ b/pkg/fourslash/tests/gen/navigationItemsPrefixMatch2_test.go @@ -0,0 +1,94 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestNavigationItemsPrefixMatch2(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `module Shapes { + export class Point { + [|private originality = 0.0;|] + [|private distanceFromOrig = 0.0;|] + [|get distanceFarFarAway(distanceFarFarAwayParam: number): number { + var [|distanceFarFarAwayLocal|]; + return 0; + }|] + } +} +var pointsSquareBox = new Shapes.Point(); +function PointsFunc(): void { + var pointFuncLocal; +} +[|interface OriginI { + 123; + [|origin1;|] + [|public _distance(distanceParam): void;|] +}|]` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "origin", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "origin1", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[5].LSLocation(), + ContainerName: PtrTo("OriginI"), + }, + { + Name: "originality", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[0].LSLocation(), + ContainerName: PtrTo("Point"), + }, + { + Name: "OriginI", + Kind: lsproto.SymbolKindInterface, + Location: f.Ranges()[4].LSLocation(), + }, + }), + }, { + Pattern: "distance", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "distanceFarFarAway", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[2].LSLocation(), + ContainerName: PtrTo("Point"), + }, + { + Name: "distanceFarFarAwayLocal", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[3].LSLocation(), + ContainerName: PtrTo("distanceFarFarAway"), + }, + { + Name: "distanceFromOrig", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[1].LSLocation(), + ContainerName: PtrTo("Point"), + }, + { + Name: "_distance", + Kind: lsproto.SymbolKindMethod, + Location: f.Ranges()[6].LSLocation(), + ContainerName: PtrTo("OriginI"), + }, + }), + }, { + Pattern: "mPointThatIJustInitiated wrongKeyWord", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{}), + }, + }) +} diff --git a/pkg/fourslash/tests/gen/navto_emptyPattern_test.go b/pkg/fourslash/tests/gen/navto_emptyPattern_test.go new file mode 100644 index 00000000..777bc356 --- /dev/null +++ b/pkg/fourslash/tests/gen/navto_emptyPattern_test.go @@ -0,0 +1,38 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestNavto_emptyPattern(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @filename: foo.ts +const [|x: number = 1|]; +[|function y(x: string): string { return x; }|]` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "x", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[0].LSLocation(), + }, + { + Name: "y", + Kind: lsproto.SymbolKindFunction, + Location: f.Ranges()[1].LSLocation(), + }, + }), + }, + }) +} diff --git a/pkg/fourslash/tests/gen/navto_excludeLib3_test.go b/pkg/fourslash/tests/gen/navto_excludeLib3_test.go new file mode 100644 index 00000000..395f4a35 --- /dev/null +++ b/pkg/fourslash/tests/gen/navto_excludeLib3_test.go @@ -0,0 +1,32 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestNavto_excludeLib3(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @filename: /index.ts +[|function parseInt(s: string): number {}|]` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "parseInt", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "parseInt", + Kind: lsproto.SymbolKindFunction, + Location: f.Ranges()[0].LSLocation(), + }, + }), + }, + }) +} diff --git a/pkg/fourslash/tests/manual/navigationItemsExactMatch2_test.go b/pkg/fourslash/tests/manual/navigationItemsExactMatch2_test.go new file mode 100644 index 00000000..6aad46e4 --- /dev/null +++ b/pkg/fourslash/tests/manual/navigationItemsExactMatch2_test.go @@ -0,0 +1,101 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestNavigationItemsExactMatch2(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `module Shapes { + [|class Point { + [|private _origin = 0.0;|] + [|private distanceFromA = 0.0;|] + + [|get distance1(distanceParam): number { + var [|distanceLocal|]; + return 0; + }|] + }|] +} + +var [|point = new Shapes.Point()|]; +[|function distance2(distanceParam1): void { + var [|distanceLocal1|]; +}|]` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "point", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "Point", + Kind: lsproto.SymbolKindClass, + Location: f.Ranges()[0].LSLocation(), + ContainerName: PtrTo("Shapes"), + }, + { + Name: "point", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[5].LSLocation(), + }, + }), + }, { + Pattern: "distance", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "distance1", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[3].LSLocation(), + ContainerName: PtrTo("Point"), + }, + { + Name: "distance2", + Kind: lsproto.SymbolKindFunction, + Location: f.Ranges()[6].LSLocation(), + }, + { + Name: "distanceFromA", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[2].LSLocation(), + ContainerName: PtrTo("Point"), + }, + { + Name: "distanceLocal", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[4].LSLocation(), + ContainerName: PtrTo("distance1"), + }, + { + Name: "distanceLocal1", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[7].LSLocation(), + ContainerName: PtrTo("distance2"), + }, + }), + }, { + Pattern: "origin", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "_origin", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[1].LSLocation(), + ContainerName: PtrTo("Point"), + }, + }), + }, { + Pattern: "square", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{}), + }, + }) +} diff --git a/pkg/fourslash/tests/manual/navigationItemsSpecialPropertyAssignment_test.go b/pkg/fourslash/tests/manual/navigationItemsSpecialPropertyAssignment_test.go new file mode 100644 index 00000000..c87995c0 --- /dev/null +++ b/pkg/fourslash/tests/manual/navigationItemsSpecialPropertyAssignment_test.go @@ -0,0 +1,92 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestNavigationItemsSpecialPropertyAssignment(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @noLib: true +// @allowJs: true +// @Filename: /a.js +[|exports.x = 0|]; +[|exports.z = function() {}|]; +function Cls() { + [|this.instanceProp = 0|]; +} +[|Cls.staticMethod = function() {}|]; +[|Cls.staticProperty = 0|]; +[|Cls.prototype.instanceMethod = function() {}|];` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "x", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "x", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[0].LSLocation(), + }, + }), + }, { + Pattern: "z", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "z", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[1].LSLocation(), + }, + }), + }, { + Pattern: "instanceProp", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "instanceProp", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[2].LSLocation(), + ContainerName: PtrTo("Cls"), + }, + }), + }, { + Pattern: "staticMethod", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "staticMethod", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[3].LSLocation(), + }, + }), + }, { + Pattern: "staticProperty", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "staticProperty", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[4].LSLocation(), + }, + }), + }, { + Pattern: "instanceMethod", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "instanceMethod", + Kind: lsproto.SymbolKindProperty, + Location: f.Ranges()[5].LSLocation(), + }, + }), + }, + }) +} diff --git a/pkg/fourslash/tests/manual/navto_excludeLib1_test.go b/pkg/fourslash/tests/manual/navto_excludeLib1_test.go new file mode 100644 index 00000000..f2804258 --- /dev/null +++ b/pkg/fourslash/tests/manual/navto_excludeLib1_test.go @@ -0,0 +1,58 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/ls/lsutil" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestNavto_excludeLib1(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @filename: /index.ts +import { weirdName as otherName } from "bar"; +const [|weirdName: number = 1|]; +// @filename: /tsconfig.json +{} +// @filename: /node_modules/bar/index.d.ts +export const [|weirdName: number|]; +// @filename: /node_modules/bar/package.json +{}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "weirdName", + Preferences: &lsutil.UserPreferences{ExcludeLibrarySymbolsInNavTo: false}, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "weirdName", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[0].LSLocation(), + }, + { + Name: "weirdName", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[1].LSLocation(), + }, + }), + }, + }) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "weirdName", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "weirdName", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[0].LSLocation(), + }, + }), + }, + }) +} diff --git a/pkg/fourslash/tests/manual/navto_excludeLib2_test.go b/pkg/fourslash/tests/manual/navto_excludeLib2_test.go new file mode 100644 index 00000000..dd2b6455 --- /dev/null +++ b/pkg/fourslash/tests/manual/navto_excludeLib2_test.go @@ -0,0 +1,52 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + . "github.com/buke/typescript-go-internal/pkg/fourslash/tests/util" + "github.com/buke/typescript-go-internal/pkg/ls/lsutil" + "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestNavto_excludeLib2(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @filename: /index.ts +import { [|someName as weirdName|] } from "bar"; +// @filename: /tsconfig.json +{} +// @filename: /node_modules/bar/index.d.ts +export const someName: number; +// @filename: /node_modules/bar/package.json +{}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "weirdName", + Preferences: &lsutil.UserPreferences{ExcludeLibrarySymbolsInNavTo: false}, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "weirdName", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[0].LSLocation(), + }, + }), + }, + }) + f.VerifyWorkspaceSymbol(t, []*fourslash.VerifyWorkspaceSymbolCase{ + { + Pattern: "weirdName", + Preferences: nil, + Exact: PtrTo([]*lsproto.SymbolInformation{ + { + Name: "weirdName", + Kind: lsproto.SymbolKindVariable, + Location: f.Ranges()[0].LSLocation(), + }, + }), + }, + }) +} diff --git a/pkg/fourslash/tests/statedeclarationmaps_test.go b/pkg/fourslash/tests/statedeclarationmaps_test.go new file mode 100644 index 00000000..ef5bed54 --- /dev/null +++ b/pkg/fourslash/tests/statedeclarationmaps_test.go @@ -0,0 +1,380 @@ +package fourslash_test + +import ( + "fmt" + "strings" + "testing" + + "github.com/buke/typescript-go-internal/pkg/core" + "github.com/buke/typescript-go-internal/pkg/fourslash" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestDeclarationMapsOpeningOriginalLocationProject(t *testing.T) { + t.Parallel() + for _, disableSourceOfProjectReferenceRedirect := range []bool{false, true} { + t.Run("TestDeclarationMapsOpeningOriginalLocationProject"+core.IfElse(disableSourceOfProjectReferenceRedirect, "DisableSourceOfProjectReferenceRedirect", ""), func(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := fmt.Sprintf(` +// @stateBaseline: true +// @Filename: a/a.ts +export class A { } +// @Filename: a/tsconfig.json +{} +// @Filename: a/a.d.ts +export declare class A { +} +//# sourceMappingURL=a.d.ts.map +// @Filename: a/a.d.ts.map +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["./a.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;CAAI" +} +// @Filename: b/b.ts +import {A} from "../a/a"; +new /*1*/A(); +// @Filename: b/tsconfig.json +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": %t + }, + "references": [ + { "path": "../a" } + ] +}`, disableSourceOfProjectReferenceRedirect) + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineFindAllReferences(t, "1") + }) + } +} + +func TestDeclarationMapTestCasesForMaps(t *testing.T) { + t.Parallel() + type testCase struct { + name string + goToMarker string + opMarker string + } + tests := []testCase{ + {"FindAllRefs", "userFnA", "userFnA"}, + {"FindAllRefsStartingAtDefinition", "userFnA", "fnADef"}, + {"FindAllRefsTargetDoesNotExist", "userFnB", "userFnB"}, + {"Rename", "userFnA", "userFnA"}, + {"RenameStartingAtDefinition", "userFnA", "fnADef"}, + {"RenameTargetDoesNotExist", "userFnB", "userFnB"}, + } + for _, tc := range tests { + t.Run("TestDeclarationMaps"+tc.name, func(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @Filename: a/a.ts +export function /*fnADef*/fnA() {} +export interface IfaceA {} +export const instanceA: IfaceA = {}; +// @Filename: a/tsconfig.json +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +// @Filename: a/bin/a.d.ts.map +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["../a.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK;AACxB,MAAM,WAAW,MAAM;CAAG;AAC1B,eAAO,MAAM,SAAS,EAAE,MAAW,CAAC" +} +// @Filename: a/bin/a.d.ts +export declare function fnA(): void; +export interface IfaceA { +} +export declare const instanceA: IfaceA; +//# sourceMappingURL=a.d.ts.map +// @Filename: b/tsconfig.json +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +// @Filename: b/bin/b.d.ts.map +{ + "version": 3, + "file": "b.d.ts", + "sourceRoot": "", + "sources": ["../b.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK" +} +// @Filename: b/bin/b.d.ts +export declare function fnB(): void; +//# sourceMappingURL=b.d.ts.map +// @Filename: user/user.ts +import * as a from "../a/bin/a"; +import * as b from "../b/bin/b"; +export function fnUser() { a./*userFnA*/fnA(); b./*userFnB*/fnB(); a.instanceA; } +// @Filename: dummy/dummy.ts +/*dummy*/export const a = 10; +// @Filename: dummy/tsconfig.json +{}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.GoToMarker(t, tc.goToMarker) + // Ref projects are loaded after as part of this command + if strings.HasPrefix(tc.name, "Rename") { + f.VerifyBaselineRename(t, nil /*preferences*/, tc.opMarker) + } else { + f.VerifyBaselineFindAllReferences(t, tc.opMarker) + } + // Open temp file and verify all projects alive + f.CloseFileOfMarker(t, tc.goToMarker) + f.GoToMarker(t, "dummy") + }) + } +} + +func TestDeclarationMapsWorkspaceSymbols(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := `// @stateBaseline: true +// @Filename: a/a.ts +export function fnA() {} +export interface IfaceA {} +export const instanceA: IfaceA = {}; +// @Filename: a/tsconfig.json +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +// @Filename: a/bin/a.d.ts.map +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["../a.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK;AACxB,MAAM,WAAW,MAAM;CAAG;AAC1B,eAAO,MAAM,SAAS,EAAE,MAAW,CAAC" +} +// @Filename: a/bin/a.d.ts +export declare function fnA(): void; +export interface IfaceA { +} +export declare const instanceA: IfaceA; +//# sourceMappingURL=a.d.ts.map +// @Filename: b/b.ts +export function fnB() {} +// @Filename: b/c.ts +export function fnC() {} +// @Filename: b/tsconfig.json +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +// @Filename: b/bin/b.d.ts.map +{ + "version": 3, + "file": "b.d.ts", + "sourceRoot": "", + "sources": ["../b.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK" +} +// @Filename: b/bin/b.d.ts +export declare function fnB(): void; +//# sourceMappingURL=b.d.ts.map +// @Filename: user/user.ts +/*user*/import * as a from "../a/a"; +import * as b from "../b/b"; +export function fnUser() { + a.fnA(); + b.fnB(); + a.instanceA; +} +// @Filename: user/tsconfig.json +{ + "references": [ + { "path": "../a" }, + { "path": "../b" } + ] +} +// @Filename: dummy/dummy.ts +/*dummy*/export const a = 10; +// @Filename: dummy/tsconfig.json +{}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.GoToMarker(t, "user") + // Ref projects are loaded after as part of this command + f.VerifyBaselineWorkspaceSymbol(t, "fn") + // Open temp file and verify all projects alive + f.CloseFileOfMarker(t, "user") + f.GoToMarker(t, "dummy") +} + +func TestDeclarationMapsFindAllRefsDefinitionInMappedFile(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +//@Filename: a/a.ts +export function f() {} +// @Filename: a/tsconfig.json +{ + "compilerOptions": { + "outDir": "../bin", + "declarationMap": true, + "composite": true + } +} +//@Filename: b/b.ts +import { f } from "../bin/a"; +/*1*/f(); +// @Filename: b/tsconfig.json +{ + "references": [ + { "path": "../a" } + ] +} +// @Filename: bin/a.d.ts +export declare function f(): void; +//# sourceMappingURL=a.d.ts.map +// @Filename: bin/a.d.ts.map +{ + "version":3, + "file":"a.d.ts", + "sourceRoot":"", + "sources":["a.ts"], + "names":[], + "mappings":"AAAA,wBAAgB,CAAC,SAAK" +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineFindAllReferences(t, "1") +} + +func TestDeclarationMapsRename(t *testing.T) { + t.Parallel() + type testCase struct { + name string + dontBuild bool + mainWithNoRef bool + disableSourceOfProjectReferenceRedirect bool + tsconfigNotSolution bool + } + for _, tc := range []testCase{ + {name: "ProjectReferences", dontBuild: true}, + {name: "DisableSourceOfProjectReferenceRedirect", disableSourceOfProjectReferenceRedirect: true}, + {name: "SourceMaps", mainWithNoRef: true}, + {name: "SourceMapsNotSolution", mainWithNoRef: true, tsconfigNotSolution: true}, + } { + buildStr := core.IfElse(!tc.dontBuild, "// @tsc: --build /myproject/dependency,--build /myproject/main", "") + mainRefsStr := core.IfElse(!tc.mainWithNoRef, `"references": [{ "path": "../dependency" }]`, "") + filesStr := core.IfElse(!tc.tsconfigNotSolution, `"files": [],`, "") + content := fmt.Sprintf(` +// @stateBaseline: true +%s +//@Filename: myproject/dependency/FnS.ts +/*firstLine*/export function fn1() { } +export function fn2() { } +export function /*rename*/fn3() { } +export function fn4() { } +export function fn5() { } +/*lastLine*/ +// @Filename: myproject/dependency/tsconfig.json +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//@Filename: myproject/main/main.ts +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +// @Filename: myproject/main/tsconfig.json +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": %t + }, + %s +} +// @Filename: myproject/tsconfig.json +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": %t + }, + %s + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +// @Filename: random/random.ts +/*dummy*/export const a = 10; +// @Filename: random/tsconfig.json +{}`, buildStr, tc.disableSourceOfProjectReferenceRedirect, mainRefsStr, tc.disableSourceOfProjectReferenceRedirect, filesStr) + t.Run("TestDeclarationMapsRenameWith"+tc.name, func(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.GoToMarker(t, "dummy") + // Ref projects are loaded after as part of this command + f.VerifyBaselineRename(t, nil /*preferences*/, "rename") + // Collecting at this point retains dependency.d.ts and map + f.CloseFileOfMarker(t, "dummy") + f.GoToMarker(t, "dummy") + // Closing open file, removes dependencies too + f.CloseFileOfMarker(t, "rename") + f.CloseFileOfMarker(t, "dummy") + f.GoToMarker(t, "dummy") + }) + t.Run("TestDeclarationMapsRenameWith"+tc.name+"Edit", func(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + // Ref projects are loaded after as part of this command + f.VerifyBaselineRename(t, nil /*preferences*/, "rename") + f.GoToMarker(t, "firstLine") + f.Insert(t, "function fooBar() { }\n") + f.VerifyBaselineRename(t, nil /*preferences*/, "rename") + }) + t.Run("TestDeclarationMapsRenameWith"+tc.name+"EditEnd", func(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + // Ref projects are loaded after as part of this command + f.VerifyBaselineRename(t, nil /*preferences*/, "rename") + f.GoToMarker(t, "lastLine") + f.Insert(t, "const x = 10;") + f.VerifyBaselineRename(t, nil /*preferences*/, "rename") + }) + } +} diff --git a/pkg/fourslash/tests/statefindallrefs_test.go b/pkg/fourslash/tests/statefindallrefs_test.go new file mode 100644 index 00000000..6d7d23ff --- /dev/null +++ b/pkg/fourslash/tests/statefindallrefs_test.go @@ -0,0 +1,1120 @@ +package fourslash_test + +import ( + "fmt" + "strings" + "testing" + + "github.com/buke/typescript-go-internal/pkg/core" + "github.com/buke/typescript-go-internal/pkg/fourslash" + "github.com/buke/typescript-go-internal/pkg/testutil" + "github.com/buke/typescript-go-internal/pkg/testutil/stringtestutil" +) + +func TestFindAllRefsSolutionReferencingDefaultProjectDirectly(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @tsc: --build /myproject/tsconfig.json +// @Filename: dummy/dummy.ts +/*dummy*/const x = 1; +// @Filename: dummy/tsconfig.json +{ } +// @Filename: myproject/tsconfig.json +{ + "files": [], + "references": [{ "path": "./tsconfig-src.json" }] +} +// @Filename: myproject/tsconfig-src.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +// @Filename: myproject/src/main.ts +import { foo } from './helpers/functions'; +export { /*mainFoo*/foo }; +// @Filename: myproject/src/helpers/functions.ts +export function foo() { return 1; } +// @Filename: myproject/indirect3/tsconfig.json +{ } +// @Filename: myproject/indirect3/main.ts +import { /*fooIndirect3Import*/foo } from '../target/src/main'; +foo() +export function bar() {} +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + // Ensure configured project is found for open file + f.GoToMarker(t, "mainFoo") + // !!! TODO Verify errors + f.GoToMarker(t, "dummy") + + // Projects lifetime + f.CloseFileOfMarker(t, "dummy") + f.CloseFileOfMarker(t, "mainFoo") + f.GoToMarker(t, "dummy") + + f.CloseFileOfMarker(t, "dummy") + + // Find all refs in default project + f.VerifyBaselineFindAllReferences(t, "mainFoo") + + f.CloseFileOfMarker(t, "mainFoo") + + // Find all ref in non default project + f.VerifyBaselineFindAllReferences(t, "fooIndirect3Import") +} + +func TestFindAllRefsSolutionReferencingDefaultProjectIndirectly(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @tsc: --build /myproject/tsconfig.json +// @Filename: dummy/dummy.ts +/*dummy*/const x = 1; +// @Filename: dummy/tsconfig.json +{ } +// @Filename: myproject/tsconfig.json +{ + "files": [], + "references": [ + { "path": "./tsconfig-indirect1.json" }, + { "path": "./tsconfig-indirect2.json" }, + ] +} +// @Filename: myproject/tsconfig-src.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +// @Filename: myproject/src/main.ts +import { foo } from './helpers/functions'; +export { /*mainFoo*/foo }; +// @Filename: myproject/src/helpers/functions.ts +export function foo() { return 1; } +// @Filename: myproject/indirect3/tsconfig.json +{ } +// @Filename: myproject/indirect3/main.ts +import { /*fooIndirect3Import*/foo } from '../target/src/main'; +foo() +export function bar() {} +// @FileName: myproject/indirect1/main.ts +export const indirect = 1; +// @Filename: myproject/tsconfig-indirect1.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + }, + "files": [ + "./indirect1/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} +// @FileName: myproject/indirect2/main.ts +export const indirect = 1; +// @Filename: myproject/tsconfig-indirect2.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + }, + "files": [ + "./indirect2/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + // Ensure configured project is found for open file + f.GoToMarker(t, "mainFoo") + // !!! TODO Verify errors + f.GoToMarker(t, "dummy") + + // Projects lifetime + f.CloseFileOfMarker(t, "dummy") + f.CloseFileOfMarker(t, "mainFoo") + f.GoToMarker(t, "dummy") + + f.CloseFileOfMarker(t, "dummy") + + // Find all refs in default project + f.VerifyBaselineFindAllReferences(t, "mainFoo") + + f.CloseFileOfMarker(t, "mainFoo") + + // Find all ref in non default project + f.VerifyBaselineFindAllReferences(t, "fooIndirect3Import") +} + +func TestFindAllRefsSolutionWithDisableReferencedProjectLoadReferencingDefaultProjectDirectly(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @tsc: --build /myproject/tsconfig.json +// @Filename: dummy/dummy.ts +/*dummy*/const x = 1; +// @Filename: dummy/tsconfig.json +{ } +// @Filename: myproject/tsconfig.json +{ + "compilerOptions": { + "disableReferencedProjectLoad": true + }, + "files": [], + "references": [{ "path": "./tsconfig-src.json" }] +} +// @Filename: myproject/tsconfig-src.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +// @Filename: myproject/src/main.ts +import { foo } from './helpers/functions'; +export { /*mainFoo*/foo }; +// @Filename: myproject/src/helpers/functions.ts +export function foo() { return 1; } +// @Filename: myproject/indirect3/tsconfig.json +{ } +// @Filename: myproject/indirect3/main.ts +import { /*fooIndirect3Import*/foo } from '../target/src/main'; +foo() +export function bar() {} +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + // Ensure configured project is found for open file + f.GoToMarker(t, "mainFoo") + // !!! TODO Verify errors + f.GoToMarker(t, "dummy") + + // Projects lifetime + f.CloseFileOfMarker(t, "dummy") + f.CloseFileOfMarker(t, "mainFoo") + f.GoToMarker(t, "dummy") + + f.CloseFileOfMarker(t, "dummy") + + // Find all refs in default project + f.VerifyBaselineFindAllReferences(t, "mainFoo") + + f.CloseFileOfMarker(t, "mainFoo") + + // Find all ref in non default project + f.VerifyBaselineFindAllReferences(t, "fooIndirect3Import") +} + +func TestFindAllRefsSolutionReferencingDefaultProjectIndirectlyThroughDisableReferencedProjectLoad(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @tsc: --build /myproject/tsconfig.json +// @Filename: dummy/dummy.ts +/*dummy*/const x = 1; +// @Filename: dummy/tsconfig.json +{ } +// @Filename: myproject/tsconfig.json +{ + "files": [], + "references": [ + { "path": "./tsconfig-indirect1.json" }, + { "path": "./tsconfig-indirect2.json" }, + ] +} +// @Filename: myproject/tsconfig-src.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +// @Filename: myproject/src/main.ts +import { foo } from './helpers/functions'; +export { /*mainFoo*/foo }; +// @Filename: myproject/src/helpers/functions.ts +export function foo() { return 1; } +// @Filename: myproject/indirect3/tsconfig.json +{ } +// @Filename: myproject/indirect3/main.ts +import { /*fooIndirect3Import*/foo } from '../target/src/main'; +foo() +export function bar() {} +// @FileName: myproject/indirect1/main.ts +export const indirect = 1; +// @Filename: myproject/tsconfig-indirect1.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + "disableReferencedProjectLoad": true, + }, + "files": [ + "./indirect1/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} +// @FileName: myproject/indirect2/main.ts +export const indirect = 1; +// @Filename: myproject/tsconfig-indirect2.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + "disableReferencedProjectLoad": true, + }, + "files": [ + "./indirect2/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + // Ensure configured project is found for open file + f.GoToMarker(t, "mainFoo") + // !!! TODO Verify errors + f.GoToMarker(t, "dummy") + + // Projects lifetime + f.CloseFileOfMarker(t, "dummy") + f.CloseFileOfMarker(t, "mainFoo") + f.GoToMarker(t, "dummy") + + f.CloseFileOfMarker(t, "dummy") + + // Find all refs in default project + f.VerifyBaselineFindAllReferences(t, "mainFoo") + + f.CloseFileOfMarker(t, "mainFoo") + + // Find all ref in non default project + f.VerifyBaselineFindAllReferences(t, "fooIndirect3Import") +} + +func TestFindAllRefsSolutionReferencingDefaultProjectIndirectlyThroughDisableReferencedProjectLoadInOneButWithoutItInAnother(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @tsc: --build /myproject/tsconfig.json +// @Filename: dummy/dummy.ts +/*dummy*/const x = 1; +// @Filename: dummy/tsconfig.json +{ } +// @Filename: myproject/tsconfig.json +{ + "files": [], + "references": [ + { "path": "./tsconfig-indirect1.json" }, + { "path": "./tsconfig-indirect2.json" }, + ] +} +// @Filename: myproject/tsconfig-src.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +// @Filename: myproject/src/main.ts +import { foo } from './helpers/functions'; +export { /*mainFoo*/foo }; +// @Filename: myproject/src/helpers/functions.ts +export function foo() { return 1; } +// @Filename: myproject/indirect3/tsconfig.json +{ } +// @Filename: myproject/indirect3/main.ts +import { /*fooIndirect3Import*/foo } from '../target/src/main'; +foo() +export function bar() {} +// @FileName: myproject/indirect1/main.ts +export const indirect = 1; +// @Filename: myproject/tsconfig-indirect1.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + "disableReferencedProjectLoad": true, + }, + "files": [ + "./indirect1/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} +// @FileName: myproject/indirect2/main.ts +export const indirect = 1; +// @Filename: myproject/tsconfig-indirect2.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + }, + "files": [ + "./indirect2/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + // Ensure configured project is found for open file + f.GoToMarker(t, "mainFoo") + // !!! TODO Verify errors + f.GoToMarker(t, "dummy") + + // Projects lifetime + f.CloseFileOfMarker(t, "dummy") + f.CloseFileOfMarker(t, "mainFoo") + f.GoToMarker(t, "dummy") + + f.CloseFileOfMarker(t, "dummy") + + // Find all refs in default project + f.VerifyBaselineFindAllReferences(t, "mainFoo") + + f.CloseFileOfMarker(t, "mainFoo") + + // Find all ref in non default project + f.VerifyBaselineFindAllReferences(t, "fooIndirect3Import") +} + +func TestFindAllRefsProjectWithOwnFilesReferencingFileFromReferencedProject(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @tsc: --build /myproject/tsconfig.json +// @Filename: dummy/dummy.ts +/*dummy*/const x = 1; +// @Filename: dummy/tsconfig.json +{ } +// @Filename: myproject/tsconfig.json +{ + "files": ["./own/main.ts"], + "references": [{ "path": "./tsconfig-src.json" }] +} +// @Filename: myproject/own/main.ts +import { foo } from '../target/src/main'; +foo(); +export function bar() {} +// @Filename: myproject/tsconfig-src.json +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +// @Filename: myproject/src/main.ts +import { foo } from './helpers/functions'; +export { /*mainFoo*/foo }; +// @Filename: myproject/src/helpers/functions.ts +export function foo() { return 1; } +// @Filename: myproject/indirect3/tsconfig.json +{ } +// @Filename: myproject/indirect3/main.ts +import { /*fooIndirect3Import*/foo } from '../target/src/main'; +foo() +export function bar() {} +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + // Ensure configured project is found for open file + f.GoToMarker(t, "mainFoo") + // !!! TODO Verify errors + f.GoToMarker(t, "dummy") + + // Projects lifetime + f.CloseFileOfMarker(t, "dummy") + f.CloseFileOfMarker(t, "mainFoo") + f.GoToMarker(t, "dummy") + + f.CloseFileOfMarker(t, "dummy") + + // Find all refs in default project + f.VerifyBaselineFindAllReferences(t, "mainFoo") + + f.CloseFileOfMarker(t, "mainFoo") + + // Find all ref in non default project + f.VerifyBaselineFindAllReferences(t, "fooIndirect3Import") +} + +func TestFindAllRefsRootOfReferencedProject(t *testing.T) { + t.Parallel() + for _, disableSourceOfProjectReferenceRedirect := range []bool{false, true} { + t.Run("TestFindAllRefsRootOfReferencedProject"+core.IfElse(disableSourceOfProjectReferenceRedirect, "DeclarationMaps", ""), func(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := fmt.Sprintf(` +// @stateBaseline: true +%s +// @Filename: src/common/input/keyboard.ts +function bar() { return "just a random function so .d.ts location doesnt match"; } +export function /*keyboard*/evaluateKeyboardEvent() { } +// @Filename: src/common/input/keyboard.test.ts +import { evaluateKeyboardEvent } from 'common/input/keyboard'; +function testEvaluateKeyboardEvent() { + return evaluateKeyboardEvent(); +} +// @Filename: src/terminal.ts +/*terminal*/import { evaluateKeyboardEvent } from 'common/input/keyboard'; +function foo() { + return evaluateKeyboardEvent(); +} +// @Filename: /src/common/tsconfig.json +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "outDir": "../../out", + "disableSourceOfProjectReferenceRedirect": %v, + "paths": { + "*": ["../*"], + }, + }, + "include": ["./\**/*"] +} +// @Filename: src/tsconfig.json +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "outDir": "../out", + "disableSourceOfProjectReferenceRedirect": %v, + "paths": { + "common/*": ["./common/*"], + }, + "tsBuildInfoFile": "../out/src.tsconfig.tsbuildinfo" + }, + "include": ["./\**/*"], + "references": [ + { "path": "./common" }, + ], +}`, core.IfElse(disableSourceOfProjectReferenceRedirect, "// @tsc: --build /src/tsconfig.json", ""), disableSourceOfProjectReferenceRedirect, disableSourceOfProjectReferenceRedirect) + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.GoToMarker(t, "keyboard") + f.GoToMarker(t, "terminal") + // Find all ref in default project + f.VerifyBaselineFindAllReferences(t, "keyboard") + }) + } +} + +func TestFindAllRefsAncestorSiblingProjectsLoading(t *testing.T) { + t.Parallel() + for _, disableSolutionSearching := range []bool{false, true} { + t.Run("TestFindAllRefsAncestorSiblingProjectsLoading"+core.IfElse(disableSolutionSearching, "DisableSolutionSearching", ""), func(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := fmt.Sprintf(` +// @stateBaseline: true +// @Filename: solution/tsconfig.json +{ + "files": [], + "include": [], + "references": [ + { "path": "./compiler" }, + { "path": "./services" }, + ], +} +// @Filename: solution/compiler/tsconfig.json +{ + "compilerOptions": { + "composite": true, + "disableSolutionSearching": %t, + }, + "files": ["./types.ts", "./program.ts"] +} +// @Filename: solution/compiler/types.ts +namespace ts { + export interface Program { + getSourceFiles(): string[]; + } +} +// @Filename: solution/compiler/program.ts +namespace ts { + export const program: Program = { + /*notLocal*/getSourceFiles: () => [/*local*/getSourceFile()] + }; + function getSourceFile() { return "something"; } +} +// @Filename: solution/services/tsconfig.json +{ + "compilerOptions": { + "composite": true + }, + "files": ["./services.ts"], + "references": [ + { "path": "../compiler" }, + ], +} +// @Filename: solution/services/services.ts +/// +/// +namespace ts { + const result = program.getSourceFiles(); +}`, disableSolutionSearching) + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + // Find all references for getSourceFile + // Shouldnt load more projects + f.VerifyBaselineFindAllReferences(t, "local") + + // Find all references for getSourceFiles + // Should load more projects only if disableSolutionSearching is not set to true + f.VerifyBaselineFindAllReferences(t, "notLocal") + }) + } +} + +func TestFindAllRefsOverlappingProjects(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @Filename: solution/tsconfig.json +{ + "files": [], + "include": [], + "references": [ + { "path": "./a" }, + { "path": "./b" }, + { "path": "./c" }, + { "path": "./d" }, + ], +} +// @Filename: solution/a/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, + "files": ["./index.ts"] +} +// @Filename: solution/a/index.ts +export interface I { + M(): void; +} +// @Filename: solution/b/tsconfig.json +{ + "compilerOptions": { + "composite": true + }, + "files": ["./index.ts"], + "references": [ + { "path": "../a" }, + ], +} +// @Filename: solution/b/index.ts +import { I } from "../a"; +export class B implements /**/I { + M() {} +} +// @Filename: solution/c/tsconfig.json +{ + "compilerOptions": { + "composite": true + }, + "files": ["./index.ts"], + "references": [ + { "path": "../b" }, + ], +} +// @Filename: solution/c/index.ts +import { I } from "../a"; +import { B } from "../b"; +export const C: I = new B(); +// @Filename: solution/d/tsconfig.json +{ + "compilerOptions": { + "composite": true + }, + "files": ["./index.ts"], + "references": [ + { "path": "../c" }, + ], +} +// @Filename: solution/d/index.ts +import { I } from "../a"; +import { C } from "../c"; +export const D: I = C; +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + + // The first search will trigger project loads + f.VerifyBaselineFindAllReferences(t, "") + + // The second search starts with the projects already loaded + // Formerly, this would search some projects multiple times + f.VerifyBaselineFindAllReferences(t, "") +} + +func TestFindAllRefsTwoProjectsOpenAndOneProjectReferences(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @Filename: /myproject/main/src/file1.ts +/*main*/export const mainConst = 10; +// @Filename: /myproject/main/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../core" }, + { "path": "../indirect" }, + { "path": "../noCoreRef1" }, + { "path": "../indirectDisabledChildLoad1" }, + { "path": "../indirectDisabledChildLoad2" }, + { "path": "../refToCoreRef3" }, + { "path": "../indirectNoCoreRef" } + ] +} +// @Filename: /myproject/core/src/file1.ts +export const /*find*/coreConst = 10; +// @Filename: /myproject/core/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, +} +// @Filename: /myproject/noCoreRef1/src/file1.ts +export const noCoreRef1Const = 10; +// @Filename: /myproject/noCoreRef1/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, +} +// @Filename: /myproject/indirect/src/file1.ts +export const indirectConst = 10; +// @Filename: /myproject/indirect/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../coreRef1" }, + ] +} +// @Filename: /myproject/coreRef1/src/file1.ts +export const coreRef1Const = 10; +// @Filename: /myproject/coreRef1/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../core" }, + ] +} +// @Filename: /myproject/indirectDisabledChildLoad1/src/file1.ts +export const indirectDisabledChildLoad1Const = 10; +// @Filename: /myproject/indirectDisabledChildLoad1/tsconfig.json +{ + "compilerOptions": { + "composite": true, + "disableReferencedProjectLoad": true, + }, + "references": [ + { "path": "../coreRef2" }, + ] +} +// @Filename: /myproject/coreRef2/src/file1.ts +export const coreRef2Const = 10; +// @Filename: /myproject/coreRef2/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../core" }, + ] +} +// @Filename: /myproject/indirectDisabledChildLoad2/src/file1.ts +export const indirectDisabledChildLoad2Const = 10; +// @Filename: /myproject/indirectDisabledChildLoad2/tsconfig.json +{ + "compilerOptions": { + "composite": true, + "disableReferencedProjectLoad": true, + }, + "references": [ + { "path": "../coreRef3" }, + ] +} +// @Filename: /myproject/coreRef3/src/file1.ts +export const coreRef3Const = 10; +// @Filename: /myproject/coreRef3/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../core" }, + ] +} +// @Filename: /myproject/refToCoreRef3/src/file1.ts +export const refToCoreRef3Const = 10; +// @Filename: /myproject/refToCoreRef3/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../coreRef3" }, + ] +} +// @Filename: /myproject/indirectNoCoreRef/src/file1.ts +export const indirectNoCoreRefConst = 10; +// @Filename: /myproject/indirectNoCoreRef/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../noCoreRef2" }, + ] +} +// @Filename: /myproject/noCoreRef2/src/file1.ts +export const noCoreRef2Const = 10; +// @Filename: /myproject/noCoreRef2/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.GoToMarker(t, "main") + f.VerifyBaselineFindAllReferences(t, "find") +} + +func TestFindAllRefsDoesNotTryToSearchProjectAfterItsUpdateDoesNotIncludeTheFile(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @Filename: /packages/babel-loader/tsconfig.json +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "composite": true, + "rootDir": "src", + "outDir": "dist" + }, + "include": ["src"], + "references": [{"path": "../core"}] +} +// @Filename: /packages/babel-loader/src/index.ts +/*change*/import type { Foo } from "../../core/src/index.js"; +// @Filename: /packages/core/tsconfig.json +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "composite": true, + "rootDir": "./src", + "outDir": "./dist", + }, + "include": ["./src"] +} +// @Filename: /packages/core/src/index.ts +import { Bar } from "./loading-indicator.js"; +export type Foo = {}; +const bar: Bar = { + /*prop*/prop: 0 +} +// @Filename: /packages/core/src/loading-indicator.ts +export interface Bar { + prop: number; +} +const bar: Bar = { + prop: 1 +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.GoToMarker(t, "change") + f.GoToMarker(t, "prop") + + // Now change `babel-loader` project to no longer import `core` project + f.GoToMarker(t, "change") + f.Insert(t, "// comment") + + // At this point, we haven't updated `babel-loader` project yet, + // so `babel-loader` is still a containing project of `loading-indicator` file. + // When calling find all references, + // we shouldn't crash due to using outdated information on a file's containing projects. + f.VerifyBaselineFindAllReferences(t, "prop") +} + +func TestFindAllRefsOpenFileInConfiguredProjectThatWillBeRemoved(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @Filename: /myproject/playground/tsconfig.json +{} +// @Filename: /myproject/playground/tests.ts +/*tests*/export function foo() {} +// @Filename: /myproject/playground/tsconfig-json/tsconfig.json +{ + "include": ["./src"] +} +// @Filename: /myproject/playground/tsconfig-json/src/src.ts +export function foobar() {} +// @Filename: /myproject/playground/tsconfig-json/tests/spec.ts +export function /*find*/bar() { } +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.GoToMarker(t, "tests") + f.CloseFileOfMarker(t, "tests") + f.VerifyBaselineFindAllReferences(t, "find") +} + +func TestFindAllRefsSpecialHandlingOfLocalness(t *testing.T) { + t.Parallel() + type testCase struct { + name string + definition string + usage string + referenceTerm string + } + + for _, tc := range []testCase{ + { + "ArrowFunctionAssignment", + `export const dog = () => { };`, + `shared.dog();`, + "dog", + }, + { + "ArrowFunctionAsObjectLiteralPropertyTypes", + `export const foo = { bar: () => { } };`, + `shared.foo.bar();`, + "bar", + }, + { + "ObjectLiteralProperty", + `export const foo = { baz: "BAZ" };`, + `shared.foo.baz;`, + "baz", + }, + { + "MethodOfClassExpression", + `export const foo = class { fly() {} };`, + stringtestutil.Dedent(` + const instance = new shared.foo(); + instance.fly();`), + "fly", + }, + { + // when using arrow function as object literal property is loaded through indirect assignment with original declaration local to project is treated as local + "ArrowFunctionAsObjectLiteralProperty", + stringtestutil.Dedent(` + const local = { bar: () => { } }; + export const foo = local;`), + `shared.foo.bar();`, + "bar", + }, + } { + t.Run("TestFindAllRefsSpecialHandlingOfLocalness"+tc.name, func(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + usageWithMarker := tc.usage[:strings.Index(tc.usage, tc.referenceTerm)] + "/*ref*/" + tc.usage[strings.Index(tc.usage, tc.referenceTerm):] + content := ` +// @stateBaseline: true +// @Filename: /solution/tsconfig.json +{ + "files": [], + "references": [ + { "path": "./api" }, + { "path": "./app" }, + ], +} +// @Filename: /solution/api/tsconfig.json +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +// @Filename: /solution/api/src/server.ts +import * as shared from "../../shared/dist" +` + usageWithMarker + ` +// @Filename: /solution/app/tsconfig.json +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +// @Filename: /solution/app/src/app.ts +import * as shared from "../../shared/dist" +` + tc.usage + ` +// @Filename: /solution/app/tsconfig.json +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +// @Filename: /solution/shared/tsconfig.json +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], +} +// @Filename: /solution/shared/src/index.ts +` + tc.definition + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineFindAllReferences(t, "ref") + }) + } +} + +func TestFindAllRefsDeclarationInOtherProject(t *testing.T) { + t.Parallel() + type testCase struct { + projectAlreadyLoaded bool + disableReferencedProjectLoad bool + disableSourceOfProjectReferenceRedirect bool + dtsMapPresent bool + } + // Pre-loaded = A file from project B is already open when FindAllRefs is invoked + // dRPL = Project A has disableReferencedProjectLoad + // dSOPRR = Project A has disableSourceOfProjectReferenceRedirect + // Map = The declaration map file b/lib/index.d.ts.map exists + // B refs = files under directory b in which references are found (all scenarios find all references in a/index.ts) + //Pre-loaded |dRPL|dSOPRR|Map| B state | Notes | B refs | Notes + //-----------+----+------+- -+------------------+--------------+---------------------+--------------------------------------------------- + for _, tc := range []testCase{ + {true, true, true, true}, // Pre-loaded | | index.ts, helper.ts | Via map and pre-loaded project + {true, true, true, false}, // Pre-loaded | | lib/index.d.ts | Even though project is loaded + {true, true, false, true}, // Pre-loaded | | index.ts, helper.ts | + {true, true, false, false}, // Pre-loaded | | index.ts, helper.ts | + {true, false, true, true}, // Pre-loaded | | index.ts, helper.ts | Via map and pre-loaded project + {true, false, true, false}, // Pre-loaded | | lib/index.d.ts | Even though project is loaded + {true, false, false, true}, // Pre-loaded | | index.ts, helper.ts | + {true, false, false, false}, // Pre-loaded | | index.ts, helper.ts | + {false, true, true, true}, // Not loaded | | lib/index.d.ts | Even though map is present + {false, true, true, false}, // Not loaded | | lib/index.d.ts | + {false, true, false, true}, // Not loaded | | index.ts | But not helper.ts, which is not referenced from a + {false, true, false, false}, // Not loaded | | index.ts | But not helper.ts, which is not referenced from a + {false, false, true, true}, // Loaded | Via map | index.ts, helper.ts | Via map and newly loaded project + {false, false, true, false}, // Not loaded | | lib/index.d.ts | + {false, false, false, true}, // Loaded | Via redirect | index.ts, helper.ts | + {false, false, false, false}, // Loaded | Via redirect | index.ts, helper.ts | + } { + subScenario := fmt.Sprintf(`Proj%sLoaded`, core.IfElse(tc.projectAlreadyLoaded, "Is", "IsNot")) + + `RefdProjLoadingIs` + core.IfElse(tc.disableReferencedProjectLoad, "Disabled", "Enabled") + + `ProjRefRedirectsAre` + core.IfElse(tc.disableSourceOfProjectReferenceRedirect, "Disabled", "Enabled") + + `DeclMapIs` + core.IfElse(tc.dtsMapPresent, "Present", "Missing") + t.Run("TestFindAllRefsDeclarationInOtherProject"+subScenario, func(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := fmt.Sprintf(` +// @stateBaseline: true +// @Filename: /myproject/a/tsconfig.json +{ + "disableReferencedProjectLoad": %t, + "disableSourceOfProjectReferenceRedirect": %t, + "composite": true +} +// @Filename: /myproject/a/index.ts +import { B } from "../b/lib"; +const b: /*ref*/B = new B(); +// @Filename: /myproject/b/tsconfig.json +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} +// @Filename: /myproject/b/index.ts +export class B { + M() {} +} +// @Filename: /myproject/b/helper.ts +/*bHelper*/import { B } from "."; +const b: B = new B(); +// @Filename: /myproject/b/lib/index.d.ts +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map`, tc.disableReferencedProjectLoad, tc.disableSourceOfProjectReferenceRedirect) + if tc.dtsMapPresent { + content += ` +// @Filename: /myproject/b/lib/index.d.ts.map +{ + "version": 3, + "file": "index.d.ts", + "sourceRoot": "", + "sources": ["../index.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;IACV,CAAC;CACJ" +}` + } + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + if tc.projectAlreadyLoaded { + f.GoToMarker(t, "ref") + f.GoToMarker(t, "bHelper") + } + f.VerifyBaselineFindAllReferences(t, "ref") + }) + } +} diff --git a/pkg/fourslash/tests/staterename_test.go b/pkg/fourslash/tests/staterename_test.go new file mode 100644 index 00000000..ab7c1c19 --- /dev/null +++ b/pkg/fourslash/tests/staterename_test.go @@ -0,0 +1,132 @@ +package fourslash_test + +import ( + "testing" + + "github.com/buke/typescript-go-internal/pkg/fourslash" + "github.com/buke/typescript-go-internal/pkg/testutil" +) + +func TestRenameAncestorProjectRefMangement(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @Filename: /projects/temp/temp.ts +/*temp*/let x = 10 +// @Filename: /projects/temp/tsconfig.json +{} +// @Filename: /projects/container/lib/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, + references: [], + files: [ + "index.ts", + ], +} +// @Filename: /projects/container/lib/index.ts +export const myConst = 30; +// @Filename: /projects/container/exec/tsconfig.json +{ + "files": ["./index.ts"], + "references": [ + { "path": "../lib" }, + ], +} +// @Filename: /projects/container/exec/index.ts +import { myConst } from "../lib"; +export function getMyConst() { + return myConst; +} +// @Filename: /projects/container/compositeExec/tsconfig.json +{ + "compilerOptions": { + "composite": true, + }, + "files": ["./index.ts"], + "references": [ + { "path": "../lib" }, + ], +} +// @Filename: /projects/container/compositeExec/index.ts +import { /*find*/myConst } from "../lib"; +export function getMyConst() { + return myConst; +} +// @Filename: /projects/container/tsconfig.json +{ + "files": [], + "include": [], + "references": [ + { "path": "./exec" }, + { "path": "./compositeExec" }, + ], +} +// @Filename: /projects/container/tsconfig.json +{ + "files": [], + "include": [], + "references": [ + { "path": "./exec" }, + { "path": "./compositeExec" }, + ], +} +// @Filename: /projects/container/tsconfig.json +{ + "files": [], + "include": [], + "references": [ + { "path": "./exec" }, + { "path": "./compositeExec" }, + ], +} +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.GoToMarker(t, "find") + // Open temp file and verify all projects alive + f.GoToMarker(t, "temp") + + // Ref projects are loaded after as part of this command + f.VerifyBaselineRename(t, nil /*preferences*/, "find") + + // Open temp file and verify all projects alive + f.CloseFileOfMarker(t, "temp") + f.GoToMarker(t, "temp") + + // Close all files and open temp file, only inferred project should be alive + f.CloseFileOfMarker(t, "find") + f.CloseFileOfMarker(t, "temp") + f.GoToMarker(t, "temp") +} + +func TestRenameInCommonFile(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + content := ` +// @stateBaseline: true +// @Filename: /projects/a/a.ts +/*aTs*/import {C} from "./c/fc"; +console.log(C) +// @Filename: /projects/a/tsconfig.json +{} +// @link: /projects/c -> /projects/a/c +// @Filename: /projects/b/b.ts +/*bTs*/import {C} from "../c/fc"; +console.log(C) +// @Filename: /projects/b/tsconfig.json +{} +// @link: /projects/c -> /projects/b/c +// @Filename: /projects/c/fc.ts +export const /*find*/C = 42; +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.GoToMarker(t, "aTs") + f.GoToMarker(t, "bTs") + findMarker := f.MarkerByName(t, "find") + aFcMarker := findMarker.MakerWithSymlink("/projects/a/c/fc.ts") + f.GoToMarkerOrRange(t, aFcMarker) + f.GoToMarkerOrRange(t, findMarker.MakerWithSymlink("/projects/b/c/fc.ts")) + f.VerifyBaselineRename(t, nil /*preferences*/, aFcMarker) +} diff --git a/pkg/locale/locale.go b/pkg/locale/locale.go new file mode 100644 index 00000000..20d6e14a --- /dev/null +++ b/pkg/locale/locale.go @@ -0,0 +1,28 @@ +package locale + +import ( + "context" + + "golang.org/x/text/language" +) + +type contextKey int + +type Locale language.Tag + +var Default Locale + +func WithLocale(ctx context.Context, locale Locale) context.Context { + return context.WithValue(ctx, contextKey(0), locale) +} + +func FromContext(ctx context.Context) Locale { + locale, _ := ctx.Value(contextKey(0)).(Locale) + return locale +} + +func Parse(localeStr string) (locale Locale, ok bool) { + // Parse gracefully fails. + tag, err := language.Parse(localeStr) + return Locale(tag), err == nil +} diff --git a/pkg/ls/autoimports.go b/pkg/ls/autoimports.go index 3af18b13..2f00c540 100644 --- a/pkg/ls/autoimports.go +++ b/pkg/ls/autoimports.go @@ -14,6 +14,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/debug" "github.com/buke/typescript-go-internal/pkg/diagnostics" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/ls/change" "github.com/buke/typescript-go-internal/pkg/ls/lsutil" "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" @@ -1439,25 +1440,28 @@ func (l *LanguageService) codeActionForFix( includeSymbolNameInDescription bool, ) codeAction { tracker := change.NewTracker(ctx, l.GetProgram().Options(), l.FormatOptions(), l.converters) // !!! changetracker.with - diag := l.codeActionForFixWorker(tracker, sourceFile, symbolName, fix, includeSymbolNameInDescription) + diag := l.codeActionForFixWorker(ctx, tracker, sourceFile, symbolName, fix, includeSymbolNameInDescription) changes := tracker.GetChanges()[sourceFile.FileName()] - return codeAction{description: diag.Message(), changes: changes} + return codeAction{description: diag, changes: changes} } func (l *LanguageService) codeActionForFixWorker( + ctx context.Context, changeTracker *change.Tracker, sourceFile *ast.SourceFile, symbolName string, fix *ImportFix, includeSymbolNameInDescription bool, -) *diagnostics.Message { +) string { + locale := locale.FromContext(ctx) + switch fix.kind { case ImportFixKindUseNamespace: addNamespaceQualifier(changeTracker, sourceFile, fix.qualification()) - return diagnostics.FormatMessage(diagnostics.Change_0_to_1, symbolName, fmt.Sprintf("%s.%s", *fix.namespacePrefix, symbolName)) + return diagnostics.Change_0_to_1.Localize(locale, symbolName, fmt.Sprintf("%s.%s", *fix.namespacePrefix, symbolName)) case ImportFixKindJsdocTypeImport: if fix.usagePosition == nil { - return nil + return "" } quotePreference := getQuotePreference(sourceFile, l.UserPreferences()) quoteChar := "\"" @@ -1466,7 +1470,7 @@ func (l *LanguageService) codeActionForFixWorker( } importTypePrefix := fmt.Sprintf("import(%s%s%s).", quoteChar, fix.moduleSpecifier, quoteChar) changeTracker.InsertText(sourceFile, *fix.usagePosition, importTypePrefix) - return diagnostics.FormatMessage(diagnostics.Change_0_to_1, symbolName, importTypePrefix+symbolName) + return diagnostics.Change_0_to_1.Localize(locale, symbolName, importTypePrefix+symbolName) case ImportFixKindAddToExisting: var defaultImport *Import var namedImports []*Import @@ -1484,9 +1488,9 @@ func (l *LanguageService) codeActionForFixWorker( ) moduleSpecifierWithoutQuotes := stringutil.StripQuotes(fix.moduleSpecifier) if includeSymbolNameInDescription { - return diagnostics.FormatMessage(diagnostics.Import_0_from_1, symbolName, moduleSpecifierWithoutQuotes) + return diagnostics.Import_0_from_1.Localize(locale, symbolName, moduleSpecifierWithoutQuotes) } - return diagnostics.FormatMessage(diagnostics.Update_import_from_0, moduleSpecifierWithoutQuotes) + return diagnostics.Update_import_from_0.Localize(locale, moduleSpecifierWithoutQuotes) case ImportFixKindAddNew: var declarations []*ast.Statement var defaultImport *Import @@ -1521,17 +1525,17 @@ func (l *LanguageService) codeActionForFixWorker( addNamespaceQualifier(changeTracker, sourceFile, qualification) } if includeSymbolNameInDescription { - return diagnostics.FormatMessage(diagnostics.Import_0_from_1, symbolName, fix.moduleSpecifier) + return diagnostics.Import_0_from_1.Localize(locale, symbolName, fix.moduleSpecifier) } - return diagnostics.FormatMessage(diagnostics.Add_import_from_0, fix.moduleSpecifier) + return diagnostics.Add_import_from_0.Localize(locale, fix.moduleSpecifier) case ImportFixKindPromoteTypeOnly: promotedDeclaration := promoteFromTypeOnly(changeTracker, fix.typeOnlyAliasDeclaration, l.GetProgram(), sourceFile, l) if promotedDeclaration.Kind == ast.KindImportSpecifier { moduleSpec := getModuleSpecifierText(promotedDeclaration.Parent.Parent) - return diagnostics.FormatMessage(diagnostics.Remove_type_from_import_of_0_from_1, symbolName, moduleSpec) + return diagnostics.Remove_type_from_import_of_0_from_1.Localize(locale, symbolName, moduleSpec) } moduleSpec := getModuleSpecifierText(promotedDeclaration) - return diagnostics.FormatMessage(diagnostics.Remove_type_from_import_declaration_from_0, moduleSpec) + return diagnostics.Remove_type_from_import_declaration_from_0.Localize(locale, moduleSpec) default: panic(fmt.Sprintf(`Unexpected fix kind %v`, fix.kind)) } diff --git a/pkg/ls/codeactions_importfixes.go b/pkg/ls/codeactions_importfixes.go index 407ec877..8b78426c 100644 --- a/pkg/ls/codeactions_importfixes.go +++ b/pkg/ls/codeactions_importfixes.go @@ -75,6 +75,7 @@ func getImportCodeActions(ctx context.Context, fixContext *CodeFixContext) []Cod for _, fixInfo := range info { tracker := change.NewTracker(ctx, fixContext.Program.Options(), fixContext.LS.FormatOptions(), fixContext.LS.converters) msg := fixContext.LS.codeActionForFixWorker( + ctx, tracker, fixContext.SourceFile, fixInfo.symbolName, @@ -82,7 +83,7 @@ func getImportCodeActions(ctx context.Context, fixContext *CodeFixContext) []Cod fixInfo.symbolName != fixInfo.errorIdentifierText, ) - if msg != nil { + if msg != "" { // Convert changes to LSP edits changes := tracker.GetChanges() var edits []*lsproto.TextEdit @@ -91,7 +92,7 @@ func getImportCodeActions(ctx context.Context, fixContext *CodeFixContext) []Cod } actions = append(actions, CodeAction{ - Description: msg.Message(), + Description: msg, Changes: edits, }) } diff --git a/pkg/ls/documenthighlights.go b/pkg/ls/documenthighlights.go index f34c0bd2..1d5567aa 100644 --- a/pkg/ls/documenthighlights.go +++ b/pkg/ls/documenthighlights.go @@ -75,7 +75,7 @@ func (l *LanguageService) toDocumentHighlight(entry *ReferenceEntry) (string, *l kind := lsproto.DocumentHighlightKindRead if entry.kind == entryKindRange { return entry.fileName, &lsproto.DocumentHighlight{ - Range: *entry.textRange, + Range: *l.getRangeOfEntry(entry), Kind: &kind, } } @@ -86,7 +86,7 @@ func (l *LanguageService) toDocumentHighlight(entry *ReferenceEntry) (string, *l } dh := &lsproto.DocumentHighlight{ - Range: *entry.textRange, + Range: *l.getRangeOfEntry(entry), Kind: &kind, } diff --git a/pkg/ls/findallreferences.go b/pkg/ls/findallreferences.go index bc99f2e1..182bf94b 100644 --- a/pkg/ls/findallreferences.go +++ b/pkg/ls/findallreferences.go @@ -6,6 +6,7 @@ import ( "fmt" "slices" "strings" + "sync" "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/astnav" @@ -104,33 +105,52 @@ type ReferenceEntry struct { node *ast.Node context *ast.Node // !!! ContextWithStartAndEndNode, optional fileName string - textRange *lsproto.Range + textRange *core.TextRange + lspRange *lsproto.Location +} + +func (entry *SymbolAndEntries) canUseDefinitionSymbol() bool { + if entry.definition == nil { + return false + } + + switch entry.definition.Kind { + case definitionKindSymbol, definitionKindThis: + return entry.definition.symbol != nil + case definitionKindTripleSlashReference: + // !!! TODO : need to find file reference instead? + // May need to return true to indicate this to be file search instead and might need to do for import stuff as well + // For now + return false + default: + return false + } } func (l *LanguageService) getRangeOfEntry(entry *ReferenceEntry) *lsproto.Range { - return l.resolveEntry(entry).textRange + return &l.resolveEntry(entry).lspRange.Range +} + +func (l *LanguageService) getFileNameOfEntry(entry *ReferenceEntry) lsproto.DocumentUri { + return l.resolveEntry(entry).lspRange.Uri } -func (l *LanguageService) getFileNameOfEntry(entry *ReferenceEntry) string { - return l.resolveEntry(entry).fileName +func (l *LanguageService) getLocationOfEntry(entry *ReferenceEntry) *lsproto.Location { + return l.resolveEntry(entry).lspRange } func (l *LanguageService) resolveEntry(entry *ReferenceEntry) *ReferenceEntry { if entry.textRange == nil { sourceFile := ast.GetSourceFileOfNode(entry.node) - entry.textRange = l.getLspRangeOfNode(entry.node, sourceFile, nil /*endNode*/) + textRange := getRangeOfNode(entry.node, sourceFile, nil /*endNode*/) + entry.textRange = &textRange entry.fileName = sourceFile.FileName() } - return entry -} - -func (l *LanguageService) newRangeEntry(file *ast.SourceFile, start, end int) *ReferenceEntry { - // !!! used in not-yet implemented features - return &ReferenceEntry{ - kind: entryKindRange, - fileName: file.FileName(), - textRange: l.createLspRangeFromBounds(start, end, file), + if entry.lspRange == nil { + location := l.getMappedLocation(entry.fileName, *entry.textRange) + entry.lspRange = &location } + return entry } func newNodeEntryWithKind(node *ast.Node, kind entryKind) *ReferenceEntry { @@ -266,10 +286,9 @@ func (l *LanguageService) getLspRangeOfNode(node *ast.Node, sourceFile *ast.Sour sourceFile = ast.GetSourceFileOfNode(node) } textRange := getRangeOfNode(node, sourceFile, endNode) - return l.createLspRangeFromRange(textRange, sourceFile) + return l.createLspRangeFromBounds(textRange.Pos(), textRange.End(), sourceFile) } -// `getTextSpan` func getRangeOfNode(node *ast.Node, sourceFile *ast.SourceFile, endNode *ast.Node) core.TextRange { if sourceFile == nil { sourceFile = ast.GetSourceFileOfNode(node) @@ -416,16 +435,170 @@ func getSymbolScope(symbol *ast.Symbol) *ast.Node { // === functions on (*ls) === -func (l *LanguageService) ProvideReferences(ctx context.Context, params *lsproto.ReferenceParams) (lsproto.ReferencesResponse, error) { +type position struct { + uri lsproto.DocumentUri + pos lsproto.Position +} + +var _ lsproto.HasTextDocumentPosition = (*position)(nil) + +func (nld *position) TextDocumentURI() lsproto.DocumentUri { return nld.uri } +func (nld *position) TextDocumentPosition() lsproto.Position { return nld.pos } + +type NonLocalDefinition struct { + position + GetSourcePosition func() lsproto.HasTextDocumentPosition + GetGeneratedPosition func() lsproto.HasTextDocumentPosition +} + +func getFileAndStartPosFromDeclaration(declaration *ast.Node) (*ast.SourceFile, core.TextPos) { + file := ast.GetSourceFileOfNode(declaration) + name := core.OrElse(ast.GetNameOfDeclaration(declaration), declaration) + textRange := getRangeOfNode(name, file, nil /*endNode*/) + + return file, core.TextPos(textRange.Pos()) +} + +func (l *LanguageService) GetNonLocalDefinition(ctx context.Context, entry *SymbolAndEntries) *NonLocalDefinition { + if !entry.canUseDefinitionSymbol() { + return nil + } + + program := l.GetProgram() + checker, done := program.GetTypeChecker(ctx) + defer done() + emitResolver := checker.GetEmitResolver() + for _, d := range entry.definition.symbol.Declarations { + if isDefinitionVisible(emitResolver, d) { + file, startPos := getFileAndStartPosFromDeclaration(d) + fileName := file.FileName() + return &NonLocalDefinition{ + position: position{ + uri: lsconv.FileNameToDocumentURI(fileName), + pos: l.converters.PositionToLineAndCharacter(file, startPos), + }, + GetSourcePosition: sync.OnceValue(func() lsproto.HasTextDocumentPosition { + mapped := l.tryGetSourcePosition(fileName, startPos) + if mapped != nil { + return &position{ + uri: lsconv.FileNameToDocumentURI(mapped.FileName), + pos: l.converters.PositionToLineAndCharacter(l.getScript(mapped.FileName), core.TextPos(mapped.Pos)), + } + } + return nil + }), + GetGeneratedPosition: sync.OnceValue(func() lsproto.HasTextDocumentPosition { + mapped := l.tryGetGeneratedPosition(fileName, startPos) + if mapped != nil { + return &position{ + uri: lsconv.FileNameToDocumentURI(mapped.FileName), + pos: l.converters.PositionToLineAndCharacter(l.getScript(mapped.FileName), core.TextPos(mapped.Pos)), + } + } + return nil + }), + } + } + } + return nil +} + +// This is special handling to determine if we should load up more projects and find location in other projects +// By default arrows (and such other ast kinds) are not visible as declaration emitter doesnt need them +// But we want to handle them specially so that they are visible if their parent is visible +func isDefinitionVisible(emitResolver *checker.EmitResolver, declaration *ast.Node) bool { + if emitResolver.IsDeclarationVisible(declaration) { + return true + } + if declaration.Parent == nil { + return false + } + + // Variable initializers are visible if variable is visible + if ast.HasInitializer(declaration.Parent) && declaration.Parent.Initializer() == declaration { + return isDefinitionVisible(emitResolver, declaration.Parent) + } + + // Handle some exceptions here like arrow function, members of class and object literal expression which are technically not visible but we want the definition to be determined by its parent + switch declaration.Kind { + case ast.KindPropertyDeclaration, + ast.KindGetAccessor, + ast.KindSetAccessor, + ast.KindMethodDeclaration: + // Private/protected properties/methods are not visible + if ast.HasModifier(declaration, ast.ModifierFlagsPrivate) || ast.IsPrivateIdentifier(declaration.Name()) { + return false + } + // Public properties/methods are visible if its parents are visible, so: + // falls through + fallthrough + case ast.KindConstructor, + ast.KindPropertyAssignment, + ast.KindShorthandPropertyAssignment, + ast.KindObjectLiteralExpression, + ast.KindClassExpression, + ast.KindArrowFunction, + ast.KindFunctionExpression: + return isDefinitionVisible(emitResolver, declaration.Parent) + default: + return false + } +} + +func (l *LanguageService) ForEachOriginalDefinitionLocation( + ctx context.Context, + entry *SymbolAndEntries, + cb func(lsproto.DocumentUri, lsproto.Position), +) { + if !entry.canUseDefinitionSymbol() { + return + } + + program := l.GetProgram() + for _, d := range entry.definition.symbol.Declarations { + file, startPos := getFileAndStartPosFromDeclaration(d) + fileName := file.FileName() + if tspath.IsDeclarationFileName(fileName) { + // Map to ts position + mapped := l.tryGetSourcePosition(file.FileName(), startPos) + if mapped != nil { + cb( + lsconv.FileNameToDocumentURI(mapped.FileName), + l.converters.PositionToLineAndCharacter(l.getScript(mapped.FileName), core.TextPos(mapped.Pos)), + ) + } + } else if program.IsSourceFromProjectReference(l.toPath(fileName)) { + cb( + lsconv.FileNameToDocumentURI(fileName), + l.converters.PositionToLineAndCharacter(file, startPos), + ) + } + } +} + +func (l *LanguageService) ProvideSymbolsAndEntries(ctx context.Context, uri lsproto.DocumentUri, documentPosition lsproto.Position, isRename bool) (*ast.Node, []*SymbolAndEntries, bool) { // `findReferencedSymbols` except only computes the information needed to return reference locations - program, sourceFile := l.getProgramAndFile(params.TextDocument.Uri) - position := int(l.converters.LineAndCharacterToPosition(sourceFile, params.Position)) + program, sourceFile := l.getProgramAndFile(uri) + position := int(l.converters.LineAndCharacterToPosition(sourceFile, documentPosition)) node := astnav.GetTouchingPropertyName(sourceFile, position) - options := refOptions{use: referenceUseReferences} + if isRename && node.Kind != ast.KindIdentifier { + return node, nil, false + } - symbolsAndEntries := l.getReferencedSymbolsForNode(ctx, position, node, program, program.GetSourceFiles(), options, nil) + var options refOptions + if !isRename { + options.use = referenceUseReferences + } else { + options.use = referenceUseRename + options.useAliasesForRename = true + } + + return node, l.getReferencedSymbolsForNode(ctx, position, node, program, program.GetSourceFiles(), options, nil), true +} +func (l *LanguageService) ProvideReferencesFromSymbolAndEntries(ctx context.Context, params *lsproto.ReferenceParams, originalNode *ast.Node, symbolsAndEntries []*SymbolAndEntries) (lsproto.ReferencesResponse, error) { + // `findReferencedSymbols` except only computes the information needed to return reference locations locations := core.FlatMap(symbolsAndEntries, l.convertSymbolAndEntriesToLocations) return lsproto.LocationsOrNull{Locations: &locations}, nil } @@ -466,24 +639,21 @@ func (l *LanguageService) getImplementationReferenceEntries(ctx context.Context, return core.FlatMap(symbolsAndEntries, func(s *SymbolAndEntries) []*ReferenceEntry { return s.references }) } -func (l *LanguageService) ProvideRename(ctx context.Context, params *lsproto.RenameParams) (lsproto.WorkspaceEditOrNull, error) { - program, sourceFile := l.getProgramAndFile(params.TextDocument.Uri) - position := int(l.converters.LineAndCharacterToPosition(sourceFile, params.Position)) - node := astnav.GetTouchingPropertyName(sourceFile, position) - if node.Kind != ast.KindIdentifier { +func (l *LanguageService) ProvideRenameFromSymbolAndEntries(ctx context.Context, params *lsproto.RenameParams, originalNode *ast.Node, symbolsAndEntries []*SymbolAndEntries) (lsproto.WorkspaceEditOrNull, error) { + if originalNode.Kind != ast.KindIdentifier { return lsproto.WorkspaceEditOrNull{}, nil } - options := refOptions{use: referenceUseRename, useAliasesForRename: true} - symbolsAndEntries := l.getReferencedSymbolsForNode(ctx, position, node, program, program.GetSourceFiles(), options, nil) + + program := l.GetProgram() entries := core.FlatMap(symbolsAndEntries, func(s *SymbolAndEntries) []*ReferenceEntry { return s.references }) changes := make(map[lsproto.DocumentUri][]*lsproto.TextEdit) checker, done := program.GetTypeChecker(ctx) defer done() for _, entry := range entries { - uri := lsconv.FileNameToDocumentURI(l.getFileNameOfEntry(entry)) + uri := l.getFileNameOfEntry(entry) textEdit := &lsproto.TextEdit{ Range: *l.getRangeOfEntry(entry), - NewText: l.getTextForRename(node, entry, params.NewName, checker), + NewText: l.getTextForRename(originalNode, entry, params.NewName, checker), } changes[uri] = append(changes[uri], textEdit) } @@ -550,10 +720,7 @@ func (l *LanguageService) convertSymbolAndEntriesToLocations(s *SymbolAndEntries func (l *LanguageService) convertEntriesToLocations(entries []*ReferenceEntry) []lsproto.Location { locations := make([]lsproto.Location, len(entries)) for i, entry := range entries { - locations[i] = lsproto.Location{ - Uri: lsconv.FileNameToDocumentURI(l.getFileNameOfEntry(entry)), - Range: *l.getRangeOfEntry(entry), - } + locations[i] = *l.getLocationOfEntry(entry) } return locations } @@ -561,29 +728,19 @@ func (l *LanguageService) convertEntriesToLocations(entries []*ReferenceEntry) [ func (l *LanguageService) convertEntriesToLocationLinks(entries []*ReferenceEntry) []*lsproto.LocationLink { links := make([]*lsproto.LocationLink, len(entries)) for i, entry := range entries { - var targetSelectionRange, targetRange *lsproto.Range + + // Get the selection range (the actual reference) + targetSelectionRange := &l.getLocationOfEntry(entry).Range + targetRange := targetSelectionRange // For entries with nodes, compute ranges directly from the node if entry.node != nil { - sourceFile := ast.GetSourceFileOfNode(entry.node) - entry.fileName = sourceFile.FileName() - - // Get the selection range (the actual reference) - selectionTextRange := getRangeOfNode(entry.node, sourceFile, nil /*endNode*/) - targetSelectionRange = l.createLspRangeFromRange(selectionTextRange, sourceFile) - // Get the context range (broader scope including declaration context) - contextTextRange := toContextRange(&selectionTextRange, sourceFile, entry.context) + contextTextRange := toContextRange(entry.textRange, l.program.GetSourceFile(entry.fileName), entry.context) if contextTextRange != nil { - targetRange = l.createLspRangeFromRange(*contextTextRange, sourceFile) - } else { - targetRange = targetSelectionRange + contextLocation := l.getMappedLocation(entry.fileName, *contextTextRange) + targetRange = &contextLocation.Range } - } else { - // For range entries, use the pre-computed range - l.resolveEntry(entry) - targetSelectionRange = entry.textRange - targetRange = targetSelectionRange } links[i] = &lsproto.LocationLink{ @@ -902,7 +1059,7 @@ func getReferencesForThisKeyword(thisOrSuperKeyword *ast.Node, sourceFiles []*as if thisParameter == nil { thisParameter = thisOrSuperKeyword } - return []*SymbolAndEntries{NewSymbolAndEntries(definitionKindThis, thisParameter, nil, references)} + return []*SymbolAndEntries{NewSymbolAndEntries(definitionKindThis, thisParameter, searchSpaceNode.Symbol(), references)} } func getReferencesForSuperKeyword(superKeyword *ast.Node) []*SymbolAndEntries { @@ -1116,7 +1273,7 @@ func (l *LanguageService) getReferencedSymbolsForModule(ctx context.Context, pro return &ReferenceEntry{ kind: entryKindRange, fileName: reference.referencingFile.FileName(), - textRange: l.createLspRangeFromBounds(reference.ref.Pos(), reference.ref.End(), reference.referencingFile), + textRange: &reference.ref.TextRange, } } return nil diff --git a/pkg/ls/hover.go b/pkg/ls/hover.go index e71e8e94..883559d8 100644 --- a/pkg/ls/hover.go +++ b/pkg/ls/hover.go @@ -9,6 +9,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/astnav" "github.com/buke/typescript-go-internal/pkg/checker" + "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" ) @@ -59,6 +60,9 @@ func (l *LanguageService) ProvideHover(ctx context.Context, documentURI lsproto. } func (l *LanguageService) getQuickInfoAndDocumentationForSymbol(c *checker.Checker, symbol *ast.Symbol, node *ast.Node, contentFormat lsproto.MarkupKind) (string, string) { + if symbol == nil { + return "", "" + } quickInfo, declaration := getQuickInfoAndDeclarationAtLocation(c, symbol, node) if quickInfo == "" { return "", "" @@ -131,149 +135,164 @@ func formatQuickInfo(quickInfo string) string { } func getQuickInfoAndDeclarationAtLocation(c *checker.Checker, symbol *ast.Symbol, node *ast.Node) (string, *ast.Node) { + var b strings.Builder + var visitedAliases collections.Set[*ast.Symbol] container := getContainerNode(node) if node.Kind == ast.KindThisKeyword && ast.IsInExpressionContext(node) { return c.TypeToStringEx(c.GetTypeAtLocation(node), container, typeFormatFlags), nil } - isAlias := symbol != nil && symbol.Flags&ast.SymbolFlagsAlias != 0 - if isAlias { - symbol = c.GetAliasedSymbol(symbol) - } - if symbol == nil || symbol == c.GetUnknownSymbol() { - return "", nil - } - declaration := symbol.ValueDeclaration - flags := symbol.Flags - if flags&ast.SymbolFlagsProperty != 0 && declaration != nil && ast.IsMethodDeclaration(declaration) { - flags = ast.SymbolFlagsMethod - } - if flags&ast.SymbolFlagsType != 0 && (ast.IsPartOfTypeNode(node) || ast.IsTypeDeclarationName(node)) { - // If the symbol has a type meaning and we're in a type context, remove value-only meanings - flags &^= ast.SymbolFlagsVariable | ast.SymbolFlagsFunction - } - var b strings.Builder - if isAlias { - b.WriteString("(alias) ") - } - switch { - case flags&(ast.SymbolFlagsVariable|ast.SymbolFlagsProperty|ast.SymbolFlagsAccessor) != 0: - switch { - case flags&ast.SymbolFlagsProperty != 0: - b.WriteString("(property) ") - case flags&ast.SymbolFlagsAccessor != 0: - b.WriteString("(accessor) ") - default: - decl := symbol.ValueDeclaration - if decl != nil { - switch { - case ast.IsParameter(decl): - b.WriteString("(parameter) ") - case ast.IsVarLet(decl): - b.WriteString("let ") - case ast.IsVarConst(decl): - b.WriteString("const ") - case ast.IsVarUsing(decl): - b.WriteString("using ") - case ast.IsVarAwaitUsing(decl): - b.WriteString("await using ") - default: - b.WriteString("var ") - } - } + writeSymbolMeaning := func(symbol *ast.Symbol, meaning ast.SymbolFlags, isAlias bool) *ast.Node { + flags := symbol.Flags & meaning + if flags == 0 { + return nil } - if symbol.Name == ast.InternalSymbolNameExportEquals && symbol.Parent != nil && symbol.Parent.Flags&ast.SymbolFlagsModule != 0 { - b.WriteString("exports") - } else { - b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) + declaration := symbol.ValueDeclaration + if flags&ast.SymbolFlagsProperty != 0 && declaration != nil && ast.IsMethodDeclaration(declaration) { + flags = ast.SymbolFlagsMethod } - b.WriteString(": ") - if callNode := getCallOrNewExpression(node); callNode != nil { - b.WriteString(c.SignatureToStringEx(c.GetResolvedSignature(callNode), container, typeFormatFlags|checker.TypeFormatFlagsWriteCallStyleSignature|checker.TypeFormatFlagsWriteTypeArgumentsOfSignature|checker.TypeFormatFlagsWriteArrowStyleSignature)) - } else { - b.WriteString(c.TypeToStringEx(c.GetTypeOfSymbolAtLocation(symbol, node), container, typeFormatFlags)) + if b.Len() != 0 { + b.WriteString("\n") } - case flags&ast.SymbolFlagsEnumMember != 0: - b.WriteString("(enum member) ") - t := c.GetTypeOfSymbol(symbol) - b.WriteString(c.TypeToStringEx(t, container, typeFormatFlags)) - if t.Flags()&checker.TypeFlagsLiteral != 0 { - b.WriteString(" = ") - b.WriteString(t.AsLiteralType().String()) + if isAlias { + b.WriteString("(alias) ") } - case flags&(ast.SymbolFlagsFunction|ast.SymbolFlagsMethod) != 0: - prefix := core.IfElse(flags&ast.SymbolFlagsMethod != 0, "(method) ", "function ") - if ast.IsIdentifier(node) && ast.IsFunctionLikeDeclaration(node.Parent) && node.Parent.Name() == node { - declaration = node.Parent - signatures := []*checker.Signature{c.GetSignatureFromDeclaration(declaration)} - writeSignatures(&b, c, signatures, container, prefix, symbol) - } else { - signatures := getSignaturesAtLocation(c, symbol, checker.SignatureKindCall, node) - if len(signatures) == 1 { - if d := signatures[0].Declaration(); d != nil && d.Flags&ast.NodeFlagsJSDoc == 0 { - declaration = d + switch { + case flags&(ast.SymbolFlagsVariable|ast.SymbolFlagsProperty|ast.SymbolFlagsAccessor) != 0: + switch { + case flags&ast.SymbolFlagsProperty != 0: + b.WriteString("(property) ") + case flags&ast.SymbolFlagsAccessor != 0: + b.WriteString("(accessor) ") + default: + decl := symbol.ValueDeclaration + if decl != nil { + switch { + case ast.IsParameter(decl): + b.WriteString("(parameter) ") + case ast.IsVarLet(decl): + b.WriteString("let ") + case ast.IsVarConst(decl): + b.WriteString("const ") + case ast.IsVarUsing(decl): + b.WriteString("using ") + case ast.IsVarAwaitUsing(decl): + b.WriteString("await using ") + default: + b.WriteString("var ") + } } } - writeSignatures(&b, c, signatures, container, prefix, symbol) - } - case flags&(ast.SymbolFlagsClass|ast.SymbolFlagsInterface) != 0: - if node.Kind == ast.KindThisKeyword || ast.IsThisInTypeQuery(node) { - b.WriteString("this") - } else if node.Kind == ast.KindConstructorKeyword && (ast.IsConstructorDeclaration(node.Parent) || ast.IsConstructSignatureDeclaration(node.Parent)) { - declaration = node.Parent - signatures := []*checker.Signature{c.GetSignatureFromDeclaration(declaration)} - writeSignatures(&b, c, signatures, container, "constructor ", symbol) - } else { - var signatures []*checker.Signature - if flags&ast.SymbolFlagsClass != 0 && getCallOrNewExpression(node) != nil { - signatures = getSignaturesAtLocation(c, symbol, checker.SignatureKindConstruct, node) + if symbol.Name == ast.InternalSymbolNameExportEquals && symbol.Parent != nil && symbol.Parent.Flags&ast.SymbolFlagsModule != 0 { + b.WriteString("exports") + } else { + b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) + } + b.WriteString(": ") + if callNode := getCallOrNewExpression(node); callNode != nil { + b.WriteString(c.SignatureToStringEx(c.GetResolvedSignature(callNode), container, typeFormatFlags|checker.TypeFormatFlagsWriteCallStyleSignature|checker.TypeFormatFlagsWriteTypeArgumentsOfSignature|checker.TypeFormatFlagsWriteArrowStyleSignature)) + } else { + b.WriteString(c.TypeToStringEx(c.GetTypeOfSymbolAtLocation(symbol, node), container, typeFormatFlags)) } - if len(signatures) == 1 { - if d := signatures[0].Declaration(); d != nil && d.Flags&ast.NodeFlagsJSDoc == 0 { - declaration = d + case flags&ast.SymbolFlagsEnumMember != 0: + b.WriteString("(enum member) ") + t := c.GetTypeOfSymbol(symbol) + b.WriteString(c.TypeToStringEx(t, container, typeFormatFlags)) + if t.Flags()&checker.TypeFlagsLiteral != 0 { + b.WriteString(" = ") + b.WriteString(t.AsLiteralType().String()) + } + case flags&(ast.SymbolFlagsFunction|ast.SymbolFlagsMethod) != 0: + prefix := core.IfElse(flags&ast.SymbolFlagsMethod != 0, "(method) ", "function ") + if ast.IsIdentifier(node) && ast.IsFunctionLikeDeclaration(node.Parent) && node.Parent.Name() == node { + declaration = node.Parent + signatures := []*checker.Signature{c.GetSignatureFromDeclaration(declaration)} + writeSignatures(&b, c, signatures, container, isAlias, prefix, symbol) + } else { + signatures := getSignaturesAtLocation(c, symbol, checker.SignatureKindCall, node) + if len(signatures) == 1 { + if d := signatures[0].Declaration(); d != nil && d.Flags&ast.NodeFlagsJSDoc == 0 { + declaration = d + } } - writeSignatures(&b, c, signatures, container, "constructor ", symbol) + writeSignatures(&b, c, signatures, container, isAlias, prefix, symbol) + } + case flags&(ast.SymbolFlagsClass|ast.SymbolFlagsInterface) != 0: + if node.Kind == ast.KindThisKeyword || ast.IsThisInTypeQuery(node) { + b.WriteString("this") + } else if node.Kind == ast.KindConstructorKeyword && (ast.IsConstructorDeclaration(node.Parent) || ast.IsConstructSignatureDeclaration(node.Parent)) { + declaration = node.Parent + signatures := []*checker.Signature{c.GetSignatureFromDeclaration(declaration)} + writeSignatures(&b, c, signatures, container, isAlias, "constructor ", symbol) } else { - b.WriteString(core.IfElse(flags&ast.SymbolFlagsClass != 0, "class ", "interface ")) - b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) - params := c.GetDeclaredTypeOfSymbol(symbol).AsInterfaceType().LocalTypeParameters() - writeTypeParams(&b, c, params) + var signatures []*checker.Signature + if flags&ast.SymbolFlagsClass != 0 && getCallOrNewExpression(node) != nil { + signatures = getSignaturesAtLocation(c, symbol, checker.SignatureKindConstruct, node) + } + if len(signatures) == 1 { + if d := signatures[0].Declaration(); d != nil && d.Flags&ast.NodeFlagsJSDoc == 0 { + declaration = d + } + writeSignatures(&b, c, signatures, container, isAlias, "constructor ", symbol) + } else { + b.WriteString(core.IfElse(flags&ast.SymbolFlagsClass != 0, "class ", "interface ")) + b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) + params := c.GetDeclaredTypeOfSymbol(symbol).AsInterfaceType().LocalTypeParameters() + writeTypeParams(&b, c, params) + } } + if flags&ast.SymbolFlagsInterface != 0 { + declaration = core.Find(symbol.Declarations, ast.IsInterfaceDeclaration) + } + case flags&ast.SymbolFlagsEnum != 0: + b.WriteString("enum ") + b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) + case flags&ast.SymbolFlagsModule != 0: + b.WriteString(core.IfElse(symbol.ValueDeclaration != nil && ast.IsSourceFile(symbol.ValueDeclaration), "module ", "namespace ")) + b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) + case flags&ast.SymbolFlagsTypeParameter != 0: + b.WriteString("(type parameter) ") + tp := c.GetDeclaredTypeOfSymbol(symbol) + b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) + cons := c.GetConstraintOfTypeParameter(tp) + if cons != nil { + b.WriteString(" extends ") + b.WriteString(c.TypeToStringEx(cons, container, typeFormatFlags)) + } + declaration = core.Find(symbol.Declarations, ast.IsTypeParameterDeclaration) + case flags&ast.SymbolFlagsTypeAlias != 0: + b.WriteString("type ") + b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) + writeTypeParams(&b, c, c.GetTypeAliasTypeParameters(symbol)) + if len(symbol.Declarations) != 0 { + b.WriteString(" = ") + b.WriteString(c.TypeToStringEx(c.GetDeclaredTypeOfSymbol(symbol), container, typeFormatFlags|checker.TypeFormatFlagsInTypeAlias)) + } + declaration = core.Find(symbol.Declarations, ast.IsTypeAliasDeclaration) + default: + b.WriteString(c.TypeToStringEx(c.GetTypeOfSymbol(symbol), container, typeFormatFlags)) } - if flags&ast.SymbolFlagsInterface != 0 { - declaration = core.Find(symbol.Declarations, ast.IsInterfaceDeclaration) - } - case flags&ast.SymbolFlagsEnum != 0: - b.WriteString("enum ") - b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) - case flags&ast.SymbolFlagsModule != 0: - b.WriteString(core.IfElse(symbol.ValueDeclaration != nil && ast.IsSourceFile(symbol.ValueDeclaration), "module ", "namespace ")) - b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) - case flags&ast.SymbolFlagsTypeParameter != 0: - b.WriteString("(type parameter) ") - tp := c.GetDeclaredTypeOfSymbol(symbol) - b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) - cons := c.GetConstraintOfTypeParameter(tp) - if cons != nil { - b.WriteString(" extends ") - b.WriteString(c.TypeToStringEx(cons, container, typeFormatFlags)) - } - declaration = core.Find(symbol.Declarations, ast.IsTypeParameterDeclaration) - case flags&ast.SymbolFlagsTypeAlias != 0: - b.WriteString("type ") - b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) - writeTypeParams(&b, c, c.GetTypeAliasTypeParameters(symbol)) - if len(symbol.Declarations) != 0 { - b.WriteString(" = ") - b.WriteString(c.TypeToStringEx(c.GetDeclaredTypeOfSymbol(symbol), container, typeFormatFlags|checker.TypeFormatFlagsInTypeAlias)) + return declaration + } + var writeSymbol func(*ast.Symbol, bool) *ast.Node + writeSymbol = func(symbol *ast.Symbol, isAlias bool) *ast.Node { + var declaration *ast.Node + // Recursively write all meanings of alias + if symbol.Flags&ast.SymbolFlagsAlias != 0 && visitedAliases.AddIfAbsent(symbol) { + if aliasedSymbol := c.GetAliasedSymbol(symbol); aliasedSymbol != c.GetUnknownSymbol() { + declaration = writeSymbol(aliasedSymbol, true /*isAlias*/) + } } - declaration = core.Find(symbol.Declarations, ast.IsTypeAliasDeclaration) - case flags&ast.SymbolFlagsAlias != 0: - b.WriteString("import ") - b.WriteString(c.SymbolToStringEx(symbol, container, ast.SymbolFlagsNone, symbolFormatFlags)) - default: - b.WriteString(c.TypeToStringEx(c.GetTypeOfSymbol(symbol), container, typeFormatFlags)) - } - return b.String(), declaration + // Write the value meaning, if any + declaration = core.OrElse(declaration, writeSymbolMeaning(symbol, ast.SymbolFlagsValue|ast.SymbolFlagsSignature, isAlias)) + // Write the type meaning, if any + declaration = core.OrElse(declaration, writeSymbolMeaning(symbol, ast.SymbolFlagsType&^ast.SymbolFlagsValue, isAlias)) + // Write the namespace meaning, if any + declaration = core.OrElse(declaration, writeSymbolMeaning(symbol, ast.SymbolFlagsNamespace&^ast.SymbolFlagsValue, isAlias)) + // Return the first declaration + return declaration + } + firstDeclaration := writeSymbol(symbol, false /*isAlias*/) + return b.String(), firstDeclaration } func getNodeForQuickInfo(node *ast.Node) *ast.Node { @@ -306,21 +325,6 @@ func getSymbolAtLocationForQuickInfo(c *checker.Checker, node *ast.Node) *ast.Sy return c.GetSymbolAtLocation(node) } -func inConstructorContext(node *ast.Node) bool { - if node.Kind == ast.KindConstructorKeyword { - return true - } - if ast.IsIdentifier(node) { - for ast.IsRightSideOfQualifiedNameOrPropertyAccess(node) { - node = node.Parent - } - if ast.IsNewExpression(node.Parent) { - return true - } - } - return false -} - func getSignaturesAtLocation(c *checker.Checker, symbol *ast.Symbol, kind checker.SignatureKind, node *ast.Node) []*checker.Signature { signatures := c.GetSignaturesOfType(c.GetTypeOfSymbol(symbol), kind) if len(signatures) > 1 || len(signatures) == 1 && len(signatures[0].TypeParameters()) != 0 { @@ -367,10 +371,13 @@ func writeTypeParams(b *strings.Builder, c *checker.Checker, params []*checker.T } } -func writeSignatures(b *strings.Builder, c *checker.Checker, signatures []*checker.Signature, container *ast.Node, prefix string, symbol *ast.Symbol) { +func writeSignatures(b *strings.Builder, c *checker.Checker, signatures []*checker.Signature, container *ast.Node, isAlias bool, prefix string, symbol *ast.Symbol) { for i, sig := range signatures { if i != 0 { b.WriteString("\n") + if isAlias { + b.WriteString("(alias) ") + } } if i == 3 && len(signatures) >= 5 { b.WriteString(fmt.Sprintf("// +%v more overloads", len(signatures)-3)) diff --git a/pkg/ls/languageservice.go b/pkg/ls/languageservice.go index 170817f7..45817d63 100644 --- a/pkg/ls/languageservice.go +++ b/pkg/ls/languageservice.go @@ -8,6 +8,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/ls/lsutil" "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" "github.com/buke/typescript-go-internal/pkg/sourcemap" + "github.com/buke/typescript-go-internal/pkg/tspath" ) type LanguageService struct { @@ -29,6 +30,10 @@ func NewLanguageService( } } +func (l *LanguageService) toPath(fileName string) tspath.Path { + return tspath.ToPath(fileName, l.program.GetCurrentDirectory(), l.UseCaseSensitiveFileNames()) +} + func (l *LanguageService) GetProgram() *compiler.Program { return l.program } diff --git a/pkg/ls/lsconv/converters.go b/pkg/ls/lsconv/converters.go index e65bb99b..6249f176 100644 --- a/pkg/ls/lsconv/converters.go +++ b/pkg/ls/lsconv/converters.go @@ -14,6 +14,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/diagnostics" "github.com/buke/typescript-go-internal/pkg/diagnosticwriter" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" "github.com/buke/typescript-go-internal/pkg/tspath" ) @@ -214,7 +215,7 @@ type diagnosticOptions struct { // DiagnosticToLSPPull converts a diagnostic for pull diagnostics (textDocument/diagnostic) func DiagnosticToLSPPull(ctx context.Context, converters *Converters, diagnostic *ast.Diagnostic, reportStyleChecksAsWarnings bool) *lsproto.Diagnostic { clientCaps := lsproto.GetClientCapabilities(ctx).TextDocument.Diagnostic - return diagnosticToLSP(converters, diagnostic, diagnosticOptions{ + return diagnosticToLSP(ctx, converters, diagnostic, diagnosticOptions{ reportStyleChecksAsWarnings: reportStyleChecksAsWarnings, // !!! get through context UserPreferences relatedInformation: clientCaps.RelatedInformation, tagValueSet: clientCaps.TagSupport.ValueSet, @@ -224,7 +225,7 @@ func DiagnosticToLSPPull(ctx context.Context, converters *Converters, diagnostic // DiagnosticToLSPPush converts a diagnostic for push diagnostics (textDocument/publishDiagnostics) func DiagnosticToLSPPush(ctx context.Context, converters *Converters, diagnostic *ast.Diagnostic) *lsproto.Diagnostic { clientCaps := lsproto.GetClientCapabilities(ctx).TextDocument.PublishDiagnostics - return diagnosticToLSP(converters, diagnostic, diagnosticOptions{ + return diagnosticToLSP(ctx, converters, diagnostic, diagnosticOptions{ relatedInformation: clientCaps.RelatedInformation, tagValueSet: clientCaps.TagSupport.ValueSet, }) @@ -242,7 +243,8 @@ var styleCheckDiagnostics = collections.NewSetFromItems( diagnostics.Not_all_code_paths_return_a_value.Code(), ) -func diagnosticToLSP(converters *Converters, diagnostic *ast.Diagnostic, opts diagnosticOptions) *lsproto.Diagnostic { +func diagnosticToLSP(ctx context.Context, converters *Converters, diagnostic *ast.Diagnostic, opts diagnosticOptions) *lsproto.Diagnostic { + locale := locale.FromContext(ctx) var severity lsproto.DiagnosticSeverity switch diagnostic.Category() { case diagnostics.CategorySuggestion: @@ -268,7 +270,7 @@ func diagnosticToLSP(converters *Converters, diagnostic *ast.Diagnostic, opts di Uri: FileNameToDocumentURI(related.File().FileName()), Range: converters.ToLSPRange(related.File(), related.Loc()), }, - Message: related.Message(), + Message: related.Localize(locale), }) } } @@ -296,19 +298,19 @@ func diagnosticToLSP(converters *Converters, diagnostic *ast.Diagnostic, opts di Integer: ptrTo(diagnostic.Code()), }, Severity: &severity, - Message: messageChainToString(diagnostic), + Message: messageChainToString(diagnostic, locale), Source: ptrTo("ts"), RelatedInformation: ptrToSliceIfNonEmpty(relatedInformation), Tags: ptrToSliceIfNonEmpty(tags), } } -func messageChainToString(diagnostic *ast.Diagnostic) string { +func messageChainToString(diagnostic *ast.Diagnostic, locale locale.Locale) string { if len(diagnostic.MessageChain()) == 0 { - return diagnostic.Message() + return diagnostic.Localize(locale) } var b strings.Builder - diagnosticwriter.WriteFlattenedASTDiagnosticMessage(&b, diagnostic, "\n") + diagnosticwriter.WriteFlattenedASTDiagnosticMessage(&b, diagnostic, "\n", locale) return b.String() } diff --git a/pkg/ls/lsutil/userpreferences.go b/pkg/ls/lsutil/userpreferences.go index 9e6063bd..42379361 100644 --- a/pkg/ls/lsutil/userpreferences.go +++ b/pkg/ls/lsutil/userpreferences.go @@ -20,6 +20,8 @@ func NewDefaultUserPreferences() *UserPreferences { DisplayPartsForJSDoc: true, DisableLineTextInReferences: true, ReportStyleChecksAsWarnings: true, + + ExcludeLibrarySymbolsInNavTo: true, } } @@ -143,13 +145,16 @@ type UserPreferences struct { IncludeInlayFunctionLikeReturnTypeHints bool IncludeInlayEnumMemberValueHints bool + // ------- Symbols ------- + + ExcludeLibrarySymbolsInNavTo bool + // ------- Misc ------- - ExcludeLibrarySymbolsInNavTo bool // !!! - DisableSuggestions bool // !!! - DisableLineTextInReferences bool // !!! - DisplayPartsForJSDoc bool // !!! - ReportStyleChecksAsWarnings bool // !!! If this changes, we need to ask the client to recompute diagnostics + DisableSuggestions bool // !!! + DisableLineTextInReferences bool // !!! + DisplayPartsForJSDoc bool // !!! + ReportStyleChecksAsWarnings bool // !!! If this changes, we need to ask the client to recompute diagnostics } type JsxAttributeCompletionStyle string @@ -380,6 +385,8 @@ func (p *UserPreferences) parseWorker(config map[string]any) { p.parseSuggest(values) case "preferences": p.parsePreferences(values) + case "workspaceSymbols": + p.parseWorkspaceSymbols(values) case "format": // !!! case "tsserver": @@ -516,6 +523,22 @@ func (p *UserPreferences) parseOrganizeImportsPreferences(prefs any) { } } +func (p *UserPreferences) parseWorkspaceSymbols(prefs any) { + symbolPreferences, ok := prefs.(map[string]any) + if !ok { + return + } + for name, value := range symbolPreferences { + switch name { + // !!! scope + case "excludeLibrarySymbols": + p.ExcludeLibrarySymbolsInNavTo = parseBoolWithDefault(value, true) + default: + p.set(name, value) + } + } +} + func parseEnabledBool(v map[string]any) bool { // vscode nested option if enabled, ok := v["enabled"]; ok { @@ -623,7 +646,7 @@ func (p *UserPreferences) set(name string, value any) { case "includeinlayenummembervaluehints": p.IncludeInlayEnumMemberValueHints = parseBoolWithDefault(value, false) case "excludelibrarysymbolsinnavto": - p.ExcludeLibrarySymbolsInNavTo = parseBoolWithDefault(value, false) + p.ExcludeLibrarySymbolsInNavTo = parseBoolWithDefault(value, true) case "disablesuggestions": p.DisableSuggestions = parseBoolWithDefault(value, false) case "disablelinetextinreferences": diff --git a/pkg/ls/source_map.go b/pkg/ls/source_map.go index 376b8395..28ba3100 100644 --- a/pkg/ls/source_map.go +++ b/pkg/ls/source_map.go @@ -5,6 +5,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/debug" "github.com/buke/typescript-go-internal/pkg/ls/lsconv" "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" + "github.com/buke/typescript-go-internal/pkg/outputpaths" "github.com/buke/typescript-go-internal/pkg/sourcemap" "github.com/buke/typescript-go-internal/pkg/tspath" ) @@ -86,3 +87,47 @@ func (l *LanguageService) tryGetSourcePositionWorker( } return documentPos } + +func (l *LanguageService) tryGetGeneratedPosition( + fileName string, + position core.TextPos, +) *sourcemap.DocumentPosition { + newPos := l.tryGetGeneratedPositionWorker(fileName, position) + if newPos != nil { + if _, ok := l.ReadFile(newPos.FileName); !ok { // File doesn't exist + return nil + } + } + return newPos +} + +func (l *LanguageService) tryGetGeneratedPositionWorker( + fileName string, + position core.TextPos, +) *sourcemap.DocumentPosition { + if tspath.IsDeclarationFileName(fileName) { + return nil + } + + program := l.GetProgram() + if program == nil || program.GetSourceFile(fileName) == nil { + return nil + } + + path := l.toPath(fileName) + // If this is source file of project reference source (instead of redirect) there is no generated position + if program.IsSourceFromProjectReference(path) { + return nil + } + + declarationFileName := outputpaths.GetOutputDeclarationFileNameWorker(fileName, program.Options(), program) + positionMapper := l.GetDocumentPositionMapper(declarationFileName) + documentPos := positionMapper.GetGeneratedPosition(&sourcemap.DocumentPosition{FileName: fileName, Pos: int(position)}) + if documentPos == nil { + return nil + } + if newPos := l.tryGetGeneratedPositionWorker(documentPos.FileName, core.TextPos(documentPos.Pos)); newPos != nil { + return newPos + } + return documentPos +} diff --git a/pkg/ls/symbols.go b/pkg/ls/symbols.go index afd5a853..fca82a18 100644 --- a/pkg/ls/symbols.go +++ b/pkg/ls/symbols.go @@ -8,14 +8,16 @@ import ( "unicode/utf8" "github.com/buke/typescript-go-internal/pkg/ast" - "github.com/buke/typescript-go-internal/pkg/collections" + "github.com/buke/typescript-go-internal/pkg/astnav" "github.com/buke/typescript-go-internal/pkg/compiler" "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/ls/lsconv" + "github.com/buke/typescript-go-internal/pkg/ls/lsutil" "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" "github.com/buke/typescript-go-internal/pkg/printer" "github.com/buke/typescript-go-internal/pkg/scanner" "github.com/buke/typescript-go-internal/pkg/stringutil" + "github.com/buke/typescript-go-internal/pkg/tspath" ) func (l *LanguageService) ProvideDocumentSymbols(ctx context.Context, documentURI lsproto.DocumentUri) (lsproto.DocumentSymbolResponse, error) { @@ -238,19 +240,27 @@ type DeclarationInfo struct { matchScore int } -func ProvideWorkspaceSymbols(ctx context.Context, programs []*compiler.Program, converters *lsconv.Converters, query string) (lsproto.WorkspaceSymbolResponse, error) { +func ProvideWorkspaceSymbols( + ctx context.Context, + programs []*compiler.Program, + converters *lsconv.Converters, + preferences *lsutil.UserPreferences, + query string, +) (lsproto.WorkspaceSymbolResponse, error) { + excludeLibrarySymbols := preferences.ExcludeLibrarySymbolsInNavTo // Obtain set of non-declaration source files from all active programs. - var sourceFiles collections.Set[*ast.SourceFile] + sourceFiles := map[tspath.Path]*ast.SourceFile{} for _, program := range programs { for _, sourceFile := range program.SourceFiles() { - if !sourceFile.IsDeclarationFile { - sourceFiles.Add(sourceFile) + if (program.HasTSFile() || !sourceFile.IsDeclarationFile) && + !shouldExcludeFile(sourceFile, program, excludeLibrarySymbols) { + sourceFiles[sourceFile.Path()] = sourceFile } } } // Create DeclarationInfos for all declarations in the source files. var infos []DeclarationInfo - for sourceFile := range sourceFiles.Keys() { + for _, sourceFile := range sourceFiles { if ctx.Err() != nil { return lsproto.SymbolInformationsOrWorkspaceSymbolsOrNull{}, nil } @@ -269,18 +279,33 @@ func ProvideWorkspaceSymbols(ctx context.Context, programs []*compiler.Program, count := min(len(infos), 256) symbols := make([]*lsproto.SymbolInformation, count) for i, info := range infos[0:count] { - node := core.OrElse(ast.GetNameOfDeclaration(info.declaration), info.declaration) + node := info.declaration sourceFile := ast.GetSourceFileOfNode(node) - pos := scanner.SkipTrivia(sourceFile.Text(), node.Pos()) + pos := astnav.GetStartOfNode(node, sourceFile, false /*includeJsDoc*/) + container := getContainerNode(info.declaration) + var containerName *string + if container != nil { + containerName = strPtrTo(ast.GetDeclarationName(container)) + } var symbol lsproto.SymbolInformation symbol.Name = info.name symbol.Kind = getSymbolKindFromNode(info.declaration) symbol.Location = converters.ToLSPLocation(sourceFile, core.NewTextRange(pos, node.End())) + symbol.ContainerName = containerName symbols[i] = &symbol } + return lsproto.SymbolInformationsOrWorkspaceSymbolsOrNull{SymbolInformations: &symbols}, nil } +func shouldExcludeFile(file *ast.SourceFile, program *compiler.Program, excludeLibrarySymbols bool) bool { + return excludeLibrarySymbols && (isInsideNodeModules(file.FileName()) || program.IsLibFile(file)) +} + +func isInsideNodeModules(fileName string) bool { + return strings.Contains(fileName, "/node_modules/") +} + // Return a score for matching `s` against `pattern`. In order to match, `s` must contain each of the characters in // `pattern` in the same order. Upper case characters in `pattern` must match exactly, whereas lower case characters // in `pattern` match either case in `s`. If `s` doesn't match, -1 is returned. Otherwise, the returned score is the @@ -347,6 +372,16 @@ func getSymbolKindFromNode(node *ast.Node) lsproto.SymbolKind { return lsproto.SymbolKindEnumMember case ast.KindTypeParameter: return lsproto.SymbolKindTypeParameter + case ast.KindParameter: + if ast.HasSyntacticModifier(node, ast.ModifierFlagsParameterPropertyModifier) { + return lsproto.SymbolKindProperty + } + return lsproto.SymbolKindVariable + case ast.KindBinaryExpression: + switch ast.GetAssignmentDeclarationKind(node.AsBinaryExpression()) { + case ast.JSDeclarationKindThisProperty, ast.JSDeclarationKindProperty: + return lsproto.SymbolKindProperty + } } return lsproto.SymbolKindVariable } diff --git a/pkg/lsp/lsproto/_generate/generate.mts b/pkg/lsp/lsproto/_generate/generate.mts index a8dbf321..43a78e3a 100644 --- a/pkg/lsp/lsproto/_generate/generate.mts +++ b/pkg/lsp/lsproto/_generate/generate.mts @@ -927,6 +927,14 @@ function generateCode() { writeLine(`\treturn s.TextDocument.Uri`); writeLine(`}`); writeLine(""); + + if (hasTextDocumentPosition(structure)) { + // Generate TextDocumentPosition method + writeLine(`func (s *${structure.name}) TextDocumentPosition() Position {`); + writeLine(`\treturn s.Position`); + writeLine(`}`); + writeLine(""); + } } // Generate UnmarshalJSONFrom method for structure validation @@ -1005,6 +1013,14 @@ function generateCode() { } } + // Helper function to detect if an enum is a bitflag enum + // Hardcoded list of bitflag enums + const bitflagEnums = new Set(["WatchKind"]); + + function isBitflagEnum(enumeration: any): boolean { + return bitflagEnums.has(enumeration.name); + } + // Generate enumerations writeLine("// Enumerations\n"); @@ -1033,6 +1049,8 @@ function generateCode() { const enumValues = enumeration.values.map(value => ({ value: String(value.value), + numericValue: Number(value.value), + name: value.name, identifier: `${enumeration.name}${value.name}`, documentation: value.documentation, deprecated: value.deprecated, @@ -1058,6 +1076,194 @@ function generateCode() { writeLine(")"); writeLine(""); + + // Generate String() method for non-string enums + if (enumeration.type.name !== "string") { + const isBitflag = isBitflagEnum(enumeration); + + if (isBitflag) { + // Generate bitflag-aware String() method using stringer-style efficiency + const sortedValues = [...enumValues].sort((a, b) => a.numericValue - b.numericValue); + const names = sortedValues.map(v => v.name); + const values = sortedValues.map(v => v.numericValue); + + const nameConst = `_${enumeration.name}_name`; + const indexVar = `_${enumeration.name}_index`; + const combinedNames = names.join(""); + + writeLine(`const ${nameConst} = "${combinedNames}"`); + write(`var ${indexVar} = [...]uint16{0`); + let offset = 0; + for (const name of names) { + offset += name.length; + write(`, ${offset}`); + } + writeLine(`}`); + writeLine(""); + + writeLine(`func (e ${enumeration.name}) String() string {`); + writeLine(`\tif e == 0 {`); + writeLine(`\t\treturn "0"`); + writeLine(`\t}`); + writeLine(`\tvar parts []string`); + for (let i = 0; i < values.length; i++) { + writeLine(`\tif e&${values[i]} != 0 {`); + writeLine(`\t\tparts = append(parts, ${nameConst}[${indexVar}[${i}]:${indexVar}[${i + 1}]])`); + writeLine(`\t}`); + } + writeLine(`\tif len(parts) == 0 {`); + writeLine(`\t\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); + writeLine(`\t}`); + writeLine(`\treturn strings.Join(parts, "|")`); + writeLine(`}`); + writeLine(""); + } + else { + // Generate regular String() method using stringer-style approach + // Split values into runs of contiguous values + const sortedValues = [...enumValues].sort((a, b) => a.numericValue - b.numericValue); + + // Split into runs + const runs: Array<{ names: string[]; values: number[]; }> = []; + let currentRun = { names: [sortedValues[0].name], values: [sortedValues[0].numericValue] }; + + for (let i = 1; i < sortedValues.length; i++) { + if (sortedValues[i].numericValue === sortedValues[i - 1].numericValue + 1) { + currentRun.names.push(sortedValues[i].name); + currentRun.values.push(sortedValues[i].numericValue); + } + else { + runs.push(currentRun); + currentRun = { names: [sortedValues[i].name], values: [sortedValues[i].numericValue] }; + } + } + runs.push(currentRun); + + const nameConst = `_${enumeration.name}_name`; + const indexVar = `_${enumeration.name}_index`; + + if (runs.length === 1) { + // Single contiguous run - simple case + const combinedNames = runs[0].names.join(""); + writeLine(`const ${nameConst} = "${combinedNames}"`); + write(`var ${indexVar} = [...]uint16{0`); + let offset = 0; + for (const name of runs[0].names) { + offset += name.length; + write(`, ${offset}`); + } + writeLine(`}`); + writeLine(""); + + const minVal = runs[0].values[0]; + writeLine(`func (e ${enumeration.name}) String() string {`); + writeLine(`\ti := int(e) - ${minVal}`); + // For unsigned types, i can still be negative if e < minVal (due to underflow in conversion) + // So we always need to check both bounds + writeLine(`\tif i < 0 || i >= len(${indexVar})-1 {`); + writeLine(`\t\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); + writeLine(`\t}`); + writeLine(`\treturn ${nameConst}[${indexVar}[i]:${indexVar}[i+1]]`); + writeLine(`}`); + writeLine(""); + } + else if (runs.length <= 10) { + // Multiple runs - use switch statement + let allNames = ""; + const runInfo: Array<{ startOffset: number; endOffset: number; minVal: number; maxVal: number; }> = []; + + for (const run of runs) { + const startOffset = allNames.length; + allNames += run.names.join(""); + const endOffset = allNames.length; + runInfo.push({ + startOffset, + endOffset, + minVal: run.values[0], + maxVal: run.values[run.values.length - 1], + }); + } + + writeLine(`const ${nameConst} = "${allNames}"`); + writeLine(""); + + // Generate index variables for each run + for (let i = 0; i < runs.length; i++) { + write(`var ${indexVar}_${i} = [...]uint16{0`); + let offset = 0; + for (const name of runs[i].names) { + offset += name.length; + write(`, ${offset}`); + } + writeLine(`}`); + } + writeLine(""); + + writeLine(`func (e ${enumeration.name}) String() string {`); + writeLine(`\tswitch {`); + + for (let i = 0; i < runs.length; i++) { + const run = runs[i]; + const info = runInfo[i]; + + if (run.values.length === 1) { + writeLine(`\tcase e == ${run.values[0]}:`); + writeLine(`\t\treturn ${nameConst}[${info.startOffset}:${info.endOffset}]`); + } + else { + if (info.minVal === 0 && baseType.startsWith("uint")) { + writeLine(`\tcase e <= ${info.maxVal}:`); + } + else if (info.minVal === 0) { + writeLine(`\tcase 0 <= e && e <= ${info.maxVal}:`); + } + else { + writeLine(`\tcase ${info.minVal} <= e && e <= ${info.maxVal}:`); + } + writeLine(`\t\ti := int(e) - ${info.minVal}`); + writeLine(`\t\treturn ${nameConst}[${info.startOffset}+${indexVar}_${i}[i]:${info.startOffset}+${indexVar}_${i}[i+1]]`); + } + } + + writeLine(`\tdefault:`); + writeLine(`\t\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); + writeLine(`\t}`); + writeLine(`}`); + writeLine(""); + } + else { + // Too many runs - use a map + let allNames = ""; + const valueMap: Array<{ value: number; startOffset: number; endOffset: number; }> = []; + + for (const run of runs) { + for (let i = 0; i < run.names.length; i++) { + const startOffset = allNames.length; + allNames += run.names[i]; + const endOffset = allNames.length; + valueMap.push({ value: run.values[i], startOffset, endOffset }); + } + } + + writeLine(`const ${nameConst} = "${allNames}"`); + writeLine(""); + writeLine(`var ${enumeration.name}_map = map[${enumeration.name}]string{`); + for (const entry of valueMap) { + writeLine(`\t${entry.value}: ${nameConst}[${entry.startOffset}:${entry.endOffset}],`); + } + writeLine(`}`); + writeLine(""); + + writeLine(`func (e ${enumeration.name}) String() string {`); + writeLine(`\tif str, ok := ${enumeration.name}_map[e]; ok {`); + writeLine(`\t\treturn str`); + writeLine(`\t}`); + writeLine(`\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); + writeLine(`}`); + writeLine(""); + } + } + } } const requestsAndNotifications: (Request | Notification)[] = [...model.requests, ...model.notifications]; @@ -1365,15 +1571,23 @@ function generateCode() { return parts.join(""); } -function hasTextDocumentURI(structure: Structure) { +function hasSomeProp(structure: Structure, propName: string, propTypeName: string) { return structure.properties?.some(p => !p.optional && - p.name === "textDocument" && + p.name === propName && p.type.kind === "reference" && - p.type.name === "TextDocumentIdentifier" + p.type.name === propTypeName ); } +function hasTextDocumentURI(structure: Structure) { + return hasSomeProp(structure, "textDocument", "TextDocumentIdentifier"); +} + +function hasTextDocumentPosition(structure: Structure) { + return hasSomeProp(structure, "position", "Position"); +} + /** * Main function */ diff --git a/pkg/lsp/lsproto/lsp.go b/pkg/lsp/lsproto/lsp.go index 9ba36997..63470c84 100644 --- a/pkg/lsp/lsproto/lsp.go +++ b/pkg/lsp/lsproto/lsp.go @@ -61,6 +61,11 @@ type HasTextDocumentURI interface { TextDocumentURI() DocumentUri } +type HasTextDocumentPosition interface { + HasTextDocumentURI + TextDocumentPosition() Position +} + type URI string // !!! type Method string diff --git a/pkg/lsp/lsproto/lsp_generated.go b/pkg/lsp/lsproto/lsp_generated.go index 3c43d47d..8c5585ee 100644 --- a/pkg/lsp/lsproto/lsp_generated.go +++ b/pkg/lsp/lsproto/lsp_generated.go @@ -33,6 +33,10 @@ func (s *ImplementationParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *ImplementationParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*ImplementationParams)(nil) func (s *ImplementationParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -247,6 +251,10 @@ func (s *TypeDefinitionParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *TypeDefinitionParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*TypeDefinitionParams)(nil) func (s *TypeDefinitionParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -1238,6 +1246,10 @@ func (s *DeclarationParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *DeclarationParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*DeclarationParams)(nil) func (s *DeclarationParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -1703,6 +1715,10 @@ func (s *CallHierarchyPrepareParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *CallHierarchyPrepareParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*CallHierarchyPrepareParams)(nil) func (s *CallHierarchyPrepareParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -2951,6 +2967,10 @@ func (s *LinkedEditingRangeParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *LinkedEditingRangeParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*LinkedEditingRangeParams)(nil) func (s *LinkedEditingRangeParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -3423,6 +3443,10 @@ func (s *MonikerParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *MonikerParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*MonikerParams)(nil) func (s *MonikerParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -3651,6 +3675,10 @@ func (s *TypeHierarchyPrepareParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *TypeHierarchyPrepareParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*TypeHierarchyPrepareParams)(nil) func (s *TypeHierarchyPrepareParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -5348,6 +5376,10 @@ func (s *InlineCompletionParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *InlineCompletionParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*InlineCompletionParams)(nil) func (s *InlineCompletionParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -7266,6 +7298,10 @@ func (s *CompletionParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *CompletionParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*CompletionParams)(nil) func (s *CompletionParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -7829,6 +7865,10 @@ func (s *HoverParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *HoverParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*HoverParams)(nil) func (s *HoverParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -8032,6 +8072,10 @@ func (s *SignatureHelpParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *SignatureHelpParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*SignatureHelpParams)(nil) func (s *SignatureHelpParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -8287,6 +8331,10 @@ func (s *DefinitionParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *DefinitionParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*DefinitionParams)(nil) func (s *DefinitionParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -8433,6 +8481,10 @@ func (s *ReferenceParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *ReferenceParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*ReferenceParams)(nil) func (s *ReferenceParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -8586,6 +8638,10 @@ func (s *DocumentHighlightParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *DocumentHighlightParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*DocumentHighlightParams)(nil) func (s *DocumentHighlightParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -10623,6 +10679,10 @@ func (s *DocumentOnTypeFormattingParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *DocumentOnTypeFormattingParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*DocumentOnTypeFormattingParams)(nil) func (s *DocumentOnTypeFormattingParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -10791,6 +10851,10 @@ func (s *RenameParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *RenameParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*RenameParams)(nil) func (s *RenameParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -10944,6 +11008,10 @@ func (s *PrepareRenameParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *PrepareRenameParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*PrepareRenameParams)(nil) func (s *PrepareRenameParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -11755,6 +11823,10 @@ func (s *TextDocumentPositionParams) TextDocumentURI() DocumentUri { return s.TextDocument.Uri } +func (s *TextDocumentPositionParams) TextDocumentPosition() Position { + return s.Position +} + var _ json.UnmarshalerFrom = (*TextDocumentPositionParams)(nil) func (s *TextDocumentPositionParams) UnmarshalJSONFrom(dec *jsontext.Decoder) error { @@ -21755,6 +21827,29 @@ const ( ErrorCodesUnknownErrorCode ErrorCodes = -32001 ) +const _ErrorCodes_name = "ParseErrorInternalErrorInvalidParamsMethodNotFoundInvalidRequestServerNotInitializedUnknownErrorCode" + +var ( + _ErrorCodes_index_0 = [...]uint16{0, 10} + _ErrorCodes_index_1 = [...]uint16{0, 13, 26, 40, 54} + _ErrorCodes_index_2 = [...]uint16{0, 20, 36} +) + +func (e ErrorCodes) String() string { + switch { + case e == -32700: + return _ErrorCodes_name[0:10] + case -32603 <= e && e <= -32600: + i := int(e) - -32603 + return _ErrorCodes_name[10+_ErrorCodes_index_1[i] : 10+_ErrorCodes_index_1[i+1]] + case -32002 <= e && e <= -32001: + i := int(e) - -32002 + return _ErrorCodes_name[64+_ErrorCodes_index_2[i] : 64+_ErrorCodes_index_2[i+1]] + default: + return fmt.Sprintf("ErrorCodes(%d)", e) + } +} + type LSPErrorCodes int32 const ( @@ -21785,6 +21880,18 @@ const ( LSPErrorCodesRequestCancelled LSPErrorCodes = -32800 ) +const _LSPErrorCodes_name = "RequestFailedServerCancelledContentModifiedRequestCancelled" + +var _LSPErrorCodes_index = [...]uint16{0, 13, 28, 43, 59} + +func (e LSPErrorCodes) String() string { + i := int(e) - -32803 + if i < 0 || i >= len(_LSPErrorCodes_index)-1 { + return fmt.Sprintf("LSPErrorCodes(%d)", e) + } + return _LSPErrorCodes_name[_LSPErrorCodes_index[i]:_LSPErrorCodes_index[i+1]] +} + // A set of predefined range kinds. type FoldingRangeKind string @@ -21829,6 +21936,18 @@ const ( SymbolKindTypeParameter SymbolKind = 26 ) +const _SymbolKind_name = "FileModuleNamespacePackageClassMethodPropertyFieldConstructorEnumInterfaceFunctionVariableConstantStringNumberBooleanArrayObjectKeyNullEnumMemberStructEventOperatorTypeParameter" + +var _SymbolKind_index = [...]uint16{0, 4, 10, 19, 26, 31, 37, 45, 50, 61, 65, 74, 82, 90, 98, 104, 110, 117, 122, 128, 131, 135, 145, 151, 156, 164, 177} + +func (e SymbolKind) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_SymbolKind_index)-1 { + return fmt.Sprintf("SymbolKind(%d)", e) + } + return _SymbolKind_name[_SymbolKind_index[i]:_SymbolKind_index[i+1]] +} + // Symbol tags are extra annotations that tweak the rendering of a symbol. // // Since: 3.16 @@ -21839,6 +21958,18 @@ const ( SymbolTagDeprecated SymbolTag = 1 ) +const _SymbolTag_name = "Deprecated" + +var _SymbolTag_index = [...]uint16{0, 10} + +func (e SymbolTag) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_SymbolTag_index)-1 { + return fmt.Sprintf("SymbolTag(%d)", e) + } + return _SymbolTag_name[_SymbolTag_index[i]:_SymbolTag_index[i+1]] +} + // Moniker uniqueness level to define scope of the moniker. // // Since: 3.16.0 @@ -21884,6 +22015,18 @@ const ( InlayHintKindParameter InlayHintKind = 2 ) +const _InlayHintKind_name = "TypeParameter" + +var _InlayHintKind_index = [...]uint16{0, 4, 13} + +func (e InlayHintKind) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_InlayHintKind_index)-1 { + return fmt.Sprintf("InlayHintKind(%d)", e) + } + return _InlayHintKind_name[_InlayHintKind_index[i]:_InlayHintKind_index[i+1]] +} + // The message type type MessageType uint32 @@ -21904,6 +22047,18 @@ const ( MessageTypeDebug MessageType = 5 ) +const _MessageType_name = "ErrorWarningInfoLogDebug" + +var _MessageType_index = [...]uint16{0, 5, 12, 16, 19, 24} + +func (e MessageType) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_MessageType_index)-1 { + return fmt.Sprintf("MessageType(%d)", e) + } + return _MessageType_name[_MessageType_index[i]:_MessageType_index[i+1]] +} + // Defines how the host (editor) should sync // document changes to the language server. type TextDocumentSyncKind uint32 @@ -21920,6 +22075,18 @@ const ( TextDocumentSyncKindIncremental TextDocumentSyncKind = 2 ) +const _TextDocumentSyncKind_name = "NoneFullIncremental" + +var _TextDocumentSyncKind_index = [...]uint16{0, 4, 8, 19} + +func (e TextDocumentSyncKind) String() string { + i := int(e) - 0 + if i < 0 || i >= len(_TextDocumentSyncKind_index)-1 { + return fmt.Sprintf("TextDocumentSyncKind(%d)", e) + } + return _TextDocumentSyncKind_name[_TextDocumentSyncKind_index[i]:_TextDocumentSyncKind_index[i+1]] +} + // Represents reasons why a text document is saved. type TextDocumentSaveReason uint32 @@ -21933,6 +22100,18 @@ const ( TextDocumentSaveReasonFocusOut TextDocumentSaveReason = 3 ) +const _TextDocumentSaveReason_name = "ManualAfterDelayFocusOut" + +var _TextDocumentSaveReason_index = [...]uint16{0, 6, 16, 24} + +func (e TextDocumentSaveReason) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_TextDocumentSaveReason_index)-1 { + return fmt.Sprintf("TextDocumentSaveReason(%d)", e) + } + return _TextDocumentSaveReason_name[_TextDocumentSaveReason_index[i]:_TextDocumentSaveReason_index[i+1]] +} + // The kind of a completion entry. type CompletionItemKind uint32 @@ -21964,6 +22143,18 @@ const ( CompletionItemKindTypeParameter CompletionItemKind = 25 ) +const _CompletionItemKind_name = "TextMethodFunctionConstructorFieldVariableClassInterfaceModulePropertyUnitValueEnumKeywordSnippetColorFileReferenceFolderEnumMemberConstantStructEventOperatorTypeParameter" + +var _CompletionItemKind_index = [...]uint16{0, 4, 10, 18, 29, 34, 42, 47, 56, 62, 70, 74, 79, 83, 90, 97, 102, 106, 115, 121, 131, 139, 145, 150, 158, 171} + +func (e CompletionItemKind) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_CompletionItemKind_index)-1 { + return fmt.Sprintf("CompletionItemKind(%d)", e) + } + return _CompletionItemKind_name[_CompletionItemKind_index[i]:_CompletionItemKind_index[i+1]] +} + // Completion item tags are extra annotations that tweak the rendering of a completion // item. // @@ -21975,6 +22166,18 @@ const ( CompletionItemTagDeprecated CompletionItemTag = 1 ) +const _CompletionItemTag_name = "Deprecated" + +var _CompletionItemTag_index = [...]uint16{0, 10} + +func (e CompletionItemTag) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_CompletionItemTag_index)-1 { + return fmt.Sprintf("CompletionItemTag(%d)", e) + } + return _CompletionItemTag_name[_CompletionItemTag_index[i]:_CompletionItemTag_index[i+1]] +} + // Defines whether the insert text in a completion item should be interpreted as // plain text or a snippet. type InsertTextFormat uint32 @@ -21993,6 +22196,18 @@ const ( InsertTextFormatSnippet InsertTextFormat = 2 ) +const _InsertTextFormat_name = "PlainTextSnippet" + +var _InsertTextFormat_index = [...]uint16{0, 9, 16} + +func (e InsertTextFormat) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_InsertTextFormat_index)-1 { + return fmt.Sprintf("InsertTextFormat(%d)", e) + } + return _InsertTextFormat_name[_InsertTextFormat_index[i]:_InsertTextFormat_index[i+1]] +} + // How whitespace and indentation is handled during completion // item insertion. // @@ -22016,6 +22231,18 @@ const ( InsertTextModeadjustIndentation InsertTextMode = 2 ) +const _InsertTextMode_name = "asIsadjustIndentation" + +var _InsertTextMode_index = [...]uint16{0, 4, 21} + +func (e InsertTextMode) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_InsertTextMode_index)-1 { + return fmt.Sprintf("InsertTextMode(%d)", e) + } + return _InsertTextMode_name[_InsertTextMode_index[i]:_InsertTextMode_index[i+1]] +} + // A document highlight kind. type DocumentHighlightKind uint32 @@ -22028,6 +22255,18 @@ const ( DocumentHighlightKindWrite DocumentHighlightKind = 3 ) +const _DocumentHighlightKind_name = "TextReadWrite" + +var _DocumentHighlightKind_index = [...]uint16{0, 4, 8, 13} + +func (e DocumentHighlightKind) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_DocumentHighlightKind_index)-1 { + return fmt.Sprintf("DocumentHighlightKind(%d)", e) + } + return _DocumentHighlightKind_name[_DocumentHighlightKind_index[i]:_DocumentHighlightKind_index[i+1]] +} + // A set of predefined code action kinds type CodeActionKind string @@ -22111,6 +22350,18 @@ const ( CodeActionTagLLMGenerated CodeActionTag = 1 ) +const _CodeActionTag_name = "LLMGenerated" + +var _CodeActionTag_index = [...]uint16{0, 12} + +func (e CodeActionTag) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_CodeActionTag_index)-1 { + return fmt.Sprintf("CodeActionTag(%d)", e) + } + return _CodeActionTag_name[_CodeActionTag_index[i]:_CodeActionTag_index[i+1]] +} + type TraceValue string const ( @@ -22228,6 +22479,18 @@ const ( InlineCompletionTriggerKindAutomatic InlineCompletionTriggerKind = 2 ) +const _InlineCompletionTriggerKind_name = "InvokedAutomatic" + +var _InlineCompletionTriggerKind_index = [...]uint16{0, 7, 16} + +func (e InlineCompletionTriggerKind) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_InlineCompletionTriggerKind_index)-1 { + return fmt.Sprintf("InlineCompletionTriggerKind(%d)", e) + } + return _InlineCompletionTriggerKind_name[_InlineCompletionTriggerKind_index[i]:_InlineCompletionTriggerKind_index[i+1]] +} + // A set of predefined position encoding kinds. // // Since: 3.17.0 @@ -22261,6 +22524,18 @@ const ( FileChangeTypeDeleted FileChangeType = 3 ) +const _FileChangeType_name = "CreatedChangedDeleted" + +var _FileChangeType_index = [...]uint16{0, 7, 14, 21} + +func (e FileChangeType) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_FileChangeType_index)-1 { + return fmt.Sprintf("FileChangeType(%d)", e) + } + return _FileChangeType_name[_FileChangeType_index[i]:_FileChangeType_index[i+1]] +} + type WatchKind uint32 const ( @@ -22272,6 +22547,30 @@ const ( WatchKindDelete WatchKind = 4 ) +const _WatchKind_name = "CreateChangeDelete" + +var _WatchKind_index = [...]uint16{0, 6, 12, 18} + +func (e WatchKind) String() string { + if e == 0 { + return "0" + } + var parts []string + if e&1 != 0 { + parts = append(parts, _WatchKind_name[_WatchKind_index[0]:_WatchKind_index[1]]) + } + if e&2 != 0 { + parts = append(parts, _WatchKind_name[_WatchKind_index[1]:_WatchKind_index[2]]) + } + if e&4 != 0 { + parts = append(parts, _WatchKind_name[_WatchKind_index[2]:_WatchKind_index[3]]) + } + if len(parts) == 0 { + return fmt.Sprintf("WatchKind(%d)", e) + } + return strings.Join(parts, "|") +} + // The diagnostic's severity. type DiagnosticSeverity uint32 @@ -22286,6 +22585,18 @@ const ( DiagnosticSeverityHint DiagnosticSeverity = 4 ) +const _DiagnosticSeverity_name = "ErrorWarningInformationHint" + +var _DiagnosticSeverity_index = [...]uint16{0, 5, 12, 23, 27} + +func (e DiagnosticSeverity) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_DiagnosticSeverity_index)-1 { + return fmt.Sprintf("DiagnosticSeverity(%d)", e) + } + return _DiagnosticSeverity_name[_DiagnosticSeverity_index[i]:_DiagnosticSeverity_index[i+1]] +} + // The diagnostic tags. // // Since: 3.15.0 @@ -22303,6 +22614,18 @@ const ( DiagnosticTagDeprecated DiagnosticTag = 2 ) +const _DiagnosticTag_name = "UnnecessaryDeprecated" + +var _DiagnosticTag_index = [...]uint16{0, 11, 21} + +func (e DiagnosticTag) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_DiagnosticTag_index)-1 { + return fmt.Sprintf("DiagnosticTag(%d)", e) + } + return _DiagnosticTag_name[_DiagnosticTag_index[i]:_DiagnosticTag_index[i+1]] +} + // How a completion was triggered type CompletionTriggerKind uint32 @@ -22317,6 +22640,18 @@ const ( CompletionTriggerKindTriggerForIncompleteCompletions CompletionTriggerKind = 3 ) +const _CompletionTriggerKind_name = "InvokedTriggerCharacterTriggerForIncompleteCompletions" + +var _CompletionTriggerKind_index = [...]uint16{0, 7, 23, 54} + +func (e CompletionTriggerKind) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_CompletionTriggerKind_index)-1 { + return fmt.Sprintf("CompletionTriggerKind(%d)", e) + } + return _CompletionTriggerKind_name[_CompletionTriggerKind_index[i]:_CompletionTriggerKind_index[i+1]] +} + // Defines how values from a set of defaults and an individual item will be // merged. // @@ -22334,6 +22669,18 @@ const ( ApplyKindMerge ApplyKind = 2 ) +const _ApplyKind_name = "ReplaceMerge" + +var _ApplyKind_index = [...]uint16{0, 7, 12} + +func (e ApplyKind) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_ApplyKind_index)-1 { + return fmt.Sprintf("ApplyKind(%d)", e) + } + return _ApplyKind_name[_ApplyKind_index[i]:_ApplyKind_index[i+1]] +} + // How a signature help was triggered. // // Since: 3.15.0 @@ -22348,6 +22695,18 @@ const ( SignatureHelpTriggerKindContentChange SignatureHelpTriggerKind = 3 ) +const _SignatureHelpTriggerKind_name = "InvokedTriggerCharacterContentChange" + +var _SignatureHelpTriggerKind_index = [...]uint16{0, 7, 23, 36} + +func (e SignatureHelpTriggerKind) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_SignatureHelpTriggerKind_index)-1 { + return fmt.Sprintf("SignatureHelpTriggerKind(%d)", e) + } + return _SignatureHelpTriggerKind_name[_SignatureHelpTriggerKind_index[i]:_SignatureHelpTriggerKind_index[i+1]] +} + // The reason why code actions were requested. // // Since: 3.17.0 @@ -22363,6 +22722,18 @@ const ( CodeActionTriggerKindAutomatic CodeActionTriggerKind = 2 ) +const _CodeActionTriggerKind_name = "InvokedAutomatic" + +var _CodeActionTriggerKind_index = [...]uint16{0, 7, 16} + +func (e CodeActionTriggerKind) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_CodeActionTriggerKind_index)-1 { + return fmt.Sprintf("CodeActionTriggerKind(%d)", e) + } + return _CodeActionTriggerKind_name[_CodeActionTriggerKind_index[i]:_CodeActionTriggerKind_index[i+1]] +} + // A pattern kind describing if a glob pattern matches a file a folder or // both. // @@ -22388,6 +22759,18 @@ const ( NotebookCellKindCode NotebookCellKind = 2 ) +const _NotebookCellKind_name = "MarkupCode" + +var _NotebookCellKind_index = [...]uint16{0, 6, 10} + +func (e NotebookCellKind) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_NotebookCellKind_index)-1 { + return fmt.Sprintf("NotebookCellKind(%d)", e) + } + return _NotebookCellKind_name[_NotebookCellKind_index[i]:_NotebookCellKind_index[i+1]] +} + type ResourceOperationKind string const ( @@ -22425,6 +22808,18 @@ const ( PrepareSupportDefaultBehaviorIdentifier PrepareSupportDefaultBehavior = 1 ) +const _PrepareSupportDefaultBehavior_name = "Identifier" + +var _PrepareSupportDefaultBehavior_index = [...]uint16{0, 10} + +func (e PrepareSupportDefaultBehavior) String() string { + i := int(e) - 1 + if i < 0 || i >= len(_PrepareSupportDefaultBehavior_index)-1 { + return fmt.Sprintf("PrepareSupportDefaultBehavior(%d)", e) + } + return _PrepareSupportDefaultBehavior_name[_PrepareSupportDefaultBehavior_index[i]:_PrepareSupportDefaultBehavior_index[i+1]] +} + type TokenFormat string const ( diff --git a/pkg/lsp/server.go b/pkg/lsp/server.go index 1c9879d4..c21f204f 100644 --- a/pkg/lsp/server.go +++ b/pkg/lsp/server.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "iter" "runtime/debug" "slices" "sync" @@ -12,9 +13,11 @@ import ( "time" "github.com/go-json-experiment/json" + "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/jsonutil" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/ls" "github.com/buke/typescript-go-internal/pkg/ls/lsconv" "github.com/buke/typescript-go-internal/pkg/ls/lsutil" @@ -25,7 +28,6 @@ import ( "github.com/buke/typescript-go-internal/pkg/tspath" "github.com/buke/typescript-go-internal/pkg/vfs" "golang.org/x/sync/errgroup" - "golang.org/x/text/language" ) type ServerOptions struct { @@ -39,17 +41,27 @@ type ServerOptions struct { TypingsLocation string ParseCache *project.ParseCache NpmInstall func(cwd string, args []string) ([]byte, error) + + // Test options + Client project.Client + Logger logging.Logger } func NewServer(opts *ServerOptions) *Server { if opts.Cwd == "" { panic("Cwd is required") } + var logger logging.Logger + if opts.Logger != nil { + logger = opts.Logger + } else { + logger = logging.NewLogger(opts.Err) + } return &Server{ r: opts.In, w: opts.Out, stderr: opts.Err, - logger: logging.NewLogger(opts.Err), + logger: logger, requestQueue: make(chan *lsproto.RequestMessage, 100), outgoingQueue: make(chan *lsproto.Message, 100), pendingClientRequests: make(map[lsproto.ID]pendingClientRequest), @@ -60,6 +72,7 @@ func NewServer(opts *ServerOptions) *Server { typingsLocation: opts.TypingsLocation, parseCache: opts.ParseCache, npmInstall: opts.NpmInstall, + client: opts.Client, } } @@ -147,7 +160,7 @@ type Server struct { initializeParams *lsproto.InitializeParams clientCapabilities lsproto.ResolvedClientCapabilities positionEncoding lsproto.PositionEncodingKind - locale language.Tag + locale locale.Locale watchEnabled bool watcherID atomic.Uint32 @@ -155,6 +168,9 @@ type Server struct { session *project.Session + // Test options for initializing session + client project.Client + // !!! temporary; remove when we have `handleDidChangeConfiguration`/implicit project config support compilerOptionsForInferredProjects *core.CompilerOptions // parseCache can be passed in so separate tests can share ASTs @@ -163,6 +179,8 @@ type Server struct { npmInstall func(cwd string, args []string) ([]byte, error) } +func (s *Server) Session() *project.Session { return s.session } + // WatchFiles implements project.Client. func (s *Server) WatchFiles(ctx context.Context, id project.WatcherID, watchers []*lsproto.FileSystemWatcher) error { _, err := sendClientRequest(ctx, s, lsproto.ClientRegisterCapabilityInfo, &lsproto.RegistrationParams{ @@ -347,7 +365,7 @@ func (s *Server) dispatchLoop(ctx context.Context) error { case <-ctx.Done(): return ctx.Err() case req := <-s.requestQueue: - requestCtx := core.WithLocale(ctx, s.locale) + requestCtx := locale.WithLocale(ctx, s.locale) if req.ID != nil { var cancel context.CancelFunc requestCtx, cancel = context.WithCancel(core.WithRequestID(requestCtx, req.ID.String())) @@ -489,18 +507,20 @@ var handlers = sync.OnceValue(func() handlerMap { registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentDefinitionInfo, (*Server).handleDefinition) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentTypeDefinitionInfo, (*Server).handleTypeDefinition) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentCompletionInfo, (*Server).handleCompletion) - registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentReferencesInfo, (*Server).handleReferences) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentImplementationInfo, (*Server).handleImplementations) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentSignatureHelpInfo, (*Server).handleSignatureHelp) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentFormattingInfo, (*Server).handleDocumentFormat) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentRangeFormattingInfo, (*Server).handleDocumentRangeFormat) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentOnTypeFormattingInfo, (*Server).handleDocumentOnTypeFormat) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentDocumentSymbolInfo, (*Server).handleDocumentSymbol) - registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentRenameInfo, (*Server).handleRename) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentDocumentHighlightInfo, (*Server).handleDocumentHighlight) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentSelectionRangeInfo, (*Server).handleSelectionRange) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentInlayHintInfo, (*Server).handleInlayHint) registerLanguageServiceDocumentRequestHandler(handlers, lsproto.TextDocumentCodeActionInfo, (*Server).handleCodeAction) + + registerMultiProjectReferenceRequestHandler(handlers, lsproto.TextDocumentReferencesInfo, (*Server).handleReferences, combineReferences) + registerMultiProjectReferenceRequestHandler(handlers, lsproto.TextDocumentRenameInfo, (*Server).handleRename, combineRenameResponse) + registerRequestHandler(handlers, lsproto.WorkspaceSymbolInfo, (*Server).handleWorkspaceSymbol) registerRequestHandler(handlers, lsproto.CompletionItemResolveInfo, (*Server).handleCompletionItemResolve) @@ -576,6 +596,243 @@ func registerLanguageServiceDocumentRequestHandler[Req lsproto.HasTextDocumentUR } } +type projectAndTextDocumentPosition struct { + project *project.Project + ls *ls.LanguageService + Uri lsproto.DocumentUri + Position lsproto.Position + forOriginalLocation bool +} + +type response[Resp any] struct { + complete bool + result Resp + forOriginalLocation bool +} + +func registerMultiProjectReferenceRequestHandler[Req lsproto.HasTextDocumentPosition, Resp any]( + handlers handlerMap, + info lsproto.RequestInfo[Req, Resp], + fn func(*Server, context.Context, *ls.LanguageService, Req, *ast.Node, []*ls.SymbolAndEntries) (Resp, error), + combineResults func(iter.Seq[Resp]) Resp, +) { + handlers[info.Method] = func(s *Server, ctx context.Context, req *lsproto.RequestMessage) error { + var params Req + // Ignore empty params. + if req.Params != nil { + params = req.Params.(Req) + } + // !!! sheetal: multiple projects that contain the file through symlinks + defaultProject, defaultLs, allProjects, err := s.session.GetLanguageServiceAndProjectsForFile(ctx, params.TextDocumentURI()) + if err != nil { + return err + } + defer s.recover(req) + + var results collections.SyncMap[tspath.Path, *response[Resp]] + var defaultDefinition *ls.NonLocalDefinition + canSearchProject := func(project *project.Project) bool { + _, searched := results.Load(project.Id()) + return !searched + } + wg := core.NewWorkGroup(false) + var errMu sync.Mutex + var enqueueItem func(item projectAndTextDocumentPosition) + enqueueItem = func(item projectAndTextDocumentPosition) { + var response response[Resp] + if _, loaded := results.LoadOrStore(item.project.Id(), &response); loaded { + return + } + wg.Queue(func() { + if ctx.Err() != nil { + return + } + defer s.recover(req) + // Process the item + ls := item.ls + if ls == nil { + // Get it now + ls = s.session.GetLanguageServiceForProjectWithFile(ctx, item.project, item.Uri) + if ls == nil { + return + } + } + originalNode, symbolsAndEntries, ok := ls.ProvideSymbolsAndEntries(ctx, item.Uri, item.Position, info.Method == lsproto.MethodTextDocumentRename) + if ok { + for _, entry := range symbolsAndEntries { + // Find the default definition that can be in another project + // Later we will use this load ancestor tree that references this location and expand search + if item.project == defaultProject && defaultDefinition == nil { + defaultDefinition = ls.GetNonLocalDefinition(ctx, entry) + } + ls.ForEachOriginalDefinitionLocation(ctx, entry, func(uri lsproto.DocumentUri, position lsproto.Position) { + // Get default configured project for this file + defProjects, errProjects := s.session.GetProjectsForFile(ctx, uri) + if errProjects != nil { + return + } + for _, defProject := range defProjects { + // Optimization: don't enqueue if will be discarded + if canSearchProject(defProject) { + enqueueItem(projectAndTextDocumentPosition{ + project: defProject, + Uri: uri, + Position: position, + forOriginalLocation: true, + }) + } + } + }) + } + } + + if result, errSearch := fn(s, ctx, ls, params, originalNode, symbolsAndEntries); errSearch == nil { + response.complete = true + response.result = result + response.forOriginalLocation = item.forOriginalLocation + } else { + errMu.Lock() + defer errMu.Unlock() + if err != nil { + err = errSearch + } + } + }) + } + + // Initial set of projects and locations in the queue, starting with default project + enqueueItem(projectAndTextDocumentPosition{ + project: defaultProject, + ls: defaultLs, + Uri: params.TextDocumentURI(), + Position: params.TextDocumentPosition(), + }) + for _, project := range allProjects { + if project != defaultProject { + enqueueItem(projectAndTextDocumentPosition{ + project: project, + // TODO!! symlinks need to change the URI + Uri: params.TextDocumentURI(), + Position: params.TextDocumentPosition(), + }) + } + } + + getResultsIterator := func() iter.Seq[Resp] { + return func(yield func(Resp) bool) { + var seenProjects collections.SyncSet[tspath.Path] + if response, loaded := results.Load(defaultProject.Id()); loaded && response.complete { + if !yield(response.result) { + return + } + } + seenProjects.Add(defaultProject.Id()) + for _, project := range allProjects { + if seenProjects.AddIfAbsent(project.Id()) { + if response, loaded := results.Load(project.Id()); loaded && response.complete { + if !yield(response.result) { + return + } + } + } + } + // Prefer the searches from locations for default definition + results.Range(func(key tspath.Path, response *response[Resp]) bool { + if !response.forOriginalLocation && seenProjects.AddIfAbsent(key) && response.complete { + return yield(response.result) + } + return true + }) + // Then the searches from original locations + results.Range(func(key tspath.Path, response *response[Resp]) bool { + if response.forOriginalLocation && seenProjects.AddIfAbsent(key) && response.complete { + return yield(response.result) + } + return true + }) + } + } + + // Outer loop - to complete work if more is added after completing existing queue + for { + // Process existing known projects first + wg.RunAndWait() + if ctx.Err() != nil { + return ctx.Err() + } + // No need to use mu here since we are not in parallel at this point + if err != nil { + return err + } + + wg = core.NewWorkGroup(false) + hasMoreWork := false + if defaultDefinition != nil { + requestedProjectTrees := make(map[tspath.Path]struct{}) + results.Range(func(key tspath.Path, response *response[Resp]) bool { + if response.complete { + requestedProjectTrees[key] = struct{}{} + } + return true + }) + + // Load more projects based on default definition found + for _, loadedProject := range s.session.GetSnapshotLoadingProjectTree(ctx, requestedProjectTrees).ProjectCollection.Projects() { + if ctx.Err() != nil { + return ctx.Err() + } + + // Can loop forever without this (enqueue here, dequeue above, repeat) + if !canSearchProject(loadedProject) || loadedProject.GetProgram() == nil { + continue + } + + // Enqueue the project and location for further processing + if loadedProject.HasFile(defaultDefinition.TextDocumentURI().FileName()) { + enqueueItem(projectAndTextDocumentPosition{ + project: loadedProject, + Uri: defaultDefinition.TextDocumentURI(), + Position: defaultDefinition.TextDocumentPosition(), + }) + hasMoreWork = true + } else if sourcePos := defaultDefinition.GetSourcePosition(); sourcePos != nil && loadedProject.HasFile(sourcePos.TextDocumentURI().FileName()) { + enqueueItem(projectAndTextDocumentPosition{ + project: loadedProject, + Uri: sourcePos.TextDocumentURI(), + Position: sourcePos.TextDocumentPosition(), + }) + hasMoreWork = true + } else if generatedPos := defaultDefinition.GetGeneratedPosition(); generatedPos != nil && loadedProject.HasFile(generatedPos.TextDocumentURI().FileName()) { + enqueueItem(projectAndTextDocumentPosition{ + project: loadedProject, + Uri: generatedPos.TextDocumentURI(), + Position: generatedPos.TextDocumentPosition(), + }) + hasMoreWork = true + } + } + } + if !hasMoreWork { + break + } + } + + var resp Resp + if results.Size() > 1 { + resp = combineResults(getResultsIterator()) + } else { + // Single result, return that directly + for value := range getResultsIterator() { + resp = value + break + } + } + + s.sendResult(req.ID, resp) + return nil + } +} + func (s *Server) recover(req *lsproto.RequestMessage) { if r := recover(); r != nil { stack := debug.Stack() @@ -609,11 +866,7 @@ func (s *Server) handleInitialize(ctx context.Context, params *lsproto.Initializ } if s.initializeParams.Locale != nil { - locale, err := language.Parse(*s.initializeParams.Locale) - if err != nil { - return nil, err - } - s.locale = locale + s.locale, _ = locale.Parse(*s.initializeParams.Locale) } if s.initializeParams.Trace != nil && *s.initializeParams.Trace == "verbose" { @@ -742,6 +995,7 @@ func (s *Server) handleInitialized(ctx context.Context, params *lsproto.Initiali LoggingEnabled: true, DebounceDelay: 500 * time.Millisecond, PushDiagnosticsEnabled: !disablePushDiagnostics, + Locale: s.locale, }, FS: s.fs, Logger: s.logger, @@ -875,9 +1129,25 @@ func (s *Server) handleTypeDefinition(ctx context.Context, ls *ls.LanguageServic return ls.ProvideTypeDefinition(ctx, params.TextDocument.Uri, params.Position) } -func (s *Server) handleReferences(ctx context.Context, ls *ls.LanguageService, params *lsproto.ReferenceParams) (lsproto.ReferencesResponse, error) { +func (s *Server) handleReferences(ctx context.Context, ls *ls.LanguageService, params *lsproto.ReferenceParams, originalNode *ast.Node, symbolAndEntries []*ls.SymbolAndEntries) (lsproto.ReferencesResponse, error) { // findAllReferences - return ls.ProvideReferences(ctx, params) + return ls.ProvideReferencesFromSymbolAndEntries(ctx, params, originalNode, symbolAndEntries) +} + +func combineReferences(results iter.Seq[lsproto.ReferencesResponse]) lsproto.ReferencesResponse { + var combined []lsproto.Location + var seenLocations collections.Set[lsproto.Location] + for resp := range results { + if resp.Locations != nil { + for _, loc := range *resp.Locations { + if !seenLocations.Has(loc) { + seenLocations.Add(loc) + combined = append(combined, loc) + } + } + } + } + return lsproto.LocationsOrNull{Locations: &combined} } func (s *Server) handleImplementations(ctx context.Context, ls *ls.LanguageService, params *lsproto.ImplementationParams) (lsproto.ImplementationResponse, error) { @@ -936,19 +1206,63 @@ func (s *Server) handleDocumentOnTypeFormat(ctx context.Context, ls *ls.Language } func (s *Server) handleWorkspaceSymbol(ctx context.Context, params *lsproto.WorkspaceSymbolParams, reqMsg *lsproto.RequestMessage) (lsproto.WorkspaceSymbolResponse, error) { - snapshot, release := s.session.Snapshot() - defer release() + snapshot := s.session.GetSnapshotLoadingProjectTree(ctx, nil) defer s.recover(reqMsg) + programs := core.Map(snapshot.ProjectCollection.Projects(), (*project.Project).GetProgram) - return ls.ProvideWorkspaceSymbols(ctx, programs, snapshot.Converters(), params.Query) + return ls.ProvideWorkspaceSymbols( + ctx, + programs, + snapshot.Converters(), + snapshot.UserPreferences(), + params.Query) } func (s *Server) handleDocumentSymbol(ctx context.Context, ls *ls.LanguageService, params *lsproto.DocumentSymbolParams) (lsproto.DocumentSymbolResponse, error) { return ls.ProvideDocumentSymbols(ctx, params.TextDocument.Uri) } -func (s *Server) handleRename(ctx context.Context, ls *ls.LanguageService, params *lsproto.RenameParams) (lsproto.RenameResponse, error) { - return ls.ProvideRename(ctx, params) +func (s *Server) handleRename(ctx context.Context, ls *ls.LanguageService, params *lsproto.RenameParams, originalNode *ast.Node, symbolAndEntries []*ls.SymbolAndEntries) (lsproto.RenameResponse, error) { + return ls.ProvideRenameFromSymbolAndEntries(ctx, params, originalNode, symbolAndEntries) +} + +func combineRenameResponse(results iter.Seq[lsproto.RenameResponse]) lsproto.RenameResponse { + combined := make(map[lsproto.DocumentUri][]*lsproto.TextEdit) + seenChanges := make(map[lsproto.DocumentUri]*collections.Set[lsproto.Range]) + // !!! this is not used any more so we will skip this part of deduplication and combining + // DocumentChanges *[]TextDocumentEditOrCreateFileOrRenameFileOrDeleteFile `json:"documentChanges,omitzero"` + // ChangeAnnotations *map[string]*ChangeAnnotation `json:"changeAnnotations,omitzero"` + + for resp := range results { + if resp.WorkspaceEdit != nil && resp.WorkspaceEdit.Changes != nil { + for doc, changes := range *resp.WorkspaceEdit.Changes { + seenSet, ok := seenChanges[doc] + if !ok { + seenSet = &collections.Set[lsproto.Range]{} + seenChanges[doc] = seenSet + } + changesForDoc, exists := combined[doc] + if !exists { + changesForDoc = []*lsproto.TextEdit{} + } + for _, change := range changes { + if !seenSet.Has(change.Range) { + seenSet.Add(change.Range) + changesForDoc = append(changesForDoc, change) + } + } + combined[doc] = changesForDoc + } + } + } + if len(combined) > 0 { + return lsproto.RenameResponse{ + WorkspaceEdit: &lsproto.WorkspaceEdit{ + Changes: &combined, + }, + } + } + return lsproto.RenameResponse{} } func (s *Server) handleDocumentHighlight(ctx context.Context, ls *ls.LanguageService, params *lsproto.DocumentHighlightParams) (lsproto.DocumentHighlightResponse, error) { diff --git a/pkg/module/resolver.go b/pkg/module/resolver.go index a7d00ffc..5c88f2ad 100644 --- a/pkg/module/resolver.go +++ b/pkg/module/resolver.go @@ -42,16 +42,21 @@ func unresolved() *resolved { type resolutionKindSpecificLoader = func(extensions extensions, candidate string, onlyRecordFailures bool) *resolved type tracer struct { - traces []string + traces []DiagAndArgs } -func (t *tracer) write(msg string) { +type DiagAndArgs struct { + Message *diagnostics.Message + Args []any +} + +func (t *tracer) write(diag *diagnostics.Message, args ...any) { if t != nil { - t.traces = append(t.traces, msg) + t.traces = append(t.traces, DiagAndArgs{Message: diag, Args: args}) } } -func (t *tracer) getTraces() []string { +func (t *tracer) getTraces() []DiagAndArgs { if t != nil { return t.traces } @@ -192,7 +197,7 @@ func (r *Resolver) GetPackageJsonScopeIfApplicable(path string) *packagejson.Inf func (r *tracer) traceResolutionUsingProjectReference(redirectedReference ResolvedProjectReference) { if redirectedReference != nil && redirectedReference.CompilerOptions() != nil { - r.write(diagnostics.Using_compiler_options_of_project_reference_redirect_0.Format(redirectedReference.ConfigName())) + r.write(diagnostics.Using_compiler_options_of_project_reference_redirect_0, redirectedReference.ConfigName()) } } @@ -201,7 +206,7 @@ func (r *Resolver) ResolveTypeReferenceDirective( containingFile string, resolutionMode core.ResolutionMode, redirectedReference ResolvedProjectReference, -) (*ResolvedTypeReferenceDirective, []string) { +) (*ResolvedTypeReferenceDirective, []DiagAndArgs) { traceBuilder := r.newTraceBuilder() compilerOptions := GetCompilerOptionsWithRedirect(r.compilerOptions, redirectedReference) @@ -209,7 +214,7 @@ func (r *Resolver) ResolveTypeReferenceDirective( typeRoots, fromConfig := compilerOptions.GetEffectiveTypeRoots(r.host.GetCurrentDirectory()) if traceBuilder != nil { - traceBuilder.write(diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2.Format(typeReferenceDirectiveName, containingFile, strings.Join(typeRoots, ","))) + traceBuilder.write(diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, strings.Join(typeRoots, ",")) traceBuilder.traceResolutionUsingProjectReference(redirectedReference) } @@ -222,11 +227,11 @@ func (r *Resolver) ResolveTypeReferenceDirective( return result, traceBuilder.getTraces() } -func (r *Resolver) ResolveModuleName(moduleName string, containingFile string, resolutionMode core.ResolutionMode, redirectedReference ResolvedProjectReference) (*ResolvedModule, []string) { +func (r *Resolver) ResolveModuleName(moduleName string, containingFile string, resolutionMode core.ResolutionMode, redirectedReference ResolvedProjectReference) (*ResolvedModule, []DiagAndArgs) { traceBuilder := r.newTraceBuilder() compilerOptions := GetCompilerOptionsWithRedirect(r.compilerOptions, redirectedReference) if traceBuilder != nil { - traceBuilder.write(diagnostics.Resolving_module_0_from_1.Format(moduleName, containingFile)) + traceBuilder.write(diagnostics.Resolving_module_0_from_1, moduleName, containingFile) traceBuilder.traceResolutionUsingProjectReference(redirectedReference) } containingDirectory := tspath.GetDirectoryPath(containingFile) @@ -234,11 +239,11 @@ func (r *Resolver) ResolveModuleName(moduleName string, containingFile string, r moduleResolution := compilerOptions.GetModuleResolutionKind() if compilerOptions.ModuleResolution != moduleResolution { if traceBuilder != nil { - traceBuilder.write(diagnostics.Module_resolution_kind_is_not_specified_using_0.Format(moduleResolution.String())) + traceBuilder.write(diagnostics.Module_resolution_kind_is_not_specified_using_0, moduleResolution.String()) } } else { if traceBuilder != nil { - traceBuilder.write(diagnostics.Explicitly_specified_module_resolution_kind_Colon_0.Format(moduleResolution.String())) + traceBuilder.write(diagnostics.Explicitly_specified_module_resolution_kind_Colon_0, moduleResolution.String()) } } @@ -254,12 +259,12 @@ func (r *Resolver) ResolveModuleName(moduleName string, containingFile string, r if traceBuilder != nil { if result.IsResolved() { if result.PackageId.Name != "" { - traceBuilder.write(diagnostics.Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2.Format(moduleName, result.ResolvedFileName, result.PackageId.String())) + traceBuilder.write(diagnostics.Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2, moduleName, result.ResolvedFileName, result.PackageId.String()) } else { - traceBuilder.write(diagnostics.Module_name_0_was_successfully_resolved_to_1.Format(moduleName, result.ResolvedFileName)) + traceBuilder.write(diagnostics.Module_name_0_was_successfully_resolved_to_1, moduleName, result.ResolvedFileName) } } else { - traceBuilder.write(diagnostics.Module_name_0_was_not_resolved.Format(moduleName)) + traceBuilder.write(diagnostics.Module_name_0_was_not_resolved, moduleName) } } @@ -284,7 +289,7 @@ func (r *Resolver) tryResolveFromTypingsLocation(moduleName string, containingDi traceBuilder, ) if traceBuilder != nil { - traceBuilder.write(diagnostics.Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2.Format(r.projectName, moduleName, r.typingsLocation)) + traceBuilder.write(diagnostics.Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2, r.projectName, moduleName, r.typingsLocation) } globalResolved := state.loadModuleFromImmediateNodeModulesDirectory(extensionsDeclaration, r.typingsLocation, false) if globalResolved == nil { @@ -307,20 +312,20 @@ func (r *Resolver) resolveConfig(moduleName string, containingFile string) *Reso func (r *tracer) traceTypeReferenceDirectiveResult(typeReferenceDirectiveName string, result *ResolvedTypeReferenceDirective) { if !result.IsResolved() { - r.write(diagnostics.Type_reference_directive_0_was_not_resolved.Format(typeReferenceDirectiveName)) + r.write(diagnostics.Type_reference_directive_0_was_not_resolved, typeReferenceDirectiveName) } else if result.PackageId.Name != "" { - r.write(diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3.Format( + r.write(diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3, typeReferenceDirectiveName, result.ResolvedFileName, result.PackageId.String(), result.Primary, - )) + ) } else { - r.write(diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2.Format( + r.write(diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2, typeReferenceDirectiveName, result.ResolvedFileName, result.Primary, - )) + ) } } @@ -328,13 +333,13 @@ func (r *resolutionState) resolveTypeReferenceDirective(typeRoots []string, from // Primary lookup if len(typeRoots) > 0 { if r.tracer != nil { - r.tracer.write(diagnostics.Resolving_with_primary_search_path_0.Format(strings.Join(typeRoots, ", "))) + r.tracer.write(diagnostics.Resolving_with_primary_search_path_0, strings.Join(typeRoots, ", ")) } for _, typeRoot := range typeRoots { candidate := r.getCandidateFromTypeRoot(typeRoot) directoryExists := r.resolver.host.FS().DirectoryExists(candidate) if !directoryExists && r.tracer != nil { - r.tracer.write(diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it.Format(typeRoot)) + r.tracer.write(diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, typeRoot) } if fromConfig { // Custom typeRoots resolve as file or directory just like we do modules @@ -351,14 +356,14 @@ func (r *resolutionState) resolveTypeReferenceDirective(typeRoots []string, from } } } else if r.tracer != nil { - r.tracer.write(diagnostics.Root_directory_cannot_be_determined_skipping_primary_search_paths.Format()) + r.tracer.write(diagnostics.Root_directory_cannot_be_determined_skipping_primary_search_paths) } // Secondary lookup var resolved *resolved if !fromConfig || !fromInferredTypesContainingFile { if r.tracer != nil { - r.tracer.write(diagnostics.Looking_up_in_node_modules_folder_initial_location_0.Format(r.containingDirectory)) + r.tracer.write(diagnostics.Looking_up_in_node_modules_folder_initial_location_0, r.containingDirectory) } if !tspath.IsExternalModuleNameRelative(r.name) { resolved = r.loadModuleFromNearestNodeModulesDirectory(false /*typesScopeOnly*/) @@ -367,7 +372,7 @@ func (r *resolutionState) resolveTypeReferenceDirective(typeRoots []string, from resolved = r.nodeLoadModuleByRelativeName(extensionsDeclaration, candidate, false /*onlyRecordFailures*/, true /*considerPackageJson*/) } } else if r.tracer != nil { - r.tracer.write(diagnostics.Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_node_modules_folder.Format()) + r.tracer.write(diagnostics.Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_node_modules_folder) } return r.createResolvedTypeReferenceDirective(resolved, false /*primary*/) } @@ -383,7 +388,7 @@ func (r *resolutionState) getCandidateFromTypeRoot(typeRoot string) string { func (r *resolutionState) mangleScopedPackageName(name string) string { mangled := MangleScopedPackageName(name) if r.tracer != nil && mangled != name { - r.tracer.write(diagnostics.Scoped_package_detected_looking_in_0.Format(mangled)) + r.tracer.write(diagnostics.Scoped_package_detected_looking_in_0, mangled) } return mangled } @@ -406,9 +411,9 @@ func (r *resolutionState) resolveNodeLike() *ResolvedModule { if r.tracer != nil { conditions := strings.Join(core.Map(r.conditions, func(c string) string { return `'` + c + `'` }), ", ") if r.esmMode { - r.tracer.write(diagnostics.Resolving_in_0_mode_with_conditions_1.Format("ESM", conditions)) + r.tracer.write(diagnostics.Resolving_in_0_mode_with_conditions_1, "ESM", conditions) } else { - r.tracer.write(diagnostics.Resolving_in_0_mode_with_conditions_1.Format("CJS", conditions)) + r.tracer.write(diagnostics.Resolving_in_0_mode_with_conditions_1, "CJS", conditions) } } result := r.resolveNodeLikeWorker() @@ -422,7 +427,7 @@ func (r *resolutionState) resolveNodeLike() *ResolvedModule { !extensionIsOk(extensionsTypeScript|extensionsDeclaration, result.Extension) && slices.Contains(r.conditions, "import") { if r.tracer != nil { - r.tracer.write(diagnostics.Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_if_npm_library_needs_configuration_update.Format()) + r.tracer.write(diagnostics.Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_if_npm_library_needs_configuration_update) } r.features = r.features & ^NodeResolutionFeaturesExports r.extensions = r.extensions & (extensionsTypeScript | extensionsDeclaration) @@ -453,12 +458,12 @@ func (r *resolutionState) resolveNodeLikeWorker() *ResolvedModule { } if strings.Contains(r.name, ":") { if r.tracer != nil { - r.tracer.write(diagnostics.Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1.Format(r.name, r.extensions.String())) + r.tracer.write(diagnostics.Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1, r.name, r.extensions.String()) } return r.createResolvedModule(nil, false) } if r.tracer != nil { - r.tracer.write(diagnostics.Loading_module_0_from_node_modules_folder_target_file_types_Colon_1.Format(r.name, r.extensions.String())) + r.tracer.write(diagnostics.Loading_module_0_from_node_modules_folder_target_file_types_Colon_1, r.name, r.extensions.String()) } if resolved := r.loadModuleFromNearestNodeModulesDirectory(false /*typesScopeOnly*/); !resolved.shouldContinueSearching() { return r.createResolvedModuleHandlingSymlink(resolved) @@ -530,7 +535,7 @@ func (r *resolutionState) loadModuleFromSelfNameReference() *resolved { func (r *resolutionState) loadModuleFromImports() *resolved { if r.name == "#" || strings.HasPrefix(r.name, "#/") { if r.tracer != nil { - r.tracer.write(diagnostics.Invalid_import_specifier_0_has_no_possible_resolutions.Format(r.name)) + r.tracer.write(diagnostics.Invalid_import_specifier_0_has_no_possible_resolutions, r.name) } return continueSearching() } @@ -538,7 +543,7 @@ func (r *resolutionState) loadModuleFromImports() *resolved { scope := r.getPackageScopeForPath(directoryPath) if !scope.Exists() { if r.tracer != nil { - r.tracer.write(diagnostics.Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve.Format(directoryPath)) + r.tracer.write(diagnostics.Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve, directoryPath) } return continueSearching() } @@ -546,7 +551,7 @@ func (r *resolutionState) loadModuleFromImports() *resolved { // !!! Old compiler only checks for undefined, but then assumes `imports` is an object if present. // Maybe should have a new diagnostic for imports of an invalid type. Also, array should be handled? if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_scope_0_has_no_imports_defined.Format(scope.PackageDirectory)) + r.tracer.write(diagnostics.X_package_json_scope_0_has_no_imports_defined, scope.PackageDirectory) } return continueSearching() } @@ -556,7 +561,7 @@ func (r *resolutionState) loadModuleFromImports() *resolved { } if r.tracer != nil { - r.tracer.write(diagnostics.Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1.Format(r.name, scope.PackageDirectory)) + r.tracer.write(diagnostics.Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1, r.name, scope.PackageDirectory) } return continueSearching() } @@ -589,7 +594,7 @@ func (r *resolutionState) loadModuleFromExports(packageInfo *packagejson.InfoCac } if r.tracer != nil { - r.tracer.write(diagnostics.Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1.Format(subpath, packageInfo.PackageDirectory)) + r.tracer.write(diagnostics.Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1, subpath, packageInfo.PackageDirectory) } return continueSearching() } @@ -641,7 +646,7 @@ func (r *resolutionState) loadModuleFromTargetExportOrImport(extensions extensio targetString, _ := target.Value.(string) if !isPattern && len(subpath) > 0 && !strings.HasSuffix(targetString, "/") { if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1.Format(scope.PackageDirectory, moduleName)) + r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.PackageDirectory, moduleName) } return continueSearching() } @@ -652,8 +657,8 @@ func (r *resolutionState) loadModuleFromTargetExportOrImport(extensions extensio combinedLookup = strings.ReplaceAll(targetString, "*", subpath) } if r.tracer != nil { - r.tracer.write(diagnostics.Using_0_subpath_1_with_target_2.Format("imports", key, combinedLookup)) - r.tracer.write(diagnostics.Resolving_module_0_from_1.Format(combinedLookup, scope.PackageDirectory+"/")) + r.tracer.write(diagnostics.Using_0_subpath_1_with_target_2, "imports", key, combinedLookup) + r.tracer.write(diagnostics.Resolving_module_0_from_1, combinedLookup, scope.PackageDirectory+"/") } name, containingDirectory := r.name, r.containingDirectory r.name, r.containingDirectory = combinedLookup, scope.PackageDirectory+"/" @@ -672,7 +677,7 @@ func (r *resolutionState) loadModuleFromTargetExportOrImport(extensions extensio return continueSearching() } if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1.Format(scope.PackageDirectory, moduleName)) + r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.PackageDirectory, moduleName) } return continueSearching() } @@ -685,7 +690,7 @@ func (r *resolutionState) loadModuleFromTargetExportOrImport(extensions extensio partsAfterFirst := parts[1:] if slices.Contains(partsAfterFirst, "..") || slices.Contains(partsAfterFirst, ".") || slices.Contains(partsAfterFirst, "node_modules") { if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1.Format(scope.PackageDirectory, moduleName)) + r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.PackageDirectory, moduleName) } return continueSearching() } @@ -695,7 +700,7 @@ func (r *resolutionState) loadModuleFromTargetExportOrImport(extensions extensio subpathParts := tspath.GetPathComponents(subpath, "") if slices.Contains(subpathParts, "..") || slices.Contains(subpathParts, ".") || slices.Contains(subpathParts, "node_modules") { if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1.Format(scope.PackageDirectory, moduleName)) + r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.PackageDirectory, moduleName) } return continueSearching() } @@ -707,7 +712,7 @@ func (r *resolutionState) loadModuleFromTargetExportOrImport(extensions extensio } else { messageTarget = targetString + subpath } - r.tracer.write(diagnostics.Using_0_subpath_1_with_target_2.Format(core.IfElse(isImports, "imports", "exports"), key, messageTarget)) + r.tracer.write(diagnostics.Using_0_subpath_1_with_target_2, core.IfElse(isImports, "imports", "exports"), key, messageTarget) } var finalPath string if isPattern { @@ -726,39 +731,39 @@ func (r *resolutionState) loadModuleFromTargetExportOrImport(extensions extensio case packagejson.JSONValueTypeObject: if r.tracer != nil { - r.tracer.write(diagnostics.Entering_conditional_exports.Format()) + r.tracer.write(diagnostics.Entering_conditional_exports) } for condition := range target.AsObject().Keys() { if r.conditionMatches(condition) { if r.tracer != nil { - r.tracer.write(diagnostics.Matched_0_condition_1.Format(core.IfElse(isImports, "imports", "exports"), condition)) + r.tracer.write(diagnostics.Matched_0_condition_1, core.IfElse(isImports, "imports", "exports"), condition) } subTarget, _ := target.AsObject().Get(condition) if result := r.loadModuleFromTargetExportOrImport(extensions, moduleName, scope, isImports, subTarget, subpath, isPattern, key); !result.shouldContinueSearching() { if r.tracer != nil { - r.tracer.write(diagnostics.Resolved_under_condition_0.Format(condition)) + r.tracer.write(diagnostics.Resolved_under_condition_0, condition) } if r.tracer != nil { - r.tracer.write(diagnostics.Exiting_conditional_exports.Format()) + r.tracer.write(diagnostics.Exiting_conditional_exports) } return result } else if r.tracer != nil { - r.tracer.write(diagnostics.Failed_to_resolve_under_condition_0.Format(condition)) + r.tracer.write(diagnostics.Failed_to_resolve_under_condition_0, condition) } } else { if r.tracer != nil { - r.tracer.write(diagnostics.Saw_non_matching_condition_0.Format(condition)) + r.tracer.write(diagnostics.Saw_non_matching_condition_0, condition) } } } if r.tracer != nil { - r.tracer.write(diagnostics.Exiting_conditional_exports.Format()) + r.tracer.write(diagnostics.Exiting_conditional_exports) } return continueSearching() case packagejson.JSONValueTypeArray: if len(target.AsArray()) == 0 { if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1.Format(scope.PackageDirectory, moduleName)) + r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.PackageDirectory, moduleName) } return continueSearching() } @@ -770,13 +775,13 @@ func (r *resolutionState) loadModuleFromTargetExportOrImport(extensions extensio case packagejson.JSONValueTypeNull: if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_scope_0_explicitly_maps_specifier_1_to_null.Format(scope.PackageDirectory, moduleName)) + r.tracer.write(diagnostics.X_package_json_scope_0_explicitly_maps_specifier_1_to_null, scope.PackageDirectory, moduleName) } return continueSearching() } if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1.Format(scope.PackageDirectory, moduleName)) + r.tracer.write(diagnostics.X_package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.PackageDirectory, moduleName) } return continueSearching() } @@ -896,7 +901,7 @@ func (r *resolutionState) loadModuleFromNearestNodeModulesDirectory(typesScopeOn // (1) if priorityExtensions != 0 { if r.tracer != nil { - r.tracer.write(diagnostics.Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0.Format(priorityExtensions.String())) + r.tracer.write(diagnostics.Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0, priorityExtensions.String()) } if result := r.loadModuleFromNearestNodeModulesDirectoryWorker(priorityExtensions, mode, typesScopeOnly); !result.shouldContinueSearching() { return result @@ -905,7 +910,7 @@ func (r *resolutionState) loadModuleFromNearestNodeModulesDirectory(typesScopeOn // (2) if secondaryExtensions != 0 && !typesScopeOnly { if r.tracer != nil { - r.tracer.write(diagnostics.Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0.Format(secondaryExtensions.String())) + r.tracer.write(diagnostics.Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0, secondaryExtensions.String()) } return r.loadModuleFromNearestNodeModulesDirectoryWorker(secondaryExtensions, mode, typesScopeOnly) } @@ -931,7 +936,7 @@ func (r *resolutionState) loadModuleFromImmediateNodeModulesDirectory(extensions nodeModulesFolder := tspath.CombinePaths(directory, "node_modules") nodeModulesFolderExists := r.resolver.host.FS().DirectoryExists(nodeModulesFolder) if !nodeModulesFolderExists && r.tracer != nil { - r.tracer.write(diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it.Format(nodeModulesFolder)) + r.tracer.write(diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, nodeModulesFolder) } if !typesScopeOnly { @@ -944,7 +949,7 @@ func (r *resolutionState) loadModuleFromImmediateNodeModulesDirectory(extensions nodeModulesAtTypes := tspath.CombinePaths(nodeModulesFolder, "@types") nodeModulesAtTypesExists := nodeModulesFolderExists && r.resolver.host.FS().DirectoryExists(nodeModulesAtTypes) if !nodeModulesAtTypesExists && r.tracer != nil { - r.tracer.write(diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it.Format(nodeModulesAtTypes)) + r.tracer.write(diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, nodeModulesAtTypes) } return r.loadModuleFromSpecificNodeModulesDirectory(extensionsDeclaration, r.mangleScopedPackageName(r.name), nodeModulesAtTypes, nodeModulesAtTypesExists) } @@ -1021,7 +1026,7 @@ func (r *resolutionState) loadModuleFromSpecificNodeModulesDirectory(ext extensi versionPaths := packageInfo.Contents.GetVersionPaths(r.getTraceFunc()) if versionPaths.Exists() { if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2.Format(versionPaths.Version, core.Version(), rest)) + r.tracer.write(diagnostics.X_package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, versionPaths.Version, core.Version(), rest) } packageDirectoryExists := nodeModulesDirectoryExists && r.resolver.host.FS().DirectoryExists(packageDirectory) pathPatterns := TryParsePatterns(versionPaths.GetPaths()) @@ -1136,7 +1141,7 @@ func (r *resolutionState) getParsedPatternsForPaths() *ParsedPatterns { func (r *resolutionState) tryLoadModuleUsingPathsIfEligible() *resolved { if r.compilerOptions.Paths.Size() > 0 && !tspath.PathIsRelative(r.name) { if r.tracer != nil { - r.tracer.write(diagnostics.X_paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0.Format(r.name)) + r.tracer.write(diagnostics.X_paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, r.name) } } else { return continueSearching() @@ -1160,13 +1165,13 @@ func (r *resolutionState) tryLoadModuleUsingPaths(extensions extensions, moduleN if matchedPattern := MatchPatternOrExact(pathPatterns, moduleName); matchedPattern.IsValid() { matchedStar := matchedPattern.MatchedText(moduleName) if r.tracer != nil { - r.tracer.write(diagnostics.Module_name_0_matched_pattern_1.Format(moduleName, matchedPattern.Text)) + r.tracer.write(diagnostics.Module_name_0_matched_pattern_1, moduleName, matchedPattern.Text) } for _, subst := range paths.GetOrZero(matchedPattern.Text) { path := strings.Replace(subst, "*", matchedStar, 1) candidate := tspath.NormalizePath(tspath.CombinePaths(containingDirectory, path)) if r.tracer != nil { - r.tracer.write(diagnostics.Trying_substitution_0_candidate_module_location_Colon_1.Format(subst, path)) + r.tracer.write(diagnostics.Trying_substitution_0_candidate_module_location_Colon_1, subst, path) } // A path mapping may have an extension if extension := tspath.TryGetExtensionFromPath(subst); extension != "" { @@ -1191,7 +1196,7 @@ func (r *resolutionState) tryLoadModuleUsingRootDirs() *resolved { } if r.tracer != nil { - r.tracer.write(diagnostics.X_rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0.Format(r.name)) + r.tracer.write(diagnostics.X_rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0, r.name) } candidate := tspath.NormalizePath(tspath.CombinePaths(r.containingDirectory, r.name)) @@ -1210,7 +1215,7 @@ func (r *resolutionState) tryLoadModuleUsingRootDirs() *resolved { (matchedNormalizedPrefix == "" || len(matchedNormalizedPrefix) < len(normalizedRoot)) if r.tracer != nil { - r.tracer.write(diagnostics.Checking_if_0_is_the_longest_matching_prefix_for_1_2.Format(normalizedRoot, candidate, isLongestMatchingPrefix)) + r.tracer.write(diagnostics.Checking_if_0_is_the_longest_matching_prefix_for_1_2, normalizedRoot, candidate, isLongestMatchingPrefix) } if isLongestMatchingPrefix { @@ -1221,13 +1226,13 @@ func (r *resolutionState) tryLoadModuleUsingRootDirs() *resolved { if matchedNormalizedPrefix != "" { if r.tracer != nil { - r.tracer.write(diagnostics.Longest_matching_prefix_for_0_is_1.Format(candidate, matchedNormalizedPrefix)) + r.tracer.write(diagnostics.Longest_matching_prefix_for_0_is_1, candidate, matchedNormalizedPrefix) } suffix := candidate[len(matchedNormalizedPrefix):] // first - try to load from a initial location if r.tracer != nil { - r.tracer.write(diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2.Format(suffix, matchedNormalizedPrefix, candidate)) + r.tracer.write(diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2, suffix, matchedNormalizedPrefix, candidate) } loader := func(extensions extensions, candidate string, onlyRecordFailures bool) *resolved { return r.nodeLoadModuleByRelativeName(extensions, candidate, onlyRecordFailures, true /*considerPackageJson*/) @@ -1237,7 +1242,7 @@ func (r *resolutionState) tryLoadModuleUsingRootDirs() *resolved { } if r.tracer != nil { - r.tracer.write(diagnostics.Trying_other_entries_in_rootDirs.Format()) + r.tracer.write(diagnostics.Trying_other_entries_in_rootDirs) } // then try to resolve using remaining entries in rootDirs for _, rootDir := range r.compilerOptions.RootDirs { @@ -1247,7 +1252,7 @@ func (r *resolutionState) tryLoadModuleUsingRootDirs() *resolved { } candidate := tspath.CombinePaths(tspath.NormalizePath(rootDir), suffix) if r.tracer != nil { - r.tracer.write(diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2.Format(suffix, rootDir, candidate)) + r.tracer.write(diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2, suffix, rootDir, candidate) } baseDirectory := tspath.GetDirectoryPath(candidate) if resolvedFileName := loader(r.extensions, candidate, !r.resolver.host.FS().DirectoryExists(baseDirectory)); !resolvedFileName.shouldContinueSearching() { @@ -1255,7 +1260,7 @@ func (r *resolutionState) tryLoadModuleUsingRootDirs() *resolved { } } if r.tracer != nil { - r.tracer.write(diagnostics.Module_resolution_using_rootDirs_has_failed.Format()) + r.tracer.write(diagnostics.Module_resolution_using_rootDirs_has_failed) } } return continueSearching() @@ -1263,14 +1268,14 @@ func (r *resolutionState) tryLoadModuleUsingRootDirs() *resolved { func (r *resolutionState) nodeLoadModuleByRelativeName(extensions extensions, candidate string, onlyRecordFailures bool, considerPackageJson bool) *resolved { if r.tracer != nil { - r.tracer.write(diagnostics.Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1.Format(candidate, extensions.String())) + r.tracer.write(diagnostics.Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1, candidate, extensions.String()) } if !tspath.HasTrailingDirectorySeparator(candidate) { if !onlyRecordFailures { parentOfCandidate := tspath.GetDirectoryPath(candidate) if !r.resolver.host.FS().DirectoryExists(parentOfCandidate) { if r.tracer != nil { - r.tracer.write(diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it.Format(parentOfCandidate)) + r.tracer.write(diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, parentOfCandidate) } onlyRecordFailures = true } @@ -1289,7 +1294,7 @@ func (r *resolutionState) nodeLoadModuleByRelativeName(extensions extensions, ca candidateExists := r.resolver.host.FS().DirectoryExists(candidate) if !candidateExists { if r.tracer != nil { - r.tracer.write(diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it.Format(candidate)) + r.tracer.write(diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, candidate) } onlyRecordFailures = true } @@ -1331,7 +1336,7 @@ func (r *resolutionState) loadModuleFromFileNoImplicitExtensions(extensions exte extension := candidate[len(extensionless):] if r.tracer != nil { - r.tracer.write(diagnostics.File_name_0_has_a_1_extension_stripping_it.Format(candidate, extension)) + r.tracer.write(diagnostics.File_name_0_has_a_1_extension_stripping_it, candidate, extension) } return r.tryAddingExtensions(extensionless, extensions, extension, onlyRecordFailures) } @@ -1485,11 +1490,11 @@ func (r *resolutionState) tryFileLookup(fileName string, onlyRecordFailures bool if !onlyRecordFailures { if r.resolver.host.FS().FileExists(fileName) { if r.tracer != nil { - r.tracer.write(diagnostics.File_0_exists_use_it_as_a_name_resolution_result.Format(fileName)) + r.tracer.write(diagnostics.File_0_exists_use_it_as_a_name_resolution_result, fileName) } return true } else if r.tracer != nil { - r.tracer.write(diagnostics.File_0_does_not_exist.Format(fileName)) + r.tracer.write(diagnostics.File_0_does_not_exist, fileName) } } r.failedLookupLocations = append(r.failedLookupLocations, fileName) @@ -1561,7 +1566,7 @@ func (r *resolutionState) loadNodeModuleFromDirectoryWorker(ext extensions, cand moduleName = tspath.GetRelativePathFromDirectory(candidate, indexPath, tspath.ComparePathsOptions{}) } if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2.Format(versionPaths.Version, core.Version(), moduleName)) + r.tracer.write(diagnostics.X_package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, versionPaths.Version, core.Version(), moduleName) } pathPatterns := TryParsePatterns(versionPaths.GetPaths()) if result := r.tryLoadModuleUsingPaths(ext, moduleName, candidate, versionPaths.GetPaths(), pathPatterns, loader, onlyRecordFailuresForPackageFile); !result.shouldContinueSearching() { @@ -1649,7 +1654,7 @@ func (r *resolutionState) getPackageJsonInfo(packageDirectory string, onlyRecord if existing := r.resolver.packageJsonInfoCache.Get(packageJsonPath); existing != nil { if existing.Contents != nil { if r.tracer != nil { - r.tracer.write(diagnostics.File_0_exists_according_to_earlier_cached_lookups.Format(packageJsonPath)) + r.tracer.write(diagnostics.File_0_exists_according_to_earlier_cached_lookups, packageJsonPath) } r.affectingLocations = append(r.affectingLocations, packageJsonPath) if existing.PackageDirectory == packageDirectory { @@ -1663,7 +1668,7 @@ func (r *resolutionState) getPackageJsonInfo(packageDirectory string, onlyRecord } } else { if existing.DirectoryExists && r.tracer != nil { - r.tracer.write(diagnostics.File_0_does_not_exist_according_to_earlier_cached_lookups.Format(packageJsonPath)) + r.tracer.write(diagnostics.File_0_does_not_exist_according_to_earlier_cached_lookups, packageJsonPath) } r.failedLookupLocations = append(r.failedLookupLocations, packageJsonPath) return nil @@ -1676,7 +1681,7 @@ func (r *resolutionState) getPackageJsonInfo(packageDirectory string, onlyRecord contents, _ := r.resolver.host.FS().ReadFile(packageJsonPath) packageJsonContent, err := packagejson.Parse([]byte(contents)) if r.tracer != nil { - r.tracer.write(diagnostics.Found_package_json_at_0.Format(packageJsonPath)) + r.tracer.write(diagnostics.Found_package_json_at_0, packageJsonPath) } result := &packagejson.InfoCacheEntry{ PackageDirectory: packageDirectory, @@ -1691,7 +1696,7 @@ func (r *resolutionState) getPackageJsonInfo(packageDirectory string, onlyRecord return result } else { if directoryExists && r.tracer != nil { - r.tracer.write(diagnostics.File_0_does_not_exist.Format(packageJsonPath)) + r.tracer.write(diagnostics.File_0_does_not_exist, packageJsonPath) } _ = r.resolver.packageJsonInfoCache.Set(packageJsonPath, &packagejson.InfoCacheEntry{ PackageDirectory: packageDirectory, @@ -1730,7 +1735,7 @@ func (r *resolutionState) readPackageJsonPeerDependencies(packageJsonInfo *packa return "" } if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_has_a_peerDependencies_field.Message()) + r.tracer.write(diagnostics.X_package_json_has_a_peerDependencies_field) } packageDirectory := r.realPath(packageJsonInfo.PackageDirectory) nodeModulesIndex := strings.LastIndex(packageDirectory, "/node_modules") @@ -1748,10 +1753,10 @@ func (r *resolutionState) readPackageJsonPeerDependencies(packageJsonInfo *packa builder.WriteString("@") builder.WriteString(version) if r.tracer != nil { - r.tracer.write(diagnostics.Found_peerDependency_0_with_1_version.Format(name, version)) + r.tracer.write(diagnostics.Found_peerDependency_0_with_1_version, name, version) } } else if r.tracer != nil { - r.tracer.write(diagnostics.Failed_to_find_peerDependency_0.Format(name)) + r.tracer.write(diagnostics.Failed_to_find_peerDependency_0, name) } } return builder.String() @@ -1760,7 +1765,7 @@ func (r *resolutionState) readPackageJsonPeerDependencies(packageJsonInfo *packa func (r *resolutionState) realPath(path string) string { rp := tspath.NormalizePath(r.resolver.host.FS().Realpath(path)) if r.tracer != nil { - r.tracer.write(diagnostics.Resolving_real_path_for_0_result_1.Format(path, rp)) + r.tracer.write(diagnostics.Resolving_real_path_for_0_result_1, path, rp) } return rp } @@ -1771,11 +1776,11 @@ func (r *resolutionState) validatePackageJSONField(fieldName string, field packa return true } if r.tracer != nil { - r.tracer.write(diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2.Format(fieldName, field.ExpectedJSONType(), field.ActualJSONType())) + r.tracer.write(diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2, fieldName, field.ExpectedJSONType(), field.ActualJSONType()) } } if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_does_not_have_a_0_field.Format(fieldName)) + r.tracer.write(diagnostics.X_package_json_does_not_have_a_0_field, fieldName) } return false } @@ -1786,13 +1791,13 @@ func (r *resolutionState) getPackageJSONPathField(fieldName string, field *packa } if field.Value == "" { if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_had_a_falsy_0_field.Format(fieldName)) + r.tracer.write(diagnostics.X_package_json_had_a_falsy_0_field, fieldName) } return "", false } path := tspath.NormalizePath(tspath.CombinePaths(directory, field.Value)) if r.tracer != nil { - r.tracer.write(diagnostics.X_package_json_has_0_field_1_that_references_2.Format(fieldName, field.Value, path)) + r.tracer.write(diagnostics.X_package_json_has_0_field_1_that_references_2, fieldName, field.Value, path) } return path, true } @@ -1813,7 +1818,7 @@ func (r *resolutionState) conditionMatches(condition string) bool { return false } -func (r *resolutionState) getTraceFunc() func(string) { +func (r *resolutionState) getTraceFunc() func(m *diagnostics.Message, args ...any) { if r.tracer != nil { return r.tracer.write } diff --git a/pkg/packagejson/cache.go b/pkg/packagejson/cache.go index 15adf5ff..d0dacc97 100644 --- a/pkg/packagejson/cache.go +++ b/pkg/packagejson/cache.go @@ -16,32 +16,52 @@ type PackageJson struct { Fields Parseable bool versionPaths VersionPaths - versionTraces []string + versionTraces []diagnosticAndArgs once sync.Once } -func (p *PackageJson) GetVersionPaths(trace func(string)) VersionPaths { +type diagnosticAndArgs struct { + message *diagnostics.Message + args []any +} + +func (p *PackageJson) GetVersionPaths(trace func(m *diagnostics.Message, args ...any)) VersionPaths { p.once.Do(func() { if p.Fields.TypesVersions.Type == JSONValueTypeNotPresent { - p.versionTraces = append(p.versionTraces, diagnostics.X_package_json_does_not_have_a_0_field.Format("typesVersions")) + p.versionTraces = append(p.versionTraces, diagnosticAndArgs{ + diagnostics.X_package_json_does_not_have_a_0_field, + []any{"typesVersions"}, + }) return } if p.Fields.TypesVersions.Type != JSONValueTypeObject { - p.versionTraces = append(p.versionTraces, diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2.Format("typesVersions", "object", p.Fields.TypesVersions.Type.String())) + p.versionTraces = append(p.versionTraces, diagnosticAndArgs{ + diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2, + []any{"typesVersions", "object", p.Fields.TypesVersions.Type.String()}, + }) return } - p.versionTraces = append(p.versionTraces, diagnostics.X_package_json_has_a_typesVersions_field_with_version_specific_path_mappings.Format("typesVersions")) + p.versionTraces = append(p.versionTraces, diagnosticAndArgs{ + diagnostics.X_package_json_has_a_typesVersions_field_with_version_specific_path_mappings, + []any{"typesVersions"}, + }) for key, value := range p.Fields.TypesVersions.AsObject().Entries() { keyRange, ok := semver.TryParseVersionRange(key) if !ok { - p.versionTraces = append(p.versionTraces, diagnostics.X_package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range.Format(key)) + p.versionTraces = append(p.versionTraces, diagnosticAndArgs{ + diagnostics.X_package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range, + []any{key}, + }) continue } if keyRange.Test(&typeScriptVersion) { if value.Type != JSONValueTypeObject { - p.versionTraces = append(p.versionTraces, diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2.Format("typesVersions['"+key+"']", "object", value.Type.String())) + p.versionTraces = append(p.versionTraces, diagnosticAndArgs{ + diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2, + []any{"typesVersions['" + key + "']", "object", value.Type.String()}, + }) return } p.versionPaths = VersionPaths{ @@ -52,11 +72,14 @@ func (p *PackageJson) GetVersionPaths(trace func(string)) VersionPaths { } } - p.versionTraces = append(p.versionTraces, diagnostics.X_package_json_does_not_have_a_typesVersions_entry_that_matches_version_0.Format(core.VersionMajorMinor())) + p.versionTraces = append(p.versionTraces, diagnosticAndArgs{ + diagnostics.X_package_json_does_not_have_a_typesVersions_entry_that_matches_version_0, + []any{core.VersionMajorMinor()}, + }) }) if trace != nil { for _, msg := range p.versionTraces { - trace(msg) + trace(msg.message, msg.args...) } } return p.versionPaths diff --git a/pkg/project/compilerhost.go b/pkg/project/compilerhost.go index 50c13a00..c234b2fc 100644 --- a/pkg/project/compilerhost.go +++ b/pkg/project/compilerhost.go @@ -6,6 +6,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/compiler" + "github.com/buke/typescript-go-internal/pkg/diagnostics" "github.com/buke/typescript-go-internal/pkg/project/logging" "github.com/buke/typescript-go-internal/pkg/tsoptions" "github.com/buke/typescript-go-internal/pkg/tspath" @@ -131,7 +132,7 @@ func (c *compilerHost) GetSourceFile(opts ast.SourceFileParseOptions) *ast.Sourc } // Trace implements compiler.CompilerHost. -func (c *compilerHost) Trace(msg string) { +func (c *compilerHost) Trace(msg *diagnostics.Message, args ...any) { panic("unimplemented") } diff --git a/pkg/project/configfileregistry.go b/pkg/project/configfileregistry.go index eafe421f..11837285 100644 --- a/pkg/project/configfileregistry.go +++ b/pkg/project/configfileregistry.go @@ -1,6 +1,7 @@ package project import ( + "iter" "maps" "github.com/buke/typescript-go-internal/pkg/core" @@ -108,6 +109,73 @@ func (c *ConfigFileRegistry) clone() *ConfigFileRegistry { } } +// For testing +type TestConfigEntry struct { + FileName string + RetainingProjects iter.Seq[tspath.Path] + RetainingOpenFiles iter.Seq[tspath.Path] + RetainingConfigs iter.Seq[tspath.Path] +} + +// For testing +func (c *ConfigFileRegistry) ForEachTestConfigEntry(cb func(tspath.Path, *TestConfigEntry)) { + if c != nil { + for path, entry := range c.configs { + cb(path, &TestConfigEntry{ + FileName: entry.fileName, + RetainingProjects: maps.Keys(entry.retainingProjects), + RetainingOpenFiles: maps.Keys(entry.retainingOpenFiles), + RetainingConfigs: maps.Keys(entry.retainingConfigs), + }) + } + } +} + +// For testing +func (c *ConfigFileRegistry) GetTestConfigEntry(path tspath.Path) *TestConfigEntry { + if c != nil { + if entry, ok := c.configs[path]; ok { + return &TestConfigEntry{ + FileName: entry.fileName, + RetainingProjects: maps.Keys(entry.retainingProjects), + RetainingOpenFiles: maps.Keys(entry.retainingOpenFiles), + RetainingConfigs: maps.Keys(entry.retainingConfigs), + } + } + } + return nil +} + +type TestConfigFileNamesEntry struct { + NearestConfigFileName string + Ancestors map[string]string +} + +// For testing +func (c *ConfigFileRegistry) ForEachTestConfigFileNamesEntry(cb func(tspath.Path, *TestConfigFileNamesEntry)) { + if c != nil { + for path, entry := range c.configFileNames { + cb(path, &TestConfigFileNamesEntry{ + NearestConfigFileName: entry.nearestConfigFileName, + Ancestors: entry.ancestors, + }) + } + } +} + +// For testing +func (c *ConfigFileRegistry) GetTestConfigFileNamesEntry(path tspath.Path) *TestConfigFileNamesEntry { + if c != nil { + if entry, ok := c.configFileNames[path]; ok { + return &TestConfigFileNamesEntry{ + NearestConfigFileName: entry.nearestConfigFileName, + Ancestors: entry.ancestors, + } + } + } + return nil +} + type configFileNames struct { // nearestConfigFileName is the file name of the nearest ancestor config file. nearestConfigFileName string diff --git a/pkg/project/configfileregistrybuilder.go b/pkg/project/configfileregistrybuilder.go index eed56d1d..3423bd42 100644 --- a/pkg/project/configfileregistrybuilder.go +++ b/pkg/project/configfileregistrybuilder.go @@ -76,10 +76,10 @@ func (c *configFileRegistryBuilder) Finalize() *ConfigFileRegistry { return newRegistry } -func (c *configFileRegistryBuilder) findOrAcquireConfigForOpenFile( +func (c *configFileRegistryBuilder) findOrAcquireConfigForFile( configFileName string, configFilePath tspath.Path, - openFilePath tspath.Path, + filePath tspath.Path, loadKind projectLoadKind, logger *logging.LogTree, ) *tsoptions.ParsedCommandLine { @@ -90,7 +90,7 @@ func (c *configFileRegistryBuilder) findOrAcquireConfigForOpenFile( } return nil case projectLoadKindCreate: - return c.acquireConfigForOpenFile(configFileName, configFilePath, openFilePath, logger) + return c.acquireConfigForFile(configFileName, configFilePath, filePath, logger) default: panic(fmt.Sprintf("unknown project load kind: %d", loadKind)) } @@ -248,17 +248,19 @@ func (c *configFileRegistryBuilder) acquireConfigForProject(fileName string, pat return entry.Value().commandLine } -// acquireConfigForOpenFile loads a config file entry from the cache, or parses it if not already +// acquireConfigForFile loads a config file entry from the cache, or parses it if not already // cached, then adds the open file to `retainingOpenFiles` to keep it alive in the cache. -// Each `acquireConfigForOpenFile` call that passes an `openFilePath` +// Each `acquireConfigForFile` call that passes an `openFilePath` // should be accompanied by an eventual `releaseConfigForOpenFile` call with the same open file. -func (c *configFileRegistryBuilder) acquireConfigForOpenFile(configFileName string, configFilePath tspath.Path, openFilePath tspath.Path, logger *logging.LogTree) *tsoptions.ParsedCommandLine { +func (c *configFileRegistryBuilder) acquireConfigForFile(configFileName string, configFilePath tspath.Path, filePath tspath.Path, logger *logging.LogTree) *tsoptions.ParsedCommandLine { entry, _ := c.configs.LoadOrStore(configFilePath, newConfigFileEntry(configFileName)) var needsRetainOpenFile bool entry.ChangeIf( func(config *configFileEntry) bool { - _, alreadyRetaining := config.retainingOpenFiles[openFilePath] - needsRetainOpenFile = !alreadyRetaining + if c.fs.isOpenFile(filePath) { + _, alreadyRetaining := config.retainingOpenFiles[filePath] + needsRetainOpenFile = !alreadyRetaining + } return needsRetainOpenFile || config.pendingReload != PendingReloadNone }, func(config *configFileEntry) { @@ -266,7 +268,7 @@ func (c *configFileRegistryBuilder) acquireConfigForOpenFile(configFileName stri if config.retainingOpenFiles == nil { config.retainingOpenFiles = make(map[tspath.Path]struct{}) } - config.retainingOpenFiles[openFilePath] = struct{}{} + config.retainingOpenFiles[filePath] = struct{}{} } c.reloadIfNeeded(config, configFileName, configFilePath, logger) }, @@ -524,8 +526,7 @@ func (c *configFileRegistryBuilder) getConfigFileNameForFile(fileName string, pa } configName := c.computeConfigFileName(fileName, false, logger) - - if _, ok := c.fs.overlays[path]; ok { + if c.fs.isOpenFile(path) { c.configFileNames.Add(path, &configFileNames{ nearestConfigFileName: configName, }) @@ -533,6 +534,24 @@ func (c *configFileRegistryBuilder) getConfigFileNameForFile(fileName string, pa return configName } +func (c *configFileRegistryBuilder) forEachConfigFileNameFor(fileName string, path tspath.Path, cb func(configFileName string)) { + if isDynamicFileName(fileName) { + return + } + + if entry, ok := c.configFileNames.Get(path); ok { + configFileName := entry.Value().nearestConfigFileName + for configFileName != "" { + cb(configFileName) + if ancestorConfigName, found := entry.Value().ancestors[configFileName]; found { + configFileName = ancestorConfigName + } else { + return + } + } + } +} + func (c *configFileRegistryBuilder) getAncestorConfigFileName(fileName string, path tspath.Path, configFileName string, logger *logging.LogTree) string { if isDynamicFileName(fileName) { return "" @@ -542,6 +561,7 @@ func (c *configFileRegistryBuilder) getAncestorConfigFileName(fileName string, p if !ok { return "" } + if ancestorConfigName, found := entry.Value().ancestors[configFileName]; found { return ancestorConfigName } @@ -549,7 +569,7 @@ func (c *configFileRegistryBuilder) getAncestorConfigFileName(fileName string, p // Look for config in parent folders of config file result := c.computeConfigFileName(configFileName, true, logger) - if _, ok := c.fs.overlays[path]; ok { + if c.fs.isOpenFile(path) { entry.Change(func(value *configFileNames) { if value.ancestors == nil { value.ancestors = make(map[string]string) diff --git a/pkg/project/project.go b/pkg/project/project.go index 66f04ebd..e7863714 100644 --- a/pkg/project/project.go +++ b/pkg/project/project.go @@ -68,6 +68,9 @@ type Project struct { ProgramUpdateKind ProgramUpdateKind // The ID of the snapshot that created the program stored in this project. ProgramLastUpdate uint64 + // Set of projects that this project could be referencing. + // Only set before actually loading config file to get actual project references + potentialProjectReferences *collections.Set[tspath.Path] programFilesWatch *WatchedFiles[PatternsAndIgnored] failedLookupsWatch *WatchedFiles[map[tspath.Path]string] @@ -192,10 +195,18 @@ func (p *Project) ConfigFilePath() tspath.Path { return p.configFilePath } +func (p *Project) Id() tspath.Path { + return p.configFilePath +} + func (p *Project) GetProgram() *compiler.Program { return p.Program } +func (p *Project) HasFile(fileName string) bool { + return p.containsFile(p.toPath(fileName)) +} + func (p *Project) containsFile(path tspath.Path) bool { return p.Program != nil && p.Program.GetSourceFileByPath(path) != nil } @@ -220,6 +231,7 @@ func (p *Project) Clone() *Project { Program: p.Program, ProgramUpdateKind: ProgramUpdateKindNone, ProgramLastUpdate: p.ProgramLastUpdate, + potentialProjectReferences: p.potentialProjectReferences, programFilesWatch: p.programFilesWatch, failedLookupsWatch: p.failedLookupsWatch, @@ -267,6 +279,32 @@ func (p *Project) getCommandLineWithTypingsFiles() *tsoptions.ParsedCommandLine return p.commandLineWithTypingsFiles } +func (p *Project) setPotentialProjectReference(configFilePath tspath.Path) { + if p.potentialProjectReferences == nil { + p.potentialProjectReferences = &collections.Set[tspath.Path]{} + } else { + p.potentialProjectReferences = p.potentialProjectReferences.Clone() + } + p.potentialProjectReferences.Add(configFilePath) +} + +func (p *Project) hasPotentialProjectReference(references map[tspath.Path]struct{}) bool { + if p.CommandLine != nil { + for _, path := range p.CommandLine.ResolvedProjectReferencePaths() { + if _, has := references[p.toPath(path)]; has { + return true + } + } + } else if p.potentialProjectReferences != nil { + for path := range p.potentialProjectReferences.Keys() { + if _, has := references[path]; has { + return true + } + } + } + return false +} + type CreateProgramResult struct { Program *compiler.Program UpdateKind ProgramUpdateKind diff --git a/pkg/project/projectcollection.go b/pkg/project/projectcollection.go index cbed7764..79399032 100644 --- a/pkg/project/projectcollection.go +++ b/pkg/project/projectcollection.go @@ -29,6 +29,8 @@ type ProjectCollection struct { apiOpenedProjects map[tspath.Path]struct{} } +func (c *ProjectCollection) ConfigFileRegistry() *ConfigFileRegistry { return c.configFileRegistry } + func (c *ProjectCollection) ConfiguredProject(path tspath.Path) *Project { return c.configuredProjects[path] } @@ -91,6 +93,19 @@ func (c *ProjectCollection) InferredProject() *Project { return c.inferredProject } +func (c *ProjectCollection) GetProjectsContainingFile(path tspath.Path) []*Project { + var projects []*Project + for _, project := range c.ConfiguredProjects() { + if project.containsFile(path) { + projects = append(projects, project) + } + } + if c.inferredProject != nil && c.inferredProject.containsFile(path) { + projects = append(projects, c.inferredProject) + } + return projects +} + // !!! result could be cached func (c *ProjectCollection) GetDefaultProject(fileName string, path tspath.Path) *Project { if result, ok := c.fileDefaultProjects[path]; ok { diff --git a/pkg/project/projectcollectionbuilder.go b/pkg/project/projectcollectionbuilder.go index 09a15887..9c61895c 100644 --- a/pkg/project/projectcollectionbuilder.go +++ b/pkg/project/projectcollectionbuilder.go @@ -38,9 +38,10 @@ type ProjectCollectionBuilder struct { newSnapshotID uint64 programStructureChanged bool - fileDefaultProjects map[tspath.Path]tspath.Path - configuredProjects *dirty.SyncMap[tspath.Path, *Project] - inferredProject *dirty.Box[*Project] + + fileDefaultProjects map[tspath.Path]tspath.Path + configuredProjects *dirty.SyncMap[tspath.Path, *Project] + inferredProject *dirty.Box[*Project] apiOpenedProjects map[tspath.Path]struct{} } @@ -243,17 +244,67 @@ func (b *ProjectCollectionBuilder) DidChangeFiles(summary FileChangeSummary, log fileName := summary.Opened.FileName() path := b.toPath(fileName) var toRemoveProjects collections.Set[tspath.Path] - openFileResult := b.ensureConfiguredProjectAndAncestorsForOpenFile(fileName, path, logger) + openFileResult := b.ensureConfiguredProjectAndAncestorsForFile(fileName, path, logger) b.configuredProjects.Range(func(entry *dirty.SyncMapEntry[tspath.Path, *Project]) bool { - toRemoveProjects.Add(entry.Value().configFilePath) - b.updateProgram(entry, logger) + toRemoveProjects.Add(entry.Key()) return true }) + var isReferencedBy func(project *Project, refPath tspath.Path, seenProjects *collections.Set[*Project]) bool + isReferencedBy = func(project *Project, refPath tspath.Path, seenProjects *collections.Set[*Project]) bool { + if !seenProjects.AddIfAbsent(project) { + return false + } + + if project.potentialProjectReferences != nil { + for potentialRef := range project.potentialProjectReferences.Keys() { + if potentialRef == refPath { + return true + } + } + for potentialRef := range project.potentialProjectReferences.Keys() { + if refProject, foundRef := b.configuredProjects.Load(potentialRef); foundRef && isReferencedBy(refProject.Value(), refPath, seenProjects) { + return true + } + } + } else if program := project.GetProgram(); program != nil && !program.RangeResolvedProjectReference(func(referencePath tspath.Path, _ *tsoptions.ParsedCommandLine, _ *tsoptions.ParsedCommandLine, _ int) bool { + return referencePath != refPath + }) { + return true + } + return false + } + + retainProjectAndReferences := func(project *Project) { + // Retain project + toRemoveProjects.Delete(project.configFilePath) + if program := project.GetProgram(); program != nil { + program.RangeResolvedProjectReference(func(referencePath tspath.Path, _ *tsoptions.ParsedCommandLine, _ *tsoptions.ParsedCommandLine, _ int) bool { + if _, ok := b.configuredProjects.Load(referencePath); ok { + toRemoveProjects.Delete(referencePath) + } + return true + }) + } + } + + retainDefaultConfiguredProject := func(openFile string, openFilePath tspath.Path, project *Project) { + // Retain project and its references + retainProjectAndReferences(project) + + // Retain all the ancestor projects + b.configFileRegistryBuilder.forEachConfigFileNameFor(openFile, openFilePath, func(configFileName string) { + if ancestor := b.findOrCreateProject(configFileName, b.toPath(configFileName), projectLoadKindFind, logger); ancestor != nil { + retainProjectAndReferences(ancestor.Value()) + } + }) + } var inferredProjectFiles []string for _, overlay := range b.fs.overlays { - if p := b.findDefaultConfiguredProject(overlay.FileName(), b.toPath(overlay.FileName())); p != nil { - toRemoveProjects.Delete(p.Value().configFilePath) + openFile := overlay.FileName() + openFilePath := b.toPath(openFile) + if p := b.findDefaultConfiguredProject(openFile, openFilePath); p != nil { + retainDefaultConfiguredProject(openFile, openFilePath, p.Value()) } else { inferredProjectFiles = append(inferredProjectFiles, overlay.FileName()) } @@ -290,51 +341,156 @@ func logChangeFileResult(result changeFileResult, logger *logging.LogTree) { func (b *ProjectCollectionBuilder) DidRequestFile(uri lsproto.DocumentUri, logger *logging.LogTree) { startTime := time.Now() fileName := uri.FileName() - hasChanges := b.programStructureChanged - - // See if we can find a default project without updating a bunch of stuff. path := b.toPath(fileName) - if result := b.findDefaultProject(fileName, path); result != nil { - hasChanges = b.updateProgram(result, logger) || hasChanges - if result.Value() != nil { - return + if b.fs.isOpenFile(path) { + hasChanges := b.programStructureChanged + + // See if we can find a default project without updating a bunch of stuff. + if result := b.findDefaultProject(fileName, path); result != nil { + hasChanges = b.updateProgram(result, logger) || hasChanges + if result.Value() != nil { + return + } } - } - // Make sure all projects we know about are up to date... - b.configuredProjects.Range(func(entry *dirty.SyncMapEntry[tspath.Path, *Project]) bool { - hasChanges = b.updateProgram(entry, logger) || hasChanges - return true - }) - if hasChanges { - // If the structure of other projects changed, we might need to move files - // in/out of the inferred project. - var inferredProjectFiles []string - for path, overlay := range b.fs.overlays { - if b.findDefaultConfiguredProject(overlay.FileName(), path) == nil { - inferredProjectFiles = append(inferredProjectFiles, overlay.FileName()) + // Make sure all projects we know about are up to date... + b.configuredProjects.Range(func(entry *dirty.SyncMapEntry[tspath.Path, *Project]) bool { + hasChanges = b.updateProgram(entry, logger) || hasChanges + return true + }) + if hasChanges { + // If the structure of other projects changed, we might need to move files + // in/out of the inferred project. + var inferredProjectFiles []string + for path, overlay := range b.fs.overlays { + if b.findDefaultConfiguredProject(overlay.FileName(), path) == nil { + inferredProjectFiles = append(inferredProjectFiles, overlay.FileName()) + } + } + if len(inferredProjectFiles) > 0 { + b.updateInferredProjectRoots(inferredProjectFiles, logger) } } - if len(inferredProjectFiles) > 0 { - b.updateInferredProjectRoots(inferredProjectFiles, logger) + + if b.inferredProject.Value() != nil { + b.updateProgram(b.inferredProject, logger) } + + // At this point we should be able to find the default project for the file without + // creating anything else. Initially, I verified that and panicked if nothing was found, + // but that panic was getting triggered by fourslash infrastructure when it told us to + // open a package.json file. This is something the VS Code client would never do, but + // it seems possible that another client would. There's no point in panicking; we don't + // really even have an error condition until it tries to ask us language questions about + // a non-TS-handleable file. + } else { + b.ensureConfiguredProjectAndAncestorsForFile(fileName, path, logger) } - if b.inferredProject.Value() != nil { - b.updateProgram(b.inferredProject, logger) + if logger != nil { + elapsed := time.Since(startTime) + logger.Log(fmt.Sprintf("Completed file request for %s in %v", fileName, elapsed)) } +} - // At this point we should be able to find the default project for the file without - // creating anything else. Initially, I verified that and panicked if nothing was found, - // but that panic was getting triggered by fourslash infrastructure when it told us to - // open a package.json file. This is something the VS Code client would never do, but - // it seems possible that another client would. There's no point in panicking; we don't - // really even have an error condition until it tries to ask us language questions about - // a non-TS-handleable file. +func (b *ProjectCollectionBuilder) DidRequestProject(projectId tspath.Path, logger *logging.LogTree) { + startTime := time.Now() + if projectId == inferredProjectName { + // Update inferred project + if b.inferredProject.Value() != nil { + b.updateProgram(b.inferredProject, logger) + } + } else { + if entry, ok := b.configuredProjects.Load(projectId); ok { + b.updateProgram(entry, logger) + } + } if logger != nil { elapsed := time.Since(startTime) - logger.Log(fmt.Sprintf("Completed file request for %s in %v", fileName, elapsed)) + logger.Log(fmt.Sprintf("Completed project update request for %s in %v", projectId, elapsed)) + } +} + +func (b *ProjectCollectionBuilder) DidRequestProjectTrees(projectsReferenced map[tspath.Path]struct{}, logger *logging.LogTree) { + startTime := time.Now() + + var currentProjects []tspath.Path + b.configuredProjects.Range(func(sme *dirty.SyncMapEntry[tspath.Path, *Project]) bool { + currentProjects = append(currentProjects, sme.Key()) + return true + }) + + var seenProjects collections.SyncSet[tspath.Path] + wg := core.NewWorkGroup(false) + for _, projectId := range currentProjects { + wg.Queue(func() { + if entry, ok := b.configuredProjects.Load(projectId); ok { + // If this project has potential project reference for any of the project we are loading ancestor tree for + // load this project first + if project := entry.Value(); project != nil && (projectsReferenced == nil || project.hasPotentialProjectReference(projectsReferenced)) { + b.updateProgram(entry, logger) + } + b.ensureProjectTree(wg, entry, projectsReferenced, &seenProjects, logger) + } + }) + } + wg.RunAndWait() + + if logger != nil { + elapsed := time.Since(startTime) + logger.Log(fmt.Sprintf("Completed project tree request for %v in %v", maps.Keys(projectsReferenced), elapsed)) + } +} + +func (b *ProjectCollectionBuilder) ensureProjectTree( + wg core.WorkGroup, + entry *dirty.SyncMapEntry[tspath.Path, *Project], + projectsReferenced map[tspath.Path]struct{}, + seenProjects *collections.SyncSet[tspath.Path], + logger *logging.LogTree, +) { + if !seenProjects.AddIfAbsent(entry.Key()) { + return + } + + project := entry.Value() + if project == nil { + return + } + + program := project.GetProgram() + if program == nil { + return + } + + // If this project disables child load ignore it + if program.CommandLine().CompilerOptions().DisableReferencedProjectLoad.IsTrue() { + return + } + + children := program.GetResolvedProjectReferences() + if children == nil { + return + } + for _, childConfig := range children { + wg.Queue(func() { + if projectsReferenced != nil && program.RangeResolvedProjectReferenceInChildConfig( + childConfig, + func(referencePath tspath.Path, config *tsoptions.ParsedCommandLine, _ *tsoptions.ParsedCommandLine, _ int) bool { + _, isReferenced := projectsReferenced[referencePath] + return !isReferenced + }) { + return + } + + // Load this child project since this is referenced + childProjectEntry := b.findOrCreateProject(childConfig.ConfigName(), childConfig.ConfigFile.SourceFile.Path(), projectLoadKindCreate, logger) + b.updateProgram(childProjectEntry, logger) + + // Ensure children for this project + b.ensureProjectTree(wg, childProjectEntry, projectsReferenced, seenProjects, logger) + }) } } @@ -408,7 +564,7 @@ func (b *ProjectCollectionBuilder) markProjectsAffectedByConfigChanges( var hasChanges bool for path := range configChangeResult.affectedFiles { fileName := b.fs.overlays[path].FileName() - _ = b.ensureConfiguredProjectAndAncestorsForOpenFile(fileName, path, logger) + _ = b.ensureConfiguredProjectAndAncestorsForFile(fileName, path, logger) hasChanges = true } @@ -449,7 +605,7 @@ func (b *ProjectCollectionBuilder) findDefaultConfiguredProject(fileName string, }) if multipleCandidates { - if p := b.findOrCreateDefaultConfiguredProjectForOpenScriptInfo(fileName, path, projectLoadKindFind, nil).project; p != nil { + if p := b.findOrCreateDefaultConfiguredProjectForFile(fileName, path, projectLoadKindFind, nil).project; p != nil { return p } } @@ -457,28 +613,53 @@ func (b *ProjectCollectionBuilder) findDefaultConfiguredProject(fileName string, return configuredProjects[project] } -func (b *ProjectCollectionBuilder) ensureConfiguredProjectAndAncestorsForOpenFile(fileName string, path tspath.Path, logger *logging.LogTree) searchResult { - result := b.findOrCreateDefaultConfiguredProjectForOpenScriptInfo(fileName, path, projectLoadKindCreate, logger) - if result.project != nil { - // !!! sheetal todo this later - // // Create ancestor tree for findAllRefs (dont load them right away) - // forEachAncestorProjectLoad( - // info, - // tsconfigProject!, - // ancestor => { - // seenProjects.set(ancestor.project, kind); - // }, - // kind, - // `Creating project possibly referencing default composite project ${defaultProject.getProjectName()} of open file ${info.fileName}`, - // allowDeferredClosed, - // reloadedProjects, - // /*searchOnlyPotentialSolution*/ true, - // delayReloadedConfiguredProjects, - // ); +func (b *ProjectCollectionBuilder) ensureConfiguredProjectAndAncestorsForFile(fileName string, path tspath.Path, logger *logging.LogTree) searchResult { + result := b.findOrCreateDefaultConfiguredProjectForFile(fileName, path, projectLoadKindCreate, logger) + if result.project != nil && b.fs.isOpenFile(path) { + b.createAncestorTree(fileName, path, &result, logger) } return result } +func (b *ProjectCollectionBuilder) createAncestorTree(fileName string, path tspath.Path, openResult *searchResult, logger *logging.LogTree) { + project := openResult.project.Value() + for { + // Skip if project is not composite and we are only looking for solution + if project.CommandLine != nil && + (!project.CommandLine.CompilerOptions().Composite.IsTrue() || + project.CommandLine.CompilerOptions().DisableSolutionSearching.IsTrue()) { + return + } + + // Get config file name + ancestorConfigName := b.configFileRegistryBuilder.getAncestorConfigFileName(fileName, path, project.configFileName, logger) + if ancestorConfigName == "" { + return + } + + // find or delay load the project + ancestorPath := b.toPath(ancestorConfigName) + ancestor := b.findOrCreateProject(ancestorConfigName, ancestorPath, projectLoadKindCreate, logger) + if ancestor == nil { + return + } + + openResult.retain.Add(ancestorPath) + + // If this ancestor is new and was not updated because we are just creating it for future loading + // eg when invoking find all references or rename that could span multiple projects + // we would make the current project as its potential project reference + if ancestor.Value().CommandLine == nil && + (project.CommandLine == nil || project.CommandLine.CompilerOptions().Composite.IsTrue()) { + ancestor.Change(func(ancestorProject *Project) { + ancestorProject.setPotentialProjectReference(project.configFilePath) + }) + } + + project = ancestor.Value() + } +} + type searchNode struct { configFileName string loadKind projectLoadKind @@ -531,7 +712,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker( }, func(node searchNode) (isResult bool, stop bool) { configFilePath := b.toPath(node.configFileName) - config := b.configFileRegistryBuilder.findOrAcquireConfigForOpenFile(node.configFileName, configFilePath, path, node.loadKind, node.logger.Fork("Acquiring config for open file")) + config := b.configFileRegistryBuilder.findOrAcquireConfigForFile(node.configFileName, configFilePath, path, node.loadKind, node.logger.Fork("Acquiring config for open file")) if config == nil { node.logger.Log("Config file for project does not already exist") return false, false @@ -653,7 +834,7 @@ func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectWorker( return searchResult{retain: retain} } -func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectForOpenScriptInfo( +func (b *ProjectCollectionBuilder) findOrCreateDefaultConfiguredProjectForFile( fileName string, path tspath.Path, loadKind projectLoadKind, @@ -784,6 +965,7 @@ func (b *ProjectCollectionBuilder) updateProgram(entry dirty.Value[*Project], lo entry.Change(func(p *Project) { p.CommandLine = commandLine p.commandLineWithTypingsFiles = nil + p.potentialProjectReferences = nil }) } } @@ -881,8 +1063,9 @@ func (b *ProjectCollectionBuilder) deleteConfiguredProject(project dirty.Value[* logger.Log("Deleting configured project: " + project.Value().configFileName) } if program := project.Value().Program; program != nil { - program.ForEachResolvedProjectReference(func(referencePath tspath.Path, config *tsoptions.ParsedCommandLine, _ *tsoptions.ParsedCommandLine, _ int) { + program.RangeResolvedProjectReference(func(referencePath tspath.Path, config *tsoptions.ParsedCommandLine, _ *tsoptions.ParsedCommandLine, _ int) bool { b.configFileRegistryBuilder.releaseConfigForProject(referencePath, projectPath) + return true }) } b.configFileRegistryBuilder.releaseConfigForProject(projectPath, projectPath) diff --git a/pkg/project/projectcollectionbuilder_test.go b/pkg/project/projectcollectionbuilder_test.go index b7d056fb..259e338c 100644 --- a/pkg/project/projectcollectionbuilder_test.go +++ b/pkg/project/projectcollectionbuilder_test.go @@ -320,9 +320,11 @@ func TestProjectCollectionBuilder(t *testing.T) { session.DidOpenFile(context.Background(), uri, 1, content, lsproto.LanguageKindTypeScript) snapshot, release := session.Snapshot() defer release() - assert.Equal(t, len(snapshot.ProjectCollection.Projects()), 1) + assert.Equal(t, len(snapshot.ProjectCollection.Projects()), 2) demoProject := snapshot.ProjectCollection.ConfiguredProject(tspath.Path("/home/src/projects/project/demos/tsconfig.json")) assert.Assert(t, demoProject != nil) + solutionProject := snapshot.ProjectCollection.ConfiguredProject(tspath.Path("/home/src/projects/project/tsconfig.json")) + assert.Assert(t, solutionProject != nil) // Verify the default project is the demos project (not the app project that excludes demos files) defaultProject := snapshot.GetDefaultProject(uri) diff --git a/pkg/project/projectreferencesprogram_test.go b/pkg/project/projectreferencesprogram_test.go index 263d0d1f..b8fe02d8 100644 --- a/pkg/project/projectreferencesprogram_test.go +++ b/pkg/project/projectreferencesprogram_test.go @@ -7,6 +7,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/bundled" "github.com/buke/typescript-go-internal/pkg/core" + "github.com/buke/typescript-go-internal/pkg/ls/lsconv" "github.com/buke/typescript-go-internal/pkg/lsp/lsproto" "github.com/buke/typescript-go-internal/pkg/project" "github.com/buke/typescript-go-internal/pkg/testutil/projecttestutil" @@ -85,7 +86,7 @@ func TestProjectReferencesProgram(t *testing.T) { defer release() assert.Equal(t, len(snapshot.ProjectCollection.Projects()), 0) - uri := lsproto.DocumentUri("file://" + aTest) + uri := lsconv.FileNameToDocumentURI(aTest) session.DidOpenFile(context.Background(), uri, 1, files[aTest].(string), lsproto.LanguageKindTypeScript) snapshot, release = session.Snapshot() @@ -109,7 +110,7 @@ func TestProjectReferencesProgram(t *testing.T) { defer release() assert.Equal(t, len(snapshot.ProjectCollection.Projects()), 0) - uri := lsproto.DocumentUri("file://" + aTest) + uri := lsconv.FileNameToDocumentURI(aTest) session.DidOpenFile(context.Background(), uri, 1, files[aTest].(string), lsproto.LanguageKindTypeScript) snapshot, release = session.Snapshot() @@ -133,7 +134,7 @@ func TestProjectReferencesProgram(t *testing.T) { defer release() assert.Equal(t, len(snapshot.ProjectCollection.Projects()), 0) - uri := lsproto.DocumentUri("file://" + aTest) + uri := lsconv.FileNameToDocumentURI(aTest) session.DidOpenFile(context.Background(), uri, 1, files[aTest].(string), lsproto.LanguageKindTypeScript) snapshot, release = session.Snapshot() @@ -157,7 +158,7 @@ func TestProjectReferencesProgram(t *testing.T) { defer release() assert.Equal(t, len(snapshot.ProjectCollection.Projects()), 0) - uri := lsproto.DocumentUri("file://" + aTest) + uri := lsconv.FileNameToDocumentURI(aTest) session.DidOpenFile(context.Background(), uri, 1, files[aTest].(string), lsproto.LanguageKindTypeScript) snapshot, release = session.Snapshot() @@ -181,7 +182,7 @@ func TestProjectReferencesProgram(t *testing.T) { defer release() assert.Equal(t, len(snapshot.ProjectCollection.Projects()), 0) - uri := lsproto.DocumentUri("file://" + aTest) + uri := lsconv.FileNameToDocumentURI(aTest) session.DidOpenFile(context.Background(), uri, 1, files[aTest].(string), lsproto.LanguageKindTypeScript) snapshot, release = session.Snapshot() @@ -205,7 +206,7 @@ func TestProjectReferencesProgram(t *testing.T) { defer release() assert.Equal(t, len(snapshot.ProjectCollection.Projects()), 0) - uri := lsproto.DocumentUri("file://" + aTest) + uri := lsconv.FileNameToDocumentURI(aTest) session.DidOpenFile(context.Background(), uri, 1, files[aTest].(string), lsproto.LanguageKindTypeScript) snapshot, release = session.Snapshot() @@ -229,7 +230,7 @@ func TestProjectReferencesProgram(t *testing.T) { defer release() assert.Equal(t, len(snapshot.ProjectCollection.Projects()), 0) - uri := lsproto.DocumentUri("file://" + aTest) + uri := lsconv.FileNameToDocumentURI(aTest) session.DidOpenFile(context.Background(), uri, 1, files[aTest].(string), lsproto.LanguageKindTypeScript) snapshot, release = session.Snapshot() @@ -253,7 +254,7 @@ func TestProjectReferencesProgram(t *testing.T) { defer release() assert.Equal(t, len(snapshot.ProjectCollection.Projects()), 0) - uri := lsproto.DocumentUri("file://" + aTest) + uri := lsconv.FileNameToDocumentURI(aTest) session.DidOpenFile(context.Background(), uri, 1, files[aTest].(string), lsproto.LanguageKindTypeScript) snapshot, release = session.Snapshot() diff --git a/pkg/project/session.go b/pkg/project/session.go index c31c9a4b..ca8bc0a7 100644 --- a/pkg/project/session.go +++ b/pkg/project/session.go @@ -13,6 +13,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/compiler" "github.com/buke/typescript-go-internal/pkg/core" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/ls" "github.com/buke/typescript-go-internal/pkg/ls/lsconv" "github.com/buke/typescript-go-internal/pkg/ls/lsutil" @@ -32,7 +33,9 @@ const ( UpdateReasonDidChangeCompilerOptionsForInferredProjects UpdateReasonRequestedLanguageServicePendingChanges UpdateReasonRequestedLanguageServiceProjectNotLoaded + UpdateReasonRequestedLanguageServiceForFileNotOpen UpdateReasonRequestedLanguageServiceProjectDirty + UpdateReasonRequestedLoadProjectTree ) // SessionOptions are the immutable initialization options for a session. @@ -46,6 +49,7 @@ type SessionOptions struct { LoggingEnabled bool PushDiagnosticsEnabled bool DebounceDelay time.Duration + Locale locale.Locale } type SessionInit struct { @@ -228,9 +232,11 @@ func (s *Session) DidOpenFile(ctx context.Context, uri lsproto.DocumentUri, vers changes, overlays := s.flushChangesLocked(ctx) s.pendingFileChangesMu.Unlock() s.UpdateSnapshot(ctx, overlays, SnapshotChange{ - reason: UpdateReasonDidOpenFile, - fileChanges: changes, - requestedURIs: []lsproto.DocumentUri{uri}, + reason: UpdateReasonDidOpenFile, + fileChanges: changes, + ResourceRequest: ResourceRequest{ + Documents: []lsproto.DocumentUri{uri}, + }, }) } @@ -372,42 +378,133 @@ func (s *Session) Snapshot() (*Snapshot, func()) { } } -func (s *Session) GetLanguageService(ctx context.Context, uri lsproto.DocumentUri) (*ls.LanguageService, error) { +func (s *Session) getSnapshot( + ctx context.Context, + request ResourceRequest, +) *Snapshot { var snapshot *Snapshot fileChanges, overlays, ataChanges, newConfig := s.flushChanges(ctx) updateSnapshot := !fileChanges.IsEmpty() || len(ataChanges) > 0 || newConfig != nil if updateSnapshot { // If there are pending file changes, we need to update the snapshot. // Sending the requested URI ensures that the project for this URI is loaded. - snapshot = s.UpdateSnapshot(ctx, overlays, SnapshotChange{ - reason: UpdateReasonRequestedLanguageServicePendingChanges, - fileChanges: fileChanges, - ataChanges: ataChanges, - newConfig: newConfig, - requestedURIs: []lsproto.DocumentUri{uri}, + return s.UpdateSnapshot(ctx, overlays, SnapshotChange{ + reason: UpdateReasonRequestedLanguageServicePendingChanges, + fileChanges: fileChanges, + ataChanges: ataChanges, + newConfig: newConfig, + ResourceRequest: request, }) + } + + // If there are no pending file changes, we can try to use the current snapshot. + s.snapshotMu.RLock() + snapshot = s.snapshot + s.snapshotMu.RUnlock() + + var updateReason UpdateReason + if len(request.Projects) > 0 { + updateReason = UpdateReasonRequestedLanguageServiceProjectDirty + } else if request.ProjectTree != nil { + updateReason = UpdateReasonRequestedLoadProjectTree } else { - // If there are no pending file changes, we can try to use the current snapshot. - s.snapshotMu.RLock() - snapshot = s.snapshot - s.snapshotMu.RUnlock() + for _, document := range request.Documents { + if snapshot.fs.isOpenFile(document.FileName()) { + // The current snapshot does not have an up to date project for the URI, + // so we need to update the snapshot to ensure the project is loaded. + // !!! Allow multiple projects to update in parallel + project := snapshot.GetDefaultProject(document) + if project == nil { + updateReason = UpdateReasonRequestedLanguageServiceProjectNotLoaded + break + } else if project.dirty { + updateReason = UpdateReasonRequestedLanguageServiceProjectDirty + break + } + } else { + updateReason = UpdateReasonRequestedLanguageServiceForFileNotOpen + break + } + } } - project := snapshot.GetDefaultProject(uri) - if project == nil && !updateSnapshot || project != nil && project.dirty { - // The current snapshot does not have an up to date project for the URI, - // so we need to update the snapshot to ensure the project is loaded. - // !!! Allow multiple projects to update in parallel + if updateReason != UpdateReasonUnknown { snapshot = s.UpdateSnapshot(ctx, overlays, SnapshotChange{ - reason: core.IfElse(project == nil, UpdateReasonRequestedLanguageServiceProjectNotLoaded, UpdateReasonRequestedLanguageServiceProjectDirty), - requestedURIs: []lsproto.DocumentUri{uri}, + reason: updateReason, + ResourceRequest: request, }) - project = snapshot.GetDefaultProject(uri) } + return snapshot +} + +func (s *Session) getSnapshotAndDefaultProject(ctx context.Context, uri lsproto.DocumentUri) (*Snapshot, *Project, *ls.LanguageService, error) { + snapshot := s.getSnapshot( + ctx, + ResourceRequest{Documents: []lsproto.DocumentUri{uri}}, + ) + project := snapshot.GetDefaultProject(uri) + if project == nil { + return nil, nil, nil, fmt.Errorf("no project found for URI %s", uri) + } + return snapshot, project, ls.NewLanguageService(project.GetProgram(), snapshot), nil +} + +func (s *Session) GetLanguageService(ctx context.Context, uri lsproto.DocumentUri) (*ls.LanguageService, error) { + _, _, languageService, err := s.getSnapshotAndDefaultProject(ctx, uri) + if err != nil { + return nil, err + } + return languageService, nil +} + +func (s *Session) GetLanguageServiceAndProjectsForFile(ctx context.Context, uri lsproto.DocumentUri) (*Project, *ls.LanguageService, []*Project, error) { + snapshot, project, defaultLs, err := s.getSnapshotAndDefaultProject(ctx, uri) + if err != nil { + return nil, nil, nil, err + } + // !!! TODO: sheetal: Get other projects that contain the file with symlink + allProjects := snapshot.GetProjectsContainingFile(uri) + return project, defaultLs, allProjects, nil +} + +func (s *Session) GetProjectsForFile(ctx context.Context, uri lsproto.DocumentUri) ([]*Project, error) { + snapshot := s.getSnapshot( + ctx, + ResourceRequest{Documents: []lsproto.DocumentUri{uri}}, + ) + + // !!! TODO: sheetal: Get other projects that contain the file with symlink + allProjects := snapshot.GetProjectsContainingFile(uri) + return allProjects, nil +} + +func (s *Session) GetLanguageServiceForProjectWithFile(ctx context.Context, project *Project, uri lsproto.DocumentUri) *ls.LanguageService { + snapshot := s.getSnapshot( + ctx, + ResourceRequest{Projects: []tspath.Path{project.Id()}}, + ) + // Ensure we have updated project + project = snapshot.ProjectCollection.GetProjectByPath(project.Id()) if project == nil { - return nil, fmt.Errorf("no project found for URI %s", uri) + return nil } - return ls.NewLanguageService(project.GetProgram(), snapshot), nil + // if program doesnt contain this file any more ignore it + if !project.HasFile(uri.FileName()) { + return nil + } + return ls.NewLanguageService(project.GetProgram(), snapshot) +} + +func (s *Session) GetSnapshotLoadingProjectTree( + ctx context.Context, + // If null, all project trees need to be loaded, otherwise only those that are referenced + requestedProjectTrees map[tspath.Path]struct{}, +) *Snapshot { + snapshot := s.getSnapshot( + ctx, + ResourceRequest{ProjectTree: &ProjectTreeRequest{requestedProjectTrees}}, + ) + return snapshot } func (s *Session) UpdateSnapshot(ctx context.Context, overlays map[tspath.Path]*Overlay, change SnapshotChange) *Snapshot { diff --git a/pkg/project/snapshot.go b/pkg/project/snapshot.go index f08dc196..0d6fe6a7 100644 --- a/pkg/project/snapshot.go +++ b/pkg/project/snapshot.go @@ -3,6 +3,8 @@ package project import ( "context" "fmt" + "maps" + "slices" "sync/atomic" "time" @@ -76,6 +78,13 @@ func (s *Snapshot) GetDefaultProject(uri lsproto.DocumentUri) *Project { return s.ProjectCollection.GetDefaultProject(fileName, path) } +func (s *Snapshot) GetProjectsContainingFile(uri lsproto.DocumentUri) []*Project { + fileName := uri.FileName() + path := s.toPath(fileName) + // TODO!! sheetal may be change this to handle symlinks!! + return s.ProjectCollection.GetProjectsContainingFile(path) +} + func (s *Snapshot) GetFile(fileName string) FileHandle { return s.fs.GetFile(fileName) } @@ -128,13 +137,30 @@ type APISnapshotRequest struct { UpdateProjects *collections.Set[tspath.Path] } +type ProjectTreeRequest struct { + // If null, all project trees need to be loaded, otherwise only those that are referenced + referencedProjects map[tspath.Path]struct{} +} + +type ResourceRequest struct { + // Documents are URIs that were requested by the client. + // The new snapshot should ensure projects for these URIs have loaded programs. + // If the requested Documents are not open, ensure that their default project is created + Documents []lsproto.DocumentUri + // Update requested Projects. + // this is used when we want to get LS and from all the Projects the file can be part of + Projects []tspath.Path + // Update and ensure project trees that reference the projects + // This is used to compute the solution and project tree so that + // we can find references across all the projects in the solution irrespective of which project is open + ProjectTree *ProjectTreeRequest +} + type SnapshotChange struct { + ResourceRequest reason UpdateReason // fileChanges are the changes that have occurred since the last snapshot. fileChanges FileChangeSummary - // requestedURIs are URIs that were requested by the client. - // The new snapshot should ensure projects for these URIs have loaded programs. - requestedURIs []lsproto.DocumentUri // compilerOptionsForInferredProjects is the compiler options to use for inferred projects. // It should only be set the value in the next snapshot should be changed. If nil, the // value from the previous snapshot will be copied to the new snapshot. @@ -179,17 +205,34 @@ func (s *Snapshot) Clone(ctx context.Context, change SnapshotChange, overlays ma if session.options.LoggingEnabled { logger = logging.NewLogTree(fmt.Sprintf("Cloning snapshot %d", s.id)) + getDetails := func() string { + details := "" + if len(change.Documents) != 0 { + details += fmt.Sprintf(" Documents: %v", change.Documents) + } + if len(change.Projects) != 0 { + details += fmt.Sprintf(" Projects: %v", change.Projects) + } + if change.ProjectTree != nil { + details += fmt.Sprintf(" ProjectTree: %v", slices.Collect(maps.Keys(change.ProjectTree.referencedProjects))) + } + return details + } switch change.reason { case UpdateReasonDidOpenFile: logger.Logf("Reason: DidOpenFile - %s", change.fileChanges.Opened) case UpdateReasonDidChangeCompilerOptionsForInferredProjects: logger.Logf("Reason: DidChangeCompilerOptionsForInferredProjects") case UpdateReasonRequestedLanguageServicePendingChanges: - logger.Logf("Reason: RequestedLanguageService (pending file changes) - %v", change.requestedURIs) + logger.Logf("Reason: RequestedLanguageService (pending file changes) - %v", getDetails()) case UpdateReasonRequestedLanguageServiceProjectNotLoaded: - logger.Logf("Reason: RequestedLanguageService (project not loaded) - %v", change.requestedURIs) + logger.Logf("Reason: RequestedLanguageService (project not loaded) - %v", getDetails()) + case UpdateReasonRequestedLanguageServiceForFileNotOpen: + logger.Logf("Reason: RequestedLanguageService (file not open) - %v", getDetails()) case UpdateReasonRequestedLanguageServiceProjectDirty: - logger.Logf("Reason: RequestedLanguageService (project dirty) - %v", change.requestedURIs) + logger.Logf("Reason: RequestedLanguageService (project dirty) - %v", getDetails()) + case UpdateReasonRequestedLoadProjectTree: + logger.Logf("Reason: RequestedLoadProjectTree - %v", getDetails()) } } @@ -244,10 +287,18 @@ func (s *Snapshot) Clone(ctx context.Context, change SnapshotChange, overlays ma projectCollectionBuilder.DidChangeFiles(change.fileChanges, logger.Fork("DidChangeFiles")) } - for _, uri := range change.requestedURIs { + for _, uri := range change.Documents { projectCollectionBuilder.DidRequestFile(uri, logger.Fork("DidRequestFile")) } + for _, projectId := range change.Projects { + projectCollectionBuilder.DidRequestProject(projectId, logger.Fork("DidRequestProject")) + } + + if change.ProjectTree != nil { + projectCollectionBuilder.DidRequestProjectTrees(change.ProjectTree.referencedProjects, logger.Fork("DidRequestProjectTrees")) + } + projectCollection, configFileRegistry := projectCollectionBuilder.Finalize(logger) // Clean cached disk files not touched by any open project. It's not important that we do this on @@ -266,7 +317,7 @@ func (s *Snapshot) Clone(ctx context.Context, change SnapshotChange, overlays ma removedFiles := 0 fs.diskFiles.Range(func(entry *dirty.SyncMapEntry[tspath.Path, *diskFile]) bool { for _, project := range projectCollection.Projects() { - if project.host.seenFiles.Has(entry.Key()) { + if project.host != nil && project.host.seenFiles.Has(entry.Key()) { return true } } diff --git a/pkg/project/snapshotfs.go b/pkg/project/snapshotfs.go index 70bdc901..816ac88a 100644 --- a/pkg/project/snapshotfs.go +++ b/pkg/project/snapshotfs.go @@ -54,6 +54,12 @@ func (s *SnapshotFS) GetFile(fileName string) FileHandle { return entry() } +func (s *SnapshotFS) isOpenFile(fileName string) bool { + path := s.toPath(fileName) + _, ok := s.overlays[path] + return ok +} + type snapshotFSBuilder struct { fs vfs.FS overlays map[tspath.Path]*Overlay @@ -92,6 +98,11 @@ func (s *snapshotFSBuilder) Finalize() (*SnapshotFS, bool) { }, changed } +func (s *snapshotFSBuilder) isOpenFile(path tspath.Path) bool { + _, ok := s.overlays[path] + return ok +} + func (s *snapshotFSBuilder) GetFile(fileName string) FileHandle { path := s.toPath(fileName) return s.GetFileByPath(fileName, path) diff --git a/pkg/project/untitled_test.go b/pkg/project/untitled_test.go index a6667c3a..e282c50e 100644 --- a/pkg/project/untitled_test.go +++ b/pkg/project/untitled_test.go @@ -71,7 +71,9 @@ x++;` Context: &lsproto.ReferenceContext{IncludeDeclaration: true}, } - resp, err := languageService.ProvideReferences(ctx, refParams) + originalNode, symbolAndEntries, ok := languageService.ProvideSymbolsAndEntries(ctx, refParams.TextDocumentURI(), refParams.Position, false) + assert.Assert(t, ok) + resp, err := languageService.ProvideReferencesFromSymbolAndEntries(ctx, refParams, originalNode, symbolAndEntries) assert.NilError(t, err) refs := *resp.Locations @@ -144,7 +146,9 @@ x++;` Context: &lsproto.ReferenceContext{IncludeDeclaration: true}, } - resp, err := languageService.ProvideReferences(ctx, refParams) + originalNode, symbolAndEntries, ok := languageService.ProvideSymbolsAndEntries(ctx, refParams.TextDocumentURI(), refParams.Position, false) + assert.Assert(t, ok) + resp, err := languageService.ProvideReferencesFromSymbolAndEntries(ctx, refParams, originalNode, symbolAndEntries) assert.NilError(t, err) refs := *resp.Locations diff --git a/pkg/sourcemap/util.go b/pkg/sourcemap/util.go index cd87929b..93f9e18c 100644 --- a/pkg/sourcemap/util.go +++ b/pkg/sourcemap/util.go @@ -9,18 +9,20 @@ import ( // Tries to find the sourceMappingURL comment at the end of a file. func TryGetSourceMappingURL(lineInfo *ECMALineInfo) string { - for index := lineInfo.LineCount() - 1; index >= 0; index-- { - line := lineInfo.LineText(index) - line = strings.TrimLeftFunc(line, unicode.IsSpace) - line = strings.TrimRightFunc(line, stringutil.IsLineBreak) - if len(line) == 0 { - continue - } - if len(line) < 4 || !strings.HasPrefix(line, "//") || line[2] != '#' && line[2] != '@' || line[3] != ' ' { - break - } - if url, ok := strings.CutPrefix(line[4:], "sourceMappingURL="); ok { - return strings.TrimRightFunc(url, unicode.IsSpace) + if lineInfo != nil { + for index := lineInfo.LineCount() - 1; index >= 0; index-- { + line := lineInfo.LineText(index) + line = strings.TrimLeftFunc(line, unicode.IsSpace) + line = strings.TrimRightFunc(line, stringutil.IsLineBreak) + if len(line) == 0 { + continue + } + if len(line) < 4 || !strings.HasPrefix(line, "//") || line[2] != '#' && line[2] != '@' || line[3] != ' ' { + break + } + if url, ok := strings.CutPrefix(line[4:], "sourceMappingURL="); ok { + return strings.TrimRightFunc(url, unicode.IsSpace) + } } } return "" diff --git a/pkg/stringutil/format.go b/pkg/stringutil/format.go deleted file mode 100644 index 3c52e36d..00000000 --- a/pkg/stringutil/format.go +++ /dev/null @@ -1,19 +0,0 @@ -package stringutil - -import ( - "fmt" - "regexp" - "strconv" -) - -var placeholderRegexp = regexp.MustCompile(`{(\d+)}`) - -func Format(text string, args []any) string { - return placeholderRegexp.ReplaceAllStringFunc(text, func(match string) string { - index, err := strconv.ParseInt(match[1:len(match)-1], 10, 0) - if err != nil || int(index) >= len(args) { - panic("Invalid formatting placeholder") - } - return fmt.Sprintf("%v", args[int(index)]) - }) -} diff --git a/pkg/testutil/fsbaselineutil/differ.go b/pkg/testutil/fsbaselineutil/differ.go new file mode 100644 index 00000000..423a14ed --- /dev/null +++ b/pkg/testutil/fsbaselineutil/differ.go @@ -0,0 +1,122 @@ +package fsbaselineutil + +import ( + "fmt" + "io" + "io/fs" + "maps" + "slices" + "time" + + "github.com/buke/typescript-go-internal/pkg/collections" + "github.com/buke/typescript-go-internal/pkg/vfs/iovfs" + "github.com/buke/typescript-go-internal/pkg/vfs/vfstest" +) + +type DiffEntry struct { + Content string + MTime time.Time + IsWritten bool + SymlinkTarget string +} + +type Snapshot struct { + Snap map[string]*DiffEntry + DefaultLibs *collections.SyncSet[string] +} + +type FSDiffer struct { + FS iovfs.FsWithSys + DefaultLibs func() *collections.SyncSet[string] + WrittenFiles *collections.SyncSet[string] + + serializedDiff *Snapshot +} + +func (d *FSDiffer) MapFs() *vfstest.MapFS { + return d.FS.FSys().(*vfstest.MapFS) +} + +func (d *FSDiffer) SerializedDiff() *Snapshot { + return d.serializedDiff +} + +func (d *FSDiffer) BaselineFSwithDiff(baseline io.Writer) { + // todo: baselines the entire fs, possibly doesn't correctly diff all cases of emitted files, since emit isn't fully implemented and doesn't always emit the same way as strada + snap := map[string]*DiffEntry{} + + diffs := map[string]string{} + + for path, file := range d.MapFs().Entries() { + if file.Mode&fs.ModeSymlink != 0 { + target, ok := d.MapFs().GetTargetOfSymlink(path) + if !ok { + panic("Failed to resolve symlink target: " + path) + } + newEntry := &DiffEntry{SymlinkTarget: target} + snap[path] = newEntry + d.addFsEntryDiff(diffs, newEntry, path) + continue + } else if file.Mode.IsRegular() { + newEntry := &DiffEntry{Content: string(file.Data), MTime: file.ModTime, IsWritten: d.WrittenFiles.Has(path)} + snap[path] = newEntry + d.addFsEntryDiff(diffs, newEntry, path) + } + } + if d.serializedDiff != nil { + for path := range d.serializedDiff.Snap { + if fileInfo := d.MapFs().GetFileInfo(path); fileInfo == nil { + // report deleted + d.addFsEntryDiff(diffs, nil, path) + } + } + } + var defaultLibs collections.SyncSet[string] + if d.DefaultLibs != nil && d.DefaultLibs() != nil { + d.DefaultLibs().Range(func(libPath string) bool { + defaultLibs.Add(libPath) + return true + }) + } + d.serializedDiff = &Snapshot{ + Snap: snap, + DefaultLibs: &defaultLibs, + } + diffKeys := slices.Collect(maps.Keys(diffs)) + slices.Sort(diffKeys) + for _, path := range diffKeys { + fmt.Fprint(baseline, "//// ["+path+"] ", diffs[path], "\n") + } + fmt.Fprintln(baseline) + *d.WrittenFiles = collections.SyncSet[string]{} // Reset written files after baseline +} + +func (d *FSDiffer) addFsEntryDiff(diffs map[string]string, newDirContent *DiffEntry, path string) { + var oldDirContent *DiffEntry + var defaultLibs *collections.SyncSet[string] + if d.serializedDiff != nil { + oldDirContent = d.serializedDiff.Snap[path] + defaultLibs = d.serializedDiff.DefaultLibs + } + // todo handle more cases of fs changes + if oldDirContent == nil { + if d.DefaultLibs == nil || d.DefaultLibs() == nil || !d.DefaultLibs().Has(path) { + if newDirContent.SymlinkTarget != "" { + diffs[path] = "-> " + newDirContent.SymlinkTarget + " *new*" + } else { + diffs[path] = "*new* \n" + newDirContent.Content + } + } + } else if newDirContent == nil { + diffs[path] = "*deleted*" + } else if newDirContent.Content != oldDirContent.Content { + diffs[path] = "*modified* \n" + newDirContent.Content + } else if newDirContent.IsWritten { + diffs[path] = "*rewrite with same content*" + } else if newDirContent.MTime != oldDirContent.MTime { + diffs[path] = "*mTime changed*" + } else if defaultLibs != nil && defaultLibs.Has(path) && d.DefaultLibs != nil && d.DefaultLibs() != nil && !d.DefaultLibs().Has(path) { + // Lib file that was read + diffs[path] = "*Lib*\n" + newDirContent.Content + } +} diff --git a/pkg/testutil/harnessutil/harnessutil.go b/pkg/testutil/harnessutil/harnessutil.go index bb8805aa..c16c488b 100644 --- a/pkg/testutil/harnessutil/harnessutil.go +++ b/pkg/testutil/harnessutil/harnessutil.go @@ -21,7 +21,9 @@ import ( "github.com/buke/typescript-go-internal/pkg/collections" "github.com/buke/typescript-go-internal/pkg/compiler" "github.com/buke/typescript-go-internal/pkg/core" + "github.com/buke/typescript-go-internal/pkg/diagnostics" "github.com/buke/typescript-go-internal/pkg/execute/incremental" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/outputpaths" "github.com/buke/typescript-go-internal/pkg/parser" "github.com/buke/typescript-go-internal/pkg/repo" @@ -531,8 +533,8 @@ func NewTracerForBaselining(opts tspath.ComparePathsOptions, builder *strings.Bu } } -func (t *TracerForBaselining) Trace(msg string) { - t.TraceWithWriter(t.builder, msg, true) +func (t *TracerForBaselining) Trace(msg *diagnostics.Message, args ...any) { + t.TraceWithWriter(t.builder, msg.Localize(locale.Default, args...), true) } func (t *TracerForBaselining) TraceWithWriter(w io.Writer, msg string, usePackageJsonCache bool) { diff --git a/pkg/testutil/projecttestutil/projecttestutil.go b/pkg/testutil/projecttestutil/projecttestutil.go index 60ceec26..b731b97a 100644 --- a/pkg/testutil/projecttestutil/projecttestutil.go +++ b/pkg/testutil/projecttestutil/projecttestutil.go @@ -15,6 +15,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/project/logging" "github.com/buke/typescript-go-internal/pkg/testutil/baseline" "github.com/buke/typescript-go-internal/pkg/vfs" + "github.com/buke/typescript-go-internal/pkg/vfs/iovfs" "github.com/buke/typescript-go-internal/pkg/vfs/vfstest" ) @@ -34,11 +35,16 @@ type TypingsInstallerOptions struct { } type SessionUtils struct { - fs vfs.FS - client *ClientMock - npmExecutor *NpmExecutorMock - tiOptions *TypingsInstallerOptions - logger logging.LogCollector + fsFromFileMap iovfs.FsWithSys + fs vfs.FS + client *ClientMock + npmExecutor *NpmExecutorMock + tiOptions *TypingsInstallerOptions + logger logging.LogCollector +} + +func (h *SessionUtils) FsFromFileMap() iovfs.FsWithSys { + return h.fsFromFileMap } func (h *SessionUtils) Client() *ClientMock { @@ -192,15 +198,28 @@ func SetupWithTypingsInstaller(files map[string]any, tiOptions *TypingsInstaller } func SetupWithOptionsAndTypingsInstaller(files map[string]any, options *project.SessionOptions, tiOptions *TypingsInstallerOptions) (*project.Session, *SessionUtils) { - fs := bundled.WrapFS(vfstest.FromMap(files, false /*useCaseSensitiveFileNames*/)) + init, sessionUtils := GetSessionInitOptions(files, options, tiOptions) + session := project.NewSession(init) + + return session, sessionUtils +} + +func WithRequestID(ctx context.Context) context.Context { + return core.WithRequestID(ctx, "0") +} + +func GetSessionInitOptions(files map[string]any, options *project.SessionOptions, tiOptions *TypingsInstallerOptions) (*project.SessionInit, *SessionUtils) { + fsFromFileMap := vfstest.FromMap(files, false /*useCaseSensitiveFileNames*/) + fs := bundled.WrapFS(fsFromFileMap) clientMock := &ClientMock{} npmExecutorMock := &NpmExecutorMock{} sessionUtils := &SessionUtils{ - fs: fs, - client: clientMock, - npmExecutor: npmExecutorMock, - tiOptions: tiOptions, - logger: logging.NewTestLogger(), + fsFromFileMap: fsFromFileMap.(iovfs.FsWithSys), + fs: fs, + client: clientMock, + npmExecutor: npmExecutorMock, + tiOptions: tiOptions, + logger: logging.NewTestLogger(), } // Configure the npm executor mock to handle typings installation @@ -219,17 +238,11 @@ func SetupWithOptionsAndTypingsInstaller(files map[string]any, options *project. } } - session := project.NewSession(&project.SessionInit{ + return &project.SessionInit{ Options: options, FS: fs, Client: clientMock, NpmExecutor: npmExecutorMock, Logger: sessionUtils.logger, - }) - - return session, sessionUtils -} - -func WithRequestID(ctx context.Context) context.Context { - return core.WithRequestID(ctx, "0") + }, sessionUtils } diff --git a/pkg/testutil/stringtestutil/stringtestutil.go b/pkg/testutil/stringtestutil/stringtestutil.go index 3796c0bd..a10b6800 100644 --- a/pkg/testutil/stringtestutil/stringtestutil.go +++ b/pkg/testutil/stringtestutil/stringtestutil.go @@ -29,7 +29,15 @@ func Dedent(text string) string { } } lines = lines[startLine : lastLine+1] - indentation := stringutil.GuessIndentation(lines) + mappedLines := make([]string, len(lines)) + for i, line := range lines { + if trimmed := strings.TrimSpace(line); trimmed == "" { + mappedLines[i] = "" + } else { + mappedLines[i] = line + } + } + indentation := stringutil.GuessIndentation(mappedLines) if indentation > 0 { for i := range lines { if len(lines[i]) > indentation { diff --git a/pkg/testutil/tsbaseline/error_baseline.go b/pkg/testutil/tsbaseline/error_baseline.go index 74c385ca..6810a333 100644 --- a/pkg/testutil/tsbaseline/error_baseline.go +++ b/pkg/testutil/tsbaseline/error_baseline.go @@ -12,6 +12,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/diagnosticwriter" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/testutil/baseline" "github.com/buke/typescript-go-internal/pkg/testutil/harnessutil" "github.com/buke/typescript-go-internal/pkg/tspath" @@ -91,7 +92,7 @@ func iterateErrorBaseline[T diagnosticwriter.Diagnostic](t *testing.T, inputFile var result []string outputErrorText := func(diag diagnosticwriter.Diagnostic) { - message := diagnosticwriter.FlattenDiagnosticMessage(diag, harnessNewLine) + message := diagnosticwriter.FlattenDiagnosticMessage(diag, harnessNewLine, locale.Default) var errLines []string for line := range strings.SplitSeq(removeTestPathPrefixes(message, false), "\n") { @@ -112,7 +113,7 @@ func iterateErrorBaseline[T diagnosticwriter.Diagnostic](t *testing.T, inputFile if len(location) > 0 && isDefaultLibraryFile(info.File().FileName()) { location = diagnosticsLocationPattern.ReplaceAllString(location, "$1:--:--") } - errLines = append(errLines, fmt.Sprintf("!!! related TS%d%s: %s", info.Code(), location, diagnosticwriter.FlattenDiagnosticMessage(info, harnessNewLine))) + errLines = append(errLines, fmt.Sprintf("!!! related TS%d%s: %s", info.Code(), location, diagnosticwriter.FlattenDiagnosticMessage(info, harnessNewLine, locale.Default))) } for _, e := range errLines { diff --git a/pkg/tsoptions/commandlineoption.go b/pkg/tsoptions/commandlineoption.go index 218a6fb6..a5bc067a 100644 --- a/pkg/tsoptions/commandlineoption.go +++ b/pkg/tsoptions/commandlineoption.go @@ -35,8 +35,8 @@ type CommandLineOption struct { // used in output in serializing and generate tsconfig Category *diagnostics.Message - // a flag indicating whether `validateJsonOptionValue` should perform extra checks - extraValidation bool + // What kind of extra validation `validateJsonOptionValue` should do + extraValidation extraValidation // true or undefined // used for configDirTemplateSubstitutionOptions @@ -65,6 +65,14 @@ type CommandLineOption struct { ElementOptions CommandLineOptionNameMap } +type extraValidation string + +const ( + extraValidationNone extraValidation = "" + extraValidationSpec extraValidation = "spec" + extraValidationLocale extraValidation = "locale" +) + func (o *CommandLineOption) DeprecatedKeys() *collections.Set[string] { if o.Kind != CommandLineOptionTypeEnum { return nil @@ -149,13 +157,13 @@ var commandLineOptionElements = map[string]*CommandLineOption{ Name: "excludeDirectory", Kind: CommandLineOptionTypeString, IsFilePath: true, - extraValidation: true, + extraValidation: extraValidationSpec, }, "excludeFiles": { Name: "excludeFile", Kind: CommandLineOptionTypeString, IsFilePath: true, - extraValidation: true, + extraValidation: extraValidationSpec, }, // Test infra options "libFiles": { diff --git a/pkg/tsoptions/declscompiler.go b/pkg/tsoptions/declscompiler.go index b782dcf7..755a0cb8 100644 --- a/pkg/tsoptions/declscompiler.go +++ b/pkg/tsoptions/declscompiler.go @@ -211,6 +211,7 @@ var commonOptionsWithBuild = []*CommandLineOption{ IsCommandLineOnly: true, Description: diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit, DefaultValueDescription: diagnostics.Platform_specific, + extraValidation: extraValidationLocale, }, { diff --git a/pkg/tsoptions/parsedbuildcommandline.go b/pkg/tsoptions/parsedbuildcommandline.go index b4d50786..e440f425 100644 --- a/pkg/tsoptions/parsedbuildcommandline.go +++ b/pkg/tsoptions/parsedbuildcommandline.go @@ -5,6 +5,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/core" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/tspath" ) @@ -19,6 +20,9 @@ type ParsedBuildCommandLine struct { resolvedProjectPaths []string resolvedProjectPathsOnce sync.Once + + locale locale.Locale + localeOnce sync.Once } func (p *ParsedBuildCommandLine) ResolvedProjectPaths() []string { @@ -31,3 +35,10 @@ func (p *ParsedBuildCommandLine) ResolvedProjectPaths() []string { }) return p.resolvedProjectPaths } + +func (p *ParsedBuildCommandLine) Locale() locale.Locale { + p.localeOnce.Do(func() { + p.locale, _ = locale.Parse(p.CompilerOptions.Locale) + }) + return p.locale +} diff --git a/pkg/tsoptions/parsedcommandline.go b/pkg/tsoptions/parsedcommandline.go index 61bccb39..84af535a 100644 --- a/pkg/tsoptions/parsedcommandline.go +++ b/pkg/tsoptions/parsedcommandline.go @@ -10,6 +10,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/ast" "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/glob" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/module" "github.com/buke/typescript-go-internal/pkg/outputpaths" "github.com/buke/typescript-go-internal/pkg/tspath" @@ -49,6 +50,9 @@ type ParsedCommandLine struct { literalFileNamesLen int fileNamesByPath map[tspath.Path]string // maps file names to their paths, used for quick lookups fileNamesByPathOnce sync.Once + + locale locale.Locale + localeOnce sync.Once } func NewParsedCommandLine( @@ -379,3 +383,10 @@ func (p *ParsedCommandLine) ReloadFileNamesOfParsedCommandLine(fs vfs.FS) *Parse } return &parsedCommandLine } + +func (p *ParsedCommandLine) Locale() locale.Locale { + p.localeOnce.Do(func() { + p.locale, _ = locale.Parse(p.CompilerOptions().Locale) + }) + return p.locale +} diff --git a/pkg/tsoptions/tsconfigparsing.go b/pkg/tsoptions/tsconfigparsing.go index aacfb421..8ed43273 100644 --- a/pkg/tsoptions/tsconfigparsing.go +++ b/pkg/tsoptions/tsconfigparsing.go @@ -14,6 +14,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/debug" "github.com/buke/typescript-go-internal/pkg/diagnostics" "github.com/buke/typescript-go-internal/pkg/jsnum" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/module" "github.com/buke/typescript-go-internal/pkg/parser" "github.com/buke/typescript-go-internal/pkg/tspath" @@ -359,13 +360,22 @@ func validateJsonOptionValue( if val == nil { return nil, nil } - errors := []*ast.Diagnostic{} - if opt.extraValidation { - diag := specToDiagnostic(val.(string), false) - if diag != nil { + + var errors []*ast.Diagnostic + + switch opt.extraValidation { + case extraValidationSpec: + if diag := specToDiagnostic(val.(string), false); diag != nil { errors = append(errors, CreateDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, valueExpression, diag)) - return nil, errors } + case extraValidationLocale: + if _, ok := locale.Parse(val.(string)); !ok { + errors = append(errors, CreateDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, valueExpression, diagnostics.Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1, "en", "ja-jp")) + } + } + + if len(errors) > 0 { + return nil, errors } return val, nil } diff --git a/pkg/tsoptions/tsconfigparsing_test.go b/pkg/tsoptions/tsconfigparsing_test.go index 4dc40557..6f500335 100644 --- a/pkg/tsoptions/tsconfigparsing_test.go +++ b/pkg/tsoptions/tsconfigparsing_test.go @@ -14,6 +14,7 @@ import ( "github.com/buke/typescript-go-internal/pkg/core" "github.com/buke/typescript-go-internal/pkg/diagnosticwriter" "github.com/buke/typescript-go-internal/pkg/jsonutil" + "github.com/buke/typescript-go-internal/pkg/locale" "github.com/buke/typescript-go-internal/pkg/parser" "github.com/buke/typescript-go-internal/pkg/repo" "github.com/buke/typescript-go-internal/pkg/testutil/baseline" @@ -1025,7 +1026,7 @@ func TestParseSrcCompiler(t *testing.T) { if len(parsed.Diagnostics()) > 0 { for _, error := range parsed.Diagnostics() { - t.Log(error.Message()) + t.Log(error.Localize(locale.Default)) } t.FailNow() } @@ -1047,7 +1048,7 @@ func TestParseSrcCompiler(t *testing.T) { if len(parseConfigFileContent.Errors) > 0 { for _, error := range parseConfigFileContent.Errors { - t.Log(error.Message()) + t.Log(error.Localize(locale.Default)) } t.FailNow() } diff --git a/testdata/baselines/reference/fourslash/findAllReferences/autoImportProvider_referencesCrash.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/autoImportProvider_referencesCrash.baseline.jsonc index a1f16dec..4d12d4f3 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/autoImportProvider_referencesCrash.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/autoImportProvider_referencesCrash.baseline.jsonc @@ -1,8 +1,6 @@ // === findAllReferences === -// === /home/src/workspaces/project/a/index.d.ts === -// declare class [|A|] { -// } -// //# sourceMappingURL=index.d.ts.map +// === /home/src/workspaces/project/a/index.ts === +// class A {}[||] // === /home/src/workspaces/project/b/b.ts === // /// diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesUmdModuleAsGlobalConst.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesUmdModuleAsGlobalConst.baseline.jsonc index 63169a81..e6b3049c 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesUmdModuleAsGlobalConst.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesUmdModuleAsGlobalConst.baseline.jsonc @@ -6,6 +6,10 @@ // === findAllReferences === +// === /node_modules/@types/three/index.d.ts === +// export * from "[|./three-core|]"; +// export as namespace THREE; + // === /typings/global.d.ts === // import * as _THREE from '/*FIND ALL REFS*/[|three|]'; // declare global { diff --git a/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossModuleProjects.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossModuleProjects.baseline.jsonc index 4c80f375..00448c0d 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossModuleProjects.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossModuleProjects.baseline.jsonc @@ -43,6 +43,27 @@ // FC() { }, // }; +// === /home/src/workspaces/project/a2/index.ts === +// import { NS } from "../b"; +// import { [|I|] } from "../c"; +// +// declare module "../b" { +// export namespace NS { +// export function FA(); +// } +// } +// +// declare module "../c" { +// export interface [|I|] { +// FA(); +// } +// } +// +// const ia: [|I|] = { +// FA: NS.FA, +// FC() { }, +// }; + // === /home/src/workspaces/project/c/index.ts === // export namespace NS { // export function FC() {} @@ -97,6 +118,27 @@ // === findAllReferences === +// === /home/src/workspaces/project/a/index.ts === +// import { NS } from "../b"; +// import { [|I|] } from "../c"; +// +// declare module "../b" { +// export namespace NS { +// export function FA(); +// } +// } +// +// declare module "../c" { +// export interface [|I|] { +// FA(); +// } +// } +// +// const ia: [|I|] = { +// FA: NS.FA, +// FC() { }, +// }; + // === /home/src/workspaces/project/a2/index.ts === // import { NS } from "../b"; // import { [|I|] } from "../c"; @@ -199,6 +241,48 @@ // === findAllReferences === +// === /home/src/workspaces/project/a/index.ts === +// import { NS } from "../b"; +// import { [|I|] } from "../c"; +// +// declare module "../b" { +// export namespace NS { +// export function FA(); +// } +// } +// +// declare module "../c" { +// export interface [|I|] { +// FA(); +// } +// } +// +// const ia: [|I|] = { +// FA: NS.FA, +// FC() { }, +// }; + +// === /home/src/workspaces/project/a2/index.ts === +// import { NS } from "../b"; +// import { [|I|] } from "../c"; +// +// declare module "../b" { +// export namespace NS { +// export function FA(); +// } +// } +// +// declare module "../c" { +// export interface [|I|] { +// FA(); +// } +// } +// +// const ia: [|I|] = { +// FA: NS.FA, +// FC() { }, +// }; + // === /home/src/workspaces/project/c/index.ts === // export namespace NS { // export function FC() {} @@ -213,6 +297,22 @@ // === findAllReferences === +// === /home/src/workspaces/project/a/index.ts === +// --- (line: 14) skipped --- +// +// const ia: I = { +// FA: NS.FA, +// [|FC|]() { }, +// }; + +// === /home/src/workspaces/project/a2/index.ts === +// --- (line: 14) skipped --- +// +// const ia: I = { +// FA: NS.FA, +// [|FC|]() { }, +// }; + // === /home/src/workspaces/project/c/index.ts === // export namespace NS { // export function FC() {} diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefs.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefs.baseline new file mode 100644 index 00000000..3403e09e --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefs.baseline @@ -0,0 +1,170 @@ +UseCaseSensitiveFileNames: true +//// [/a/a.ts] *new* +export function fnA() {} +export interface IfaceA {} +export const instanceA: IfaceA = {}; +//// [/a/bin/a.d.ts] *new* +export declare function fnA(): void; +export interface IfaceA { +} +export declare const instanceA: IfaceA; +//# sourceMappingURL=a.d.ts.map +//// [/a/bin/a.d.ts.map] *new* +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["../a.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK;AACxB,MAAM,WAAW,MAAM;CAAG;AAC1B,eAAO,MAAM,SAAS,EAAE,MAAW,CAAC" +} +//// [/a/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/b/bin/b.d.ts] *new* +export declare function fnB(): void; +//# sourceMappingURL=b.d.ts.map +//// [/b/bin/b.d.ts.map] *new* +{ + "version": 3, + "file": "b.d.ts", + "sourceRoot": "", + "sources": ["../b.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK" +} +//// [/b/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/dummy/dummy.ts] *new* +export const a = 10; +//// [/dummy/tsconfig.json] *new* +{} +//// [/user/user.ts] *new* +import * as a from "../a/bin/a"; +import * as b from "../b/bin/b"; +export function fnUser() { a.fnA(); b.fnB(); a.instanceA; } + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///user/user.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as a from \"../a/bin/a\";\nimport * as b from \"../b/bin/b\";\nexport function fnUser() { a.fnA(); b.fnB(); a.instanceA; }" + } + } +} + +Projects:: + [/dev/null/inferred] *new* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts +Open Files:: + [/user/user.ts] *new* + /dev/null/inferred (default) +Config File Names:: + [/user/user.ts] *new* + NearestConfigFileName: + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///user/user.ts" + }, + "position": { + "line": 2, + "character": 29 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/a/tsconfig.json] *new* + /a/a.ts + [/dev/null/inferred] + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts +Config:: + [/a/tsconfig.json] *new* + RetainingProjects: + /a/tsconfig.json + + + + +// === findAllReferences === +// === /a/a.ts === +// export function [|fnA|]() {} +// export interface IfaceA {} +// export const instanceA: IfaceA = {}; + +// === /user/user.ts === +// import * as a from "../a/bin/a"; +// import * as b from "../b/bin/b"; +// export function fnUser() { a./*FIND ALL REFS*/[|fnA|](); b.fnB(); a.instanceA; } +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///user/user.ts" + } + } +} + +Open Files:: + [/user/user.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/a/tsconfig.json] *deleted* + /a/a.ts + [/dev/null/inferred] *deleted* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/a/tsconfig.json] *deleted* + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts +Config File Names:: + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/user/user.ts] *deleted* diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsDefinitionInMappedFile.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsDefinitionInMappedFile.baseline new file mode 100644 index 00000000..86588d55 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsDefinitionInMappedFile.baseline @@ -0,0 +1,109 @@ +UseCaseSensitiveFileNames: true +//// [/a/a.ts] *new* +export function f() {} +//// [/a/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "../bin", + "declarationMap": true, + "composite": true + } +} +//// [/b/b.ts] *new* +import { f } from "../bin/a"; +f(); +//// [/b/tsconfig.json] *new* +{ + "references": [ + { "path": "../a" } + ] +} +//// [/bin/a.d.ts] *new* +export declare function f(): void; +//# sourceMappingURL=a.d.ts.map +//// [/bin/a.d.ts.map] *new* +{ + "version":3, + "file":"a.d.ts", + "sourceRoot":"", + "sources":["a.ts"], + "names":[], + "mappings":"AAAA,wBAAgB,CAAC,SAAK" +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///b/b.ts", + "languageId": "typescript", + "version": 0, + "text": "import { f } from \"../bin/a\";\nf();" + } + } +} + +Projects:: + [/b/tsconfig.json] *new* + /a/a.ts + /b/b.ts +Open Files:: + [/b/b.ts] *new* + /b/tsconfig.json (default) +Config:: + [/a/tsconfig.json] *new* + RetainingProjects: + /b/tsconfig.json + [/b/tsconfig.json] *new* + RetainingProjects: + /b/tsconfig.json + RetainingOpenFiles: + /b/b.ts +Config File Names:: + [/b/b.ts] *new* + NearestConfigFileName: /b/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///b/b.ts" + }, + "position": { + "line": 1, + "character": 0 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/a/tsconfig.json] *new* + /a/a.ts + [/b/tsconfig.json] + /a/a.ts + /b/b.ts +Config:: + [/a/tsconfig.json] *modified* + RetainingProjects: *modified* + /a/tsconfig.json *new* + /b/tsconfig.json + [/b/tsconfig.json] + RetainingProjects: + /b/tsconfig.json + RetainingOpenFiles: + /b/b.ts + + + + +// === findAllReferences === +// === /a/a.ts === +// export function [|f|]() {} + +// === /b/b.ts === +// import { [|f|] } from "../bin/a"; +// /*FIND ALL REFS*/[|f|](); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsStartingAtDefinition.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsStartingAtDefinition.baseline new file mode 100644 index 00000000..e11f907a --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsStartingAtDefinition.baseline @@ -0,0 +1,208 @@ +UseCaseSensitiveFileNames: true +//// [/a/a.ts] *new* +export function fnA() {} +export interface IfaceA {} +export const instanceA: IfaceA = {}; +//// [/a/bin/a.d.ts] *new* +export declare function fnA(): void; +export interface IfaceA { +} +export declare const instanceA: IfaceA; +//# sourceMappingURL=a.d.ts.map +//// [/a/bin/a.d.ts.map] *new* +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["../a.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK;AACxB,MAAM,WAAW,MAAM;CAAG;AAC1B,eAAO,MAAM,SAAS,EAAE,MAAW,CAAC" +} +//// [/a/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/b/bin/b.d.ts] *new* +export declare function fnB(): void; +//# sourceMappingURL=b.d.ts.map +//// [/b/bin/b.d.ts.map] *new* +{ + "version": 3, + "file": "b.d.ts", + "sourceRoot": "", + "sources": ["../b.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK" +} +//// [/b/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/dummy/dummy.ts] *new* +export const a = 10; +//// [/dummy/tsconfig.json] *new* +{} +//// [/user/user.ts] *new* +import * as a from "../a/bin/a"; +import * as b from "../b/bin/b"; +export function fnUser() { a.fnA(); b.fnB(); a.instanceA; } + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///user/user.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as a from \"../a/bin/a\";\nimport * as b from \"../b/bin/b\";\nexport function fnUser() { a.fnA(); b.fnB(); a.instanceA; }" + } + } +} + +Projects:: + [/dev/null/inferred] *new* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts +Open Files:: + [/user/user.ts] *new* + /dev/null/inferred (default) +Config File Names:: + [/user/user.ts] *new* + NearestConfigFileName: + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///a/a.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fnA() {}\nexport interface IfaceA {}\nexport const instanceA: IfaceA = {};" + } + } +} + +Projects:: + [/a/tsconfig.json] *new* + /a/a.ts + [/dev/null/inferred] + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts +Open Files:: + [/a/a.ts] *new* + /a/tsconfig.json (default) + [/user/user.ts] + /dev/null/inferred (default) +Config:: + [/a/tsconfig.json] *new* + RetainingProjects: + /a/tsconfig.json + RetainingOpenFiles: + /a/a.ts +Config File Names:: + [/a/a.ts] *new* + NearestConfigFileName: /a/tsconfig.json + Ancestors: + /a/tsconfig.json + [/user/user.ts] + NearestConfigFileName: + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///a/a.ts" + }, + "position": { + "line": 0, + "character": 16 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /a/a.ts === +// export function /*FIND ALL REFS*/[|fnA|]() {} +// export interface IfaceA {} +// export const instanceA: IfaceA = {}; + +// === /user/user.ts === +// import * as a from "../a/bin/a"; +// import * as b from "../b/bin/b"; +// export function fnUser() { a.[|fnA|](); b.fnB(); a.instanceA; } +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///user/user.ts" + } + } +} + +Open Files:: + [/a/a.ts] + /a/tsconfig.json (default) + [/user/user.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/a/tsconfig.json] + /a/a.ts + [/dev/null/inferred] *deleted* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts +Open Files:: + [/a/a.ts] + /a/tsconfig.json (default) + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/a/tsconfig.json] + RetainingProjects: + /a/tsconfig.json + RetainingOpenFiles: + /a/a.ts + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts +Config File Names:: + [/a/a.ts] + NearestConfigFileName: /a/tsconfig.json + Ancestors: + /a/tsconfig.json + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/user/user.ts] *deleted* diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsTargetDoesNotExist.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsTargetDoesNotExist.baseline new file mode 100644 index 00000000..c07f9403 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsFindAllRefsTargetDoesNotExist.baseline @@ -0,0 +1,154 @@ +UseCaseSensitiveFileNames: true +//// [/a/a.ts] *new* +export function fnA() {} +export interface IfaceA {} +export const instanceA: IfaceA = {}; +//// [/a/bin/a.d.ts] *new* +export declare function fnA(): void; +export interface IfaceA { +} +export declare const instanceA: IfaceA; +//# sourceMappingURL=a.d.ts.map +//// [/a/bin/a.d.ts.map] *new* +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["../a.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK;AACxB,MAAM,WAAW,MAAM;CAAG;AAC1B,eAAO,MAAM,SAAS,EAAE,MAAW,CAAC" +} +//// [/a/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/b/bin/b.d.ts] *new* +export declare function fnB(): void; +//# sourceMappingURL=b.d.ts.map +//// [/b/bin/b.d.ts.map] *new* +{ + "version": 3, + "file": "b.d.ts", + "sourceRoot": "", + "sources": ["../b.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK" +} +//// [/b/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/dummy/dummy.ts] *new* +export const a = 10; +//// [/dummy/tsconfig.json] *new* +{} +//// [/user/user.ts] *new* +import * as a from "../a/bin/a"; +import * as b from "../b/bin/b"; +export function fnUser() { a.fnA(); b.fnB(); a.instanceA; } + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///user/user.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as a from \"../a/bin/a\";\nimport * as b from \"../b/bin/b\";\nexport function fnUser() { a.fnA(); b.fnB(); a.instanceA; }" + } + } +} + +Projects:: + [/dev/null/inferred] *new* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts +Open Files:: + [/user/user.ts] *new* + /dev/null/inferred (default) +Config File Names:: + [/user/user.ts] *new* + NearestConfigFileName: + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///user/user.ts" + }, + "position": { + "line": 2, + "character": 38 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /b/bin/b.d.ts === +// export declare function [|fnB|](): void; +// //# sourceMappingURL=b.d.ts.map + +// === /user/user.ts === +// import * as a from "../a/bin/a"; +// import * as b from "../b/bin/b"; +// export function fnUser() { a.fnA(); b./*FIND ALL REFS*/[|fnB|](); a.instanceA; } +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///user/user.ts" + } + } +} + +Open Files:: + [/user/user.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/dev/null/inferred] *deleted* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts +Config File Names:: + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/user/user.ts] *deleted* diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsOpeningOriginalLocationProject.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsOpeningOriginalLocationProject.baseline new file mode 100644 index 00000000..19bddaea --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsOpeningOriginalLocationProject.baseline @@ -0,0 +1,107 @@ +UseCaseSensitiveFileNames: true +//// [/a/a.d.ts] *new* +export declare class A { +} +//# sourceMappingURL=a.d.ts.map +//// [/a/a.d.ts.map] *new* +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["./a.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;CAAI" +} +//// [/a/a.ts] *new* +export class A { } +//// [/a/tsconfig.json] *new* +{} +//// [/b/b.ts] *new* +import {A} from "../a/a"; +new A(); +//// [/b/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": false + }, + "references": [ + { "path": "../a" } + ] +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///b/b.ts", + "languageId": "typescript", + "version": 0, + "text": "import {A} from \"../a/a\";\nnew A();" + } + } +} + +Projects:: + [/b/tsconfig.json] *new* + /a/a.ts + /b/b.ts +Open Files:: + [/b/b.ts] *new* + /b/tsconfig.json (default) +Config:: + [/a/tsconfig.json] *new* + RetainingProjects: + /b/tsconfig.json + [/b/tsconfig.json] *new* + RetainingProjects: + /b/tsconfig.json + RetainingOpenFiles: + /b/b.ts +Config File Names:: + [/b/b.ts] *new* + NearestConfigFileName: /b/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///b/b.ts" + }, + "position": { + "line": 1, + "character": 4 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/a/tsconfig.json] *new* + /a/a.ts + [/b/tsconfig.json] + /a/a.ts + /b/b.ts +Config:: + [/a/tsconfig.json] *modified* + RetainingProjects: *modified* + /a/tsconfig.json *new* + /b/tsconfig.json + [/b/tsconfig.json] + RetainingProjects: + /b/tsconfig.json + RetainingOpenFiles: + /b/b.ts + + + + +// === findAllReferences === +// === /a/a.ts === +// export class [|A|] { } + +// === /b/b.ts === +// import {[|A|]} from "../a/a"; +// new /*FIND ALL REFS*/[|A|](); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsOpeningOriginalLocationProjectDisableSourceOfProjectReferenceRedirect.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsOpeningOriginalLocationProjectDisableSourceOfProjectReferenceRedirect.baseline new file mode 100644 index 00000000..fa57e3f9 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsOpeningOriginalLocationProjectDisableSourceOfProjectReferenceRedirect.baseline @@ -0,0 +1,107 @@ +UseCaseSensitiveFileNames: true +//// [/a/a.d.ts] *new* +export declare class A { +} +//# sourceMappingURL=a.d.ts.map +//// [/a/a.d.ts.map] *new* +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["./a.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;CAAI" +} +//// [/a/a.ts] *new* +export class A { } +//// [/a/tsconfig.json] *new* +{} +//// [/b/b.ts] *new* +import {A} from "../a/a"; +new A(); +//// [/b/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": true + }, + "references": [ + { "path": "../a" } + ] +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///b/b.ts", + "languageId": "typescript", + "version": 0, + "text": "import {A} from \"../a/a\";\nnew A();" + } + } +} + +Projects:: + [/b/tsconfig.json] *new* + /a/a.d.ts + /b/b.ts +Open Files:: + [/b/b.ts] *new* + /b/tsconfig.json (default) +Config:: + [/a/tsconfig.json] *new* + RetainingProjects: + /b/tsconfig.json + [/b/tsconfig.json] *new* + RetainingProjects: + /b/tsconfig.json + RetainingOpenFiles: + /b/b.ts +Config File Names:: + [/b/b.ts] *new* + NearestConfigFileName: /b/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///b/b.ts" + }, + "position": { + "line": 1, + "character": 4 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/a/tsconfig.json] *new* + /a/a.ts + [/b/tsconfig.json] + /a/a.d.ts + /b/b.ts +Config:: + [/a/tsconfig.json] *modified* + RetainingProjects: *modified* + /a/tsconfig.json *new* + /b/tsconfig.json + [/b/tsconfig.json] + RetainingProjects: + /b/tsconfig.json + RetainingOpenFiles: + /b/b.ts + + + + +// === findAllReferences === +// === /a/a.ts === +// export class [|A|] { } + +// === /b/b.ts === +// import {[|A|]} from "../a/a"; +// new /*FIND ALL REFS*/[|A|](); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRename.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRename.baseline new file mode 100644 index 00000000..229282be --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRename.baseline @@ -0,0 +1,168 @@ +UseCaseSensitiveFileNames: true +//// [/a/a.ts] *new* +export function fnA() {} +export interface IfaceA {} +export const instanceA: IfaceA = {}; +//// [/a/bin/a.d.ts] *new* +export declare function fnA(): void; +export interface IfaceA { +} +export declare const instanceA: IfaceA; +//# sourceMappingURL=a.d.ts.map +//// [/a/bin/a.d.ts.map] *new* +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["../a.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK;AACxB,MAAM,WAAW,MAAM;CAAG;AAC1B,eAAO,MAAM,SAAS,EAAE,MAAW,CAAC" +} +//// [/a/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/b/bin/b.d.ts] *new* +export declare function fnB(): void; +//# sourceMappingURL=b.d.ts.map +//// [/b/bin/b.d.ts.map] *new* +{ + "version": 3, + "file": "b.d.ts", + "sourceRoot": "", + "sources": ["../b.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK" +} +//// [/b/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/dummy/dummy.ts] *new* +export const a = 10; +//// [/dummy/tsconfig.json] *new* +{} +//// [/user/user.ts] *new* +import * as a from "../a/bin/a"; +import * as b from "../b/bin/b"; +export function fnUser() { a.fnA(); b.fnB(); a.instanceA; } + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///user/user.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as a from \"../a/bin/a\";\nimport * as b from \"../b/bin/b\";\nexport function fnUser() { a.fnA(); b.fnB(); a.instanceA; }" + } + } +} + +Projects:: + [/dev/null/inferred] *new* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts +Open Files:: + [/user/user.ts] *new* + /dev/null/inferred (default) +Config File Names:: + [/user/user.ts] *new* + NearestConfigFileName: + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///user/user.ts" + }, + "position": { + "line": 2, + "character": 29 + }, + "newName": "?" + } +} + +Projects:: + [/a/tsconfig.json] *new* + /a/a.ts + [/dev/null/inferred] + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts +Config:: + [/a/tsconfig.json] *new* + RetainingProjects: + /a/tsconfig.json + + + + +// === findRenameLocations === +// === /a/a.ts === +// export function [|fnARENAME|]() {} +// export interface IfaceA {} +// export const instanceA: IfaceA = {}; + +// === /user/user.ts === +// import * as a from "../a/bin/a"; +// import * as b from "../b/bin/b"; +// export function fnUser() { a./*RENAME*/[|fnARENAME|](); b.fnB(); a.instanceA; } +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///user/user.ts" + } + } +} + +Open Files:: + [/user/user.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/a/tsconfig.json] *deleted* + /a/a.ts + [/dev/null/inferred] *deleted* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/a/tsconfig.json] *deleted* + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts +Config File Names:: + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/user/user.ts] *deleted* diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameStartingAtDefinition.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameStartingAtDefinition.baseline new file mode 100644 index 00000000..eae0a698 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameStartingAtDefinition.baseline @@ -0,0 +1,206 @@ +UseCaseSensitiveFileNames: true +//// [/a/a.ts] *new* +export function fnA() {} +export interface IfaceA {} +export const instanceA: IfaceA = {}; +//// [/a/bin/a.d.ts] *new* +export declare function fnA(): void; +export interface IfaceA { +} +export declare const instanceA: IfaceA; +//# sourceMappingURL=a.d.ts.map +//// [/a/bin/a.d.ts.map] *new* +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["../a.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK;AACxB,MAAM,WAAW,MAAM;CAAG;AAC1B,eAAO,MAAM,SAAS,EAAE,MAAW,CAAC" +} +//// [/a/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/b/bin/b.d.ts] *new* +export declare function fnB(): void; +//# sourceMappingURL=b.d.ts.map +//// [/b/bin/b.d.ts.map] *new* +{ + "version": 3, + "file": "b.d.ts", + "sourceRoot": "", + "sources": ["../b.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK" +} +//// [/b/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/dummy/dummy.ts] *new* +export const a = 10; +//// [/dummy/tsconfig.json] *new* +{} +//// [/user/user.ts] *new* +import * as a from "../a/bin/a"; +import * as b from "../b/bin/b"; +export function fnUser() { a.fnA(); b.fnB(); a.instanceA; } + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///user/user.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as a from \"../a/bin/a\";\nimport * as b from \"../b/bin/b\";\nexport function fnUser() { a.fnA(); b.fnB(); a.instanceA; }" + } + } +} + +Projects:: + [/dev/null/inferred] *new* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts +Open Files:: + [/user/user.ts] *new* + /dev/null/inferred (default) +Config File Names:: + [/user/user.ts] *new* + NearestConfigFileName: + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///a/a.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fnA() {}\nexport interface IfaceA {}\nexport const instanceA: IfaceA = {};" + } + } +} + +Projects:: + [/a/tsconfig.json] *new* + /a/a.ts + [/dev/null/inferred] + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts +Open Files:: + [/a/a.ts] *new* + /a/tsconfig.json (default) + [/user/user.ts] + /dev/null/inferred (default) +Config:: + [/a/tsconfig.json] *new* + RetainingProjects: + /a/tsconfig.json + RetainingOpenFiles: + /a/a.ts +Config File Names:: + [/a/a.ts] *new* + NearestConfigFileName: /a/tsconfig.json + Ancestors: + /a/tsconfig.json + [/user/user.ts] + NearestConfigFileName: + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///a/a.ts" + }, + "position": { + "line": 0, + "character": 16 + }, + "newName": "?" + } +} + + + + +// === findRenameLocations === +// === /a/a.ts === +// export function /*RENAME*/[|fnARENAME|]() {} +// export interface IfaceA {} +// export const instanceA: IfaceA = {}; + +// === /user/user.ts === +// import * as a from "../a/bin/a"; +// import * as b from "../b/bin/b"; +// export function fnUser() { a.[|fnARENAME|](); b.fnB(); a.instanceA; } +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///user/user.ts" + } + } +} + +Open Files:: + [/a/a.ts] + /a/tsconfig.json (default) + [/user/user.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/a/tsconfig.json] + /a/a.ts + [/dev/null/inferred] *deleted* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts +Open Files:: + [/a/a.ts] + /a/tsconfig.json (default) + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/a/tsconfig.json] + RetainingProjects: + /a/tsconfig.json + RetainingOpenFiles: + /a/a.ts + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts +Config File Names:: + [/a/a.ts] + NearestConfigFileName: /a/tsconfig.json + Ancestors: + /a/tsconfig.json + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/user/user.ts] *deleted* diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameTargetDoesNotExist.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameTargetDoesNotExist.baseline new file mode 100644 index 00000000..4346f9ea --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameTargetDoesNotExist.baseline @@ -0,0 +1,152 @@ +UseCaseSensitiveFileNames: true +//// [/a/a.ts] *new* +export function fnA() {} +export interface IfaceA {} +export const instanceA: IfaceA = {}; +//// [/a/bin/a.d.ts] *new* +export declare function fnA(): void; +export interface IfaceA { +} +export declare const instanceA: IfaceA; +//# sourceMappingURL=a.d.ts.map +//// [/a/bin/a.d.ts.map] *new* +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["../a.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK;AACxB,MAAM,WAAW,MAAM;CAAG;AAC1B,eAAO,MAAM,SAAS,EAAE,MAAW,CAAC" +} +//// [/a/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/b/bin/b.d.ts] *new* +export declare function fnB(): void; +//# sourceMappingURL=b.d.ts.map +//// [/b/bin/b.d.ts.map] *new* +{ + "version": 3, + "file": "b.d.ts", + "sourceRoot": "", + "sources": ["../b.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK" +} +//// [/b/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/dummy/dummy.ts] *new* +export const a = 10; +//// [/dummy/tsconfig.json] *new* +{} +//// [/user/user.ts] *new* +import * as a from "../a/bin/a"; +import * as b from "../b/bin/b"; +export function fnUser() { a.fnA(); b.fnB(); a.instanceA; } + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///user/user.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as a from \"../a/bin/a\";\nimport * as b from \"../b/bin/b\";\nexport function fnUser() { a.fnA(); b.fnB(); a.instanceA; }" + } + } +} + +Projects:: + [/dev/null/inferred] *new* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts +Open Files:: + [/user/user.ts] *new* + /dev/null/inferred (default) +Config File Names:: + [/user/user.ts] *new* + NearestConfigFileName: + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///user/user.ts" + }, + "position": { + "line": 2, + "character": 38 + }, + "newName": "?" + } +} + + + + +// === findRenameLocations === +// === /b/bin/b.d.ts === +// export declare function [|fnBRENAME|](): void; +// //# sourceMappingURL=b.d.ts.map + +// === /user/user.ts === +// import * as a from "../a/bin/a"; +// import * as b from "../b/bin/b"; +// export function fnUser() { a.fnA(); b./*RENAME*/[|fnBRENAME|](); a.instanceA; } +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///user/user.ts" + } + } +} + +Open Files:: + [/user/user.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/dev/null/inferred] *deleted* + /a/bin/a.d.ts + /b/bin/b.d.ts + /user/user.ts + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts +Config File Names:: + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/user/user.ts] *deleted* diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirect.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirect.baseline new file mode 100644 index 00000000..d810eb9b --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirect.baseline @@ -0,0 +1,446 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/decls/FnS.d.ts] *new* +export declare function fn1(): void; +export declare function fn2(): void; +export declare function fn3(): void; +export declare function fn4(): void; +export declare function fn5(): void; +//# sourceMappingURL=FnS.d.ts.map +//// [/myproject/decls/FnS.d.ts.map] *new* +{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["../dependency/FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM"} +//// [/myproject/dependency/FnS.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fn1 = fn1; +exports.fn2 = fn2; +exports.fn3 = fn3; +exports.fn4 = fn4; +exports.fn5 = fn5; +function fn1() { } +function fn2() { } +function fn3() { } +function fn4() { } +function fn5() { } + +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/dependency/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./FnS.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n","signature":"bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n","impliedNodeFormat":1}],"options":{"composite":true,"declarationDir":"../decls","declarationMap":true},"latestChangedDtsFile":"../decls/FnS.d.ts"} +//// [/myproject/dependency/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./FnS.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "./FnS.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./FnS.ts", + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "declarationDir": "../decls", + "declarationMap": true + }, + "latestChangedDtsFile": "../decls/FnS.d.ts", + "size": 1423 +} +//// [/myproject/main/main.d.ts] *new* +export {}; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/main/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":""} +//// [/myproject/main/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const FnS_1 = require("../decls/FnS"); +(0, FnS_1.fn1)(); +(0, FnS_1.fn2)(); +(0, FnS_1.fn3)(); +(0, FnS_1.fn4)(); +(0, FnS_1.fn5)(); + +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": true + }, + "references": [{ "path": "../dependency" }] +} +//// [/myproject/main/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../decls/FnS.d.ts","./main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map",{"version":"72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true},"referencedMap":[[3,1]],"latestChangedDtsFile":"./main.d.ts"} +//// [/myproject/main/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./main.ts" + ], + "original": 3 + } + ], + "fileNames": [ + "lib.d.ts", + "../decls/FnS.d.ts", + "./main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../decls/FnS.d.ts", + "version": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "signature": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./main.ts", + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../decls/FnS.d.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true + }, + "referencedMap": { + "./main.ts": [ + "../decls/FnS.d.ts" + ] + }, + "latestChangedDtsFile": "./main.d.ts", + "size": 1515 +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": true + }, + "files": [], + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/random/tsconfig.json] *new* + /random/random.ts +Open Files:: + [/random/random.ts] *new* + /random/tsconfig.json (default) +Config:: + [/random/tsconfig.json] *new* + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/random/random.ts] *new* + NearestConfigFileName: /random/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* + [/random/tsconfig.json] + /random/random.ts +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) + [/random/random.ts] + /random/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + [/random/random.ts] + NearestConfigFileName: /random/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *modified* + [/random/tsconfig.json] + /random/random.ts +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/main/tsconfig.json *new* + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///random/random.ts" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] + /myproject/dependency/tsconfig.json (default) + [/random/random.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] + /myproject/dependency/tsconfig.json (default) + [/random/random.ts] *new* + /random/tsconfig.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] *closed* + [/random/random.ts] + /random/tsconfig.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///random/random.ts" + } + } +} + +Open Files:: + [/random/random.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *deleted* + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *deleted* + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *deleted* + [/random/tsconfig.json] + /random/random.ts +Open Files:: + [/random/random.ts] *new* + /random/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *deleted* + [/myproject/main/tsconfig.json] *deleted* + [/myproject/tsconfig.json] *deleted* + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *deleted* + [/random/random.ts] + NearestConfigFileName: /random/tsconfig.json diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirectEdit.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirectEdit.baseline new file mode 100644 index 00000000..2d9b7d45 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirectEdit.baseline @@ -0,0 +1,929 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/decls/FnS.d.ts] *new* +export declare function fn1(): void; +export declare function fn2(): void; +export declare function fn3(): void; +export declare function fn4(): void; +export declare function fn5(): void; +//# sourceMappingURL=FnS.d.ts.map +//// [/myproject/decls/FnS.d.ts.map] *new* +{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["../dependency/FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM"} +//// [/myproject/dependency/FnS.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fn1 = fn1; +exports.fn2 = fn2; +exports.fn3 = fn3; +exports.fn4 = fn4; +exports.fn5 = fn5; +function fn1() { } +function fn2() { } +function fn3() { } +function fn4() { } +function fn5() { } + +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/dependency/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./FnS.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n","signature":"bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n","impliedNodeFormat":1}],"options":{"composite":true,"declarationDir":"../decls","declarationMap":true},"latestChangedDtsFile":"../decls/FnS.d.ts"} +//// [/myproject/dependency/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./FnS.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "./FnS.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./FnS.ts", + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "declarationDir": "../decls", + "declarationMap": true + }, + "latestChangedDtsFile": "../decls/FnS.d.ts", + "size": 1423 +} +//// [/myproject/main/main.d.ts] *new* +export {}; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/main/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":""} +//// [/myproject/main/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const FnS_1 = require("../decls/FnS"); +(0, FnS_1.fn1)(); +(0, FnS_1.fn2)(); +(0, FnS_1.fn3)(); +(0, FnS_1.fn4)(); +(0, FnS_1.fn5)(); + +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": true + }, + "references": [{ "path": "../dependency" }] +} +//// [/myproject/main/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../decls/FnS.d.ts","./main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map",{"version":"72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true},"referencedMap":[[3,1]],"latestChangedDtsFile":"./main.d.ts"} +//// [/myproject/main/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./main.ts" + ], + "original": 3 + } + ], + "fileNames": [ + "lib.d.ts", + "../decls/FnS.d.ts", + "./main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../decls/FnS.d.ts", + "version": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "signature": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./main.ts", + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../decls/FnS.d.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true + }, + "referencedMap": { + "./main.ts": [ + "../decls/FnS.d.ts" + ] + }, + "latestChangedDtsFile": "./main.d.ts", + "size": 1515 +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": true + }, + "files": [], + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *modified* +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/main/tsconfig.json *new* + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 2 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 0 + }, + "end": { + "line": 0, + "character": 0 + } + }, + "text": "" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 3 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 0 + }, + "end": { + "line": 0, + "character": 0 + } + }, + "text": "f" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 4 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 1 + }, + "end": { + "line": 0, + "character": 1 + } + }, + "text": "u" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 5 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 2 + }, + "end": { + "line": 0, + "character": 2 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 6 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 3 + }, + "end": { + "line": 0, + "character": 3 + } + }, + "text": "c" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 7 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 4 + }, + "end": { + "line": 0, + "character": 4 + } + }, + "text": "t" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 8 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 5 + }, + "end": { + "line": 0, + "character": 5 + } + }, + "text": "i" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 9 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 6 + }, + "end": { + "line": 0, + "character": 6 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 10 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 7 + }, + "end": { + "line": 0, + "character": 7 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 11 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 8 + }, + "end": { + "line": 0, + "character": 8 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 12 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 9 + }, + "end": { + "line": 0, + "character": 9 + } + }, + "text": "f" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 13 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 10 + }, + "end": { + "line": 0, + "character": 10 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 14 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 11 + }, + "end": { + "line": 0, + "character": 11 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 15 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 12 + }, + "end": { + "line": 0, + "character": 12 + } + }, + "text": "B" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 16 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 13 + }, + "end": { + "line": 0, + "character": 13 + } + }, + "text": "a" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 17 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 14 + }, + "end": { + "line": 0, + "character": 14 + } + }, + "text": "r" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 18 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 15 + }, + "end": { + "line": 0, + "character": 15 + } + }, + "text": "(" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 19 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 16 + }, + "end": { + "line": 0, + "character": 16 + } + }, + "text": ")" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 20 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 17 + }, + "end": { + "line": 0, + "character": 17 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 21 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 18 + }, + "end": { + "line": 0, + "character": 18 + } + }, + "text": "{" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 22 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 19 + }, + "end": { + "line": 0, + "character": 19 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 23 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 20 + }, + "end": { + "line": 0, + "character": 20 + } + }, + "text": "}" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 24 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 21 + }, + "end": { + "line": 0, + "character": 21 + } + }, + "text": "\n" + } + ] + } +} + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 3, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + [/myproject/main/tsconfig.json] + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// function fooBar() { } +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// fn3, +// [|fn4RENAME|], +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// fn3(); +// [|fn4RENAME|](); +// fn5(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirectEditEnd.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirectEditEnd.baseline new file mode 100644 index 00000000..4a326780 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithDisableSourceOfProjectReferenceRedirectEditEnd.baseline @@ -0,0 +1,703 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/decls/FnS.d.ts] *new* +export declare function fn1(): void; +export declare function fn2(): void; +export declare function fn3(): void; +export declare function fn4(): void; +export declare function fn5(): void; +//# sourceMappingURL=FnS.d.ts.map +//// [/myproject/decls/FnS.d.ts.map] *new* +{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["../dependency/FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM"} +//// [/myproject/dependency/FnS.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fn1 = fn1; +exports.fn2 = fn2; +exports.fn3 = fn3; +exports.fn4 = fn4; +exports.fn5 = fn5; +function fn1() { } +function fn2() { } +function fn3() { } +function fn4() { } +function fn5() { } + +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/dependency/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./FnS.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n","signature":"bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n","impliedNodeFormat":1}],"options":{"composite":true,"declarationDir":"../decls","declarationMap":true},"latestChangedDtsFile":"../decls/FnS.d.ts"} +//// [/myproject/dependency/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./FnS.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "./FnS.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./FnS.ts", + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "declarationDir": "../decls", + "declarationMap": true + }, + "latestChangedDtsFile": "../decls/FnS.d.ts", + "size": 1423 +} +//// [/myproject/main/main.d.ts] *new* +export {}; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/main/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":""} +//// [/myproject/main/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const FnS_1 = require("../decls/FnS"); +(0, FnS_1.fn1)(); +(0, FnS_1.fn2)(); +(0, FnS_1.fn3)(); +(0, FnS_1.fn4)(); +(0, FnS_1.fn5)(); + +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": true + }, + "references": [{ "path": "../dependency" }] +} +//// [/myproject/main/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../decls/FnS.d.ts","./main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map",{"version":"72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true},"referencedMap":[[3,1]],"latestChangedDtsFile":"./main.d.ts"} +//// [/myproject/main/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./main.ts" + ], + "original": 3 + } + ], + "fileNames": [ + "lib.d.ts", + "../decls/FnS.d.ts", + "./main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../decls/FnS.d.ts", + "version": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "signature": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./main.ts", + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../decls/FnS.d.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true + }, + "referencedMap": { + "./main.ts": [ + "../decls/FnS.d.ts" + ] + }, + "latestChangedDtsFile": "./main.d.ts", + "size": 1515 +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": true + }, + "files": [], + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *modified* +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/main/tsconfig.json *new* + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 2 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 0 + }, + "end": { + "line": 5, + "character": 0 + } + }, + "text": "" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 3 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 0 + }, + "end": { + "line": 5, + "character": 0 + } + }, + "text": "c" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 4 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 1 + }, + "end": { + "line": 5, + "character": 1 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 5 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 2 + }, + "end": { + "line": 5, + "character": 2 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 6 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 3 + }, + "end": { + "line": 5, + "character": 3 + } + }, + "text": "s" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 7 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 4 + }, + "end": { + "line": 5, + "character": 4 + } + }, + "text": "t" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 8 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 5 + }, + "end": { + "line": 5, + "character": 5 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 9 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 6 + }, + "end": { + "line": 5, + "character": 6 + } + }, + "text": "x" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 10 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 7 + }, + "end": { + "line": 5, + "character": 7 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 11 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 8 + }, + "end": { + "line": 5, + "character": 8 + } + }, + "text": "=" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 12 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 9 + }, + "end": { + "line": 5, + "character": 9 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 13 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 10 + }, + "end": { + "line": 5, + "character": 10 + } + }, + "text": "1" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 14 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 11 + }, + "end": { + "line": 5, + "character": 11 + } + }, + "text": "0" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 15 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 12 + }, + "end": { + "line": 5, + "character": 12 + } + }, + "text": ";" + } + ] + } +} + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + [/myproject/main/tsconfig.json] + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// const x = 10; + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferences.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferences.baseline new file mode 100644 index 00000000..a49ff448 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferences.baseline @@ -0,0 +1,300 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": false + }, + "references": [{ "path": "../dependency" }] +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": false + }, + "files": [], + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/random/tsconfig.json] *new* + /random/random.ts +Open Files:: + [/random/random.ts] *new* + /random/tsconfig.json (default) +Config:: + [/random/tsconfig.json] *new* + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/random/random.ts] *new* + NearestConfigFileName: /random/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* + [/random/tsconfig.json] + /random/random.ts +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) + [/random/random.ts] + /random/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + [/random/random.ts] + NearestConfigFileName: /random/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + /myproject/dependency/FnS.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *modified* + [/random/tsconfig.json] + /random/random.ts +Open Files:: + [/myproject/dependency/FnS.ts] *modified* + /myproject/dependency/tsconfig.json (default) + /myproject/main/tsconfig.json *new* + [/random/random.ts] + /random/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/main/tsconfig.json *new* + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///random/random.ts" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] + /myproject/dependency/tsconfig.json (default) + /myproject/main/tsconfig.json + [/random/random.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] + /myproject/dependency/tsconfig.json (default) + /myproject/main/tsconfig.json + [/random/random.ts] *new* + /random/tsconfig.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] *closed* + [/random/random.ts] + /random/tsconfig.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///random/random.ts" + } + } +} + +Open Files:: + [/random/random.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *deleted* + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *deleted* + /myproject/dependency/FnS.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *deleted* + [/random/tsconfig.json] + /random/random.ts +Open Files:: + [/random/random.ts] *new* + /random/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *deleted* + [/myproject/main/tsconfig.json] *deleted* + [/myproject/tsconfig.json] *deleted* + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *deleted* + [/random/random.ts] + NearestConfigFileName: /random/tsconfig.json diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferencesEdit.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferencesEdit.baseline new file mode 100644 index 00000000..9e647c2c --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferencesEdit.baseline @@ -0,0 +1,779 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": false + }, + "references": [{ "path": "../dependency" }] +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": false + }, + "files": [], + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + /myproject/dependency/FnS.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *modified* +Open Files:: + [/myproject/dependency/FnS.ts] *modified* + /myproject/dependency/tsconfig.json (default) + /myproject/main/tsconfig.json *new* +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/main/tsconfig.json *new* + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 2 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 0 + }, + "end": { + "line": 0, + "character": 0 + } + }, + "text": "" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 3 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 0 + }, + "end": { + "line": 0, + "character": 0 + } + }, + "text": "f" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 4 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 1 + }, + "end": { + "line": 0, + "character": 1 + } + }, + "text": "u" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 5 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 2 + }, + "end": { + "line": 0, + "character": 2 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 6 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 3 + }, + "end": { + "line": 0, + "character": 3 + } + }, + "text": "c" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 7 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 4 + }, + "end": { + "line": 0, + "character": 4 + } + }, + "text": "t" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 8 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 5 + }, + "end": { + "line": 0, + "character": 5 + } + }, + "text": "i" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 9 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 6 + }, + "end": { + "line": 0, + "character": 6 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 10 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 7 + }, + "end": { + "line": 0, + "character": 7 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 11 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 8 + }, + "end": { + "line": 0, + "character": 8 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 12 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 9 + }, + "end": { + "line": 0, + "character": 9 + } + }, + "text": "f" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 13 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 10 + }, + "end": { + "line": 0, + "character": 10 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 14 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 11 + }, + "end": { + "line": 0, + "character": 11 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 15 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 12 + }, + "end": { + "line": 0, + "character": 12 + } + }, + "text": "B" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 16 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 13 + }, + "end": { + "line": 0, + "character": 13 + } + }, + "text": "a" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 17 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 14 + }, + "end": { + "line": 0, + "character": 14 + } + }, + "text": "r" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 18 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 15 + }, + "end": { + "line": 0, + "character": 15 + } + }, + "text": "(" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 19 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 16 + }, + "end": { + "line": 0, + "character": 16 + } + }, + "text": ")" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 20 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 17 + }, + "end": { + "line": 0, + "character": 17 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 21 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 18 + }, + "end": { + "line": 0, + "character": 18 + } + }, + "text": "{" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 22 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 19 + }, + "end": { + "line": 0, + "character": 19 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 23 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 20 + }, + "end": { + "line": 0, + "character": 20 + } + }, + "text": "}" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 24 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 21 + }, + "end": { + "line": 0, + "character": 21 + } + }, + "text": "\n" + } + ] + } +} + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 3, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + [/myproject/main/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + /myproject/main/main.ts + [/myproject/tsconfig.json] + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// function fooBar() { } +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferencesEditEnd.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferencesEditEnd.baseline new file mode 100644 index 00000000..13e6ff17 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithProjectReferencesEditEnd.baseline @@ -0,0 +1,553 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": false + }, + "references": [{ "path": "../dependency" }] +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": false + }, + "files": [], + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + /myproject/dependency/FnS.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *modified* +Open Files:: + [/myproject/dependency/FnS.ts] *modified* + /myproject/dependency/tsconfig.json (default) + /myproject/main/tsconfig.json *new* +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/main/tsconfig.json *new* + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 2 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 0 + }, + "end": { + "line": 5, + "character": 0 + } + }, + "text": "" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 3 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 0 + }, + "end": { + "line": 5, + "character": 0 + } + }, + "text": "c" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 4 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 1 + }, + "end": { + "line": 5, + "character": 1 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 5 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 2 + }, + "end": { + "line": 5, + "character": 2 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 6 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 3 + }, + "end": { + "line": 5, + "character": 3 + } + }, + "text": "s" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 7 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 4 + }, + "end": { + "line": 5, + "character": 4 + } + }, + "text": "t" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 8 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 5 + }, + "end": { + "line": 5, + "character": 5 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 9 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 6 + }, + "end": { + "line": 5, + "character": 6 + } + }, + "text": "x" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 10 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 7 + }, + "end": { + "line": 5, + "character": 7 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 11 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 8 + }, + "end": { + "line": 5, + "character": 8 + } + }, + "text": "=" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 12 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 9 + }, + "end": { + "line": 5, + "character": 9 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 13 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 10 + }, + "end": { + "line": 5, + "character": 10 + } + }, + "text": "1" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 14 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 11 + }, + "end": { + "line": 5, + "character": 11 + } + }, + "text": "0" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 15 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 12 + }, + "end": { + "line": 5, + "character": 12 + } + }, + "text": ";" + } + ] + } +} + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + [/myproject/main/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + /myproject/main/main.ts + [/myproject/tsconfig.json] + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// const x = 10; + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMaps.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMaps.baseline new file mode 100644 index 00000000..55325881 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMaps.baseline @@ -0,0 +1,423 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/decls/FnS.d.ts] *new* +export declare function fn1(): void; +export declare function fn2(): void; +export declare function fn3(): void; +export declare function fn4(): void; +export declare function fn5(): void; +//# sourceMappingURL=FnS.d.ts.map +//// [/myproject/decls/FnS.d.ts.map] *new* +{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["../dependency/FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM"} +//// [/myproject/dependency/FnS.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fn1 = fn1; +exports.fn2 = fn2; +exports.fn3 = fn3; +exports.fn4 = fn4; +exports.fn5 = fn5; +function fn1() { } +function fn2() { } +function fn3() { } +function fn4() { } +function fn5() { } + +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/dependency/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./FnS.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n","signature":"bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n","impliedNodeFormat":1}],"options":{"composite":true,"declarationDir":"../decls","declarationMap":true},"latestChangedDtsFile":"../decls/FnS.d.ts"} +//// [/myproject/dependency/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./FnS.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "./FnS.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./FnS.ts", + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "declarationDir": "../decls", + "declarationMap": true + }, + "latestChangedDtsFile": "../decls/FnS.d.ts", + "size": 1423 +} +//// [/myproject/main/main.d.ts] *new* +export {}; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/main/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":""} +//// [/myproject/main/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const FnS_1 = require("../decls/FnS"); +(0, FnS_1.fn1)(); +(0, FnS_1.fn2)(); +(0, FnS_1.fn3)(); +(0, FnS_1.fn4)(); +(0, FnS_1.fn5)(); + +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": false + }, + +} +//// [/myproject/main/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../decls/FnS.d.ts","./main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map",{"version":"72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true},"referencedMap":[[3,1]],"latestChangedDtsFile":"./main.d.ts"} +//// [/myproject/main/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./main.ts" + ], + "original": 3 + } + ], + "fileNames": [ + "lib.d.ts", + "../decls/FnS.d.ts", + "./main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../decls/FnS.d.ts", + "version": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "signature": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./main.ts", + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../decls/FnS.d.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true + }, + "referencedMap": { + "./main.ts": [ + "../decls/FnS.d.ts" + ] + }, + "latestChangedDtsFile": "./main.d.ts", + "size": 1515 +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": false + }, + "files": [], + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/random/tsconfig.json] *new* + /random/random.ts +Open Files:: + [/random/random.ts] *new* + /random/tsconfig.json (default) +Config:: + [/random/tsconfig.json] *new* + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/random/random.ts] *new* + NearestConfigFileName: /random/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* + [/random/tsconfig.json] + /random/random.ts +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) + [/random/random.ts] + /random/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + [/random/random.ts] + NearestConfigFileName: /random/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *modified* + [/random/tsconfig.json] + /random/random.ts +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///random/random.ts" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] + /myproject/dependency/tsconfig.json (default) + [/random/random.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] + /myproject/dependency/tsconfig.json (default) + [/random/random.ts] *new* + /random/tsconfig.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] *closed* + [/random/random.ts] + /random/tsconfig.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///random/random.ts" + } + } +} + +Open Files:: + [/random/random.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *deleted* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *deleted* + [/random/tsconfig.json] + /random/random.ts +Open Files:: + [/random/random.ts] *new* + /random/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *deleted* + [/myproject/main/tsconfig.json] *deleted* + [/myproject/tsconfig.json] *deleted* + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *deleted* + [/random/random.ts] + NearestConfigFileName: /random/tsconfig.json diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsEdit.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsEdit.baseline new file mode 100644 index 00000000..964d19c2 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsEdit.baseline @@ -0,0 +1,891 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/decls/FnS.d.ts] *new* +export declare function fn1(): void; +export declare function fn2(): void; +export declare function fn3(): void; +export declare function fn4(): void; +export declare function fn5(): void; +//# sourceMappingURL=FnS.d.ts.map +//// [/myproject/decls/FnS.d.ts.map] *new* +{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["../dependency/FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM"} +//// [/myproject/dependency/FnS.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fn1 = fn1; +exports.fn2 = fn2; +exports.fn3 = fn3; +exports.fn4 = fn4; +exports.fn5 = fn5; +function fn1() { } +function fn2() { } +function fn3() { } +function fn4() { } +function fn5() { } + +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/dependency/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./FnS.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n","signature":"bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n","impliedNodeFormat":1}],"options":{"composite":true,"declarationDir":"../decls","declarationMap":true},"latestChangedDtsFile":"../decls/FnS.d.ts"} +//// [/myproject/dependency/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./FnS.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "./FnS.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./FnS.ts", + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "declarationDir": "../decls", + "declarationMap": true + }, + "latestChangedDtsFile": "../decls/FnS.d.ts", + "size": 1423 +} +//// [/myproject/main/main.d.ts] *new* +export {}; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/main/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":""} +//// [/myproject/main/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const FnS_1 = require("../decls/FnS"); +(0, FnS_1.fn1)(); +(0, FnS_1.fn2)(); +(0, FnS_1.fn3)(); +(0, FnS_1.fn4)(); +(0, FnS_1.fn5)(); + +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": false + }, + +} +//// [/myproject/main/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../decls/FnS.d.ts","./main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map",{"version":"72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true},"referencedMap":[[3,1]],"latestChangedDtsFile":"./main.d.ts"} +//// [/myproject/main/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./main.ts" + ], + "original": 3 + } + ], + "fileNames": [ + "lib.d.ts", + "../decls/FnS.d.ts", + "./main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../decls/FnS.d.ts", + "version": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "signature": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./main.ts", + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../decls/FnS.d.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true + }, + "referencedMap": { + "./main.ts": [ + "../decls/FnS.d.ts" + ] + }, + "latestChangedDtsFile": "./main.d.ts", + "size": 1515 +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": false + }, + "files": [], + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *modified* +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 2 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 0 + }, + "end": { + "line": 0, + "character": 0 + } + }, + "text": "" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 3 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 0 + }, + "end": { + "line": 0, + "character": 0 + } + }, + "text": "f" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 4 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 1 + }, + "end": { + "line": 0, + "character": 1 + } + }, + "text": "u" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 5 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 2 + }, + "end": { + "line": 0, + "character": 2 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 6 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 3 + }, + "end": { + "line": 0, + "character": 3 + } + }, + "text": "c" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 7 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 4 + }, + "end": { + "line": 0, + "character": 4 + } + }, + "text": "t" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 8 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 5 + }, + "end": { + "line": 0, + "character": 5 + } + }, + "text": "i" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 9 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 6 + }, + "end": { + "line": 0, + "character": 6 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 10 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 7 + }, + "end": { + "line": 0, + "character": 7 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 11 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 8 + }, + "end": { + "line": 0, + "character": 8 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 12 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 9 + }, + "end": { + "line": 0, + "character": 9 + } + }, + "text": "f" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 13 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 10 + }, + "end": { + "line": 0, + "character": 10 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 14 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 11 + }, + "end": { + "line": 0, + "character": 11 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 15 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 12 + }, + "end": { + "line": 0, + "character": 12 + } + }, + "text": "B" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 16 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 13 + }, + "end": { + "line": 0, + "character": 13 + } + }, + "text": "a" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 17 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 14 + }, + "end": { + "line": 0, + "character": 14 + } + }, + "text": "r" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 18 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 15 + }, + "end": { + "line": 0, + "character": 15 + } + }, + "text": "(" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 19 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 16 + }, + "end": { + "line": 0, + "character": 16 + } + }, + "text": ")" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 20 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 17 + }, + "end": { + "line": 0, + "character": 17 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 21 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 18 + }, + "end": { + "line": 0, + "character": 18 + } + }, + "text": "{" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 22 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 19 + }, + "end": { + "line": 0, + "character": 19 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 23 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 20 + }, + "end": { + "line": 0, + "character": 20 + } + }, + "text": "}" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 24 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 21 + }, + "end": { + "line": 0, + "character": 21 + } + }, + "text": "\n" + } + ] + } +} + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 3, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + [/myproject/tsconfig.json] + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// function fooBar() { } +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsEditEnd.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsEditEnd.baseline new file mode 100644 index 00000000..98b9e58e --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsEditEnd.baseline @@ -0,0 +1,665 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/decls/FnS.d.ts] *new* +export declare function fn1(): void; +export declare function fn2(): void; +export declare function fn3(): void; +export declare function fn4(): void; +export declare function fn5(): void; +//# sourceMappingURL=FnS.d.ts.map +//// [/myproject/decls/FnS.d.ts.map] *new* +{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["../dependency/FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM"} +//// [/myproject/dependency/FnS.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fn1 = fn1; +exports.fn2 = fn2; +exports.fn3 = fn3; +exports.fn4 = fn4; +exports.fn5 = fn5; +function fn1() { } +function fn2() { } +function fn3() { } +function fn4() { } +function fn5() { } + +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/dependency/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./FnS.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n","signature":"bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n","impliedNodeFormat":1}],"options":{"composite":true,"declarationDir":"../decls","declarationMap":true},"latestChangedDtsFile":"../decls/FnS.d.ts"} +//// [/myproject/dependency/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./FnS.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "./FnS.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./FnS.ts", + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "declarationDir": "../decls", + "declarationMap": true + }, + "latestChangedDtsFile": "../decls/FnS.d.ts", + "size": 1423 +} +//// [/myproject/main/main.d.ts] *new* +export {}; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/main/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":""} +//// [/myproject/main/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const FnS_1 = require("../decls/FnS"); +(0, FnS_1.fn1)(); +(0, FnS_1.fn2)(); +(0, FnS_1.fn3)(); +(0, FnS_1.fn4)(); +(0, FnS_1.fn5)(); + +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": false + }, + +} +//// [/myproject/main/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../decls/FnS.d.ts","./main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map",{"version":"72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true},"referencedMap":[[3,1]],"latestChangedDtsFile":"./main.d.ts"} +//// [/myproject/main/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./main.ts" + ], + "original": 3 + } + ], + "fileNames": [ + "lib.d.ts", + "../decls/FnS.d.ts", + "./main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../decls/FnS.d.ts", + "version": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "signature": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./main.ts", + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../decls/FnS.d.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true + }, + "referencedMap": { + "./main.ts": [ + "../decls/FnS.d.ts" + ] + }, + "latestChangedDtsFile": "./main.d.ts", + "size": 1515 +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": false + }, + "files": [], + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *modified* +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 2 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 0 + }, + "end": { + "line": 5, + "character": 0 + } + }, + "text": "" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 3 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 0 + }, + "end": { + "line": 5, + "character": 0 + } + }, + "text": "c" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 4 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 1 + }, + "end": { + "line": 5, + "character": 1 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 5 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 2 + }, + "end": { + "line": 5, + "character": 2 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 6 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 3 + }, + "end": { + "line": 5, + "character": 3 + } + }, + "text": "s" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 7 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 4 + }, + "end": { + "line": 5, + "character": 4 + } + }, + "text": "t" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 8 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 5 + }, + "end": { + "line": 5, + "character": 5 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 9 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 6 + }, + "end": { + "line": 5, + "character": 6 + } + }, + "text": "x" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 10 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 7 + }, + "end": { + "line": 5, + "character": 7 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 11 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 8 + }, + "end": { + "line": 5, + "character": 8 + } + }, + "text": "=" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 12 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 9 + }, + "end": { + "line": 5, + "character": 9 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 13 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 10 + }, + "end": { + "line": 5, + "character": 10 + } + }, + "text": "1" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 14 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 11 + }, + "end": { + "line": 5, + "character": 11 + } + }, + "text": "0" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 15 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 12 + }, + "end": { + "line": 5, + "character": 12 + } + }, + "text": ";" + } + ] + } +} + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + [/myproject/tsconfig.json] + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// const x = 10; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolution.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolution.baseline new file mode 100644 index 00000000..d40fc5b8 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolution.baseline @@ -0,0 +1,457 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/decls/FnS.d.ts] *new* +export declare function fn1(): void; +export declare function fn2(): void; +export declare function fn3(): void; +export declare function fn4(): void; +export declare function fn5(): void; +//# sourceMappingURL=FnS.d.ts.map +//// [/myproject/decls/FnS.d.ts.map] *new* +{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["../dependency/FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM"} +//// [/myproject/dependency/FnS.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fn1 = fn1; +exports.fn2 = fn2; +exports.fn3 = fn3; +exports.fn4 = fn4; +exports.fn5 = fn5; +function fn1() { } +function fn2() { } +function fn3() { } +function fn4() { } +function fn5() { } + +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/dependency/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./FnS.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n","signature":"bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n","impliedNodeFormat":1}],"options":{"composite":true,"declarationDir":"../decls","declarationMap":true},"latestChangedDtsFile":"../decls/FnS.d.ts"} +//// [/myproject/dependency/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./FnS.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "./FnS.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./FnS.ts", + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "declarationDir": "../decls", + "declarationMap": true + }, + "latestChangedDtsFile": "../decls/FnS.d.ts", + "size": 1423 +} +//// [/myproject/main/main.d.ts] *new* +export {}; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/main/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":""} +//// [/myproject/main/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const FnS_1 = require("../decls/FnS"); +(0, FnS_1.fn1)(); +(0, FnS_1.fn2)(); +(0, FnS_1.fn3)(); +(0, FnS_1.fn4)(); +(0, FnS_1.fn5)(); + +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": false + }, + +} +//// [/myproject/main/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../decls/FnS.d.ts","./main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map",{"version":"72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true},"referencedMap":[[3,1]],"latestChangedDtsFile":"./main.d.ts"} +//// [/myproject/main/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./main.ts" + ], + "original": 3 + } + ], + "fileNames": [ + "lib.d.ts", + "../decls/FnS.d.ts", + "./main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../decls/FnS.d.ts", + "version": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "signature": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./main.ts", + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../decls/FnS.d.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true + }, + "referencedMap": { + "./main.ts": [ + "../decls/FnS.d.ts" + ] + }, + "latestChangedDtsFile": "./main.d.ts", + "size": 1515 +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": false + }, + + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/random/tsconfig.json] *new* + /random/random.ts +Open Files:: + [/random/random.ts] *new* + /random/tsconfig.json (default) +Config:: + [/random/tsconfig.json] *new* + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/random/random.ts] *new* + NearestConfigFileName: /random/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* + [/random/tsconfig.json] + /random/random.ts +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) + [/random/random.ts] + /random/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + [/random/random.ts] + NearestConfigFileName: /random/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *new* + /myproject/main/main.ts *new* + [/random/tsconfig.json] + /random/random.ts +Open Files:: + [/myproject/dependency/FnS.ts] *modified* + /myproject/dependency/tsconfig.json (default) + /myproject/tsconfig.json *new* + [/random/random.ts] + /random/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///random/random.ts" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] + /myproject/dependency/tsconfig.json (default) + /myproject/tsconfig.json + [/random/random.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] + /myproject/dependency/tsconfig.json (default) + /myproject/tsconfig.json + [/random/random.ts] *new* + /random/tsconfig.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + } + } +} + +Open Files:: + [/myproject/dependency/FnS.ts] *closed* + [/random/random.ts] + /random/tsconfig.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///random/random.ts" + } + } +} + +Open Files:: + [/random/random.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///random/random.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *deleted* + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *deleted* + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *deleted* + /myproject/dependency/FnS.ts + /myproject/main/main.ts + [/random/tsconfig.json] + /random/random.ts +Open Files:: + [/random/random.ts] *new* + /random/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *deleted* + [/myproject/main/tsconfig.json] *deleted* + [/myproject/tsconfig.json] *deleted* + [/random/tsconfig.json] + RetainingProjects: + /random/tsconfig.json + RetainingOpenFiles: + /random/random.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *deleted* + [/random/random.ts] + NearestConfigFileName: /random/tsconfig.json diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolutionEdit.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolutionEdit.baseline new file mode 100644 index 00000000..85251009 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolutionEdit.baseline @@ -0,0 +1,936 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/decls/FnS.d.ts] *new* +export declare function fn1(): void; +export declare function fn2(): void; +export declare function fn3(): void; +export declare function fn4(): void; +export declare function fn5(): void; +//# sourceMappingURL=FnS.d.ts.map +//// [/myproject/decls/FnS.d.ts.map] *new* +{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["../dependency/FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM"} +//// [/myproject/dependency/FnS.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fn1 = fn1; +exports.fn2 = fn2; +exports.fn3 = fn3; +exports.fn4 = fn4; +exports.fn5 = fn5; +function fn1() { } +function fn2() { } +function fn3() { } +function fn4() { } +function fn5() { } + +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/dependency/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./FnS.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n","signature":"bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n","impliedNodeFormat":1}],"options":{"composite":true,"declarationDir":"../decls","declarationMap":true},"latestChangedDtsFile":"../decls/FnS.d.ts"} +//// [/myproject/dependency/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./FnS.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "./FnS.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./FnS.ts", + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "declarationDir": "../decls", + "declarationMap": true + }, + "latestChangedDtsFile": "../decls/FnS.d.ts", + "size": 1423 +} +//// [/myproject/main/main.d.ts] *new* +export {}; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/main/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":""} +//// [/myproject/main/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const FnS_1 = require("../decls/FnS"); +(0, FnS_1.fn1)(); +(0, FnS_1.fn2)(); +(0, FnS_1.fn3)(); +(0, FnS_1.fn4)(); +(0, FnS_1.fn5)(); + +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": false + }, + +} +//// [/myproject/main/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../decls/FnS.d.ts","./main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map",{"version":"72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true},"referencedMap":[[3,1]],"latestChangedDtsFile":"./main.d.ts"} +//// [/myproject/main/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./main.ts" + ], + "original": 3 + } + ], + "fileNames": [ + "lib.d.ts", + "../decls/FnS.d.ts", + "./main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../decls/FnS.d.ts", + "version": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "signature": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./main.ts", + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../decls/FnS.d.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true + }, + "referencedMap": { + "./main.ts": [ + "../decls/FnS.d.ts" + ] + }, + "latestChangedDtsFile": "./main.d.ts", + "size": 1515 +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": false + }, + + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *new* + /myproject/main/main.ts *new* +Open Files:: + [/myproject/dependency/FnS.ts] *modified* + /myproject/dependency/tsconfig.json (default) + /myproject/tsconfig.json *new* +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 2 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 0 + }, + "end": { + "line": 0, + "character": 0 + } + }, + "text": "" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 3 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 0 + }, + "end": { + "line": 0, + "character": 0 + } + }, + "text": "f" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 4 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 1 + }, + "end": { + "line": 0, + "character": 1 + } + }, + "text": "u" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 5 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 2 + }, + "end": { + "line": 0, + "character": 2 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 6 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 3 + }, + "end": { + "line": 0, + "character": 3 + } + }, + "text": "c" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 7 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 4 + }, + "end": { + "line": 0, + "character": 4 + } + }, + "text": "t" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 8 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 5 + }, + "end": { + "line": 0, + "character": 5 + } + }, + "text": "i" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 9 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 6 + }, + "end": { + "line": 0, + "character": 6 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 10 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 7 + }, + "end": { + "line": 0, + "character": 7 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 11 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 8 + }, + "end": { + "line": 0, + "character": 8 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 12 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 9 + }, + "end": { + "line": 0, + "character": 9 + } + }, + "text": "f" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 13 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 10 + }, + "end": { + "line": 0, + "character": 10 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 14 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 11 + }, + "end": { + "line": 0, + "character": 11 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 15 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 12 + }, + "end": { + "line": 0, + "character": 12 + } + }, + "text": "B" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 16 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 13 + }, + "end": { + "line": 0, + "character": 13 + } + }, + "text": "a" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 17 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 14 + }, + "end": { + "line": 0, + "character": 14 + } + }, + "text": "r" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 18 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 15 + }, + "end": { + "line": 0, + "character": 15 + } + }, + "text": "(" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 19 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 16 + }, + "end": { + "line": 0, + "character": 16 + } + }, + "text": ")" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 20 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 17 + }, + "end": { + "line": 0, + "character": 17 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 21 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 18 + }, + "end": { + "line": 0, + "character": 18 + } + }, + "text": "{" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 22 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 19 + }, + "end": { + "line": 0, + "character": 19 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 23 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 20 + }, + "end": { + "line": 0, + "character": 20 + } + }, + "text": "}" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 24 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 21 + }, + "end": { + "line": 0, + "character": 21 + } + }, + "text": "\n" + } + ] + } +} + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 3, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + [/myproject/main/tsconfig.json] + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + /myproject/main/main.ts + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// function fooBar() { } +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolutionEditEnd.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolutionEditEnd.baseline new file mode 100644 index 00000000..f923c0fd --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsRenameWithSourceMapsNotSolutionEditEnd.baseline @@ -0,0 +1,710 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/decls/FnS.d.ts] *new* +export declare function fn1(): void; +export declare function fn2(): void; +export declare function fn3(): void; +export declare function fn4(): void; +export declare function fn5(): void; +//# sourceMappingURL=FnS.d.ts.map +//// [/myproject/decls/FnS.d.ts.map] *new* +{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["../dependency/FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM"} +//// [/myproject/dependency/FnS.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fn1 = fn1; +exports.fn2 = fn2; +exports.fn3 = fn3; +exports.fn4 = fn4; +exports.fn5 = fn5; +function fn1() { } +function fn2() { } +function fn3() { } +function fn4() { } +function fn5() { } + +//// [/myproject/dependency/FnS.ts] *new* +export function fn1() { } +export function fn2() { } +export function fn3() { } +export function fn4() { } +export function fn5() { } + +//// [/myproject/dependency/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "declarationDir": "../decls" + } +} +//// [/myproject/dependency/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./FnS.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n","signature":"bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n","impliedNodeFormat":1}],"options":{"composite":true,"declarationDir":"../decls","declarationMap":true},"latestChangedDtsFile":"../decls/FnS.d.ts"} +//// [/myproject/dependency/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./FnS.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "./FnS.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./FnS.ts", + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "dabc23167a661a3e71744cf63ff5adcc-export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n", + "signature": "bf56b5172c2fd500384b437b7700d594-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "declarationDir": "../decls", + "declarationMap": true + }, + "latestChangedDtsFile": "../decls/FnS.d.ts", + "size": 1423 +} +//// [/myproject/main/main.d.ts] *new* +export {}; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/main/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":""} +//// [/myproject/main/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const FnS_1 = require("../decls/FnS"); +(0, FnS_1.fn1)(); +(0, FnS_1.fn2)(); +(0, FnS_1.fn3)(); +(0, FnS_1.fn4)(); +(0, FnS_1.fn5)(); + +//// [/myproject/main/main.ts] *new* +import { + fn1, + fn2, + fn3, + fn4, + fn5 +} from "../decls/FnS"; + +fn1(); +fn2(); +fn3(); +fn4(); +fn5(); +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "disableSourceOfProjectReferenceRedirect": false + }, + +} +//// [/myproject/main/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../decls/FnS.d.ts","./main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map",{"version":"72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true},"referencedMap":[[3,1]],"latestChangedDtsFile":"./main.d.ts"} +//// [/myproject/main/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./main.ts" + ], + "original": 3 + } + ], + "fileNames": [ + "lib.d.ts", + "../decls/FnS.d.ts", + "./main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../decls/FnS.d.ts", + "version": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "signature": "ccbe7f3de9ff1ded77b994bef4cf9dce-export declare function fn1(): void;\nexport declare function fn2(): void;\nexport declare function fn3(): void;\nexport declare function fn4(): void;\nexport declare function fn5(): void;\n//# sourceMappingURL=FnS.d.ts.map", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./main.ts", + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "72620bcff3a257f2c990b3f030e1b8e3-import {\n\tfn1,\n\tfn2,\n\tfn3,\n\tfn4,\n\tfn5\n} from \"../decls/FnS\";\n\nfn1();\nfn2();\nfn3();\nfn4();\nfn5();", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../decls/FnS.d.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true + }, + "referencedMap": { + "./main.ts": [ + "../decls/FnS.d.ts" + ] + }, + "latestChangedDtsFile": "./main.d.ts", + "size": 1515 +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableSourceOfProjectReferenceRedirect": false + }, + + "references": [ + { "path": "dependency" }, + { "path": "main" } + ] +} +//// [/random/random.ts] *new* +export const a = 10; +//// [/random/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "languageId": "typescript", + "version": 0, + "text": "export function fn1() { }\nexport function fn2() { }\nexport function fn3() { }\nexport function fn4() { }\nexport function fn5() { }\n" + } + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *new* + /myproject/dependency/FnS.ts + [/myproject/tsconfig.json] *new* +Open Files:: + [/myproject/dependency/FnS.ts] *new* + /myproject/dependency/tsconfig.json (default) +Config:: + [/myproject/dependency/tsconfig.json] *new* + RetainingProjects: + /myproject/dependency/tsconfig.json + RetainingOpenFiles: + /myproject/dependency/FnS.ts +Config File Names:: + [/myproject/dependency/FnS.ts] *new* + NearestConfigFileName: /myproject/dependency/tsconfig.json + Ancestors: + /myproject/dependency/tsconfig.json /myproject/tsconfig.json + /myproject/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *new* + /myproject/main/main.ts *new* +Open Files:: + [/myproject/dependency/FnS.ts] *modified* + /myproject/dependency/tsconfig.json (default) + /myproject/tsconfig.json *new* +Config:: + [/myproject/dependency/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/dependency/tsconfig.json + /myproject/tsconfig.json *new* + RetainingOpenFiles: + /myproject/dependency/FnS.ts + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 2 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 0 + }, + "end": { + "line": 5, + "character": 0 + } + }, + "text": "" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 3 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 0 + }, + "end": { + "line": 5, + "character": 0 + } + }, + "text": "c" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 4 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 1 + }, + "end": { + "line": 5, + "character": 1 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 5 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 2 + }, + "end": { + "line": 5, + "character": 2 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 6 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 3 + }, + "end": { + "line": 5, + "character": 3 + } + }, + "text": "s" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 7 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 4 + }, + "end": { + "line": 5, + "character": 4 + } + }, + "text": "t" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 8 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 5 + }, + "end": { + "line": 5, + "character": 5 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 9 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 6 + }, + "end": { + "line": 5, + "character": 6 + } + }, + "text": "x" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 10 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 7 + }, + "end": { + "line": 5, + "character": 7 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 11 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 8 + }, + "end": { + "line": 5, + "character": 8 + } + }, + "text": "=" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 12 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 9 + }, + "end": { + "line": 5, + "character": 9 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 13 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 10 + }, + "end": { + "line": 5, + "character": 10 + } + }, + "text": "1" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 14 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 11 + }, + "end": { + "line": 5, + "character": 11 + } + }, + "text": "0" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts", + "version": 15 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 5, + "character": 12 + }, + "end": { + "line": 5, + "character": 12 + } + }, + "text": ";" + } + ] + } +} + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///myproject/dependency/FnS.ts" + }, + "position": { + "line": 2, + "character": 16 + }, + "newName": "?" + } +} + +Projects:: + [/myproject/dependency/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + [/myproject/main/tsconfig.json] + /myproject/decls/FnS.d.ts + /myproject/main/main.ts + [/myproject/tsconfig.json] *modified* + /myproject/dependency/FnS.ts *modified* + /myproject/main/main.ts + + + + +// === findRenameLocations === +// === /myproject/dependency/FnS.ts === +// export function fn1() { } +// export function fn2() { } +// export function /*RENAME*/[|fn3RENAME|]() { } +// export function fn4() { } +// export function fn5() { } +// const x = 10; + +// === /myproject/main/main.ts === +// import { +// fn1, +// fn2, +// [|fn3RENAME|], +// fn4, +// fn5 +// } from "../decls/FnS"; +// +// fn1(); +// fn2(); +// [|fn3RENAME|](); +// fn4(); +// fn5(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/declarationMapsWorkspaceSymbols.baseline b/testdata/baselines/reference/fourslash/state/declarationMapsWorkspaceSymbols.baseline new file mode 100644 index 00000000..27108ed4 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/declarationMapsWorkspaceSymbols.baseline @@ -0,0 +1,216 @@ +UseCaseSensitiveFileNames: true +//// [/a/a.ts] *new* +export function fnA() {} +export interface IfaceA {} +export const instanceA: IfaceA = {}; +//// [/a/bin/a.d.ts] *new* +export declare function fnA(): void; +export interface IfaceA { +} +export declare const instanceA: IfaceA; +//# sourceMappingURL=a.d.ts.map +//// [/a/bin/a.d.ts.map] *new* +{ + "version": 3, + "file": "a.d.ts", + "sourceRoot": "", + "sources": ["../a.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK;AACxB,MAAM,WAAW,MAAM;CAAG;AAC1B,eAAO,MAAM,SAAS,EAAE,MAAW,CAAC" +} +//// [/a/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/b/b.ts] *new* +export function fnB() {} +//// [/b/bin/b.d.ts] *new* +export declare function fnB(): void; +//# sourceMappingURL=b.d.ts.map +//// [/b/bin/b.d.ts.map] *new* +{ + "version": 3, + "file": "b.d.ts", + "sourceRoot": "", + "sources": ["../b.ts"], + "names": [], + "mappings": "AAAA,wBAAgB,GAAG,SAAK" +} +//// [/b/c.ts] *new* +export function fnC() {} +//// [/b/tsconfig.json] *new* +{ + "compilerOptions": { + "outDir": "bin", + "declarationMap": true, + "composite": true + } +} +//// [/dummy/dummy.ts] *new* +export const a = 10; +//// [/dummy/tsconfig.json] *new* +{} +//// [/user/tsconfig.json] *new* +{ + "references": [ + { "path": "../a" }, + { "path": "../b" } + ] +} +//// [/user/user.ts] *new* +import * as a from "../a/a"; +import * as b from "../b/b"; +export function fnUser() { + a.fnA(); + b.fnB(); + a.instanceA; +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///user/user.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as a from \"../a/a\";\nimport * as b from \"../b/b\";\nexport function fnUser() {\n\ta.fnA();\n\tb.fnB();\n\ta.instanceA;\n}" + } + } +} + +Projects:: + [/user/tsconfig.json] *new* + /a/a.ts + /b/b.ts + /user/user.ts +Open Files:: + [/user/user.ts] *new* + /user/tsconfig.json (default) +Config:: + [/a/tsconfig.json] *new* + RetainingProjects: + /user/tsconfig.json + [/b/tsconfig.json] *new* + RetainingProjects: + /user/tsconfig.json + [/user/tsconfig.json] *new* + RetainingProjects: + /user/tsconfig.json + RetainingOpenFiles: + /user/user.ts +Config File Names:: + [/user/user.ts] *new* + NearestConfigFileName: /user/tsconfig.json + +{ + "method": "workspace/symbol", + "params": { + "query": "fn" + } +} + +Projects:: + [/a/tsconfig.json] *new* + /a/a.ts + [/b/tsconfig.json] *new* + /b/b.ts + /b/c.ts + [/user/tsconfig.json] + /a/a.ts + /b/b.ts + /user/user.ts +Config:: + [/a/tsconfig.json] *modified* + RetainingProjects: *modified* + /a/tsconfig.json *new* + /user/tsconfig.json + [/b/tsconfig.json] *modified* + RetainingProjects: *modified* + /b/tsconfig.json *new* + /user/tsconfig.json + [/user/tsconfig.json] + RetainingProjects: + /user/tsconfig.json + RetainingOpenFiles: + /user/user.ts + + + + +// === workspaceSymbol === +// === /a/a.ts === +// [|{| name: fnA, kind: Function |}export function fnA() {}|] +// export interface IfaceA {} +// export const instanceA: IfaceA = {}; + +// === /b/b.ts === +// [|{| name: fnB, kind: Function |}export function fnB() {}|] + +// === /b/c.ts === +// [|{| name: fnC, kind: Function |}export function fnC() {}|] + +// === /user/user.ts === +// import * as a from "../a/a"; +// import * as b from "../b/b"; +// [|{| name: fnUser, kind: Function |}export function fnUser() { +// a.fnA(); +// b.fnB(); +// a.instanceA; +// }|] +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///user/user.ts" + } + } +} + +Open Files:: + [/user/user.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "export const a = 10;" + } + } +} + +Projects:: + [/a/tsconfig.json] *deleted* + /a/a.ts + [/b/tsconfig.json] *deleted* + /b/b.ts + /b/c.ts + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts + [/user/tsconfig.json] *deleted* + /a/a.ts + /b/b.ts + /user/user.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/a/tsconfig.json] *deleted* + [/b/tsconfig.json] *deleted* + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/user/tsconfig.json] *deleted* +Config File Names:: + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/user/user.ts] *deleted* diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsAncestorSiblingProjectsLoading.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsAncestorSiblingProjectsLoading.baseline new file mode 100644 index 00000000..ec8c0130 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsAncestorSiblingProjectsLoading.baseline @@ -0,0 +1,179 @@ +UseCaseSensitiveFileNames: true +//// [/solution/compiler/program.ts] *new* +namespace ts { + export const program: Program = { + getSourceFiles: () => [getSourceFile()] + }; + function getSourceFile() { return "something"; } +} +//// [/solution/compiler/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "disableSolutionSearching": false, + }, + "files": ["./types.ts", "./program.ts"] +} +//// [/solution/compiler/types.ts] *new* +namespace ts { + export interface Program { + getSourceFiles(): string[]; + } +} +//// [/solution/services/services.ts] *new* +/// +/// +namespace ts { + const result = program.getSourceFiles(); +} +//// [/solution/services/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true + }, + "files": ["./services.ts"], + "references": [ + { "path": "../compiler" }, + ], +} +//// [/solution/tsconfig.json] *new* +{ + "files": [], + "include": [], + "references": [ + { "path": "./compiler" }, + { "path": "./services" }, + ], +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///solution/compiler/program.ts", + "languageId": "typescript", + "version": 0, + "text": "namespace ts {\n\texport const program: Program = {\n\t\tgetSourceFiles: () => [getSourceFile()]\n\t};\n\tfunction getSourceFile() { return \"something\"; }\n}" + } + } +} + +Projects:: + [/solution/compiler/tsconfig.json] *new* + /solution/compiler/types.ts + /solution/compiler/program.ts + [/solution/tsconfig.json] *new* +Open Files:: + [/solution/compiler/program.ts] *new* + /solution/compiler/tsconfig.json (default) +Config:: + [/solution/compiler/tsconfig.json] *new* + RetainingProjects: + /solution/compiler/tsconfig.json + RetainingOpenFiles: + /solution/compiler/program.ts +Config File Names:: + [/solution/compiler/program.ts] *new* + NearestConfigFileName: /solution/compiler/tsconfig.json + Ancestors: + /solution/compiler/tsconfig.json /solution/tsconfig.json + /solution/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///solution/compiler/program.ts" + }, + "position": { + "line": 2, + "character": 25 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /solution/compiler/program.ts === +// namespace ts { +// export const program: Program = { +// getSourceFiles: () => [/*FIND ALL REFS*/[|getSourceFile|]()] +// }; +// function [|getSourceFile|]() { return "something"; } +// } +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///solution/compiler/program.ts" + }, + "position": { + "line": 2, + "character": 2 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/solution/compiler/tsconfig.json] + /solution/compiler/types.ts + /solution/compiler/program.ts + [/solution/services/tsconfig.json] *new* + /solution/compiler/types.ts + /solution/compiler/program.ts + /solution/services/services.ts + [/solution/tsconfig.json] *modified* +Open Files:: + [/solution/compiler/program.ts] *modified* + /solution/compiler/tsconfig.json (default) + /solution/services/tsconfig.json *new* +Config:: + [/solution/compiler/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/compiler/tsconfig.json + /solution/services/tsconfig.json *new* + /solution/tsconfig.json *new* + RetainingOpenFiles: + /solution/compiler/program.ts + [/solution/services/tsconfig.json] *new* + RetainingProjects: + /solution/services/tsconfig.json + /solution/tsconfig.json + [/solution/tsconfig.json] *new* + RetainingProjects: + /solution/tsconfig.json + + + + +// === findAllReferences === +// === /solution/compiler/program.ts === +// namespace ts { +// export const program: Program = { +// /*FIND ALL REFS*/[|getSourceFiles|]: () => [getSourceFile()] +// }; +// function getSourceFile() { return "something"; } +// } + +// === /solution/compiler/types.ts === +// namespace ts { +// export interface Program { +// [|getSourceFiles|](): string[]; +// } +// } + +// === /solution/services/services.ts === +// /// +// /// +// namespace ts { +// const result = program.[|getSourceFiles|](); +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsAncestorSiblingProjectsLoadingDisableSolutionSearching.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsAncestorSiblingProjectsLoadingDisableSolutionSearching.baseline new file mode 100644 index 00000000..e544f1b7 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsAncestorSiblingProjectsLoadingDisableSolutionSearching.baseline @@ -0,0 +1,139 @@ +UseCaseSensitiveFileNames: true +//// [/solution/compiler/program.ts] *new* +namespace ts { + export const program: Program = { + getSourceFiles: () => [getSourceFile()] + }; + function getSourceFile() { return "something"; } +} +//// [/solution/compiler/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "disableSolutionSearching": true, + }, + "files": ["./types.ts", "./program.ts"] +} +//// [/solution/compiler/types.ts] *new* +namespace ts { + export interface Program { + getSourceFiles(): string[]; + } +} +//// [/solution/services/services.ts] *new* +/// +/// +namespace ts { + const result = program.getSourceFiles(); +} +//// [/solution/services/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true + }, + "files": ["./services.ts"], + "references": [ + { "path": "../compiler" }, + ], +} +//// [/solution/tsconfig.json] *new* +{ + "files": [], + "include": [], + "references": [ + { "path": "./compiler" }, + { "path": "./services" }, + ], +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///solution/compiler/program.ts", + "languageId": "typescript", + "version": 0, + "text": "namespace ts {\n\texport const program: Program = {\n\t\tgetSourceFiles: () => [getSourceFile()]\n\t};\n\tfunction getSourceFile() { return \"something\"; }\n}" + } + } +} + +Projects:: + [/solution/compiler/tsconfig.json] *new* + /solution/compiler/types.ts + /solution/compiler/program.ts +Open Files:: + [/solution/compiler/program.ts] *new* + /solution/compiler/tsconfig.json (default) +Config:: + [/solution/compiler/tsconfig.json] *new* + RetainingProjects: + /solution/compiler/tsconfig.json + RetainingOpenFiles: + /solution/compiler/program.ts +Config File Names:: + [/solution/compiler/program.ts] *new* + NearestConfigFileName: /solution/compiler/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///solution/compiler/program.ts" + }, + "position": { + "line": 2, + "character": 25 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /solution/compiler/program.ts === +// namespace ts { +// export const program: Program = { +// getSourceFiles: () => [/*FIND ALL REFS*/[|getSourceFile|]()] +// }; +// function [|getSourceFile|]() { return "something"; } +// } +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///solution/compiler/program.ts" + }, + "position": { + "line": 2, + "character": 2 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /solution/compiler/program.ts === +// namespace ts { +// export const program: Program = { +// /*FIND ALL REFS*/[|getSourceFiles|]: () => [getSourceFile()] +// }; +// function getSourceFile() { return "something"; } +// } + +// === /solution/compiler/types.ts === +// namespace ts { +// export interface Program { +// [|getSourceFiles|](): string[]; +// } +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline new file mode 100644 index 00000000..d6507563 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline @@ -0,0 +1,130 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": true, + "disableSourceOfProjectReferenceRedirect": true, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/b/helper.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \".\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Open Files:: + [/myproject/a/index.ts] + /myproject/a/tsconfig.json (default) + [/myproject/b/helper.ts] *new* + /myproject/b/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + RetainingOpenFiles: + /myproject/b/helper.ts +Config File Names:: + [/myproject/a/index.ts] + NearestConfigFileName: /myproject/a/tsconfig.json + [/myproject/b/helper.ts] *new* + NearestConfigFileName: /myproject/b/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/lib/index.d.ts === +// export declare class [|B|] { +// M(): void; +// } +// //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline new file mode 100644 index 00000000..26e0d607 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline @@ -0,0 +1,142 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": true, + "disableSourceOfProjectReferenceRedirect": true, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/lib/index.d.ts.map] *new* +{ + "version": 3, + "file": "index.d.ts", + "sourceRoot": "", + "sources": ["../index.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;IACV,CAAC;CACJ" +} +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/b/helper.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \".\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Open Files:: + [/myproject/a/index.ts] + /myproject/a/tsconfig.json (default) + [/myproject/b/helper.ts] *new* + /myproject/b/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + RetainingOpenFiles: + /myproject/b/helper.ts +Config File Names:: + [/myproject/a/index.ts] + NearestConfigFileName: /myproject/a/tsconfig.json + [/myproject/b/helper.ts] *new* + NearestConfigFileName: /myproject/b/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/helper.ts === +// import { [|B|] } from "."; +// const b: [|B|] = new [|B|](); + +// === /myproject/b/index.ts === +// export class [|B|] { +// M() {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline new file mode 100644 index 00000000..26e216f1 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline @@ -0,0 +1,130 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": true, + "disableSourceOfProjectReferenceRedirect": false, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/b/helper.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \".\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Open Files:: + [/myproject/a/index.ts] + /myproject/a/tsconfig.json (default) + [/myproject/b/helper.ts] *new* + /myproject/b/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + RetainingOpenFiles: + /myproject/b/helper.ts +Config File Names:: + [/myproject/a/index.ts] + NearestConfigFileName: /myproject/a/tsconfig.json + [/myproject/b/helper.ts] *new* + NearestConfigFileName: /myproject/b/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/lib/index.d.ts === +// export declare class [|B|] { +// M(): void; +// } +// //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline new file mode 100644 index 00000000..34ead087 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline @@ -0,0 +1,142 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": true, + "disableSourceOfProjectReferenceRedirect": false, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/lib/index.d.ts.map] *new* +{ + "version": 3, + "file": "index.d.ts", + "sourceRoot": "", + "sources": ["../index.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;IACV,CAAC;CACJ" +} +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/b/helper.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \".\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Open Files:: + [/myproject/a/index.ts] + /myproject/a/tsconfig.json (default) + [/myproject/b/helper.ts] *new* + /myproject/b/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + RetainingOpenFiles: + /myproject/b/helper.ts +Config File Names:: + [/myproject/a/index.ts] + NearestConfigFileName: /myproject/a/tsconfig.json + [/myproject/b/helper.ts] *new* + NearestConfigFileName: /myproject/b/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/helper.ts === +// import { [|B|] } from "."; +// const b: [|B|] = new [|B|](); + +// === /myproject/b/index.ts === +// export class [|B|] { +// M() {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline new file mode 100644 index 00000000..744a08f0 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline @@ -0,0 +1,130 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": false, + "disableSourceOfProjectReferenceRedirect": true, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/b/helper.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \".\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Open Files:: + [/myproject/a/index.ts] + /myproject/a/tsconfig.json (default) + [/myproject/b/helper.ts] *new* + /myproject/b/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + RetainingOpenFiles: + /myproject/b/helper.ts +Config File Names:: + [/myproject/a/index.ts] + NearestConfigFileName: /myproject/a/tsconfig.json + [/myproject/b/helper.ts] *new* + NearestConfigFileName: /myproject/b/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/lib/index.d.ts === +// export declare class [|B|] { +// M(): void; +// } +// //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline new file mode 100644 index 00000000..a84a5fd0 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline @@ -0,0 +1,142 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": false, + "disableSourceOfProjectReferenceRedirect": true, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/lib/index.d.ts.map] *new* +{ + "version": 3, + "file": "index.d.ts", + "sourceRoot": "", + "sources": ["../index.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;IACV,CAAC;CACJ" +} +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/b/helper.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \".\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Open Files:: + [/myproject/a/index.ts] + /myproject/a/tsconfig.json (default) + [/myproject/b/helper.ts] *new* + /myproject/b/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + RetainingOpenFiles: + /myproject/b/helper.ts +Config File Names:: + [/myproject/a/index.ts] + NearestConfigFileName: /myproject/a/tsconfig.json + [/myproject/b/helper.ts] *new* + NearestConfigFileName: /myproject/b/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/helper.ts === +// import { [|B|] } from "."; +// const b: [|B|] = new [|B|](); + +// === /myproject/b/index.ts === +// export class [|B|] { +// M() {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline new file mode 100644 index 00000000..b9b50f45 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline @@ -0,0 +1,130 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": false, + "disableSourceOfProjectReferenceRedirect": false, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/b/helper.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \".\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Open Files:: + [/myproject/a/index.ts] + /myproject/a/tsconfig.json (default) + [/myproject/b/helper.ts] *new* + /myproject/b/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + RetainingOpenFiles: + /myproject/b/helper.ts +Config File Names:: + [/myproject/a/index.ts] + NearestConfigFileName: /myproject/a/tsconfig.json + [/myproject/b/helper.ts] *new* + NearestConfigFileName: /myproject/b/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/lib/index.d.ts === +// export declare class [|B|] { +// M(): void; +// } +// //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline new file mode 100644 index 00000000..8f986664 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline @@ -0,0 +1,142 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": false, + "disableSourceOfProjectReferenceRedirect": false, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/lib/index.d.ts.map] *new* +{ + "version": 3, + "file": "index.d.ts", + "sourceRoot": "", + "sources": ["../index.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;IACV,CAAC;CACJ" +} +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/b/helper.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \".\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Open Files:: + [/myproject/a/index.ts] + /myproject/a/tsconfig.json (default) + [/myproject/b/helper.ts] *new* + /myproject/b/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + RetainingOpenFiles: + /myproject/b/helper.ts +Config File Names:: + [/myproject/a/index.ts] + NearestConfigFileName: /myproject/a/tsconfig.json + [/myproject/b/helper.ts] *new* + NearestConfigFileName: /myproject/b/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/helper.ts === +// import { [|B|] } from "."; +// const b: [|B|] = new [|B|](); + +// === /myproject/b/index.ts === +// export class [|B|] { +// M() {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline new file mode 100644 index 00000000..23659d8d --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline @@ -0,0 +1,88 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": true, + "disableSourceOfProjectReferenceRedirect": true, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/lib/index.d.ts === +// export declare class [|B|] { +// M(): void; +// } +// //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline new file mode 100644 index 00000000..46b5b8d5 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline @@ -0,0 +1,118 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": true, + "disableSourceOfProjectReferenceRedirect": true, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/lib/index.d.ts.map] *new* +{ + "version": 3, + "file": "index.d.ts", + "sourceRoot": "", + "sources": ["../index.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;IACV,CAAC;CACJ" +} +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/helper.ts === +// import { [|B|] } from "."; +// const b: [|B|] = new [|B|](); + +// === /myproject/b/index.ts === +// export class [|B|] { +// M() {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline new file mode 100644 index 00000000..bf66bd9f --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline @@ -0,0 +1,88 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": true, + "disableSourceOfProjectReferenceRedirect": false, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/lib/index.d.ts === +// export declare class [|B|] { +// M(): void; +// } +// //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline new file mode 100644 index 00000000..b7fcab83 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsDisabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline @@ -0,0 +1,118 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": true, + "disableSourceOfProjectReferenceRedirect": false, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/lib/index.d.ts.map] *new* +{ + "version": 3, + "file": "index.d.ts", + "sourceRoot": "", + "sources": ["../index.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;IACV,CAAC;CACJ" +} +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/helper.ts === +// import { [|B|] } from "."; +// const b: [|B|] = new [|B|](); + +// === /myproject/b/index.ts === +// export class [|B|] { +// M() {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline new file mode 100644 index 00000000..e75c517c --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsMissing.baseline @@ -0,0 +1,88 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": false, + "disableSourceOfProjectReferenceRedirect": true, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/lib/index.d.ts === +// export declare class [|B|] { +// M(): void; +// } +// //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline new file mode 100644 index 00000000..d98007bb --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreDisabledDeclMapIsPresent.baseline @@ -0,0 +1,118 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": false, + "disableSourceOfProjectReferenceRedirect": true, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/lib/index.d.ts.map] *new* +{ + "version": 3, + "file": "index.d.ts", + "sourceRoot": "", + "sources": ["../index.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;IACV,CAAC;CACJ" +} +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/helper.ts === +// import { [|B|] } from "."; +// const b: [|B|] = new [|B|](); + +// === /myproject/b/index.ts === +// export class [|B|] { +// M() {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline new file mode 100644 index 00000000..fd2ef780 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsMissing.baseline @@ -0,0 +1,88 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": false, + "disableSourceOfProjectReferenceRedirect": false, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/lib/index.d.ts === +// export declare class [|B|] { +// M(): void; +// } +// //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline new file mode 100644 index 00000000..455c0744 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDeclarationInOtherProjectProjIsNotLoadedRefdProjLoadingIsEnabledProjRefRedirectsAreEnabledDeclMapIsPresent.baseline @@ -0,0 +1,118 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/a/index.ts] *new* +import { B } from "../b/lib"; +const b: B = new B(); +//// [/myproject/a/tsconfig.json] *new* +{ + "disableReferencedProjectLoad": false, + "disableSourceOfProjectReferenceRedirect": false, + "composite": true +} +//// [/myproject/b/helper.ts] *new* +import { B } from "."; +const b: B = new B(); +//// [/myproject/b/index.ts] *new* +export class B { + M() {} +} +//// [/myproject/b/lib/index.d.ts] *new* +export declare class B { + M(): void; +} +//# sourceMappingURL=index.d.ts.map +//// [/myproject/b/lib/index.d.ts.map] *new* +{ + "version": 3, + "file": "index.d.ts", + "sourceRoot": "", + "sources": ["../index.ts"], + "names": [], + "mappings": "AAAA,qBAAa,CAAC;IACV,CAAC;CACJ" +} +//// [/myproject/b/tsconfig.json] *new* +{ + "declarationMap": true, + "outDir": "lib", + "composite": true, +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { B } from \"../b/lib\";\nconst b: B = new B();" + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] *new* + /myproject/b/lib/index.d.ts + /myproject/a/index.ts +Open Files:: + [/myproject/a/index.ts] *new* + /myproject/a/tsconfig.json (default) +Config:: + [/myproject/a/tsconfig.json] *new* + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts +Config File Names:: + [/myproject/a/index.ts] *new* + NearestConfigFileName: /myproject/a/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/a/index.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/myproject/a/tsconfig.json] + /myproject/b/lib/index.d.ts + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + /myproject/b/index.ts + /myproject/b/helper.ts + /myproject/b/lib/index.d.ts +Config:: + [/myproject/a/tsconfig.json] + RetainingProjects: + /myproject/a/tsconfig.json + RetainingOpenFiles: + /myproject/a/index.ts + [/myproject/b/tsconfig.json] *new* + RetainingProjects: + /myproject/b/tsconfig.json + + + + +// === findAllReferences === +// === /myproject/a/index.ts === +// import { [|B|] } from "../b/lib"; +// const b: /*FIND ALL REFS*/[|B|] = new [|B|](); + +// === /myproject/b/helper.ts === +// import { [|B|] } from "."; +// const b: [|B|] = new [|B|](); + +// === /myproject/b/index.ts === +// export class [|B|] { +// M() {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsDoesNotTryToSearchProjectAfterItsUpdateDoesNotIncludeTheFile.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsDoesNotTryToSearchProjectAfterItsUpdateDoesNotIncludeTheFile.baseline new file mode 100644 index 00000000..109e4280 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsDoesNotTryToSearchProjectAfterItsUpdateDoesNotIncludeTheFile.baseline @@ -0,0 +1,452 @@ +UseCaseSensitiveFileNames: true +//// [/packages/babel-loader/src/index.ts] *new* +import type { Foo } from "../../core/src/index.js"; +//// [/packages/babel-loader/tsconfig.json] *new* +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "composite": true, + "rootDir": "src", + "outDir": "dist" + }, + "include": ["src"], + "references": [{"path": "../core"}] +} +//// [/packages/core/src/index.ts] *new* +import { Bar } from "./loading-indicator.js"; +export type Foo = {}; +const bar: Bar = { + prop: 0 +} +//// [/packages/core/src/loading-indicator.ts] *new* +export interface Bar { + prop: number; +} +const bar: Bar = { + prop: 1 +} +//// [/packages/core/tsconfig.json] *new* +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "composite": true, + "rootDir": "./src", + "outDir": "./dist", + }, + "include": ["./src"] +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import type { Foo } from \"../../core/src/index.js\";" + } + } +} + +Projects:: + [/packages/babel-loader/tsconfig.json] *new* + /packages/core/src/loading-indicator.ts + /packages/core/src/index.ts + /packages/babel-loader/src/index.ts +Open Files:: + [/packages/babel-loader/src/index.ts] *new* + /packages/babel-loader/tsconfig.json (default) +Config:: + [/packages/babel-loader/tsconfig.json] *new* + RetainingProjects: + /packages/babel-loader/tsconfig.json + RetainingOpenFiles: + /packages/babel-loader/src/index.ts + [/packages/core/tsconfig.json] *new* + RetainingProjects: + /packages/babel-loader/tsconfig.json +Config File Names:: + [/packages/babel-loader/src/index.ts] *new* + NearestConfigFileName: /packages/babel-loader/tsconfig.json + Ancestors: + /packages/babel-loader/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///packages/core/src/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { Bar } from \"./loading-indicator.js\";\nexport type Foo = {};\nconst bar: Bar = {\n\tprop: 0\n}" + } + } +} + +Projects:: + [/packages/babel-loader/tsconfig.json] + /packages/core/src/loading-indicator.ts + /packages/core/src/index.ts + /packages/babel-loader/src/index.ts + [/packages/core/tsconfig.json] *new* + /packages/core/src/loading-indicator.ts + /packages/core/src/index.ts +Open Files:: + [/packages/babel-loader/src/index.ts] + /packages/babel-loader/tsconfig.json (default) + [/packages/core/src/index.ts] *new* + /packages/babel-loader/tsconfig.json + /packages/core/tsconfig.json (default) +Config:: + [/packages/babel-loader/tsconfig.json] + RetainingProjects: + /packages/babel-loader/tsconfig.json + RetainingOpenFiles: + /packages/babel-loader/src/index.ts + [/packages/core/tsconfig.json] *modified* + RetainingProjects: *modified* + /packages/babel-loader/tsconfig.json + /packages/core/tsconfig.json *new* + RetainingOpenFiles: *modified* + /packages/core/src/index.ts *new* +Config File Names:: + [/packages/babel-loader/src/index.ts] + NearestConfigFileName: /packages/babel-loader/tsconfig.json + Ancestors: + /packages/babel-loader/tsconfig.json + [/packages/core/src/index.ts] *new* + NearestConfigFileName: /packages/core/tsconfig.json + Ancestors: + /packages/core/tsconfig.json + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "version": 2 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 0 + }, + "end": { + "line": 0, + "character": 0 + } + }, + "text": "" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "version": 3 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 0 + }, + "end": { + "line": 0, + "character": 0 + } + }, + "text": "/" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "version": 4 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 1 + }, + "end": { + "line": 0, + "character": 1 + } + }, + "text": "/" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "version": 5 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 2 + }, + "end": { + "line": 0, + "character": 2 + } + }, + "text": " " + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "version": 6 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 3 + }, + "end": { + "line": 0, + "character": 3 + } + }, + "text": "c" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "version": 7 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 4 + }, + "end": { + "line": 0, + "character": 4 + } + }, + "text": "o" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "version": 8 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 5 + }, + "end": { + "line": 0, + "character": 5 + } + }, + "text": "m" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "version": 9 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 6 + }, + "end": { + "line": 0, + "character": 6 + } + }, + "text": "m" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "version": 10 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 7 + }, + "end": { + "line": 0, + "character": 7 + } + }, + "text": "e" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "version": 11 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 8 + }, + "end": { + "line": 0, + "character": 8 + } + }, + "text": "n" + } + ] + } +} + +{ + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///packages/babel-loader/src/index.ts", + "version": 12 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 0, + "character": 9 + }, + "end": { + "line": 0, + "character": 9 + } + }, + "text": "t" + } + ] + } +} + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///packages/core/src/index.ts" + }, + "position": { + "line": 3, + "character": 1 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/packages/babel-loader/tsconfig.json] *modified* + /packages/babel-loader/src/index.ts *modified* + /packages/core/src/loading-indicator.ts *deleted* + /packages/core/src/index.ts *deleted* + [/packages/core/tsconfig.json] + /packages/core/src/loading-indicator.ts + /packages/core/src/index.ts +Open Files:: + [/packages/babel-loader/src/index.ts] + /packages/babel-loader/tsconfig.json (default) + [/packages/core/src/index.ts] *modified* + /packages/babel-loader/tsconfig.json *deleted* + /packages/core/tsconfig.json (default) + + + + +// === findAllReferences === +// === /packages/core/src/index.ts === +// import { Bar } from "./loading-indicator.js"; +// export type Foo = {}; +// const bar: Bar = { +// /*FIND ALL REFS*/[|prop|]: 0 +// } + +// === /packages/core/src/loading-indicator.ts === +// export interface Bar { +// [|prop|]: number; +// } +// const bar: Bar = { +// [|prop|]: 1 +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsOpenFileInConfiguredProjectThatWillBeRemoved.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsOpenFileInConfiguredProjectThatWillBeRemoved.baseline new file mode 100644 index 00000000..176a89c9 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsOpenFileInConfiguredProjectThatWillBeRemoved.baseline @@ -0,0 +1,122 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/playground/tests.ts] *new* +export function foo() {} +//// [/myproject/playground/tsconfig-json/src/src.ts] *new* +export function foobar() {} +//// [/myproject/playground/tsconfig-json/tests/spec.ts] *new* +export function bar() { } + +//// [/myproject/playground/tsconfig-json/tsconfig.json] *new* +{ + "include": ["./src"] +} +//// [/myproject/playground/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/playground/tests.ts", + "languageId": "typescript", + "version": 0, + "text": "export function foo() {}" + } + } +} + +Projects:: + [/myproject/playground/tsconfig.json] *new* + /myproject/playground/tests.ts + /myproject/playground/tsconfig-json/src/src.ts + /myproject/playground/tsconfig-json/tests/spec.ts +Open Files:: + [/myproject/playground/tests.ts] *new* + /myproject/playground/tsconfig.json (default) +Config:: + [/myproject/playground/tsconfig.json] *new* + RetainingProjects: + /myproject/playground/tsconfig.json + RetainingOpenFiles: + /myproject/playground/tests.ts +Config File Names:: + [/myproject/playground/tests.ts] *new* + NearestConfigFileName: /myproject/playground/tsconfig.json + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/playground/tests.ts" + } + } +} + +Open Files:: + [/myproject/playground/tests.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/playground/tsconfig-json/tests/spec.ts", + "languageId": "typescript", + "version": 0, + "text": "export function bar() { }\n" + } + } +} + +Projects:: + [/myproject/playground/tsconfig-json/tsconfig.json] *new* + /myproject/playground/tsconfig-json/src/src.ts + [/myproject/playground/tsconfig.json] + /myproject/playground/tests.ts + /myproject/playground/tsconfig-json/src/src.ts + /myproject/playground/tsconfig-json/tests/spec.ts +Open Files:: + [/myproject/playground/tsconfig-json/tests/spec.ts] *new* + /myproject/playground/tsconfig.json (default) +Config:: + [/myproject/playground/tsconfig-json/tsconfig.json] *new* + RetainingProjects: + /myproject/playground/tsconfig-json/tsconfig.json + RetainingOpenFiles: + /myproject/playground/tsconfig-json/tests/spec.ts + [/myproject/playground/tsconfig.json] *modified* + RetainingProjects: + /myproject/playground/tsconfig.json + RetainingOpenFiles: *modified* + /myproject/playground/tests.ts *deleted* + /myproject/playground/tsconfig-json/tests/spec.ts *new* +Config File Names:: + [/myproject/playground/tests.ts] *deleted* + [/myproject/playground/tsconfig-json/tests/spec.ts] *new* + NearestConfigFileName: /myproject/playground/tsconfig-json/tsconfig.json + Ancestors: + /myproject/playground/tsconfig-json/tsconfig.json /myproject/playground/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/playground/tsconfig-json/tests/spec.ts" + }, + "position": { + "line": 0, + "character": 16 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/playground/tsconfig-json/tests/spec.ts === +// export function /*FIND ALL REFS*/[|bar|]() { } +// \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsOverlappingProjects.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsOverlappingProjects.baseline new file mode 100644 index 00000000..4707f0a9 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsOverlappingProjects.baseline @@ -0,0 +1,237 @@ +UseCaseSensitiveFileNames: true +//// [/solution/a/index.ts] *new* +export interface I { + M(): void; +} +//// [/solution/a/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, + "files": ["./index.ts"] +} +//// [/solution/b/index.ts] *new* +import { I } from "../a"; +export class B implements I { + M() {} +} +//// [/solution/b/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true + }, + "files": ["./index.ts"], + "references": [ + { "path": "../a" }, + ], +} +//// [/solution/c/index.ts] *new* +import { I } from "../a"; +import { B } from "../b"; +export const C: I = new B(); +//// [/solution/c/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true + }, + "files": ["./index.ts"], + "references": [ + { "path": "../b" }, + ], +} +//// [/solution/d/index.ts] *new* +import { I } from "../a"; +import { C } from "../c"; +export const D: I = C; + +//// [/solution/d/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true + }, + "files": ["./index.ts"], + "references": [ + { "path": "../c" }, + ], +} +//// [/solution/tsconfig.json] *new* +{ + "files": [], + "include": [], + "references": [ + { "path": "./a" }, + { "path": "./b" }, + { "path": "./c" }, + { "path": "./d" }, + ], +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///solution/b/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { I } from \"../a\";\nexport class B implements I {\n\tM() {}\n}" + } + } +} + +Projects:: + [/solution/b/tsconfig.json] *new* + /solution/a/index.ts + /solution/b/index.ts + [/solution/tsconfig.json] *new* +Open Files:: + [/solution/b/index.ts] *new* + /solution/b/tsconfig.json (default) +Config:: + [/solution/a/tsconfig.json] *new* + RetainingProjects: + /solution/b/tsconfig.json + [/solution/b/tsconfig.json] *new* + RetainingProjects: + /solution/b/tsconfig.json + RetainingOpenFiles: + /solution/b/index.ts +Config File Names:: + [/solution/b/index.ts] *new* + NearestConfigFileName: /solution/b/tsconfig.json + Ancestors: + /solution/b/tsconfig.json /solution/tsconfig.json + /solution/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///solution/b/index.ts" + }, + "position": { + "line": 1, + "character": 26 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/solution/a/tsconfig.json] *new* + /solution/a/index.ts + [/solution/b/tsconfig.json] + /solution/a/index.ts + /solution/b/index.ts + [/solution/c/tsconfig.json] *new* + /solution/a/index.ts + /solution/b/index.ts + /solution/c/index.ts + [/solution/d/tsconfig.json] *new* + /solution/a/index.ts + /solution/b/index.ts + /solution/c/index.ts + /solution/d/index.ts + [/solution/tsconfig.json] *modified* +Open Files:: + [/solution/b/index.ts] *modified* + /solution/b/tsconfig.json (default) + /solution/c/tsconfig.json *new* + /solution/d/tsconfig.json *new* +Config:: + [/solution/a/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/a/tsconfig.json *new* + /solution/b/tsconfig.json + /solution/c/tsconfig.json *new* + /solution/d/tsconfig.json *new* + /solution/tsconfig.json *new* + [/solution/b/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/b/tsconfig.json + /solution/c/tsconfig.json *new* + /solution/d/tsconfig.json *new* + /solution/tsconfig.json *new* + RetainingOpenFiles: + /solution/b/index.ts + [/solution/c/tsconfig.json] *new* + RetainingProjects: + /solution/c/tsconfig.json + /solution/d/tsconfig.json + /solution/tsconfig.json + [/solution/d/tsconfig.json] *new* + RetainingProjects: + /solution/d/tsconfig.json + /solution/tsconfig.json + [/solution/tsconfig.json] *new* + RetainingProjects: + /solution/tsconfig.json + + + + +// === findAllReferences === +// === /solution/a/index.ts === +// export interface [|I|] { +// M(): void; +// } + +// === /solution/b/index.ts === +// import { [|I|] } from "../a"; +// export class B implements /*FIND ALL REFS*/[|I|] { +// M() {} +// } + +// === /solution/c/index.ts === +// import { [|I|] } from "../a"; +// import { B } from "../b"; +// export const C: [|I|] = new B(); + +// === /solution/d/index.ts === +// import { [|I|] } from "../a"; +// import { C } from "../c"; +// export const D: [|I|] = C; +// +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///solution/b/index.ts" + }, + "position": { + "line": 1, + "character": 26 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /solution/a/index.ts === +// export interface [|I|] { +// M(): void; +// } + +// === /solution/b/index.ts === +// import { [|I|] } from "../a"; +// export class B implements /*FIND ALL REFS*/[|I|] { +// M() {} +// } + +// === /solution/c/index.ts === +// import { [|I|] } from "../a"; +// import { B } from "../b"; +// export const C: [|I|] = new B(); + +// === /solution/d/index.ts === +// import { [|I|] } from "../a"; +// import { C } from "../c"; +// export const D: [|I|] = C; +// \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsProjectWithOwnFilesReferencingFileFromReferencedProject.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsProjectWithOwnFilesReferencingFileFromReferencedProject.baseline new file mode 100644 index 00000000..aaf11617 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsProjectWithOwnFilesReferencingFileFromReferencedProject.baseline @@ -0,0 +1,514 @@ +UseCaseSensitiveFileNames: true +//// [/dummy/dummy.ts] *new* +const x = 1; +//// [/dummy/tsconfig.json] *new* +{ } +//// [/myproject/indirect3/main.ts] *new* +import { foo } from '../target/src/main'; +foo() +export function bar() {} + +//// [/myproject/indirect3/tsconfig.json] *new* +{ } +//// [/myproject/own/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.bar = bar; +const main_1 = require("../target/src/main"); +(0, main_1.foo)(); +function bar() { } + +//// [/myproject/own/main.ts] *new* +import { foo } from '../target/src/main'; +foo(); +export function bar() {} +//// [/myproject/src/helpers/functions.ts] *new* +export function foo() { return 1; } +//// [/myproject/src/main.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//// [/myproject/target/src/helpers/functions.d.ts] *new* +export declare function foo(): number; +//# sourceMappingURL=functions.d.ts.map +//// [/myproject/target/src/helpers/functions.d.ts.map] *new* +{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/helpers/functions.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,WAAgB"} +//// [/myproject/target/src/helpers/functions.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = foo; +function foo() { return 1; } + +//// [/myproject/target/src/main.d.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/target/src/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,CAAC"} +//// [/myproject/target/src/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = void 0; +const functions_1 = require("./helpers/functions"); +Object.defineProperty(exports, "foo", { enumerable: true, get: function () { return functions_1.foo; } }); + +//// [/myproject/target/tsconfig-src.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","../src/helpers/functions.ts","../src/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }","signature":"029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n","impliedNodeFormat":1},{"version":"29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };","signature":"e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true,"outDir":"./"},"referencedMap":[[3,1]],"latestChangedDtsFile":"./src/main.d.ts"} +//// [/myproject/target/tsconfig-src.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.d.ts", + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/helpers/functions.ts", + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/main.ts", + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../src/helpers/functions.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true, + "outDir": "./" + }, + "referencedMap": { + "../src/main.ts": [ + "../src/helpers/functions.ts" + ] + }, + "latestChangedDtsFile": "./src/main.d.ts", + "size": 1479 +} +//// [/myproject/tsconfig-src.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +//// [/myproject/tsconfig.json] *new* +{ + "files": ["./own/main.ts"], + "references": [{ "path": "./tsconfig-src.json" }] +} +//// [/myproject/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":["./own/main.ts"]} +//// [/myproject/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./own/main.ts" + ], + "original": "./own/main.ts" + } + ], + "size": 52 +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + /myproject/own/main.ts +Open Files:: + [/myproject/src/main.ts] *new* + /myproject/tsconfig-src.json (default) + /myproject/tsconfig.json +Config:: + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + /myproject/tsconfig.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts + [/myproject/tsconfig-src.json] + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/myproject/tsconfig.json] + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + /myproject/own/main.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) + [/myproject/src/main.ts] + /myproject/tsconfig-src.json (default) + /myproject/tsconfig.json +Config:: + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig-src.json] + RetainingProjects: + /myproject/tsconfig-src.json + /myproject/tsconfig.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] + RetainingProjects: + /myproject/tsconfig.json + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + [/myproject/src/main.ts] + /myproject/tsconfig-src.json (default) + /myproject/tsconfig.json + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dummy/tsconfig.json] + /dummy/dummy.ts + [/myproject/tsconfig-src.json] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/myproject/tsconfig.json] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + /myproject/own/main.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/dummy/tsconfig.json] + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig-src.json] *deleted* + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/dummy/dummy.ts] + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/dummy/tsconfig.json] *deleted* + /dummy/dummy.ts + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + /myproject/own/main.ts +Open Files:: + [/myproject/src/main.ts] *new* + /myproject/tsconfig-src.json (default) + /myproject/tsconfig.json +Config:: + [/dummy/tsconfig.json] *deleted* + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + /myproject/tsconfig.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *deleted* + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { /*FIND ALL REFS*/foo }; +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from '../target/src/main';\nfoo()\nexport function bar() {}\n" + } + } +} + +Projects:: + [/myproject/indirect3/tsconfig.json] *new* + /myproject/target/src/helpers/functions.d.ts + /myproject/target/src/main.d.ts + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/myproject/tsconfig.json] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + /myproject/own/main.ts +Open Files:: + [/myproject/indirect3/main.ts] *new* + /myproject/indirect3/tsconfig.json (default) +Config:: + [/myproject/indirect3/tsconfig.json] *new* + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *deleted* + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/myproject/indirect3/main.ts] *new* + NearestConfigFileName: /myproject/indirect3/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts" + }, + "position": { + "line": 0, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/myproject/indirect3/tsconfig.json] + /myproject/target/src/helpers/functions.d.ts + /myproject/target/src/main.d.ts + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + /myproject/own/main.ts +Config:: + [/myproject/indirect3/tsconfig.json] + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + /myproject/tsconfig.json + [/myproject/tsconfig.json] *new* + RetainingProjects: + /myproject/tsconfig.json + + + + +// === findAllReferences === +// === /myproject/indirect3/main.ts === +// import { /*FIND ALL REFS*/[|foo|] } from '../target/src/main'; +// [|foo|]() +// export function bar() {} +// + +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { foo }; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsRootOfReferencedProject.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsRootOfReferencedProject.baseline new file mode 100644 index 00000000..d98432e8 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsRootOfReferencedProject.baseline @@ -0,0 +1,163 @@ +UseCaseSensitiveFileNames: true +//// [/src/common/input/keyboard.test.ts] *new* +import { evaluateKeyboardEvent } from 'common/input/keyboard'; +function testEvaluateKeyboardEvent() { + return evaluateKeyboardEvent(); +} +//// [/src/common/input/keyboard.ts] *new* +function bar() { return "just a random function so .d.ts location doesnt match"; } +export function evaluateKeyboardEvent() { } +//// [/src/common/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "outDir": "../../out", + "disableSourceOfProjectReferenceRedirect": false, + "paths": { + "*": ["../*"], + }, + }, + "include": ["./\**/*"] +} +//// [/src/terminal.ts] *new* +import { evaluateKeyboardEvent } from 'common/input/keyboard'; +function foo() { + return evaluateKeyboardEvent(); +} +//// [/src/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "outDir": "../out", + "disableSourceOfProjectReferenceRedirect": false, + "paths": { + "common/*": ["./common/*"], + }, + "tsBuildInfoFile": "../out/src.tsconfig.tsbuildinfo" + }, + "include": ["./\**/*"], + "references": [ + { "path": "./common" }, + ], +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///src/common/input/keyboard.ts", + "languageId": "typescript", + "version": 0, + "text": "function bar() { return \"just a random function so .d.ts location doesnt match\"; }\nexport function evaluateKeyboardEvent() { }" + } + } +} + +Projects:: + [/src/common/tsconfig.json] *new* + /src/common/input/keyboard.ts + /src/common/input/keyboard.test.ts + [/src/tsconfig.json] *new* +Open Files:: + [/src/common/input/keyboard.ts] *new* + /src/common/tsconfig.json (default) +Config:: + [/src/common/tsconfig.json] *new* + RetainingProjects: + /src/common/tsconfig.json + RetainingOpenFiles: + /src/common/input/keyboard.ts +Config File Names:: + [/src/common/input/keyboard.ts] *new* + NearestConfigFileName: /src/common/tsconfig.json + Ancestors: + /src/common/tsconfig.json /src/tsconfig.json + /src/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///src/terminal.ts", + "languageId": "typescript", + "version": 0, + "text": "import { evaluateKeyboardEvent } from 'common/input/keyboard';\nfunction foo() {\n\treturn evaluateKeyboardEvent();\n}" + } + } +} + +Projects:: + [/src/common/tsconfig.json] + /src/common/input/keyboard.ts + /src/common/input/keyboard.test.ts + [/src/tsconfig.json] *modified* + /src/common/input/keyboard.ts *new* + /src/terminal.ts *new* + /src/common/input/keyboard.test.ts *new* +Open Files:: + [/src/common/input/keyboard.ts] *modified* + /src/common/tsconfig.json (default) + /src/tsconfig.json *new* + [/src/terminal.ts] *new* + /src/tsconfig.json (default) +Config:: + [/src/common/tsconfig.json] *modified* + RetainingProjects: *modified* + /src/common/tsconfig.json + /src/tsconfig.json *new* + RetainingOpenFiles: + /src/common/input/keyboard.ts + [/src/tsconfig.json] *new* + RetainingProjects: + /src/tsconfig.json + RetainingOpenFiles: + /src/terminal.ts +Config File Names:: + [/src/common/input/keyboard.ts] + NearestConfigFileName: /src/common/tsconfig.json + Ancestors: + /src/common/tsconfig.json /src/tsconfig.json + /src/tsconfig.json + [/src/terminal.ts] *new* + NearestConfigFileName: /src/tsconfig.json + Ancestors: + /src/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///src/common/input/keyboard.ts" + }, + "position": { + "line": 1, + "character": 16 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /src/common/input/keyboard.test.ts === +// import { [|evaluateKeyboardEvent|] } from 'common/input/keyboard'; +// function testEvaluateKeyboardEvent() { +// return [|evaluateKeyboardEvent|](); +// } + +// === /src/common/input/keyboard.ts === +// function bar() { return "just a random function so .d.ts location doesnt match"; } +// export function /*FIND ALL REFS*/[|evaluateKeyboardEvent|]() { } + +// === /src/terminal.ts === +// import { [|evaluateKeyboardEvent|] } from 'common/input/keyboard'; +// function foo() { +// return [|evaluateKeyboardEvent|](); +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsRootOfReferencedProjectDeclarationMaps.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsRootOfReferencedProjectDeclarationMaps.baseline new file mode 100644 index 00000000..1c5b3a71 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsRootOfReferencedProjectDeclarationMaps.baseline @@ -0,0 +1,368 @@ +UseCaseSensitiveFileNames: true +//// [/out/input/keyboard.d.ts] *new* +export declare function evaluateKeyboardEvent(): void; +//# sourceMappingURL=keyboard.d.ts.map +//// [/out/input/keyboard.d.ts.map] *new* +{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/common/input/keyboard.ts"],"names":[],"mappings":"AACA,wBAAgB,qBAAqB,SAAM"} +//// [/out/input/keyboard.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.evaluateKeyboardEvent = evaluateKeyboardEvent; +function bar() { return "just a random function so .d.ts location doesnt match"; } +function evaluateKeyboardEvent() { } + +//// [/out/input/keyboard.test.d.ts] *new* +export {}; +//# sourceMappingURL=keyboard.test.d.ts.map +//// [/out/input/keyboard.test.d.ts.map] *new* +{"version":3,"file":"keyboard.test.d.ts","sourceRoot":"","sources":["../../src/common/input/keyboard.test.ts"],"names":[],"mappings":""} +//// [/out/input/keyboard.test.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const keyboard_1 = require("common/input/keyboard"); +function testEvaluateKeyboardEvent() { + return (0, keyboard_1.evaluateKeyboardEvent)(); +} + +//// [/out/src.tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./input/keyboard.d.ts","../src/terminal.ts","./input/keyboard.test.d.ts","../src/common/input/keyboard.ts","../src/common/input/keyboard.test.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"362bf1943c7d2a927f25978d1f24d61f-export declare function evaluateKeyboardEvent(): void;\n//# sourceMappingURL=keyboard.d.ts.map",{"version":"ff8262b3768be0c0049523b4b8a7b4f7-import { evaluateKeyboardEvent } from 'common/input/keyboard';\nfunction foo() {\n\treturn evaluateKeyboardEvent();\n}","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},"aaff3960e003a07ef50db935cb91a696-export {};\n//# sourceMappingURL=keyboard.test.d.ts.map"],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true,"outDir":"./","tsBuildInfoFile":"./src.tsconfig.tsbuildinfo"},"referencedMap":[[3,1]],"latestChangedDtsFile":"./terminal.d.ts","resolvedRoot":[[2,5],[4,6]]} +//// [/out/src.tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./input/keyboard.d.ts", + "../src/terminal.ts", + "./input/keyboard.test.d.ts" + ], + "original": [ + 2, + 4 + ] + } + ], + "fileNames": [ + "lib.d.ts", + "./input/keyboard.d.ts", + "../src/terminal.ts", + "./input/keyboard.test.d.ts", + "../src/common/input/keyboard.ts", + "../src/common/input/keyboard.test.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./input/keyboard.d.ts", + "version": "362bf1943c7d2a927f25978d1f24d61f-export declare function evaluateKeyboardEvent(): void;\n//# sourceMappingURL=keyboard.d.ts.map", + "signature": "362bf1943c7d2a927f25978d1f24d61f-export declare function evaluateKeyboardEvent(): void;\n//# sourceMappingURL=keyboard.d.ts.map", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "../src/terminal.ts", + "version": "ff8262b3768be0c0049523b4b8a7b4f7-import { evaluateKeyboardEvent } from 'common/input/keyboard';\nfunction foo() {\n\treturn evaluateKeyboardEvent();\n}", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "ff8262b3768be0c0049523b4b8a7b4f7-import { evaluateKeyboardEvent } from 'common/input/keyboard';\nfunction foo() {\n\treturn evaluateKeyboardEvent();\n}", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./input/keyboard.test.d.ts", + "version": "aaff3960e003a07ef50db935cb91a696-export {};\n//# sourceMappingURL=keyboard.test.d.ts.map", + "signature": "aaff3960e003a07ef50db935cb91a696-export {};\n//# sourceMappingURL=keyboard.test.d.ts.map", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./input/keyboard.d.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true, + "outDir": "./", + "tsBuildInfoFile": "./src.tsconfig.tsbuildinfo" + }, + "referencedMap": { + "../src/terminal.ts": [ + "./input/keyboard.d.ts" + ] + }, + "latestChangedDtsFile": "./terminal.d.ts", + "resolvedRoot": [ + [ + "./input/keyboard.d.ts", + "../src/common/input/keyboard.ts" + ], + [ + "./input/keyboard.test.d.ts", + "../src/common/input/keyboard.test.ts" + ] + ], + "size": 1693 +} +//// [/out/terminal.d.ts] *new* +export {}; +//# sourceMappingURL=terminal.d.ts.map +//// [/out/terminal.d.ts.map] *new* +{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":""} +//// [/out/terminal.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const keyboard_1 = require("common/input/keyboard"); +function foo() { + return (0, keyboard_1.evaluateKeyboardEvent)(); +} + +//// [/out/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","../src/common/input/keyboard.ts","../src/common/input/keyboard.test.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6e37abb18685aa8e2642ab0218eef699-function bar() { return \"just a random function so .d.ts location doesnt match\"; }\nexport function evaluateKeyboardEvent() { }","signature":"569df1f274cf52f322c6e7a2f4e891fe-export declare function evaluateKeyboardEvent(): void;\n","impliedNodeFormat":1},{"version":"e844013c2f8764710bfebda24351c0d3-import { evaluateKeyboardEvent } from 'common/input/keyboard';\nfunction testEvaluateKeyboardEvent() {\n\treturn evaluateKeyboardEvent();\n}","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true,"outDir":"./"},"referencedMap":[[3,1]],"latestChangedDtsFile":"./input/keyboard.test.d.ts"} +//// [/out/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../src/common/input/keyboard.ts", + "../src/common/input/keyboard.test.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.d.ts", + "../src/common/input/keyboard.ts", + "../src/common/input/keyboard.test.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/common/input/keyboard.ts", + "version": "6e37abb18685aa8e2642ab0218eef699-function bar() { return \"just a random function so .d.ts location doesnt match\"; }\nexport function evaluateKeyboardEvent() { }", + "signature": "569df1f274cf52f322c6e7a2f4e891fe-export declare function evaluateKeyboardEvent(): void;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "6e37abb18685aa8e2642ab0218eef699-function bar() { return \"just a random function so .d.ts location doesnt match\"; }\nexport function evaluateKeyboardEvent() { }", + "signature": "569df1f274cf52f322c6e7a2f4e891fe-export declare function evaluateKeyboardEvent(): void;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/common/input/keyboard.test.ts", + "version": "e844013c2f8764710bfebda24351c0d3-import { evaluateKeyboardEvent } from 'common/input/keyboard';\nfunction testEvaluateKeyboardEvent() {\n\treturn evaluateKeyboardEvent();\n}", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "e844013c2f8764710bfebda24351c0d3-import { evaluateKeyboardEvent } from 'common/input/keyboard';\nfunction testEvaluateKeyboardEvent() {\n\treturn evaluateKeyboardEvent();\n}", + "signature": "abe7d9981d6018efb6b2b794f40a1607-export {};\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../src/common/input/keyboard.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true, + "outDir": "./" + }, + "referencedMap": { + "../src/common/input/keyboard.test.ts": [ + "../src/common/input/keyboard.ts" + ] + }, + "latestChangedDtsFile": "./input/keyboard.test.d.ts", + "size": 1658 +} +//// [/src/common/input/keyboard.test.ts] *new* +import { evaluateKeyboardEvent } from 'common/input/keyboard'; +function testEvaluateKeyboardEvent() { + return evaluateKeyboardEvent(); +} +//// [/src/common/input/keyboard.ts] *new* +function bar() { return "just a random function so .d.ts location doesnt match"; } +export function evaluateKeyboardEvent() { } +//// [/src/common/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "outDir": "../../out", + "disableSourceOfProjectReferenceRedirect": true, + "paths": { + "*": ["../*"], + }, + }, + "include": ["./\**/*"] +} +//// [/src/terminal.ts] *new* +import { evaluateKeyboardEvent } from 'common/input/keyboard'; +function foo() { + return evaluateKeyboardEvent(); +} +//// [/src/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "declarationMap": true, + "outDir": "../out", + "disableSourceOfProjectReferenceRedirect": true, + "paths": { + "common/*": ["./common/*"], + }, + "tsBuildInfoFile": "../out/src.tsconfig.tsbuildinfo" + }, + "include": ["./\**/*"], + "references": [ + { "path": "./common" }, + ], +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///src/common/input/keyboard.ts", + "languageId": "typescript", + "version": 0, + "text": "function bar() { return \"just a random function so .d.ts location doesnt match\"; }\nexport function evaluateKeyboardEvent() { }" + } + } +} + +Projects:: + [/src/common/tsconfig.json] *new* + /src/common/input/keyboard.ts + /src/common/input/keyboard.test.ts + [/src/tsconfig.json] *new* +Open Files:: + [/src/common/input/keyboard.ts] *new* + /src/common/tsconfig.json (default) +Config:: + [/src/common/tsconfig.json] *new* + RetainingProjects: + /src/common/tsconfig.json + RetainingOpenFiles: + /src/common/input/keyboard.ts +Config File Names:: + [/src/common/input/keyboard.ts] *new* + NearestConfigFileName: /src/common/tsconfig.json + Ancestors: + /src/common/tsconfig.json /src/tsconfig.json + /src/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///src/terminal.ts", + "languageId": "typescript", + "version": 0, + "text": "import { evaluateKeyboardEvent } from 'common/input/keyboard';\nfunction foo() {\n\treturn evaluateKeyboardEvent();\n}" + } + } +} + +Projects:: + [/src/common/tsconfig.json] + /src/common/input/keyboard.ts + /src/common/input/keyboard.test.ts + [/src/tsconfig.json] *modified* + /out/input/keyboard.d.ts *new* + /src/terminal.ts *new* + /out/input/keyboard.test.d.ts *new* +Open Files:: + [/src/common/input/keyboard.ts] + /src/common/tsconfig.json (default) + [/src/terminal.ts] *new* + /src/tsconfig.json (default) +Config:: + [/src/common/tsconfig.json] *modified* + RetainingProjects: *modified* + /src/common/tsconfig.json + /src/tsconfig.json *new* + RetainingOpenFiles: + /src/common/input/keyboard.ts + [/src/tsconfig.json] *new* + RetainingProjects: + /src/tsconfig.json + RetainingOpenFiles: + /src/terminal.ts +Config File Names:: + [/src/common/input/keyboard.ts] + NearestConfigFileName: /src/common/tsconfig.json + Ancestors: + /src/common/tsconfig.json /src/tsconfig.json + /src/tsconfig.json + [/src/terminal.ts] *new* + NearestConfigFileName: /src/tsconfig.json + Ancestors: + /src/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///src/common/input/keyboard.ts" + }, + "position": { + "line": 1, + "character": 16 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /src/common/input/keyboard.test.ts === +// import { [|evaluateKeyboardEvent|] } from 'common/input/keyboard'; +// function testEvaluateKeyboardEvent() { +// return [|evaluateKeyboardEvent|](); +// } + +// === /src/common/input/keyboard.ts === +// function bar() { return "just a random function so .d.ts location doesnt match"; } +// export function /*FIND ALL REFS*/[|evaluateKeyboardEvent|]() { } + +// === /src/terminal.ts === +// import { [|evaluateKeyboardEvent|] } from 'common/input/keyboard'; +// function foo() { +// return [|evaluateKeyboardEvent|](); +// } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectDirectly.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectDirectly.baseline new file mode 100644 index 00000000..9c58b157 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectDirectly.baseline @@ -0,0 +1,447 @@ +UseCaseSensitiveFileNames: true +//// [/dummy/dummy.ts] *new* +const x = 1; +//// [/dummy/tsconfig.json] *new* +{ } +//// [/myproject/indirect3/main.ts] *new* +import { foo } from '../target/src/main'; +foo() +export function bar() {} + +//// [/myproject/indirect3/tsconfig.json] *new* +{ } +//// [/myproject/src/helpers/functions.ts] *new* +export function foo() { return 1; } +//// [/myproject/src/main.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//// [/myproject/target/src/helpers/functions.d.ts] *new* +export declare function foo(): number; +//# sourceMappingURL=functions.d.ts.map +//// [/myproject/target/src/helpers/functions.d.ts.map] *new* +{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/helpers/functions.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,WAAgB"} +//// [/myproject/target/src/helpers/functions.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = foo; +function foo() { return 1; } + +//// [/myproject/target/src/main.d.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/target/src/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,CAAC"} +//// [/myproject/target/src/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = void 0; +const functions_1 = require("./helpers/functions"); +Object.defineProperty(exports, "foo", { enumerable: true, get: function () { return functions_1.foo; } }); + +//// [/myproject/target/tsconfig-src.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","../src/helpers/functions.ts","../src/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }","signature":"029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n","impliedNodeFormat":1},{"version":"29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };","signature":"e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true,"outDir":"./"},"referencedMap":[[3,1]],"latestChangedDtsFile":"./src/main.d.ts"} +//// [/myproject/target/tsconfig-src.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.d.ts", + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/helpers/functions.ts", + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/main.ts", + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../src/helpers/functions.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true, + "outDir": "./" + }, + "referencedMap": { + "../src/main.ts": [ + "../src/helpers/functions.ts" + ] + }, + "latestChangedDtsFile": "./src/main.d.ts", + "size": 1479 +} +//// [/myproject/tsconfig-src.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +//// [/myproject/tsconfig.json] *new* +{ + "files": [], + "references": [{ "path": "./tsconfig-src.json" }] +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/myproject/src/main.ts] *new* + /myproject/tsconfig-src.json (default) +Config:: + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts + [/myproject/tsconfig-src.json] + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) + [/myproject/src/main.ts] + /myproject/tsconfig-src.json (default) +Config:: + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig-src.json] + RetainingProjects: + /myproject/tsconfig-src.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + [/myproject/src/main.ts] + /myproject/tsconfig-src.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dummy/tsconfig.json] + /dummy/dummy.ts + [/myproject/tsconfig-src.json] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/dummy/tsconfig.json] + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig-src.json] *deleted* + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/dummy/dummy.ts] + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/dummy/tsconfig.json] *deleted* + /dummy/dummy.ts + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/myproject/src/main.ts] *new* + /myproject/tsconfig-src.json (default) +Config:: + [/dummy/tsconfig.json] *deleted* + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *deleted* + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { /*FIND ALL REFS*/foo }; +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from '../target/src/main';\nfoo()\nexport function bar() {}\n" + } + } +} + +Projects:: + [/myproject/indirect3/tsconfig.json] *new* + /myproject/target/src/helpers/functions.d.ts + /myproject/target/src/main.d.ts + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/myproject/indirect3/main.ts] *new* + /myproject/indirect3/tsconfig.json (default) +Config:: + [/myproject/indirect3/tsconfig.json] *new* + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *deleted* + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/myproject/indirect3/main.ts] *new* + NearestConfigFileName: /myproject/indirect3/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts" + }, + "position": { + "line": 0, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/myproject/indirect3/tsconfig.json] + /myproject/target/src/helpers/functions.d.ts + /myproject/target/src/main.d.ts + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Config:: + [/myproject/indirect3/tsconfig.json] + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + [/myproject/tsconfig.json] *new* + + + + +// === findAllReferences === +// === /myproject/indirect3/main.ts === +// import { /*FIND ALL REFS*/[|foo|] } from '../target/src/main'; +// [|foo|]() +// export function bar() {} +// + +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { foo }; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectly.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectly.baseline new file mode 100644 index 00000000..5eaa2c75 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectly.baseline @@ -0,0 +1,623 @@ +UseCaseSensitiveFileNames: true +//// [/dummy/dummy.ts] *new* +const x = 1; +//// [/dummy/tsconfig.json] *new* +{ } +//// [/myproject/indirect1/main.ts] *new* +export const indirect = 1; +//// [/myproject/indirect2/main.ts] *new* +export const indirect = 1; +//// [/myproject/indirect3/main.ts] *new* +import { foo } from '../target/src/main'; +foo() +export function bar() {} +//// [/myproject/indirect3/tsconfig.json] *new* +{ } +//// [/myproject/src/helpers/functions.ts] *new* +export function foo() { return 1; } +//// [/myproject/src/main.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//// [/myproject/target/indirect1/main.d.ts] *new* +export declare const indirect = 1; + +//// [/myproject/target/indirect1/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.indirect = void 0; +exports.indirect = 1; + +//// [/myproject/target/indirect2/main.d.ts] *new* +export declare const indirect = 1; + +//// [/myproject/target/indirect2/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.indirect = void 0; +exports.indirect = 1; + +//// [/myproject/target/src/helpers/functions.d.ts] *new* +export declare function foo(): number; +//# sourceMappingURL=functions.d.ts.map +//// [/myproject/target/src/helpers/functions.d.ts.map] *new* +{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/helpers/functions.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,WAAgB"} +//// [/myproject/target/src/helpers/functions.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = foo; +function foo() { return 1; } + +//// [/myproject/target/src/main.d.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/target/src/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,CAAC"} +//// [/myproject/target/src/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = void 0; +const functions_1 = require("./helpers/functions"); +Object.defineProperty(exports, "foo", { enumerable: true, get: function () { return functions_1.foo; } }); + +//// [/myproject/target/tsconfig-indirect1.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../indirect1/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"265b044bf7f805e401e883488ec6cb29-export const indirect = 1;","signature":"bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./"},"latestChangedDtsFile":"./indirect1/main.d.ts"} +//// [/myproject/target/tsconfig-indirect1.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../indirect1/main.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "../indirect1/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../indirect1/main.ts", + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "outDir": "./" + }, + "latestChangedDtsFile": "./indirect1/main.d.ts", + "size": 1140 +} +//// [/myproject/target/tsconfig-indirect2.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../indirect2/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"265b044bf7f805e401e883488ec6cb29-export const indirect = 1;","signature":"bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./"},"latestChangedDtsFile":"./indirect2/main.d.ts"} +//// [/myproject/target/tsconfig-indirect2.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../indirect2/main.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "../indirect2/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../indirect2/main.ts", + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "outDir": "./" + }, + "latestChangedDtsFile": "./indirect2/main.d.ts", + "size": 1140 +} +//// [/myproject/target/tsconfig-src.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","../src/helpers/functions.ts","../src/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }","signature":"029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n","impliedNodeFormat":1},{"version":"29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };","signature":"e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true,"outDir":"./"},"referencedMap":[[3,1]],"latestChangedDtsFile":"./src/main.d.ts"} +//// [/myproject/target/tsconfig-src.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.d.ts", + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/helpers/functions.ts", + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/main.ts", + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../src/helpers/functions.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true, + "outDir": "./" + }, + "referencedMap": { + "../src/main.ts": [ + "../src/helpers/functions.ts" + ] + }, + "latestChangedDtsFile": "./src/main.d.ts", + "size": 1479 +} +//// [/myproject/tsconfig-indirect1.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + }, + "files": [ + "./indirect1/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} +//// [/myproject/tsconfig-indirect2.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + }, + "files": [ + "./indirect2/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} + +//// [/myproject/tsconfig-src.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +//// [/myproject/tsconfig.json] *new* +{ + "files": [], + "references": [ + { "path": "./tsconfig-indirect1.json" }, + { "path": "./tsconfig-indirect2.json" }, + ] +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/myproject/src/main.ts] *new* + /myproject/tsconfig-src.json (default) +Config:: + [/myproject/tsconfig-indirect1.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-indirect2.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts + [/myproject/tsconfig-src.json] + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) + [/myproject/src/main.ts] + /myproject/tsconfig-src.json (default) +Config:: + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig-indirect1.json] + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-indirect2.json] + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-src.json] + RetainingProjects: + /myproject/tsconfig-src.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + [/myproject/src/main.ts] + /myproject/tsconfig-src.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dummy/tsconfig.json] + /dummy/dummy.ts + [/myproject/tsconfig-src.json] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/dummy/tsconfig.json] + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig-indirect1.json] *deleted* + [/myproject/tsconfig-indirect2.json] *deleted* + [/myproject/tsconfig-src.json] *deleted* + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/dummy/dummy.ts] + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/dummy/tsconfig.json] *deleted* + /dummy/dummy.ts + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/myproject/src/main.ts] *new* + /myproject/tsconfig-src.json (default) +Config:: + [/dummy/tsconfig.json] *deleted* + [/myproject/tsconfig-indirect1.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-indirect2.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *deleted* + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { /*FIND ALL REFS*/foo }; +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from '../target/src/main';\nfoo()\nexport function bar() {}" + } + } +} + +Projects:: + [/myproject/indirect3/tsconfig.json] *new* + /myproject/target/src/helpers/functions.d.ts + /myproject/target/src/main.d.ts + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/myproject/indirect3/main.ts] *new* + /myproject/indirect3/tsconfig.json (default) +Config:: + [/myproject/indirect3/tsconfig.json] *new* + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig-indirect1.json] *deleted* + [/myproject/tsconfig-indirect2.json] *deleted* + [/myproject/tsconfig-src.json] *deleted* + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/myproject/indirect3/main.ts] *new* + NearestConfigFileName: /myproject/indirect3/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts" + }, + "position": { + "line": 0, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/myproject/indirect3/tsconfig.json] + /myproject/target/src/helpers/functions.d.ts + /myproject/target/src/main.d.ts + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Config:: + [/myproject/indirect3/tsconfig.json] + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig-indirect1.json] *new* + [/myproject/tsconfig-indirect2.json] *new* + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + [/myproject/tsconfig.json] *new* + + + + +// === findAllReferences === +// === /myproject/indirect3/main.ts === +// import { /*FIND ALL REFS*/[|foo|] } from '../target/src/main'; +// [|foo|]() +// export function bar() {} + +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { foo }; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectlyThroughDisableReferencedProjectLoad.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectlyThroughDisableReferencedProjectLoad.baseline new file mode 100644 index 00000000..5a6e45d7 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectlyThroughDisableReferencedProjectLoad.baseline @@ -0,0 +1,597 @@ +UseCaseSensitiveFileNames: true +//// [/dummy/dummy.ts] *new* +const x = 1; +//// [/dummy/tsconfig.json] *new* +{ } +//// [/myproject/indirect1/main.ts] *new* +export const indirect = 1; +//// [/myproject/indirect2/main.ts] *new* +export const indirect = 1; +//// [/myproject/indirect3/main.ts] *new* +import { foo } from '../target/src/main'; +foo() +export function bar() {} +//// [/myproject/indirect3/tsconfig.json] *new* +{ } +//// [/myproject/src/helpers/functions.ts] *new* +export function foo() { return 1; } +//// [/myproject/src/main.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//// [/myproject/target/indirect1/main.d.ts] *new* +export declare const indirect = 1; + +//// [/myproject/target/indirect1/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.indirect = void 0; +exports.indirect = 1; + +//// [/myproject/target/indirect2/main.d.ts] *new* +export declare const indirect = 1; + +//// [/myproject/target/indirect2/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.indirect = void 0; +exports.indirect = 1; + +//// [/myproject/target/src/helpers/functions.d.ts] *new* +export declare function foo(): number; +//# sourceMappingURL=functions.d.ts.map +//// [/myproject/target/src/helpers/functions.d.ts.map] *new* +{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/helpers/functions.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,WAAgB"} +//// [/myproject/target/src/helpers/functions.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = foo; +function foo() { return 1; } + +//// [/myproject/target/src/main.d.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/target/src/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,CAAC"} +//// [/myproject/target/src/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = void 0; +const functions_1 = require("./helpers/functions"); +Object.defineProperty(exports, "foo", { enumerable: true, get: function () { return functions_1.foo; } }); + +//// [/myproject/target/tsconfig-indirect1.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../indirect1/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"265b044bf7f805e401e883488ec6cb29-export const indirect = 1;","signature":"bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./"},"latestChangedDtsFile":"./indirect1/main.d.ts"} +//// [/myproject/target/tsconfig-indirect1.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../indirect1/main.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "../indirect1/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../indirect1/main.ts", + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "outDir": "./" + }, + "latestChangedDtsFile": "./indirect1/main.d.ts", + "size": 1140 +} +//// [/myproject/target/tsconfig-indirect2.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../indirect2/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"265b044bf7f805e401e883488ec6cb29-export const indirect = 1;","signature":"bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./"},"latestChangedDtsFile":"./indirect2/main.d.ts"} +//// [/myproject/target/tsconfig-indirect2.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../indirect2/main.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "../indirect2/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../indirect2/main.ts", + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "outDir": "./" + }, + "latestChangedDtsFile": "./indirect2/main.d.ts", + "size": 1140 +} +//// [/myproject/target/tsconfig-src.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","../src/helpers/functions.ts","../src/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }","signature":"029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n","impliedNodeFormat":1},{"version":"29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };","signature":"e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true,"outDir":"./"},"referencedMap":[[3,1]],"latestChangedDtsFile":"./src/main.d.ts"} +//// [/myproject/target/tsconfig-src.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.d.ts", + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/helpers/functions.ts", + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/main.ts", + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../src/helpers/functions.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true, + "outDir": "./" + }, + "referencedMap": { + "../src/main.ts": [ + "../src/helpers/functions.ts" + ] + }, + "latestChangedDtsFile": "./src/main.d.ts", + "size": 1479 +} +//// [/myproject/tsconfig-indirect1.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + "disableReferencedProjectLoad": true, + }, + "files": [ + "./indirect1/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} +//// [/myproject/tsconfig-indirect2.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + "disableReferencedProjectLoad": true, + }, + "files": [ + "./indirect2/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} + +//// [/myproject/tsconfig-src.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +//// [/myproject/tsconfig.json] *new* +{ + "files": [], + "references": [ + { "path": "./tsconfig-indirect1.json" }, + { "path": "./tsconfig-indirect2.json" }, + ] +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/dev/null/inferred] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/myproject/src/main.ts] *new* + /dev/null/inferred (default) +Config:: + [/myproject/tsconfig-indirect1.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-indirect2.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dev/null/inferred] + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) + [/myproject/src/main.ts] + /dev/null/inferred (default) +Config:: + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig-indirect1.json] + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-indirect2.json] + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig.json + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + [/myproject/src/main.ts] + /dev/null/inferred (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dev/null/inferred] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/dummy/tsconfig.json] + /dummy/dummy.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/dummy/tsconfig.json] + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig-indirect1.json] *deleted* + [/myproject/tsconfig-indirect2.json] *deleted* + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/dummy/dummy.ts] + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/dev/null/inferred] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/dummy/tsconfig.json] *deleted* + /dummy/dummy.ts +Open Files:: + [/myproject/src/main.ts] *new* + /dev/null/inferred (default) +Config:: + [/dummy/tsconfig.json] *deleted* + [/myproject/tsconfig-indirect1.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-indirect2.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *deleted* + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { /*FIND ALL REFS*/foo }; +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from '../target/src/main';\nfoo()\nexport function bar() {}" + } + } +} + +Projects:: + [/dev/null/inferred] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/myproject/indirect3/tsconfig.json] *new* + /myproject/target/src/helpers/functions.d.ts + /myproject/target/src/main.d.ts + /myproject/indirect3/main.ts +Open Files:: + [/myproject/indirect3/main.ts] *new* + /myproject/indirect3/tsconfig.json (default) +Config:: + [/myproject/indirect3/tsconfig.json] *new* + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig-indirect1.json] *deleted* + [/myproject/tsconfig-indirect2.json] *deleted* + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/myproject/indirect3/main.ts] *new* + NearestConfigFileName: /myproject/indirect3/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts" + }, + "position": { + "line": 0, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + +Config:: + [/myproject/indirect3/tsconfig.json] + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig-indirect1.json] *new* + [/myproject/tsconfig-indirect2.json] *new* + [/myproject/tsconfig.json] *new* + + + + +// === findAllReferences === +// === /myproject/indirect3/main.ts === +// import { /*FIND ALL REFS*/[|foo|] } from '../target/src/main'; +// [|foo|]() +// export function bar() {} + +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { foo }; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectlyThroughDisableReferencedProjectLoadInOneButWithoutItInAnother.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectlyThroughDisableReferencedProjectLoadInOneButWithoutItInAnother.baseline new file mode 100644 index 00000000..2f2df123 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsSolutionReferencingDefaultProjectIndirectlyThroughDisableReferencedProjectLoadInOneButWithoutItInAnother.baseline @@ -0,0 +1,624 @@ +UseCaseSensitiveFileNames: true +//// [/dummy/dummy.ts] *new* +const x = 1; +//// [/dummy/tsconfig.json] *new* +{ } +//// [/myproject/indirect1/main.ts] *new* +export const indirect = 1; +//// [/myproject/indirect2/main.ts] *new* +export const indirect = 1; +//// [/myproject/indirect3/main.ts] *new* +import { foo } from '../target/src/main'; +foo() +export function bar() {} +//// [/myproject/indirect3/tsconfig.json] *new* +{ } +//// [/myproject/src/helpers/functions.ts] *new* +export function foo() { return 1; } +//// [/myproject/src/main.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//// [/myproject/target/indirect1/main.d.ts] *new* +export declare const indirect = 1; + +//// [/myproject/target/indirect1/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.indirect = void 0; +exports.indirect = 1; + +//// [/myproject/target/indirect2/main.d.ts] *new* +export declare const indirect = 1; + +//// [/myproject/target/indirect2/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.indirect = void 0; +exports.indirect = 1; + +//// [/myproject/target/src/helpers/functions.d.ts] *new* +export declare function foo(): number; +//# sourceMappingURL=functions.d.ts.map +//// [/myproject/target/src/helpers/functions.d.ts.map] *new* +{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/helpers/functions.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,WAAgB"} +//// [/myproject/target/src/helpers/functions.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = foo; +function foo() { return 1; } + +//// [/myproject/target/src/main.d.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/target/src/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,CAAC"} +//// [/myproject/target/src/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = void 0; +const functions_1 = require("./helpers/functions"); +Object.defineProperty(exports, "foo", { enumerable: true, get: function () { return functions_1.foo; } }); + +//// [/myproject/target/tsconfig-indirect1.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../indirect1/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"265b044bf7f805e401e883488ec6cb29-export const indirect = 1;","signature":"bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./"},"latestChangedDtsFile":"./indirect1/main.d.ts"} +//// [/myproject/target/tsconfig-indirect1.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../indirect1/main.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "../indirect1/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../indirect1/main.ts", + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "outDir": "./" + }, + "latestChangedDtsFile": "./indirect1/main.d.ts", + "size": 1140 +} +//// [/myproject/target/tsconfig-indirect2.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../indirect2/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"265b044bf7f805e401e883488ec6cb29-export const indirect = 1;","signature":"bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./"},"latestChangedDtsFile":"./indirect2/main.d.ts"} +//// [/myproject/target/tsconfig-indirect2.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../indirect2/main.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.d.ts", + "../indirect2/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../indirect2/main.ts", + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "265b044bf7f805e401e883488ec6cb29-export const indirect = 1;", + "signature": "bf177928c61dd707122e7eeb99aa0ef0-export declare const indirect = 1;\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "outDir": "./" + }, + "latestChangedDtsFile": "./indirect2/main.d.ts", + "size": 1140 +} +//// [/myproject/target/tsconfig-src.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","../src/helpers/functions.ts","../src/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }","signature":"029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n","impliedNodeFormat":1},{"version":"29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };","signature":"e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true,"outDir":"./"},"referencedMap":[[3,1]],"latestChangedDtsFile":"./src/main.d.ts"} +//// [/myproject/target/tsconfig-src.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.d.ts", + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/helpers/functions.ts", + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/main.ts", + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../src/helpers/functions.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true, + "outDir": "./" + }, + "referencedMap": { + "../src/main.ts": [ + "../src/helpers/functions.ts" + ] + }, + "latestChangedDtsFile": "./src/main.d.ts", + "size": 1479 +} +//// [/myproject/tsconfig-indirect1.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + "disableReferencedProjectLoad": true, + }, + "files": [ + "./indirect1/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} +//// [/myproject/tsconfig-indirect2.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target/", + }, + "files": [ + "./indirect2/main.ts" + ], + "references": [ + { + "path": "./tsconfig-src.json" + } + ] +} + +//// [/myproject/tsconfig-src.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +//// [/myproject/tsconfig.json] *new* +{ + "files": [], + "references": [ + { "path": "./tsconfig-indirect1.json" }, + { "path": "./tsconfig-indirect2.json" }, + ] +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/myproject/src/main.ts] *new* + /myproject/tsconfig-src.json (default) +Config:: + [/myproject/tsconfig-indirect1.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-indirect2.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts + [/myproject/tsconfig-src.json] + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) + [/myproject/src/main.ts] + /myproject/tsconfig-src.json (default) +Config:: + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig-indirect1.json] + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-indirect2.json] + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-src.json] + RetainingProjects: + /myproject/tsconfig-src.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + [/myproject/src/main.ts] + /myproject/tsconfig-src.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dummy/tsconfig.json] + /dummy/dummy.ts + [/myproject/tsconfig-src.json] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/dummy/tsconfig.json] + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig-indirect1.json] *deleted* + [/myproject/tsconfig-indirect2.json] *deleted* + [/myproject/tsconfig-src.json] *deleted* + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/dummy/dummy.ts] + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/dummy/tsconfig.json] *deleted* + /dummy/dummy.ts + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/myproject/src/main.ts] *new* + /myproject/tsconfig-src.json (default) +Config:: + [/dummy/tsconfig.json] *deleted* + [/myproject/tsconfig-indirect1.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-indirect2.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + RetainingOpenFiles: + /myproject/src/main.ts + [/myproject/tsconfig.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *deleted* + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig-src.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { /*FIND ALL REFS*/foo }; +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from '../target/src/main';\nfoo()\nexport function bar() {}" + } + } +} + +Projects:: + [/myproject/indirect3/tsconfig.json] *new* + /myproject/target/src/helpers/functions.d.ts + /myproject/target/src/main.d.ts + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/myproject/indirect3/main.ts] *new* + /myproject/indirect3/tsconfig.json (default) +Config:: + [/myproject/indirect3/tsconfig.json] *new* + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig-indirect1.json] *deleted* + [/myproject/tsconfig-indirect2.json] *deleted* + [/myproject/tsconfig-src.json] *deleted* + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/myproject/indirect3/main.ts] *new* + NearestConfigFileName: /myproject/indirect3/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts" + }, + "position": { + "line": 0, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/myproject/indirect3/tsconfig.json] + /myproject/target/src/helpers/functions.d.ts + /myproject/target/src/main.d.ts + /myproject/indirect3/main.ts + [/myproject/tsconfig-src.json] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Config:: + [/myproject/indirect3/tsconfig.json] + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig-indirect1.json] *new* + [/myproject/tsconfig-indirect2.json] *new* + [/myproject/tsconfig-src.json] *new* + RetainingProjects: + /myproject/tsconfig-src.json + [/myproject/tsconfig.json] *new* + + + + +// === findAllReferences === +// === /myproject/indirect3/main.ts === +// import { /*FIND ALL REFS*/[|foo|] } from '../target/src/main'; +// [|foo|]() +// export function bar() {} + +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { foo }; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsSolutionWithDisableReferencedProjectLoadReferencingDefaultProjectDirectly.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsSolutionWithDisableReferencedProjectLoadReferencingDefaultProjectDirectly.baseline new file mode 100644 index 00000000..42f55d96 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsSolutionWithDisableReferencedProjectLoadReferencingDefaultProjectDirectly.baseline @@ -0,0 +1,422 @@ +UseCaseSensitiveFileNames: true +//// [/dummy/dummy.ts] *new* +const x = 1; +//// [/dummy/tsconfig.json] *new* +{ } +//// [/myproject/indirect3/main.ts] *new* +import { foo } from '../target/src/main'; +foo() +export function bar() {} + +//// [/myproject/indirect3/tsconfig.json] *new* +{ } +//// [/myproject/src/helpers/functions.ts] *new* +export function foo() { return 1; } +//// [/myproject/src/main.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//// [/myproject/target/src/helpers/functions.d.ts] *new* +export declare function foo(): number; +//# sourceMappingURL=functions.d.ts.map +//// [/myproject/target/src/helpers/functions.d.ts.map] *new* +{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/helpers/functions.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,WAAgB"} +//// [/myproject/target/src/helpers/functions.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = foo; +function foo() { return 1; } + +//// [/myproject/target/src/main.d.ts] *new* +import { foo } from './helpers/functions'; +export { foo }; +//# sourceMappingURL=main.d.ts.map +//// [/myproject/target/src/main.d.ts.map] *new* +{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,CAAC"} +//// [/myproject/target/src/main.js] *new* +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foo = void 0; +const functions_1 = require("./helpers/functions"); +Object.defineProperty(exports, "foo", { enumerable: true, get: function () { return functions_1.foo; } }); + +//// [/myproject/target/tsconfig-src.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","../src/helpers/functions.ts","../src/main.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }","signature":"029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n","impliedNodeFormat":1},{"version":"29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };","signature":"e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declarationMap":true,"outDir":"./"},"referencedMap":[[3,1]],"latestChangedDtsFile":"./src/main.d.ts"} +//// [/myproject/target/tsconfig-src.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "original": [ + 2, + 3 + ] + } + ], + "fileNames": [ + "lib.d.ts", + "../src/helpers/functions.ts", + "../src/main.ts" + ], + "fileInfos": [ + { + "fileName": "lib.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/helpers/functions.ts", + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "bf6a9d57f087ab0066015134975ea2b2-export function foo() { return 1; }", + "signature": "029742dfbcde5b1dfd06f9129660afb3-export declare function foo(): number;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../src/main.ts", + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "29b72d75211ebc765497b1845400b55d-import { foo } from './helpers/functions';\nexport { foo };", + "signature": "e7ab16a2673b38216aba41fa1cf9516c-import { foo } from './helpers/functions';\nexport { foo };\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "../src/helpers/functions.ts" + ] + ], + "options": { + "composite": true, + "declarationMap": true, + "outDir": "./" + }, + "referencedMap": { + "../src/main.ts": [ + "../src/helpers/functions.ts" + ] + }, + "latestChangedDtsFile": "./src/main.d.ts", + "size": 1479 +} +//// [/myproject/tsconfig-src.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "./target", + "declarationMap": true, + }, + "include": ["./src/\**/*"] +} +//// [/myproject/tsconfig.json] *new* +{ + "compilerOptions": { + "disableReferencedProjectLoad": true + }, + "files": [], + "references": [{ "path": "./tsconfig-src.json" }] +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/dev/null/inferred] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts +Open Files:: + [/myproject/src/main.ts] *new* + /dev/null/inferred (default) +Config:: + [/myproject/tsconfig.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dev/null/inferred] + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/dummy/tsconfig.json] *new* + /dummy/dummy.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) + [/myproject/src/main.ts] + /dev/null/inferred (default) +Config:: + [/dummy/tsconfig.json] *new* + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig.json] + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *new* + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig.json + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + [/myproject/src/main.ts] + /dev/null/inferred (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts", + "languageId": "typescript", + "version": 0, + "text": "const x = 1;" + } + } +} + +Projects:: + [/dev/null/inferred] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/dummy/tsconfig.json] + /dummy/dummy.ts +Open Files:: + [/dummy/dummy.ts] *new* + /dummy/tsconfig.json (default) +Config:: + [/dummy/tsconfig.json] + RetainingProjects: + /dummy/tsconfig.json + RetainingOpenFiles: + /dummy/dummy.ts + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/dummy/dummy.ts] + NearestConfigFileName: /dummy/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///dummy/dummy.ts" + } + } +} + +Open Files:: + [/dummy/dummy.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from './helpers/functions';\nexport { foo };" + } + } +} + +Projects:: + [/dev/null/inferred] *new* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/dummy/tsconfig.json] *deleted* + /dummy/dummy.ts +Open Files:: + [/myproject/src/main.ts] *new* + /dev/null/inferred (default) +Config:: + [/dummy/tsconfig.json] *deleted* + [/myproject/tsconfig.json] *new* + RetainingOpenFiles: + /myproject/src/main.ts +Config File Names:: + [/dummy/dummy.ts] *deleted* + [/myproject/src/main.ts] *new* + NearestConfigFileName: /myproject/tsconfig.json + Ancestors: + /myproject/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + }, + "position": { + "line": 1, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + + + + +// === findAllReferences === +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { /*FIND ALL REFS*/foo }; +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///myproject/src/main.ts" + } + } +} + +Open Files:: + [/myproject/src/main.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts", + "languageId": "typescript", + "version": 0, + "text": "import { foo } from '../target/src/main';\nfoo()\nexport function bar() {}\n" + } + } +} + +Projects:: + [/dev/null/inferred] *deleted* + /myproject/src/helpers/functions.ts + /myproject/src/main.ts + [/myproject/indirect3/tsconfig.json] *new* + /myproject/target/src/helpers/functions.d.ts + /myproject/target/src/main.d.ts + /myproject/indirect3/main.ts +Open Files:: + [/myproject/indirect3/main.ts] *new* + /myproject/indirect3/tsconfig.json (default) +Config:: + [/myproject/indirect3/tsconfig.json] *new* + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig.json] *deleted* +Config File Names:: + [/myproject/indirect3/main.ts] *new* + NearestConfigFileName: /myproject/indirect3/tsconfig.json + [/myproject/src/main.ts] *deleted* + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/indirect3/main.ts" + }, + "position": { + "line": 0, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + +Config:: + [/myproject/indirect3/tsconfig.json] + RetainingProjects: + /myproject/indirect3/tsconfig.json + RetainingOpenFiles: + /myproject/indirect3/main.ts + [/myproject/tsconfig.json] *new* + + + + +// === findAllReferences === +// === /myproject/indirect3/main.ts === +// import { /*FIND ALL REFS*/[|foo|] } from '../target/src/main'; +// [|foo|]() +// export function bar() {} +// + +// === /myproject/src/helpers/functions.ts === +// export function [|foo|]() { return 1; } + +// === /myproject/src/main.ts === +// import { [|foo|] } from './helpers/functions'; +// export { foo }; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAsObjectLiteralProperty.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAsObjectLiteralProperty.baseline new file mode 100644 index 00000000..91a1f25a --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAsObjectLiteralProperty.baseline @@ -0,0 +1,130 @@ +UseCaseSensitiveFileNames: true +//// [/solution/api/src/server.ts] *new* +import * as shared from "../../shared/dist" +shared.foo.bar(); +//// [/solution/api/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +//// [/solution/app/src/app.ts] *new* +import * as shared from "../../shared/dist" +shared.foo.bar(); +//// [/solution/app/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +//// [/solution/shared/src/index.ts] *new* +const local = { bar: () => { } }; +export const foo = local; +//// [/solution/shared/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], +} +//// [/solution/tsconfig.json] *new* +{ + "files": [], + "references": [ + { "path": "./api" }, + { "path": "./app" }, + ], +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///solution/api/src/server.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as shared from \"../../shared/dist\"\nshared.foo.bar();" + } + } +} + +Projects:: + [/solution/api/tsconfig.json] *new* + /solution/shared/src/index.ts + /solution/api/src/server.ts + [/solution/tsconfig.json] *new* +Open Files:: + [/solution/api/src/server.ts] *new* + /solution/api/tsconfig.json (default) +Config:: + [/solution/api/tsconfig.json] *new* + RetainingProjects: + /solution/api/tsconfig.json + RetainingOpenFiles: + /solution/api/src/server.ts + [/solution/shared/tsconfig.json] *new* + RetainingProjects: + /solution/api/tsconfig.json +Config File Names:: + [/solution/api/src/server.ts] *new* + NearestConfigFileName: /solution/api/tsconfig.json + Ancestors: + /solution/api/tsconfig.json /solution/tsconfig.json + /solution/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///solution/api/src/server.ts" + }, + "position": { + "line": 1, + "character": 11 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/solution/api/tsconfig.json] + /solution/shared/src/index.ts + /solution/api/src/server.ts + [/solution/shared/tsconfig.json] *new* + /solution/shared/src/index.ts + [/solution/tsconfig.json] +Config:: + [/solution/api/tsconfig.json] + RetainingProjects: + /solution/api/tsconfig.json + RetainingOpenFiles: + /solution/api/src/server.ts + [/solution/shared/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/api/tsconfig.json + /solution/shared/tsconfig.json *new* + + + + +// === findAllReferences === +// === /solution/api/src/server.ts === +// import * as shared from "../../shared/dist" +// shared.foo./*FIND ALL REFS*/[|bar|](); + +// === /solution/shared/src/index.ts === +// const local = { [|bar|]: () => { } }; +// export const foo = local; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAsObjectLiteralPropertyTypes.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAsObjectLiteralPropertyTypes.baseline new file mode 100644 index 00000000..950d4702 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAsObjectLiteralPropertyTypes.baseline @@ -0,0 +1,145 @@ +UseCaseSensitiveFileNames: true +//// [/solution/api/src/server.ts] *new* +import * as shared from "../../shared/dist" +shared.foo.bar(); +//// [/solution/api/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +//// [/solution/app/src/app.ts] *new* +import * as shared from "../../shared/dist" +shared.foo.bar(); +//// [/solution/app/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +//// [/solution/shared/src/index.ts] *new* +export const foo = { bar: () => { } }; +//// [/solution/shared/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], +} +//// [/solution/tsconfig.json] *new* +{ + "files": [], + "references": [ + { "path": "./api" }, + { "path": "./app" }, + ], +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///solution/api/src/server.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as shared from \"../../shared/dist\"\nshared.foo.bar();" + } + } +} + +Projects:: + [/solution/api/tsconfig.json] *new* + /solution/shared/src/index.ts + /solution/api/src/server.ts + [/solution/tsconfig.json] *new* +Open Files:: + [/solution/api/src/server.ts] *new* + /solution/api/tsconfig.json (default) +Config:: + [/solution/api/tsconfig.json] *new* + RetainingProjects: + /solution/api/tsconfig.json + RetainingOpenFiles: + /solution/api/src/server.ts + [/solution/shared/tsconfig.json] *new* + RetainingProjects: + /solution/api/tsconfig.json +Config File Names:: + [/solution/api/src/server.ts] *new* + NearestConfigFileName: /solution/api/tsconfig.json + Ancestors: + /solution/api/tsconfig.json /solution/tsconfig.json + /solution/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///solution/api/src/server.ts" + }, + "position": { + "line": 1, + "character": 11 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/solution/api/tsconfig.json] + /solution/shared/src/index.ts + /solution/api/src/server.ts + [/solution/app/tsconfig.json] *new* + /solution/shared/src/index.ts + /solution/app/src/app.ts + [/solution/shared/tsconfig.json] *new* + /solution/shared/src/index.ts + [/solution/tsconfig.json] *modified* +Config:: + [/solution/api/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/api/tsconfig.json + /solution/tsconfig.json *new* + RetainingOpenFiles: + /solution/api/src/server.ts + [/solution/app/tsconfig.json] *new* + RetainingProjects: + /solution/app/tsconfig.json + /solution/tsconfig.json + [/solution/shared/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/api/tsconfig.json + /solution/app/tsconfig.json *new* + /solution/shared/tsconfig.json *new* + /solution/tsconfig.json *new* + [/solution/tsconfig.json] *new* + RetainingProjects: + /solution/tsconfig.json + + + + +// === findAllReferences === +// === /solution/api/src/server.ts === +// import * as shared from "../../shared/dist" +// shared.foo./*FIND ALL REFS*/[|bar|](); + +// === /solution/app/src/app.ts === +// import * as shared from "../../shared/dist" +// shared.foo.[|bar|](); + +// === /solution/shared/src/index.ts === +// export const foo = { [|bar|]: () => { } }; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAssignment.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAssignment.baseline new file mode 100644 index 00000000..79d114c2 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessArrowFunctionAssignment.baseline @@ -0,0 +1,145 @@ +UseCaseSensitiveFileNames: true +//// [/solution/api/src/server.ts] *new* +import * as shared from "../../shared/dist" +shared.dog(); +//// [/solution/api/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +//// [/solution/app/src/app.ts] *new* +import * as shared from "../../shared/dist" +shared.dog(); +//// [/solution/app/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +//// [/solution/shared/src/index.ts] *new* +export const dog = () => { }; +//// [/solution/shared/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], +} +//// [/solution/tsconfig.json] *new* +{ + "files": [], + "references": [ + { "path": "./api" }, + { "path": "./app" }, + ], +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///solution/api/src/server.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as shared from \"../../shared/dist\"\nshared.dog();" + } + } +} + +Projects:: + [/solution/api/tsconfig.json] *new* + /solution/shared/src/index.ts + /solution/api/src/server.ts + [/solution/tsconfig.json] *new* +Open Files:: + [/solution/api/src/server.ts] *new* + /solution/api/tsconfig.json (default) +Config:: + [/solution/api/tsconfig.json] *new* + RetainingProjects: + /solution/api/tsconfig.json + RetainingOpenFiles: + /solution/api/src/server.ts + [/solution/shared/tsconfig.json] *new* + RetainingProjects: + /solution/api/tsconfig.json +Config File Names:: + [/solution/api/src/server.ts] *new* + NearestConfigFileName: /solution/api/tsconfig.json + Ancestors: + /solution/api/tsconfig.json /solution/tsconfig.json + /solution/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///solution/api/src/server.ts" + }, + "position": { + "line": 1, + "character": 7 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/solution/api/tsconfig.json] + /solution/shared/src/index.ts + /solution/api/src/server.ts + [/solution/app/tsconfig.json] *new* + /solution/shared/src/index.ts + /solution/app/src/app.ts + [/solution/shared/tsconfig.json] *new* + /solution/shared/src/index.ts + [/solution/tsconfig.json] *modified* +Config:: + [/solution/api/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/api/tsconfig.json + /solution/tsconfig.json *new* + RetainingOpenFiles: + /solution/api/src/server.ts + [/solution/app/tsconfig.json] *new* + RetainingProjects: + /solution/app/tsconfig.json + /solution/tsconfig.json + [/solution/shared/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/api/tsconfig.json + /solution/app/tsconfig.json *new* + /solution/shared/tsconfig.json *new* + /solution/tsconfig.json *new* + [/solution/tsconfig.json] *new* + RetainingProjects: + /solution/tsconfig.json + + + + +// === findAllReferences === +// === /solution/api/src/server.ts === +// import * as shared from "../../shared/dist" +// shared./*FIND ALL REFS*/[|dog|](); + +// === /solution/app/src/app.ts === +// import * as shared from "../../shared/dist" +// shared.[|dog|](); + +// === /solution/shared/src/index.ts === +// export const [|dog|] = () => { }; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessMethodOfClassExpression.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessMethodOfClassExpression.baseline new file mode 100644 index 00000000..ea029f11 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessMethodOfClassExpression.baseline @@ -0,0 +1,149 @@ +UseCaseSensitiveFileNames: true +//// [/solution/api/src/server.ts] *new* +import * as shared from "../../shared/dist" +const instance = new shared.foo(); +instance.fly(); +//// [/solution/api/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +//// [/solution/app/src/app.ts] *new* +import * as shared from "../../shared/dist" +const instance = new shared.foo(); +instance.fly(); +//// [/solution/app/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +//// [/solution/shared/src/index.ts] *new* +export const foo = class { fly() {} }; +//// [/solution/shared/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], +} +//// [/solution/tsconfig.json] *new* +{ + "files": [], + "references": [ + { "path": "./api" }, + { "path": "./app" }, + ], +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///solution/api/src/server.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as shared from \"../../shared/dist\"\nconst instance = new shared.foo();\ninstance.fly();" + } + } +} + +Projects:: + [/solution/api/tsconfig.json] *new* + /solution/shared/src/index.ts + /solution/api/src/server.ts + [/solution/tsconfig.json] *new* +Open Files:: + [/solution/api/src/server.ts] *new* + /solution/api/tsconfig.json (default) +Config:: + [/solution/api/tsconfig.json] *new* + RetainingProjects: + /solution/api/tsconfig.json + RetainingOpenFiles: + /solution/api/src/server.ts + [/solution/shared/tsconfig.json] *new* + RetainingProjects: + /solution/api/tsconfig.json +Config File Names:: + [/solution/api/src/server.ts] *new* + NearestConfigFileName: /solution/api/tsconfig.json + Ancestors: + /solution/api/tsconfig.json /solution/tsconfig.json + /solution/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///solution/api/src/server.ts" + }, + "position": { + "line": 2, + "character": 9 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/solution/api/tsconfig.json] + /solution/shared/src/index.ts + /solution/api/src/server.ts + [/solution/app/tsconfig.json] *new* + /solution/shared/src/index.ts + /solution/app/src/app.ts + [/solution/shared/tsconfig.json] *new* + /solution/shared/src/index.ts + [/solution/tsconfig.json] *modified* +Config:: + [/solution/api/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/api/tsconfig.json + /solution/tsconfig.json *new* + RetainingOpenFiles: + /solution/api/src/server.ts + [/solution/app/tsconfig.json] *new* + RetainingProjects: + /solution/app/tsconfig.json + /solution/tsconfig.json + [/solution/shared/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/api/tsconfig.json + /solution/app/tsconfig.json *new* + /solution/shared/tsconfig.json *new* + /solution/tsconfig.json *new* + [/solution/tsconfig.json] *new* + RetainingProjects: + /solution/tsconfig.json + + + + +// === findAllReferences === +// === /solution/api/src/server.ts === +// import * as shared from "../../shared/dist" +// const instance = new shared.foo(); +// instance./*FIND ALL REFS*/[|fly|](); + +// === /solution/app/src/app.ts === +// import * as shared from "../../shared/dist" +// const instance = new shared.foo(); +// instance.[|fly|](); + +// === /solution/shared/src/index.ts === +// export const foo = class { [|fly|]() {} }; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessObjectLiteralProperty.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessObjectLiteralProperty.baseline new file mode 100644 index 00000000..00d57bb4 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsSpecialHandlingOfLocalnessObjectLiteralProperty.baseline @@ -0,0 +1,145 @@ +UseCaseSensitiveFileNames: true +//// [/solution/api/src/server.ts] *new* +import * as shared from "../../shared/dist" +shared.foo.baz; +//// [/solution/api/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +//// [/solution/app/src/app.ts] *new* +import * as shared from "../../shared/dist" +shared.foo.baz; +//// [/solution/app/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [{ "path": "../shared" }], +} +//// [/solution/shared/src/index.ts] *new* +export const foo = { baz: "BAZ" }; +//// [/solution/shared/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], +} +//// [/solution/tsconfig.json] *new* +{ + "files": [], + "references": [ + { "path": "./api" }, + { "path": "./app" }, + ], +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///solution/api/src/server.ts", + "languageId": "typescript", + "version": 0, + "text": "import * as shared from \"../../shared/dist\"\nshared.foo.baz;" + } + } +} + +Projects:: + [/solution/api/tsconfig.json] *new* + /solution/shared/src/index.ts + /solution/api/src/server.ts + [/solution/tsconfig.json] *new* +Open Files:: + [/solution/api/src/server.ts] *new* + /solution/api/tsconfig.json (default) +Config:: + [/solution/api/tsconfig.json] *new* + RetainingProjects: + /solution/api/tsconfig.json + RetainingOpenFiles: + /solution/api/src/server.ts + [/solution/shared/tsconfig.json] *new* + RetainingProjects: + /solution/api/tsconfig.json +Config File Names:: + [/solution/api/src/server.ts] *new* + NearestConfigFileName: /solution/api/tsconfig.json + Ancestors: + /solution/api/tsconfig.json /solution/tsconfig.json + /solution/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///solution/api/src/server.ts" + }, + "position": { + "line": 1, + "character": 11 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/solution/api/tsconfig.json] + /solution/shared/src/index.ts + /solution/api/src/server.ts + [/solution/app/tsconfig.json] *new* + /solution/shared/src/index.ts + /solution/app/src/app.ts + [/solution/shared/tsconfig.json] *new* + /solution/shared/src/index.ts + [/solution/tsconfig.json] *modified* +Config:: + [/solution/api/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/api/tsconfig.json + /solution/tsconfig.json *new* + RetainingOpenFiles: + /solution/api/src/server.ts + [/solution/app/tsconfig.json] *new* + RetainingProjects: + /solution/app/tsconfig.json + /solution/tsconfig.json + [/solution/shared/tsconfig.json] *modified* + RetainingProjects: *modified* + /solution/api/tsconfig.json + /solution/app/tsconfig.json *new* + /solution/shared/tsconfig.json *new* + /solution/tsconfig.json *new* + [/solution/tsconfig.json] *new* + RetainingProjects: + /solution/tsconfig.json + + + + +// === findAllReferences === +// === /solution/api/src/server.ts === +// import * as shared from "../../shared/dist" +// shared.foo./*FIND ALL REFS*/[|baz|]; + +// === /solution/app/src/app.ts === +// import * as shared from "../../shared/dist" +// shared.foo.[|baz|]; + +// === /solution/shared/src/index.ts === +// export const foo = { [|baz|]: "BAZ" }; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/findAllRefsTwoProjectsOpenAndOneProjectReferences.baseline b/testdata/baselines/reference/fourslash/state/findAllRefsTwoProjectsOpenAndOneProjectReferences.baseline new file mode 100644 index 00000000..d1dde719 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/findAllRefsTwoProjectsOpenAndOneProjectReferences.baseline @@ -0,0 +1,369 @@ +UseCaseSensitiveFileNames: true +//// [/myproject/core/src/file1.ts] *new* +export const coreConst = 10; +//// [/myproject/core/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, +} +//// [/myproject/coreRef1/src/file1.ts] *new* +export const coreRef1Const = 10; +//// [/myproject/coreRef1/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../core" }, + ] +} +//// [/myproject/coreRef2/src/file1.ts] *new* +export const coreRef2Const = 10; +//// [/myproject/coreRef2/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../core" }, + ] +} +//// [/myproject/coreRef3/src/file1.ts] *new* +export const coreRef3Const = 10; +//// [/myproject/coreRef3/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../core" }, + ] +} +//// [/myproject/indirect/src/file1.ts] *new* +export const indirectConst = 10; +//// [/myproject/indirect/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../coreRef1" }, + ] +} +//// [/myproject/indirectDisabledChildLoad1/src/file1.ts] *new* +export const indirectDisabledChildLoad1Const = 10; +//// [/myproject/indirectDisabledChildLoad1/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "disableReferencedProjectLoad": true, + }, + "references": [ + { "path": "../coreRef2" }, + ] +} +//// [/myproject/indirectDisabledChildLoad2/src/file1.ts] *new* +export const indirectDisabledChildLoad2Const = 10; +//// [/myproject/indirectDisabledChildLoad2/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + "disableReferencedProjectLoad": true, + }, + "references": [ + { "path": "../coreRef3" }, + ] +} +//// [/myproject/indirectNoCoreRef/src/file1.ts] *new* +export const indirectNoCoreRefConst = 10; +//// [/myproject/indirectNoCoreRef/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../noCoreRef2" }, + ] +} +//// [/myproject/main/src/file1.ts] *new* +export const mainConst = 10; +//// [/myproject/main/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../core" }, + { "path": "../indirect" }, + { "path": "../noCoreRef1" }, + { "path": "../indirectDisabledChildLoad1" }, + { "path": "../indirectDisabledChildLoad2" }, + { "path": "../refToCoreRef3" }, + { "path": "../indirectNoCoreRef" } + ] +} +//// [/myproject/noCoreRef1/src/file1.ts] *new* +export const noCoreRef1Const = 10; +//// [/myproject/noCoreRef1/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, +} +//// [/myproject/noCoreRef2/src/file1.ts] *new* +export const noCoreRef2Const = 10; +//// [/myproject/noCoreRef2/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, +} +//// [/myproject/refToCoreRef3/src/file1.ts] *new* +export const refToCoreRef3Const = 10; +//// [/myproject/refToCoreRef3/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, + "references": [ + { "path": "../coreRef3" }, + ] +} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/main/src/file1.ts", + "languageId": "typescript", + "version": 0, + "text": "export const mainConst = 10;" + } + } +} + +Projects:: + [/myproject/main/tsconfig.json] *new* + /myproject/main/src/file1.ts +Open Files:: + [/myproject/main/src/file1.ts] *new* + /myproject/main/tsconfig.json (default) +Config:: + [/myproject/core/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/coreRef1/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/coreRef2/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/coreRef3/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/indirect/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/indirectDisabledChildLoad1/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/indirectDisabledChildLoad2/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/indirectNoCoreRef/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/main/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + RetainingOpenFiles: + /myproject/main/src/file1.ts + [/myproject/noCoreRef1/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/noCoreRef2/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/refToCoreRef3/tsconfig.json] *new* + RetainingProjects: + /myproject/main/tsconfig.json +Config File Names:: + [/myproject/main/src/file1.ts] *new* + NearestConfigFileName: /myproject/main/tsconfig.json + Ancestors: + /myproject/main/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///myproject/core/src/file1.ts", + "languageId": "typescript", + "version": 0, + "text": "export const coreConst = 10;" + } + } +} + +Projects:: + [/myproject/core/tsconfig.json] *new* + /myproject/core/src/file1.ts + [/myproject/main/tsconfig.json] + /myproject/main/src/file1.ts +Open Files:: + [/myproject/core/src/file1.ts] *new* + /myproject/core/tsconfig.json (default) + [/myproject/main/src/file1.ts] + /myproject/main/tsconfig.json (default) +Config:: + [/myproject/core/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/core/tsconfig.json *new* + /myproject/main/tsconfig.json + RetainingOpenFiles: *modified* + /myproject/core/src/file1.ts *new* + [/myproject/coreRef1/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/coreRef2/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/coreRef3/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/indirect/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/indirectDisabledChildLoad1/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/indirectDisabledChildLoad2/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/indirectNoCoreRef/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/main/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + RetainingOpenFiles: + /myproject/main/src/file1.ts + [/myproject/noCoreRef1/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/noCoreRef2/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/refToCoreRef3/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json +Config File Names:: + [/myproject/core/src/file1.ts] *new* + NearestConfigFileName: /myproject/core/tsconfig.json + Ancestors: + /myproject/core/tsconfig.json + [/myproject/main/src/file1.ts] + NearestConfigFileName: /myproject/main/tsconfig.json + Ancestors: + /myproject/main/tsconfig.json + +{ + "method": "textDocument/references", + "params": { + "textDocument": { + "uri": "file:///myproject/core/src/file1.ts" + }, + "position": { + "line": 0, + "character": 13 + }, + "context": { + "includeDeclaration": false + } + } +} + +Projects:: + [/myproject/core/tsconfig.json] + /myproject/core/src/file1.ts + [/myproject/coreRef1/tsconfig.json] *new* + /myproject/coreRef1/src/file1.ts + [/myproject/coreRef3/tsconfig.json] *new* + /myproject/coreRef3/src/file1.ts + [/myproject/indirect/tsconfig.json] *new* + /myproject/indirect/src/file1.ts + [/myproject/indirectDisabledChildLoad1/tsconfig.json] *new* + /myproject/indirectDisabledChildLoad1/src/file1.ts + [/myproject/indirectDisabledChildLoad2/tsconfig.json] *new* + /myproject/indirectDisabledChildLoad2/src/file1.ts + [/myproject/main/tsconfig.json] + /myproject/main/src/file1.ts + [/myproject/refToCoreRef3/tsconfig.json] *new* + /myproject/refToCoreRef3/src/file1.ts +Config:: + [/myproject/core/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/core/tsconfig.json + /myproject/coreRef1/tsconfig.json *new* + /myproject/coreRef3/tsconfig.json *new* + /myproject/indirect/tsconfig.json *new* + /myproject/indirectDisabledChildLoad1/tsconfig.json *new* + /myproject/indirectDisabledChildLoad2/tsconfig.json *new* + /myproject/main/tsconfig.json + /myproject/refToCoreRef3/tsconfig.json *new* + RetainingOpenFiles: + /myproject/core/src/file1.ts + [/myproject/coreRef1/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/coreRef1/tsconfig.json *new* + /myproject/indirect/tsconfig.json *new* + /myproject/main/tsconfig.json + [/myproject/coreRef2/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/indirectDisabledChildLoad1/tsconfig.json *new* + /myproject/main/tsconfig.json + [/myproject/coreRef3/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/coreRef3/tsconfig.json *new* + /myproject/indirectDisabledChildLoad2/tsconfig.json *new* + /myproject/main/tsconfig.json + /myproject/refToCoreRef3/tsconfig.json *new* + [/myproject/indirect/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/indirect/tsconfig.json *new* + /myproject/main/tsconfig.json + [/myproject/indirectDisabledChildLoad1/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/indirectDisabledChildLoad1/tsconfig.json *new* + /myproject/main/tsconfig.json + [/myproject/indirectDisabledChildLoad2/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/indirectDisabledChildLoad2/tsconfig.json *new* + /myproject/main/tsconfig.json + [/myproject/indirectNoCoreRef/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/main/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + RetainingOpenFiles: + /myproject/main/src/file1.ts + [/myproject/noCoreRef1/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/noCoreRef2/tsconfig.json] + RetainingProjects: + /myproject/main/tsconfig.json + [/myproject/refToCoreRef3/tsconfig.json] *modified* + RetainingProjects: *modified* + /myproject/main/tsconfig.json + /myproject/refToCoreRef3/tsconfig.json *new* + + + + +// === findAllReferences === +// === /myproject/core/src/file1.ts === +// export const /*FIND ALL REFS*/[|coreConst|] = 10; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/state/renameAncestorProjectRefMangement.baseline b/testdata/baselines/reference/fourslash/state/renameAncestorProjectRefMangement.baseline new file mode 100644 index 00000000..5fdfa774 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/renameAncestorProjectRefMangement.baseline @@ -0,0 +1,254 @@ +UseCaseSensitiveFileNames: true +//// [/projects/container/compositeExec/index.ts] *new* +import { myConst } from "../lib"; +export function getMyConst() { + return myConst; +} +//// [/projects/container/compositeExec/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, + "files": ["./index.ts"], + "references": [ + { "path": "../lib" }, + ], +} +//// [/projects/container/exec/index.ts] *new* +import { myConst } from "../lib"; +export function getMyConst() { + return myConst; +} +//// [/projects/container/exec/tsconfig.json] *new* +{ + "files": ["./index.ts"], + "references": [ + { "path": "../lib" }, + ], +} +//// [/projects/container/lib/index.ts] *new* +export const myConst = 30; +//// [/projects/container/lib/tsconfig.json] *new* +{ + "compilerOptions": { + "composite": true, + }, + references: [], + files: [ + "index.ts", + ], +} +//// [/projects/container/tsconfig.json] *new* +{ + "files": [], + "include": [], + "references": [ + { "path": "./exec" }, + { "path": "./compositeExec" }, + ], +} + +//// [/projects/temp/temp.ts] *new* +let x = 10 +//// [/projects/temp/tsconfig.json] *new* +{} + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///projects/container/compositeExec/index.ts", + "languageId": "typescript", + "version": 0, + "text": "import { myConst } from \"../lib\";\nexport function getMyConst() {\n\treturn myConst;\n}" + } + } +} + +Projects:: + [/projects/container/compositeExec/tsconfig.json] *new* + /projects/container/lib/index.ts + /projects/container/compositeExec/index.ts + [/projects/container/tsconfig.json] *new* +Open Files:: + [/projects/container/compositeExec/index.ts] *new* + /projects/container/compositeExec/tsconfig.json (default) +Config:: + [/projects/container/compositeExec/tsconfig.json] *new* + RetainingProjects: + /projects/container/compositeExec/tsconfig.json + RetainingOpenFiles: + /projects/container/compositeExec/index.ts + [/projects/container/lib/tsconfig.json] *new* + RetainingProjects: + /projects/container/compositeExec/tsconfig.json +Config File Names:: + [/projects/container/compositeExec/index.ts] *new* + NearestConfigFileName: /projects/container/compositeExec/tsconfig.json + Ancestors: + /projects/container/compositeExec/tsconfig.json /projects/container/tsconfig.json + /projects/container/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///projects/temp/temp.ts", + "languageId": "typescript", + "version": 0, + "text": "let x = 10" + } + } +} + +Projects:: + [/projects/container/compositeExec/tsconfig.json] + /projects/container/lib/index.ts + /projects/container/compositeExec/index.ts + [/projects/container/tsconfig.json] + [/projects/temp/tsconfig.json] *new* + /projects/temp/temp.ts +Open Files:: + [/projects/container/compositeExec/index.ts] + /projects/container/compositeExec/tsconfig.json (default) + [/projects/temp/temp.ts] *new* + /projects/temp/tsconfig.json (default) +Config:: + [/projects/container/compositeExec/tsconfig.json] + RetainingProjects: + /projects/container/compositeExec/tsconfig.json + RetainingOpenFiles: + /projects/container/compositeExec/index.ts + [/projects/container/lib/tsconfig.json] + RetainingProjects: + /projects/container/compositeExec/tsconfig.json + [/projects/temp/tsconfig.json] *new* + RetainingProjects: + /projects/temp/tsconfig.json + RetainingOpenFiles: + /projects/temp/temp.ts +Config File Names:: + [/projects/container/compositeExec/index.ts] + NearestConfigFileName: /projects/container/compositeExec/tsconfig.json + Ancestors: + /projects/container/compositeExec/tsconfig.json /projects/container/tsconfig.json + /projects/container/tsconfig.json + [/projects/temp/temp.ts] *new* + NearestConfigFileName: /projects/temp/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///projects/container/compositeExec/index.ts" + }, + "position": { + "line": 0, + "character": 9 + }, + "newName": "?" + } +} + + + + +// === findRenameLocations === +// === /projects/container/compositeExec/index.ts === +// import { /*START PREFIX*/myConst as /*RENAME*/[|myConstRENAME|] } from "../lib"; +// export function getMyConst() { +// return [|myConstRENAME|]; +// } +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///projects/temp/temp.ts" + } + } +} + +Open Files:: + [/projects/container/compositeExec/index.ts] + /projects/container/compositeExec/tsconfig.json (default) + [/projects/temp/temp.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///projects/temp/temp.ts", + "languageId": "typescript", + "version": 0, + "text": "let x = 10" + } + } +} + +Open Files:: + [/projects/container/compositeExec/index.ts] + /projects/container/compositeExec/tsconfig.json (default) + [/projects/temp/temp.ts] *new* + /projects/temp/tsconfig.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///projects/container/compositeExec/index.ts" + } + } +} + +Open Files:: + [/projects/container/compositeExec/index.ts] *closed* + [/projects/temp/temp.ts] + /projects/temp/tsconfig.json (default) + +{ + "method": "textDocument/didClose", + "params": { + "textDocument": { + "uri": "file:///projects/temp/temp.ts" + } + } +} + +Open Files:: + [/projects/temp/temp.ts] *closed* + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///projects/temp/temp.ts", + "languageId": "typescript", + "version": 0, + "text": "let x = 10" + } + } +} + +Projects:: + [/projects/container/compositeExec/tsconfig.json] *deleted* + /projects/container/lib/index.ts + /projects/container/compositeExec/index.ts + [/projects/container/tsconfig.json] *deleted* + [/projects/temp/tsconfig.json] + /projects/temp/temp.ts +Open Files:: + [/projects/temp/temp.ts] *new* + /projects/temp/tsconfig.json (default) +Config:: + [/projects/container/compositeExec/tsconfig.json] *deleted* + [/projects/container/lib/tsconfig.json] *deleted* + [/projects/temp/tsconfig.json] + RetainingProjects: + /projects/temp/tsconfig.json + RetainingOpenFiles: + /projects/temp/temp.ts +Config File Names:: + [/projects/container/compositeExec/index.ts] *deleted* + [/projects/temp/temp.ts] + NearestConfigFileName: /projects/temp/tsconfig.json diff --git a/testdata/baselines/reference/fourslash/state/renameInCommonFile.baseline b/testdata/baselines/reference/fourslash/state/renameInCommonFile.baseline new file mode 100644 index 00000000..01ee54f6 --- /dev/null +++ b/testdata/baselines/reference/fourslash/state/renameInCommonFile.baseline @@ -0,0 +1,197 @@ +UseCaseSensitiveFileNames: true +//// [/projects/a/a.ts] *new* +import {C} from "./c/fc"; +console.log(C) +//// [/projects/a/c] -> /projects/c *new* +//// [/projects/a/tsconfig.json] *new* +{} +//// [/projects/b/b.ts] *new* +import {C} from "../c/fc"; +console.log(C) +//// [/projects/b/c] -> /projects/c *new* +//// [/projects/b/tsconfig.json] *new* +{} +//// [/projects/c/fc.ts] *new* +export const C = 42; + + + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///projects/a/a.ts", + "languageId": "typescript", + "version": 0, + "text": "import {C} from \"./c/fc\";\nconsole.log(C)" + } + } +} + +Projects:: + [/projects/a/tsconfig.json] *new* + /projects/a/c/fc.ts + /projects/a/a.ts +Open Files:: + [/projects/a/a.ts] *new* + /projects/a/tsconfig.json (default) +Config:: + [/projects/a/tsconfig.json] *new* + RetainingProjects: + /projects/a/tsconfig.json + RetainingOpenFiles: + /projects/a/a.ts +Config File Names:: + [/projects/a/a.ts] *new* + NearestConfigFileName: /projects/a/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///projects/b/b.ts", + "languageId": "typescript", + "version": 0, + "text": "import {C} from \"../c/fc\";\nconsole.log(C)" + } + } +} + +Projects:: + [/projects/a/tsconfig.json] + /projects/a/c/fc.ts + /projects/a/a.ts + [/projects/b/tsconfig.json] *new* + /projects/c/fc.ts + /projects/b/b.ts + /projects/b/c/fc.ts +Open Files:: + [/projects/a/a.ts] + /projects/a/tsconfig.json (default) + [/projects/b/b.ts] *new* + /projects/b/tsconfig.json (default) +Config:: + [/projects/a/tsconfig.json] + RetainingProjects: + /projects/a/tsconfig.json + RetainingOpenFiles: + /projects/a/a.ts + [/projects/b/tsconfig.json] *new* + RetainingProjects: + /projects/b/tsconfig.json + RetainingOpenFiles: + /projects/b/b.ts +Config File Names:: + [/projects/a/a.ts] + NearestConfigFileName: /projects/a/tsconfig.json + [/projects/b/b.ts] *new* + NearestConfigFileName: /projects/b/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///projects/a/c/fc.ts", + "languageId": "typescript", + "version": 0, + "text": "export const C = 42;\n" + } + } +} + +Open Files:: + [/projects/a/a.ts] + /projects/a/tsconfig.json (default) + [/projects/a/c/fc.ts] *new* + /projects/a/tsconfig.json (default) + [/projects/b/b.ts] + /projects/b/tsconfig.json (default) +Config:: + [/projects/a/tsconfig.json] *modified* + RetainingProjects: + /projects/a/tsconfig.json + RetainingOpenFiles: *modified* + /projects/a/a.ts + /projects/a/c/fc.ts *new* + [/projects/b/tsconfig.json] + RetainingProjects: + /projects/b/tsconfig.json + RetainingOpenFiles: + /projects/b/b.ts +Config File Names:: + [/projects/a/a.ts] + NearestConfigFileName: /projects/a/tsconfig.json + [/projects/a/c/fc.ts] *new* + NearestConfigFileName: /projects/a/tsconfig.json + [/projects/b/b.ts] + NearestConfigFileName: /projects/b/tsconfig.json + +{ + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///projects/b/c/fc.ts", + "languageId": "typescript", + "version": 0, + "text": "export const C = 42;\n" + } + } +} + +Open Files:: + [/projects/a/a.ts] + /projects/a/tsconfig.json (default) + [/projects/a/c/fc.ts] + /projects/a/tsconfig.json (default) + [/projects/b/b.ts] + /projects/b/tsconfig.json (default) + [/projects/b/c/fc.ts] *new* + /projects/b/tsconfig.json (default) +Config:: + [/projects/a/tsconfig.json] + RetainingProjects: + /projects/a/tsconfig.json + RetainingOpenFiles: + /projects/a/a.ts + /projects/a/c/fc.ts + [/projects/b/tsconfig.json] *modified* + RetainingProjects: + /projects/b/tsconfig.json + RetainingOpenFiles: *modified* + /projects/b/b.ts + /projects/b/c/fc.ts *new* +Config File Names:: + [/projects/a/a.ts] + NearestConfigFileName: /projects/a/tsconfig.json + [/projects/a/c/fc.ts] + NearestConfigFileName: /projects/a/tsconfig.json + [/projects/b/b.ts] + NearestConfigFileName: /projects/b/tsconfig.json + [/projects/b/c/fc.ts] *new* + NearestConfigFileName: /projects/b/tsconfig.json + +{ + "method": "textDocument/rename", + "params": { + "textDocument": { + "uri": "file:///projects/a/c/fc.ts" + }, + "position": { + "line": 0, + "character": 13 + }, + "newName": "?" + } +} + + + + +// === findRenameLocations === +// === /projects/a/a.ts === +// import {[|CRENAME|]} from "./c/fc"; +// console.log([|CRENAME|]) + +// === /projects/a/c/fc.ts === +// export const /*RENAME*/C = 42; +// \ No newline at end of file diff --git a/testdata/baselines/reference/tsbuild/commandLine/bad-locale.js b/testdata/baselines/reference/tsbuild/commandLine/bad-locale.js new file mode 100644 index 00000000..f85b09a8 --- /dev/null +++ b/testdata/baselines/reference/tsbuild/commandLine/bad-locale.js @@ -0,0 +1,9 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: + +tsgo --build --help --locale whoops +ExitStatus:: DiagnosticsPresent_OutputsSkipped +Output:: +error TS6048: Locale must be an IETF BCP 47 language tag. Examples: 'en', 'ja-jp'. + diff --git a/testdata/baselines/reference/tsbuild/commandLine/locale.js b/testdata/baselines/reference/tsbuild/commandLine/locale.js new file mode 100644 index 00000000..a870d55c --- /dev/null +++ b/testdata/baselines/reference/tsbuild/commandLine/locale.js @@ -0,0 +1,147 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: + +tsgo --build --help --locale en +ExitStatus:: Success +Output:: +Version FakeTSVersion +tsc: The TypeScript Compiler - Version FakeTSVersion + +BUILD OPTIONS + +Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at https://aka.ms/tsc-composite-builds + +--help, -h +Print this message. + +--help, -? + + +--watch, -w +Watch input files. + +--preserveWatchOutput +Disable wiping the console in watch mode. +type: boolean +default: false + +--listFiles +Print all of the files read during the compilation. +type: boolean +default: false + +--explainFiles +Print files read during the compilation including why it was included. +type: boolean +default: false + +--listEmittedFiles +Print the names of emitted files after a compilation. +type: boolean +default: false + +--pretty +Enable color and formatting in TypeScript's output to make compiler errors easier to read. +type: boolean +default: true + +--traceResolution +Log paths used during the 'moduleResolution' process. +type: boolean +default: false + +--diagnostics +Output compiler performance information after building. +type: boolean +default: false + +--extendedDiagnostics +Output more detailed compiler performance information after building. +type: boolean +default: false + +--generateCpuProfile +Emit a v8 CPU profile of the compiler run for debugging. +type: string +default: profile.cpuprofile + +--generateTrace +Generates an event trace and a list of types. + +--incremental, -i +Save .tsbuildinfo files to allow for incremental compilation of projects. +type: boolean +default: `false`, unless `composite` is set + +--declaration, -d +Generate .d.ts files from TypeScript and JavaScript files in your project. +type: boolean +default: `false`, unless `composite` is set + +--declarationMap +Create sourcemaps for d.ts files. +type: boolean +default: false + +--emitDeclarationOnly +Only output d.ts files and not JavaScript files. +type: boolean +default: false + +--sourceMap +Create source map files for emitted JavaScript files. +type: boolean +default: false + +--inlineSourceMap +Include sourcemap files inside the emitted JavaScript. +type: boolean +default: false + +--noCheck +Disable full type checking (only critical parse and emit errors will be reported). +type: boolean +default: false + +--noEmit +Disable emitting files from a compilation. +type: boolean +default: false + +--assumeChangesOnlyAffectDirectDependencies +Have recompiles in projects that use 'incremental' and 'watch' mode assume that changes within a file will only affect files directly depending on it. +type: boolean +default: false + +--locale +Set the language of the messaging from TypeScript. This does not affect emit. + +--quiet, -q +Do not print diagnostics. + +--singleThreaded +Run in single threaded mode. + +--pprofDir +Generate pprof CPU/memory profiles to the given directory. + +--checkers +Set the number of checkers per project. + +--verbose, -v +Enable verbose logging. + +--dry, -d +Show what would be built (or deleted, if specified with '--clean') + +--force, -f +Build all projects, including those that appear to be up to date. + +--clean +Delete the outputs of all projects. + +--stopBuildOnErrors +Skip building downstream projects on error in upstream project. + + diff --git a/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js b/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js index a82f347c..e4db762f 100644 --- a/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js +++ b/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js @@ -95,7 +95,7 @@ import ky from 'ky'; export const api = ky.extend({}); //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"fileNames":["lib.esnext.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","signature":"5816fe34b5cf354b0d0d19bc77874616-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported variable 'api' has or is using name 'KyInstance' from external module \"/home/src/workspaces/project/node_modules/ky/distribution/index\" but cannot be named.","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":false,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4023,"category":1,"message":"Exported variable 'api' has or is using name 'KyInstance' from external module \"/home/src/workspaces/project/node_modules/ky/distribution/index\" but cannot be named."}]]]} +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.esnext.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","signature":"80d0207a54fef9a805b5e009ed639094-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023\napi\nKyInstance\n\"/home/src/workspaces/project/node_modules/ky/distribution/index\"\n","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":false,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4023,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023","messageArgs":["api","KyInstance","\"/home/src/workspaces/project/node_modules/ky/distribution/index\""]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -138,11 +138,11 @@ export const api = ky.extend({}); { "fileName": "./index.ts", "version": "0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});", - "signature": "5816fe34b5cf354b0d0d19bc77874616-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported variable 'api' has or is using name 'KyInstance' from external module \"/home/src/workspaces/project/node_modules/ky/distribution/index\" but cannot be named.", + "signature": "80d0207a54fef9a805b5e009ed639094-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023\napi\nKyInstance\n\"/home/src/workspaces/project/node_modules/ky/distribution/index\"\n", "impliedNodeFormat": "ESNext", "original": { "version": "0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});", - "signature": "5816fe34b5cf354b0d0d19bc77874616-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported variable 'api' has or is using name 'KyInstance' from external module \"/home/src/workspaces/project/node_modules/ky/distribution/index\" but cannot be named.", + "signature": "80d0207a54fef9a805b5e009ed639094-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023\napi\nKyInstance\n\"/home/src/workspaces/project/node_modules/ky/distribution/index\"\n", "impliedNodeFormat": 99 } } @@ -173,12 +173,17 @@ export const api = ky.extend({}); "end": 37, "code": 4023, "category": 1, - "message": "Exported variable 'api' has or is using name 'KyInstance' from external module \"/home/src/workspaces/project/node_modules/ky/distribution/index\" but cannot be named." + "messageKey": "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023", + "messageArgs": [ + "api", + "KyInstance", + "\"/home/src/workspaces/project/node_modules/ky/distribution/index\"" + ] } ] ] ], - "size": 1983 + "size": 2025 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/demo/in-bad-ref-branch-reports-the-error-about-files-not-in-rootDir-at-the-import-location.js b/testdata/baselines/reference/tsbuild/demo/in-bad-ref-branch-reports-the-error-about-files-not-in-rootDir-at-the-import-location.js index 57c66f13..74767587 100644 --- a/testdata/baselines/reference/tsbuild/demo/in-bad-ref-branch-reports-the-error-about-files-not-in-rootDir-at-the-import-location.js +++ b/testdata/baselines/reference/tsbuild/demo/in-bad-ref-branch-reports-the-error-about-files-not-in-rootDir-at-the-import-location.js @@ -400,7 +400,7 @@ Object.defineProperty(exports, "createDog", { enumerable: true, get: function () "size": 2794 } //// [/user/username/projects/demo/lib/core/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","errors":true,"root":[5],"fileNames":["lib.d.ts","../../animals/animal.ts","../../animals/dog.ts","../../animals/index.ts","../../core/utilities.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"47f086fff365b1e8b96a6df2c4313c1a-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}","signature":"1d76529d4652ddf9ebdfa65e748240fb-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}\n","impliedNodeFormat":1},{"version":"39dbb9b755eef022e56879989968e5cf-import Animal from '.';\nimport { makeRandomName } from '../core/utilities';\n\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\n\nexport function createDog(): Dog {\n return ({\n size: \"medium\",\n woof: function(this: Dog) {\n console.log(`${ this.name } says \"Woof\"!`);\n },\n name: makeRandomName()\n });\n}","signature":"4dc4bc559452869bfd0d92b5ed5d604f-import Animal from '.';\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\nexport declare function createDog(): Dog;\n","impliedNodeFormat":1},{"version":"d6a6b65b86b0330b1a1bd96b1738d5a4-import Animal from './animal';\n\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };","signature":"a3e41a5ccafc3d07a201f0603e28edcf-import Animal from './animal';\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };\n","impliedNodeFormat":1},{"version":"c71a99e072793c29cda49dd3fea04661-import * as A from '../animals'\nexport function makeRandomName() {\n return \"Bob!?! \";\n}\n\nexport function lastElementOf(arr: T[]): T | undefined {\n if (arr.length === 0) return undefined;\n return arr[arr.length - 1];\n}","signature":"096c311e7aecdb577f7b613fbf1716e5-export declare function makeRandomName(): string;\nexport declare function lastElementOf(arr: T[]): T | undefined;\n","impliedNodeFormat":1}],"fileIdsList":[[4,5],[2,3],[4]],"options":{"composite":true,"declaration":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../../core","strict":true,"target":1},"referencedMap":[[3,1],[4,2],[5,3]],"semanticDiagnosticsPerFile":[[5,[{"pos":12,"end":13,"code":6133,"category":1,"message":"'A' is declared but its value is never read.","reportsUnnecessary":true}]]],"latestChangedDtsFile":"./utilities.d.ts"} +{"version":"FakeTSVersion","errors":true,"root":[5],"fileNames":["lib.d.ts","../../animals/animal.ts","../../animals/dog.ts","../../animals/index.ts","../../core/utilities.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"47f086fff365b1e8b96a6df2c4313c1a-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}","signature":"1d76529d4652ddf9ebdfa65e748240fb-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}\n","impliedNodeFormat":1},{"version":"39dbb9b755eef022e56879989968e5cf-import Animal from '.';\nimport { makeRandomName } from '../core/utilities';\n\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\n\nexport function createDog(): Dog {\n return ({\n size: \"medium\",\n woof: function(this: Dog) {\n console.log(`${ this.name } says \"Woof\"!`);\n },\n name: makeRandomName()\n });\n}","signature":"4dc4bc559452869bfd0d92b5ed5d604f-import Animal from '.';\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\nexport declare function createDog(): Dog;\n","impliedNodeFormat":1},{"version":"d6a6b65b86b0330b1a1bd96b1738d5a4-import Animal from './animal';\n\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };","signature":"a3e41a5ccafc3d07a201f0603e28edcf-import Animal from './animal';\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };\n","impliedNodeFormat":1},{"version":"c71a99e072793c29cda49dd3fea04661-import * as A from '../animals'\nexport function makeRandomName() {\n return \"Bob!?! \";\n}\n\nexport function lastElementOf(arr: T[]): T | undefined {\n if (arr.length === 0) return undefined;\n return arr[arr.length - 1];\n}","signature":"096c311e7aecdb577f7b613fbf1716e5-export declare function makeRandomName(): string;\nexport declare function lastElementOf(arr: T[]): T | undefined;\n","impliedNodeFormat":1}],"fileIdsList":[[4,5],[2,3],[4]],"options":{"composite":true,"declaration":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../../core","strict":true,"target":1},"referencedMap":[[3,1],[4,2],[5,3]],"semanticDiagnosticsPerFile":[[5,[{"pos":12,"end":13,"code":6133,"category":1,"messageKey":"_0_is_declared_but_its_value_is_never_read_6133","messageArgs":["A"],"reportsUnnecessary":true}]]],"latestChangedDtsFile":"./utilities.d.ts"} //// [/user/username/projects/demo/lib/core/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -526,14 +526,17 @@ Object.defineProperty(exports, "createDog", { enumerable: true, get: function () "end": 13, "code": 6133, "category": 1, - "message": "'A' is declared but its value is never read.", + "messageKey": "_0_is_declared_but_its_value_is_never_read_6133", + "messageArgs": [ + "A" + ], "reportsUnnecessary": true } ] ] ], "latestChangedDtsFile": "./utilities.d.ts", - "size": 3302 + "size": 3328 } //// [/user/username/projects/demo/lib/core/utilities.d.ts] *new* export declare function makeRandomName(): string; diff --git a/testdata/baselines/reference/tsbuild/fileDelete/detects-deleted-file.js b/testdata/baselines/reference/tsbuild/fileDelete/detects-deleted-file.js index 2603d2cd..bc6d9873 100644 --- a/testdata/baselines/reference/tsbuild/fileDelete/detects-deleted-file.js +++ b/testdata/baselines/reference/tsbuild/fileDelete/detects-deleted-file.js @@ -325,7 +325,7 @@ Found 1 error in child/child.ts:1 //// [/home/src/workspaces/solution/child/child.js] *rewrite with same content* //// [/home/src/workspaces/solution/child/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./child.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9686fb058ae9baf28ea93ef1e3b32b74-import { child2 } from \"../child/child2\";\nexport function child() {\n child2();\n}","signature":"3a48d078ac909d932ed914f17038d634-export declare function child(): void;\n","impliedNodeFormat":1}],"options":{"composite":true},"semanticDiagnosticsPerFile":[[2,[{"pos":23,"end":40,"code":2307,"category":1,"message":"Cannot find module '../child/child2' or its corresponding type declarations."}]]],"latestChangedDtsFile":"./child.d.ts"} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./child.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9686fb058ae9baf28ea93ef1e3b32b74-import { child2 } from \"../child/child2\";\nexport function child() {\n child2();\n}","signature":"3a48d078ac909d932ed914f17038d634-export declare function child(): void;\n","impliedNodeFormat":1}],"options":{"composite":true},"semanticDiagnosticsPerFile":[[2,[{"pos":23,"end":40,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["../child/child2"]}]]],"latestChangedDtsFile":"./child.d.ts"} //// [/home/src/workspaces/solution/child/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -378,13 +378,16 @@ Found 1 error in child/child.ts:1 "end": 40, "code": 2307, "category": 1, - "message": "Cannot find module '../child/child2' or its corresponding type declarations." + "messageKey": "Cannot_find_module_0_or_its_corresponding_type_declarations_2307", + "messageArgs": [ + "../child/child2" + ] } ] ] ], "latestChangedDtsFile": "./child.d.ts", - "size": 1344 + "size": 1369 } //// [/home/src/workspaces/solution/main/tsconfig.tsbuildinfo] *mTime changed* diff --git a/testdata/baselines/reference/tsbuild/inferredTypeFromTransitiveModule/reports-errors-in-files-affected-by-change-in-signature-with-isolatedModules.js b/testdata/baselines/reference/tsbuild/inferredTypeFromTransitiveModule/reports-errors-in-files-affected-by-change-in-signature-with-isolatedModules.js index b58b23c4..efa4fc46 100644 --- a/testdata/baselines/reference/tsbuild/inferredTypeFromTransitiveModule/reports-errors-in-files-affected-by-change-in-signature-with-isolatedModules.js +++ b/testdata/baselines/reference/tsbuild/inferredTypeFromTransitiveModule/reports-errors-in-files-affected-by-change-in-signature-with-isolatedModules.js @@ -364,7 +364,7 @@ export declare const lazyBar: LazyAction<() => void, typeof import("./lazyIndex" //// [/home/src/workspaces/project/obj/lazyIndex.d.ts] *rewrite with same content* //// [/home/src/workspaces/project/obj/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,6]],"fileNames":["lib.d.ts","../bar.ts","../bundling.ts","../global.d.ts","../lazyIndex.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0bd8823a281968531aa051fd0166b47a-interface RawAction {\n (...args: any[]): Promise | void;\n}\ninterface ActionFactory {\n (target: T): T;\n}\ndeclare function foo(): ActionFactory;\nexport default foo()(function foobar(): void {\n});","signature":"6cd64ed70c0d0d178b062e1470eb929d-declare const _default: () => void;\nexport default _default;\n","impliedNodeFormat":1},{"version":"16bf1b870d8b21533eda3b1f1b87cd77-export class LazyModule {\n constructor(private importCallback: () => Promise) {}\n}\n\nexport class LazyAction<\n TAction extends (...args: any[]) => any,\n TModule\n> {\n constructor(_lazyModule: LazyModule, _getter: (module: TModule) => TAction) {\n }\n}","signature":"5e4757586f6f5d494b6763f1e808313a-export declare class LazyModule {\n private importCallback;\n constructor(importCallback: () => Promise);\n}\nexport declare class LazyAction any, TModule> {\n constructor(_lazyModule: LazyModule, _getter: (module: TModule) => TAction);\n}\n","impliedNodeFormat":1},{"version":"9c9274fd70d574f2b4b68a2891bd4c47-interface PromiseConstructor {\n new (): Promise;\n}\ndeclare var Promise: PromiseConstructor;\ninterface Promise {\n}","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"60603312318c6195044a5691dcb10507-export { default as bar } from './bar';import { default as bar } from './bar';\nbar(\"hello\");","signature":"3a848e147ba2aebbd888c3c7bbab715b-export { default as bar } from './bar';\n","impliedNodeFormat":1},{"version":"d552d2a19fa05b15aa33018233d09810-import { LazyAction, LazyModule } from './bundling';\nconst lazyModule = new LazyModule(() =>\n import('./lazyIndex')\n);\nexport const lazyBar = new LazyAction(lazyModule, m => m.bar);","signature":"58c7056d7920602a0f958afefa15677d-import { LazyAction } from './bundling';\nexport declare const lazyBar: LazyAction<() => void, typeof import(\"./lazyIndex\")>;\n","impliedNodeFormat":1}],"fileIdsList":[[3,5],[2]],"options":{"declaration":true,"outDir":"./","target":1},"referencedMap":[[6,1],[5,2]],"semanticDiagnosticsPerFile":[[5,[{"pos":83,"end":90,"code":2554,"category":1,"message":"Expected 0 arguments, but got 1."}]]]} +{"version":"FakeTSVersion","root":[[2,6]],"fileNames":["lib.d.ts","../bar.ts","../bundling.ts","../global.d.ts","../lazyIndex.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0bd8823a281968531aa051fd0166b47a-interface RawAction {\n (...args: any[]): Promise | void;\n}\ninterface ActionFactory {\n (target: T): T;\n}\ndeclare function foo(): ActionFactory;\nexport default foo()(function foobar(): void {\n});","signature":"6cd64ed70c0d0d178b062e1470eb929d-declare const _default: () => void;\nexport default _default;\n","impliedNodeFormat":1},{"version":"16bf1b870d8b21533eda3b1f1b87cd77-export class LazyModule {\n constructor(private importCallback: () => Promise) {}\n}\n\nexport class LazyAction<\n TAction extends (...args: any[]) => any,\n TModule\n> {\n constructor(_lazyModule: LazyModule, _getter: (module: TModule) => TAction) {\n }\n}","signature":"5e4757586f6f5d494b6763f1e808313a-export declare class LazyModule {\n private importCallback;\n constructor(importCallback: () => Promise);\n}\nexport declare class LazyAction any, TModule> {\n constructor(_lazyModule: LazyModule, _getter: (module: TModule) => TAction);\n}\n","impliedNodeFormat":1},{"version":"9c9274fd70d574f2b4b68a2891bd4c47-interface PromiseConstructor {\n new (): Promise;\n}\ndeclare var Promise: PromiseConstructor;\ninterface Promise {\n}","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"60603312318c6195044a5691dcb10507-export { default as bar } from './bar';import { default as bar } from './bar';\nbar(\"hello\");","signature":"3a848e147ba2aebbd888c3c7bbab715b-export { default as bar } from './bar';\n","impliedNodeFormat":1},{"version":"d552d2a19fa05b15aa33018233d09810-import { LazyAction, LazyModule } from './bundling';\nconst lazyModule = new LazyModule(() =>\n import('./lazyIndex')\n);\nexport const lazyBar = new LazyAction(lazyModule, m => m.bar);","signature":"58c7056d7920602a0f958afefa15677d-import { LazyAction } from './bundling';\nexport declare const lazyBar: LazyAction<() => void, typeof import(\"./lazyIndex\")>;\n","impliedNodeFormat":1}],"fileIdsList":[[3,5],[2]],"options":{"declaration":true,"outDir":"./","target":1},"referencedMap":[[6,1],[5,2]],"semanticDiagnosticsPerFile":[[5,[{"pos":83,"end":90,"code":2554,"category":1,"messageKey":"Expected_0_arguments_but_got_1_2554","messageArgs":["0","1"]}]]]} //// [/home/src/workspaces/project/obj/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -493,12 +493,16 @@ export declare const lazyBar: LazyAction<() => void, typeof import("./lazyIndex" "end": 90, "code": 2554, "category": 1, - "message": "Expected 0 arguments, but got 1." + "messageKey": "Expected_0_arguments_but_got_1_2554", + "messageArgs": [ + "0", + "1" + ] } ] ] ], - "size": 3253 + "size": 3283 } tsconfig.json:: @@ -730,7 +734,7 @@ export declare const lazyBar: LazyAction<() => void, typeof import("./lazyIndex" //// [/home/src/workspaces/project/obj/lazyIndex.d.ts] *rewrite with same content* //// [/home/src/workspaces/project/obj/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,6]],"fileNames":["lib.d.ts","../bar.ts","../bundling.ts","../global.d.ts","../lazyIndex.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0bd8823a281968531aa051fd0166b47a-interface RawAction {\n (...args: any[]): Promise | void;\n}\ninterface ActionFactory {\n (target: T): T;\n}\ndeclare function foo(): ActionFactory;\nexport default foo()(function foobar(): void {\n});","signature":"6cd64ed70c0d0d178b062e1470eb929d-declare const _default: () => void;\nexport default _default;\n","impliedNodeFormat":1},{"version":"16bf1b870d8b21533eda3b1f1b87cd77-export class LazyModule {\n constructor(private importCallback: () => Promise) {}\n}\n\nexport class LazyAction<\n TAction extends (...args: any[]) => any,\n TModule\n> {\n constructor(_lazyModule: LazyModule, _getter: (module: TModule) => TAction) {\n }\n}","signature":"5e4757586f6f5d494b6763f1e808313a-export declare class LazyModule {\n private importCallback;\n constructor(importCallback: () => Promise);\n}\nexport declare class LazyAction any, TModule> {\n constructor(_lazyModule: LazyModule, _getter: (module: TModule) => TAction);\n}\n","impliedNodeFormat":1},{"version":"9c9274fd70d574f2b4b68a2891bd4c47-interface PromiseConstructor {\n new (): Promise;\n}\ndeclare var Promise: PromiseConstructor;\ninterface Promise {\n}","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"60603312318c6195044a5691dcb10507-export { default as bar } from './bar';import { default as bar } from './bar';\nbar(\"hello\");","signature":"3a848e147ba2aebbd888c3c7bbab715b-export { default as bar } from './bar';\n","impliedNodeFormat":1},{"version":"d552d2a19fa05b15aa33018233d09810-import { LazyAction, LazyModule } from './bundling';\nconst lazyModule = new LazyModule(() =>\n import('./lazyIndex')\n);\nexport const lazyBar = new LazyAction(lazyModule, m => m.bar);","signature":"58c7056d7920602a0f958afefa15677d-import { LazyAction } from './bundling';\nexport declare const lazyBar: LazyAction<() => void, typeof import(\"./lazyIndex\")>;\n","impliedNodeFormat":1}],"fileIdsList":[[3,5],[2]],"options":{"declaration":true,"outDir":"./","target":1},"referencedMap":[[6,1],[5,2]],"semanticDiagnosticsPerFile":[[5,[{"pos":83,"end":90,"code":2554,"category":1,"message":"Expected 0 arguments, but got 1."}]]]} +{"version":"FakeTSVersion","root":[[2,6]],"fileNames":["lib.d.ts","../bar.ts","../bundling.ts","../global.d.ts","../lazyIndex.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0bd8823a281968531aa051fd0166b47a-interface RawAction {\n (...args: any[]): Promise | void;\n}\ninterface ActionFactory {\n (target: T): T;\n}\ndeclare function foo(): ActionFactory;\nexport default foo()(function foobar(): void {\n});","signature":"6cd64ed70c0d0d178b062e1470eb929d-declare const _default: () => void;\nexport default _default;\n","impliedNodeFormat":1},{"version":"16bf1b870d8b21533eda3b1f1b87cd77-export class LazyModule {\n constructor(private importCallback: () => Promise) {}\n}\n\nexport class LazyAction<\n TAction extends (...args: any[]) => any,\n TModule\n> {\n constructor(_lazyModule: LazyModule, _getter: (module: TModule) => TAction) {\n }\n}","signature":"5e4757586f6f5d494b6763f1e808313a-export declare class LazyModule {\n private importCallback;\n constructor(importCallback: () => Promise);\n}\nexport declare class LazyAction any, TModule> {\n constructor(_lazyModule: LazyModule, _getter: (module: TModule) => TAction);\n}\n","impliedNodeFormat":1},{"version":"9c9274fd70d574f2b4b68a2891bd4c47-interface PromiseConstructor {\n new (): Promise;\n}\ndeclare var Promise: PromiseConstructor;\ninterface Promise {\n}","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"60603312318c6195044a5691dcb10507-export { default as bar } from './bar';import { default as bar } from './bar';\nbar(\"hello\");","signature":"3a848e147ba2aebbd888c3c7bbab715b-export { default as bar } from './bar';\n","impliedNodeFormat":1},{"version":"d552d2a19fa05b15aa33018233d09810-import { LazyAction, LazyModule } from './bundling';\nconst lazyModule = new LazyModule(() =>\n import('./lazyIndex')\n);\nexport const lazyBar = new LazyAction(lazyModule, m => m.bar);","signature":"58c7056d7920602a0f958afefa15677d-import { LazyAction } from './bundling';\nexport declare const lazyBar: LazyAction<() => void, typeof import(\"./lazyIndex\")>;\n","impliedNodeFormat":1}],"fileIdsList":[[3,5],[2]],"options":{"declaration":true,"outDir":"./","target":1},"referencedMap":[[6,1],[5,2]],"semanticDiagnosticsPerFile":[[5,[{"pos":83,"end":90,"code":2554,"category":1,"messageKey":"Expected_0_arguments_but_got_1_2554","messageArgs":["0","1"]}]]]} //// [/home/src/workspaces/project/obj/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -859,12 +863,16 @@ export declare const lazyBar: LazyAction<() => void, typeof import("./lazyIndex" "end": 90, "code": 2554, "category": 1, - "message": "Expected 0 arguments, but got 1." + "messageKey": "Expected_0_arguments_but_got_1_2554", + "messageArgs": [ + "0", + "1" + ] } ] ] ], - "size": 3253 + "size": 3283 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js b/testdata/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js index bbd565a6..83977174 100644 --- a/testdata/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js +++ b/testdata/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js @@ -217,7 +217,7 @@ function getVar() { } //// [/home/src/workspaces/lib/sub-project-2/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../common/nominal.d.ts","../sub-project/index.d.ts","../../solution/sub-project-2/index.js"],"fileInfos":[{"version":"24b4796cd50d1a9aabad1583878c494d-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n readonly species: symbol;\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"de751e2539eb6f12413f7067ad0a0ef5-export type Nominal = T & {\n [Symbol.species]: Name;\n};\ndeclare const _default: {};\nexport = _default;\n","225285a996cc5c4120877a377890d79e-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n/**\n * @typedef {Nominal} MyNominal\n */ \n",{"version":"db2a90e082fd17d65127bda69975a727-import { MyNominal } from '../sub-project/index';\n\nconst variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nexport function getVar() {\n return 'key';\n}","signature":"f2cd6630b2dfa04d1fc92179f15d1647-declare const variable: {\n key: Nominal;\n};\n/**\n * @return {keyof typeof variable}\n */\nexport declare function getVar(): keyof typeof variable;\nexport {};\n","impliedNodeFormat":1}],"fileIdsList":[[2],[3]],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../solution","skipLibCheck":true},"referencedMap":[[3,1],[4,2]],"semanticDiagnosticsPerFile":[[4,[{"pos":9,"end":18,"code":18042,"category":1,"message":"'MyNominal' is a type and cannot be imported in JavaScript files. Use 'import(\"../sub-project/index\").MyNominal' in a JSDoc type annotation."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../common/nominal.d.ts","../sub-project/index.d.ts","../../solution/sub-project-2/index.js"],"fileInfos":[{"version":"24b4796cd50d1a9aabad1583878c494d-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n readonly species: symbol;\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"de751e2539eb6f12413f7067ad0a0ef5-export type Nominal = T & {\n [Symbol.species]: Name;\n};\ndeclare const _default: {};\nexport = _default;\n","225285a996cc5c4120877a377890d79e-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n/**\n * @typedef {Nominal} MyNominal\n */ \n",{"version":"db2a90e082fd17d65127bda69975a727-import { MyNominal } from '../sub-project/index';\n\nconst variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nexport function getVar() {\n return 'key';\n}","signature":"f2cd6630b2dfa04d1fc92179f15d1647-declare const variable: {\n key: Nominal;\n};\n/**\n * @return {keyof typeof variable}\n */\nexport declare function getVar(): keyof typeof variable;\nexport {};\n","impliedNodeFormat":1}],"fileIdsList":[[2],[3]],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../solution","skipLibCheck":true},"referencedMap":[[3,1],[4,2]],"semanticDiagnosticsPerFile":[[4,[{"pos":9,"end":18,"code":18042,"category":1,"messageKey":"_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042","messageArgs":["MyNominal","import(\"../sub-project/index\").MyNominal"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/home/src/workspaces/lib/sub-project-2/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -306,13 +306,17 @@ function getVar() { "end": 18, "code": 18042, "category": 1, - "message": "'MyNominal' is a type and cannot be imported in JavaScript files. Use 'import(\"../sub-project/index\").MyNominal' in a JSDoc type annotation." + "messageKey": "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042", + "messageArgs": [ + "MyNominal", + "import(\"../sub-project/index\").MyNominal" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 2322 + "size": 2350 } //// [/home/src/workspaces/lib/sub-project/index.d.ts] *new* import { Nominal } from '../common/nominal'; @@ -330,7 +334,7 @@ const nominal_1 = require("../common/nominal"); */ //// [/home/src/workspaces/lib/sub-project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../common/nominal.d.ts","../../solution/sub-project/index.js"],"fileInfos":[{"version":"24b4796cd50d1a9aabad1583878c494d-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n readonly species: symbol;\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"de751e2539eb6f12413f7067ad0a0ef5-export type Nominal = T & {\n [Symbol.species]: Name;\n};\ndeclare const _default: {};\nexport = _default;\n",{"version":"00b7836eaf1e026f7764b7be6efcc8f5-import { Nominal } from '../common/nominal';\n\n/**\n * @typedef {Nominal} MyNominal\n */","signature":"225285a996cc5c4120877a377890d79e-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n/**\n * @typedef {Nominal} MyNominal\n */ \n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../solution","skipLibCheck":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":9,"end":16,"code":2305,"category":1,"message":"Module '\"../../lib/common/nominal\"' has no exported member 'Nominal'."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../common/nominal.d.ts","../../solution/sub-project/index.js"],"fileInfos":[{"version":"24b4796cd50d1a9aabad1583878c494d-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n readonly species: symbol;\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"de751e2539eb6f12413f7067ad0a0ef5-export type Nominal = T & {\n [Symbol.species]: Name;\n};\ndeclare const _default: {};\nexport = _default;\n",{"version":"00b7836eaf1e026f7764b7be6efcc8f5-import { Nominal } from '../common/nominal';\n\n/**\n * @typedef {Nominal} MyNominal\n */","signature":"225285a996cc5c4120877a377890d79e-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n/**\n * @typedef {Nominal} MyNominal\n */ \n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../solution","skipLibCheck":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":9,"end":16,"code":2305,"category":1,"messageKey":"Module_0_has_no_exported_member_1_2305","messageArgs":["\"../../lib/common/nominal\"","Nominal"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/home/src/workspaces/lib/sub-project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -406,13 +410,17 @@ const nominal_1 = require("../common/nominal"); "end": 16, "code": 2305, "category": 1, - "message": "Module '\"../../lib/common/nominal\"' has no exported member 'Nominal'." + "messageKey": "Module_0_has_no_exported_member_1_2305", + "messageArgs": [ + "\"../../lib/common/nominal\"", + "Nominal" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 1877 + "size": 1904 } common/tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noCheck/dts-errors-with-incremental.js b/testdata/baselines/reference/tsbuild/noCheck/dts-errors-with-incremental.js index 92ec8ba7..e40d2260 100644 --- a/testdata/baselines/reference/tsbuild/noCheck/dts-errors-with-incremental.js +++ b/testdata/baselines/reference/tsbuild/noCheck/dts-errors-with-incremental.js @@ -84,7 +84,7 @@ exports.b = void 0; exports.b = 10; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[1,2,3],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[1,2,3],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -122,11 +122,11 @@ exports.b = 10; { "fileName": "./a.ts", "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -159,21 +159,27 @@ exports.b = 10; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1810 + "size": 1878 } tsconfig.json:: @@ -487,7 +493,7 @@ const a = class { exports.a = a; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -525,11 +531,11 @@ exports.a = a; { "fileName": "./a.ts", "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -560,21 +566,27 @@ exports.a = a; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1806 + "size": 1874 } tsconfig.json:: @@ -640,7 +652,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -677,11 +689,11 @@ Found 1 error in a.ts:1 { "fileName": "./a.ts", "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -709,21 +721,27 @@ Found 1 error in a.ts:1 "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1753 + "size": 1821 } tsconfig.json:: @@ -944,7 +962,7 @@ exports.c = void 0; exports.c = "hello"; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1026,12 +1044,16 @@ exports.c = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: @@ -1084,7 +1106,7 @@ const a = class { exports.a = a; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1124,11 +1146,11 @@ exports.a = a; { "fileName": "./a.ts", "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -1168,7 +1190,11 @@ exports.a = a; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -1182,21 +1208,27 @@ exports.a = a; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 2114 + "size": 2209 } tsconfig.json:: @@ -1230,7 +1262,7 @@ exports.a = void 0; exports.a = "hello"; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1314,12 +1346,16 @@ exports.a = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1611 + "size": 1638 } tsconfig.json:: @@ -1350,7 +1386,7 @@ Output:: Found 1 error in c.ts:1 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1432,12 +1468,16 @@ Found 1 error in c.ts:1 "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noCheck/semantic-errors-with-incremental.js b/testdata/baselines/reference/tsbuild/noCheck/semantic-errors-with-incremental.js index 3b59a18d..38b75cfd 100644 --- a/testdata/baselines/reference/tsbuild/noCheck/semantic-errors-with-incremental.js +++ b/testdata/baselines/reference/tsbuild/noCheck/semantic-errors-with-incremental.js @@ -504,7 +504,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c3aef4914dc04eedbda88b614f5cc47-export const a: number = \"hello\";","signature":"03ee330dc35a9c186b6cc67781eafb11-export declare const a: number;\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c3aef4914dc04eedbda88b614f5cc47-export const a: number = \"hello\";","signature":"03ee330dc35a9c186b6cc67781eafb11-export declare const a: number;\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -573,12 +573,16 @@ Found 1 error in a.ts:1 "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1398 + "size": 1425 } tsconfig.json:: @@ -794,7 +798,7 @@ exports.c = void 0; exports.c = "hello"; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -876,12 +880,16 @@ exports.c = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: @@ -910,7 +918,7 @@ export declare const a: number; //// [/home/src/workspaces/project/a.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c3aef4914dc04eedbda88b614f5cc47-export const a: number = \"hello\";","signature":"03ee330dc35a9c186b6cc67781eafb11-export declare const a: number;\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c3aef4914dc04eedbda88b614f5cc47-export const a: number = \"hello\";","signature":"03ee330dc35a9c186b6cc67781eafb11-export declare const a: number;\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -994,12 +1002,16 @@ export declare const a: number; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1615 + "size": 1642 } tsconfig.json:: @@ -1028,7 +1040,7 @@ export declare const a = "hello"; //// [/home/src/workspaces/project/a.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1112,12 +1124,16 @@ export declare const a = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1611 + "size": 1638 } tsconfig.json:: @@ -1148,7 +1164,7 @@ Output:: Found 1 error in c.ts:1 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1230,12 +1246,16 @@ Found 1 error in c.ts:1 "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noCheck/syntax-errors-with-incremental.js b/testdata/baselines/reference/tsbuild/noCheck/syntax-errors-with-incremental.js index de8cd5cf..f3379da2 100644 --- a/testdata/baselines/reference/tsbuild/noCheck/syntax-errors-with-incremental.js +++ b/testdata/baselines/reference/tsbuild/noCheck/syntax-errors-with-incremental.js @@ -841,7 +841,7 @@ exports.c = void 0; exports.c = "hello"; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -923,12 +923,16 @@ exports.c = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: @@ -968,7 +972,7 @@ exports.a = void 0; exports.a = "hello; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","errors":true,"checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1fca32c5d452470ed9d0aa38bbe62e60-export const a = \"hello","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","errors":true,"checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1fca32c5d452470ed9d0aa38bbe62e60-export const a = \"hello","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1053,12 +1057,16 @@ exports.a = "hello; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1622 + "size": 1649 } tsconfig.json:: @@ -1090,7 +1098,7 @@ exports.a = void 0; exports.a = "hello"; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1174,12 +1182,16 @@ exports.a = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1611 + "size": 1638 } tsconfig.json:: @@ -1210,7 +1222,7 @@ Output:: Found 1 error in c.ts:1 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1292,12 +1304,16 @@ Found 1 error in c.ts:1 "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/changes-composite.js b/testdata/baselines/reference/tsbuild/noEmit/changes-composite.js index 59722251..0873954d 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/changes-composite.js +++ b/testdata/baselines/reference/tsbuild/noEmit/changes-composite.js @@ -349,7 +349,7 @@ Errors Files 1 src/indirectUse.ts:2 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;",{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]],"affectedFilesPendingEmit":[2,[4],3,[5]],"latestChangedDtsFile":"./src/noChangeFileWithEmitSpecificError.d.ts","emitSignatures":[[2,"8743eb01f3ddad300611aa9bbf6b6c0a-export declare class classC {\n prop: number;\n}\n"],[4,"abe7d9981d6018efb6b2b794f40a1607-export {};\n"],[5,"abe7d9981d6018efb6b2b794f40a1607-export {};\n"]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;",{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]],"affectedFilesPendingEmit":[2,[4],3,[5]],"latestChangedDtsFile":"./src/noChangeFileWithEmitSpecificError.d.ts","emitSignatures":[[2,"8743eb01f3ddad300611aa9bbf6b6c0a-export declare class classC {\n prop: number;\n}\n"],[4,"abe7d9981d6018efb6b2b794f40a1607-export {};\n"],[5,"abe7d9981d6018efb6b2b794f40a1607-export {};\n"]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -481,7 +481,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -489,7 +494,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -503,7 +511,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -511,7 +524,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -571,7 +587,7 @@ Errors Files ] } ], - "size": 3190 + "size": 3298 } tsconfig.json:: @@ -865,7 +881,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]],"latestChangedDtsFile":"./src/class.d.ts"} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]],"latestChangedDtsFile":"./src/class.d.ts"} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1007,7 +1023,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -1015,7 +1036,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -1029,7 +1053,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -1037,7 +1066,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -1045,7 +1077,7 @@ exports.classC = classC; ] ], "latestChangedDtsFile": "./src/class.d.ts", - "size": 3093 + "size": 3201 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/changes-incremental-declaration.js b/testdata/baselines/reference/tsbuild/noEmit/changes-incremental-declaration.js index 868e102c..7389de47 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/changes-incremental-declaration.js +++ b/testdata/baselines/reference/tsbuild/noEmit/changes-incremental-declaration.js @@ -348,7 +348,7 @@ Errors Files 1 src/indirectUse.ts:2 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;",{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]],"affectedFilesPendingEmit":[2,[4],3,[5]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;",{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]],"affectedFilesPendingEmit":[2,[4],3,[5]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -480,7 +480,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -488,7 +493,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -502,7 +510,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -510,7 +523,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -543,7 +559,7 @@ Errors Files ] ] ], - "size": 2906 + "size": 3014 } tsconfig.json:: @@ -843,7 +859,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/src/indirectUse.d.ts] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -985,7 +1001,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -993,7 +1014,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -1007,7 +1031,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -1015,14 +1044,17 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } ] ] ], - "size": 3053 + "size": 3161 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/changes-incremental.js b/testdata/baselines/reference/tsbuild/noEmit/changes-incremental.js index e36127a4..3ac81a8f 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/changes-incremental.js +++ b/testdata/baselines/reference/tsbuild/noEmit/changes-incremental.js @@ -290,7 +290,7 @@ Errors Files 1 src/indirectUse.ts:2 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]],"affectedFilesPendingEmit":[2,4,3,5]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]],"affectedFilesPendingEmit":[2,4,3,5]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -423,7 +423,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -431,7 +436,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -445,7 +453,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -453,7 +466,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -482,7 +498,7 @@ Errors Files 5 ] ], - "size": 2807 + "size": 2915 } tsconfig.json:: @@ -753,7 +769,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -876,7 +892,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -884,7 +905,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -898,7 +922,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -906,14 +935,17 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } ] ] ], - "size": 2582 + "size": 2690 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-composite.js b/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-composite.js index 62a76b58..43d33d46 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-composite.js +++ b/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-composite.js @@ -542,7 +542,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]],"latestChangedDtsFile":"./src/class.d.ts"} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]],"latestChangedDtsFile":"./src/class.d.ts"} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -684,7 +684,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -692,7 +697,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -706,7 +714,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -714,7 +727,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -722,7 +738,7 @@ exports.classC = classC; ] ], "latestChangedDtsFile": "./src/class.d.ts", - "size": 3093 + "size": 3201 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-incremental-declaration.js b/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-incremental-declaration.js index d3688f6b..4f4866ea 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-incremental-declaration.js +++ b/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-incremental-declaration.js @@ -518,7 +518,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/src/indirectUse.d.ts] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -660,7 +660,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -668,7 +673,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -682,7 +690,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -690,14 +703,17 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } ] ] ], - "size": 3053 + "size": 3161 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-incremental.js b/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-incremental.js index 66ce7033..c27e8129 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-incremental.js +++ b/testdata/baselines/reference/tsbuild/noEmit/changes-with-initial-noEmit-incremental.js @@ -433,7 +433,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/src/indirectUse.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -566,7 +566,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -574,7 +579,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -588,7 +596,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -596,14 +609,17 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } ] ] ], - "size": 2770 + "size": 2878 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-incremental-as-modules.js b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-incremental-as-modules.js index 2604cb33..2e1ada17 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-incremental-as-modules.js +++ b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-incremental-as-modules.js @@ -154,7 +154,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -213,14 +213,20 @@ Found 1 error in a.ts:1 "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -245,7 +251,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1368 + "size": 1420 } tsconfig.json:: @@ -278,7 +284,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,49],[3,49]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,49],[3,49]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -338,14 +344,20 @@ Found 1 error in a.ts:1 "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -370,7 +382,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1390 + "size": 1442 } tsconfig.json:: @@ -441,7 +453,7 @@ exports.b = void 0; exports.b = 10; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -478,11 +490,11 @@ exports.b = 10; { "fileName": "./a.ts", "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -510,21 +522,27 @@ exports.b = 10; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1753 + "size": 1821 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-incremental.js b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-incremental.js index 78b36fcd..e1d52960 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-incremental.js +++ b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-incremental.js @@ -141,7 +141,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -195,14 +195,20 @@ Found 1 error in a.ts:1 "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -219,7 +225,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1341 + "size": 1393 } tsconfig.json:: @@ -252,7 +258,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,49]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,49]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -307,14 +313,20 @@ Found 1 error in a.ts:1 "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -331,7 +343,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1363 + "size": 1415 } tsconfig.json:: @@ -389,7 +401,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -421,12 +433,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -444,21 +456,27 @@ const a = class { "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1578 + "size": 1646 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-multiple-files.js b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-multiple-files.js index dbbed515..e053d214 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-multiple-files.js +++ b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-declaration-enable-changes-with-multiple-files.js @@ -209,7 +209,7 @@ Errors Files 1 d.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17],[4,17],[5,17]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17],[4,17],[5,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -284,14 +284,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -305,14 +311,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -326,14 +338,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -374,7 +392,7 @@ Errors Files ] ] ], - "size": 2084 + "size": 2240 } tsconfig.json:: @@ -430,7 +448,7 @@ Errors Files 1 d.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };"],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[[2,49],[3,49],[4,49],[5,49]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };"],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[[2,49],[3,49],[4,49],[5,49]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -506,14 +524,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -527,14 +551,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -548,14 +578,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -596,7 +632,7 @@ Errors Files ] ] ], - "size": 2106 + "size": 2262 } tsconfig.json:: @@ -722,7 +758,7 @@ const d = class { exports.d = d; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -763,11 +799,11 @@ exports.d = d; { "fileName": "./a.ts", "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -785,22 +821,22 @@ exports.d = d; { "fileName": "./c.ts", "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": "CommonJS", "original": { "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": 1 } }, { "fileName": "./d.ts", "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": "CommonJS", "original": { "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": 1 } } @@ -817,14 +853,20 @@ exports.d = d; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -838,14 +880,20 @@ exports.d = d; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -859,21 +907,27 @@ exports.d = d; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } ] ] ], - "size": 3087 + "size": 3291 } tsconfig.json:: @@ -900,7 +954,7 @@ Output:: [HH:MM:SS AM] Building project 'tsconfig.json'... //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.","impliedNodeFormat":1}],"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n","impliedNodeFormat":1}],"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -963,22 +1017,22 @@ Output:: { "fileName": "./c.ts", "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": "CommonJS", "original": { "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": 1 } }, { "fileName": "./d.ts", "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": "CommonJS", "original": { "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": 1 } } @@ -992,14 +1046,20 @@ Output:: "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -1013,14 +1073,20 @@ Output:: "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -1034,7 +1100,7 @@ Output:: 2 ] ], - "size": 2663 + "size": 2799 } tsconfig.json:: @@ -1082,7 +1148,7 @@ Errors Files 1 d.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[[2,17],[3,16],[4,16],[5,16]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[[2,17],[3,16],[4,16],[5,16]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1145,22 +1211,22 @@ Errors Files { "fileName": "./c.ts", "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": "CommonJS", "original": { "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": 1 } }, { "fileName": "./d.ts", "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": "CommonJS", "original": { "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": 1 } } @@ -1177,14 +1243,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -1198,14 +1270,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -1246,7 +1324,7 @@ Errors Files ] ] ], - "size": 2720 + "size": 2856 } tsconfig.json:: @@ -1292,7 +1370,7 @@ Errors Files 1 d.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.","impliedNodeFormat":1}],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[[2,49],[3,48],[4,48],[5,48]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n","impliedNodeFormat":1}],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[[2,49],[3,48],[4,48],[5,48]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1355,22 +1433,22 @@ Errors Files { "fileName": "./c.ts", "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": "CommonJS", "original": { "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": 1 } }, { "fileName": "./d.ts", "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": "CommonJS", "original": { "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": 1 } } @@ -1388,14 +1466,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -1409,14 +1493,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -1457,7 +1547,7 @@ Errors Files ] ] ], - "size": 2742 + "size": 2878 } tsconfig.json:: @@ -1492,7 +1582,7 @@ Output:: Found 1 error in d.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"dc7165893e9c62cfeea6f0fad1d8b57c-export const c = class { public p = 10; };","signature":"17c24c6640bff8629aa96eed43575ace-export declare const c: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.","impliedNodeFormat":1}],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[[2,49],[3,48],[4,49],[5,48]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"dc7165893e9c62cfeea6f0fad1d8b57c-export const c = class { public p = 10; };","signature":"17c24c6640bff8629aa96eed43575ace-export declare const c: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n","impliedNodeFormat":1}],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[[2,49],[3,48],[4,49],[5,48]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1566,11 +1656,11 @@ Found 1 error in d.ts:1 { "fileName": "./d.ts", "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": "CommonJS", "original": { "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": 1 } } @@ -1588,14 +1678,20 @@ Found 1 error in d.ts:1 "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -1636,7 +1732,7 @@ Found 1 error in d.ts:1 ] ] ], - "size": 2318 + "size": 2386 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-incremental-as-modules.js b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-incremental-as-modules.js index 917f58c5..178551a9 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-incremental-as-modules.js +++ b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-incremental-as-modules.js @@ -36,7 +36,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -95,14 +95,20 @@ Found 1 error in a.ts:1 "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -127,7 +133,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1368 + "size": 1420 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -442,7 +448,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -479,12 +485,12 @@ Found 1 error in a.ts:1 { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -513,14 +519,20 @@ Found 1 error in a.ts:1 "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -537,7 +549,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1795 + "size": 1863 } tsconfig.json:: @@ -585,7 +597,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -622,12 +634,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -656,21 +668,27 @@ const a = class { "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1759 + "size": 1827 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-incremental.js b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-incremental.js index 660a979a..184e9459 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-incremental.js +++ b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-with-incremental.js @@ -34,7 +34,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -88,14 +88,20 @@ Found 1 error in a.ts:1 "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -112,7 +118,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1341 + "size": 1393 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -383,7 +389,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -415,12 +421,12 @@ Found 1 error in a.ts:1 { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -438,14 +444,20 @@ Found 1 error in a.ts:1 "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -462,7 +474,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1614 + "size": 1682 } tsconfig.json:: @@ -510,7 +522,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -542,12 +554,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -565,21 +577,27 @@ const a = class { "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1578 + "size": 1646 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js index 89554d56..363e51a4 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js +++ b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js @@ -354,7 +354,7 @@ Output:: [HH:MM:SS AM] Building project 'tsconfig.json'... //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -391,12 +391,12 @@ Output:: { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -418,7 +418,7 @@ Output:: 2 ] ], - "size": 1393 + "size": 1409 } tsconfig.json:: @@ -447,7 +447,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false}} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false}} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -484,12 +484,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -504,7 +504,7 @@ const a = class { "options": { "declaration": false }, - "size": 1362 + "size": 1378 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-without-dts-enabled-with-incremental.js b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-without-dts-enabled-with-incremental.js index 48758133..79155946 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/dts-errors-without-dts-enabled-with-incremental.js +++ b/testdata/baselines/reference/tsbuild/noEmit/dts-errors-without-dts-enabled-with-incremental.js @@ -310,7 +310,7 @@ Output:: [HH:MM:SS AM] Building project 'tsconfig.json'... //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -342,12 +342,12 @@ Output:: { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -363,7 +363,7 @@ Output:: 2 ] ], - "size": 1324 + "size": 1340 } tsconfig.json:: @@ -392,7 +392,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false}} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false}} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -424,12 +424,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -438,7 +438,7 @@ const a = class { "options": { "declaration": false }, - "size": 1293 + "size": 1309 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/semantic-errors-with-incremental-as-modules.js b/testdata/baselines/reference/tsbuild/noEmit/semantic-errors-with-incremental-as-modules.js index c23186cb..f9b0c570 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/semantic-errors-with-incremental-as-modules.js +++ b/testdata/baselines/reference/tsbuild/noEmit/semantic-errors-with-incremental-as-modules.js @@ -32,7 +32,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"a49e791c9509caf97ef39f9e765d5015-export const a: number = \"hello\"","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2,3]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"a49e791c9509caf97ef39f9e765d5015-export const a: number = \"hello\"","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2,3]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -91,7 +91,11 @@ Found 1 error in a.ts:1 "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -108,7 +112,7 @@ Found 1 error in a.ts:1 3 ] ], - "size": 1204 + "size": 1231 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -397,7 +401,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -463,7 +467,11 @@ Found 1 error in a.ts:1 "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -475,7 +483,7 @@ Found 1 error in a.ts:1 2 ] ], - "size": 1327 + "size": 1354 } tsconfig.json:: @@ -510,7 +518,7 @@ Found 1 error in a.ts:1 const a = "hello"; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -576,12 +584,16 @@ const a = "hello"; "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1296 + "size": 1323 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmit/semantic-errors-with-incremental.js b/testdata/baselines/reference/tsbuild/noEmit/semantic-errors-with-incremental.js index c1fa7999..18c846b7 100644 --- a/testdata/baselines/reference/tsbuild/noEmit/semantic-errors-with-incremental.js +++ b/testdata/baselines/reference/tsbuild/noEmit/semantic-errors-with-incremental.js @@ -30,7 +30,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -84,7 +84,11 @@ Found 1 error in a.ts:1 "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -96,7 +100,7 @@ Found 1 error in a.ts:1 2 ] ], - "size": 1184 + "size": 1211 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -353,7 +357,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -408,7 +412,11 @@ Found 1 error in a.ts:1 "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -420,7 +428,7 @@ Found 1 error in a.ts:1 2 ] ], - "size": 1258 + "size": 1285 } tsconfig.json:: @@ -453,7 +461,7 @@ Found 1 error in a.ts:1 //// [/home/src/projects/project/a.js] *rewrite with same content* //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -508,12 +516,16 @@ Found 1 error in a.ts:1 "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1227 + "size": 1254 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmitOnError/dts-errors-with-declaration-with-incremental.js b/testdata/baselines/reference/tsbuild/noEmitOnError/dts-errors-with-declaration-with-incremental.js index 8cd1b339..7eb185e8 100644 --- a/testdata/baselines/reference/tsbuild/noEmitOnError/dts-errors-with-declaration-with-incremental.js +++ b/testdata/baselines/reference/tsbuild/noEmitOnError/dts-errors-with-declaration-with-incremental.js @@ -67,7 +67,7 @@ interface Symbol { } declare const console: { log(msg: any): void; }; //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":53,"end":54,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":53,"end":54,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17],[4,17]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":53,"end":54,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":53,"end":54,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17],[4,17]]} //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -146,14 +146,20 @@ declare const console: { log(msg: any): void; }; "end": 54, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 53, "end": 54, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -186,7 +192,7 @@ declare const console: { log(msg: any): void; }; ] ] ], - "size": 1628 + "size": 1680 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmitOnError/semantic-errors-with-declaration-with-incremental.js b/testdata/baselines/reference/tsbuild/noEmitOnError/semantic-errors-with-declaration-with-incremental.js index d8fdb883..ce4e2c8b 100644 --- a/testdata/baselines/reference/tsbuild/noEmitOnError/semantic-errors-with-declaration-with-incremental.js +++ b/testdata/baselines/reference/tsbuild/noEmitOnError/semantic-errors-with-declaration-with-incremental.js @@ -63,7 +63,7 @@ interface Symbol { } declare const console: { log(msg: any): void; }; //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"affectedFilesPendingEmit":[2,3,4]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[2,3,4]} //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -142,7 +142,11 @@ declare const console: { log(msg: any): void; }; "end": 47, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] @@ -164,7 +168,7 @@ declare const console: { log(msg: any): void; }; 4 ] ], - "size": 1445 + "size": 1472 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/noEmitOnError/semantic-errors-with-incremental.js b/testdata/baselines/reference/tsbuild/noEmitOnError/semantic-errors-with-incremental.js index ffd63e12..bb065a46 100644 --- a/testdata/baselines/reference/tsbuild/noEmitOnError/semantic-errors-with-incremental.js +++ b/testdata/baselines/reference/tsbuild/noEmitOnError/semantic-errors-with-incremental.js @@ -63,7 +63,7 @@ interface Symbol { } declare const console: { log(msg: any): void; }; //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":false,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"affectedFilesPendingEmit":[2,3,4]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":false,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[2,3,4]} //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -142,7 +142,11 @@ declare const console: { log(msg: any): void; }; "end": 47, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] @@ -164,7 +168,7 @@ declare const console: { log(msg: any): void; }; 4 ] ], - "size": 1446 + "size": 1473 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-23-projects-in-a-solution.js b/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-23-projects-in-a-solution.js index 623ffc3b..f5811f29 100644 --- a/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-23-projects-in-a-solution.js +++ b/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-23-projects-in-a-solution.js @@ -4,10 +4,10 @@ Input:: //// [/user/username/projects/myproject/pkg0/index.ts] *new* export const pkg0 = 0; //// [/user/username/projects/myproject/pkg0/tsconfig.json] *new* - { - "compilerOptions": { "composite": true }, +{ + "compilerOptions": { "composite": true }, - } +} //// [/user/username/projects/myproject/pkg1/index.ts] *new* export const pkg1 = 1; //// [/user/username/projects/myproject/pkg1/tsconfig.json] *new* diff --git a/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-3-projects-in-a-solution.js b/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-3-projects-in-a-solution.js index 19eaec41..7750dc36 100644 --- a/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-3-projects-in-a-solution.js +++ b/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-3-projects-in-a-solution.js @@ -4,10 +4,10 @@ Input:: //// [/user/username/projects/myproject/pkg0/index.ts] *new* export const pkg0 = 0; //// [/user/username/projects/myproject/pkg0/tsconfig.json] *new* - { - "compilerOptions": { "composite": true }, +{ + "compilerOptions": { "composite": true }, - } +} //// [/user/username/projects/myproject/pkg1/index.ts] *new* export const pkg1 = 1; //// [/user/username/projects/myproject/pkg1/tsconfig.json] *new* diff --git a/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-5-projects-in-a-solution.js b/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-5-projects-in-a-solution.js index 7e445756..50cbed8e 100644 --- a/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-5-projects-in-a-solution.js +++ b/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-5-projects-in-a-solution.js @@ -4,10 +4,10 @@ Input:: //// [/user/username/projects/myproject/pkg0/index.ts] *new* export const pkg0 = 0; //// [/user/username/projects/myproject/pkg0/tsconfig.json] *new* - { - "compilerOptions": { "composite": true }, +{ + "compilerOptions": { "composite": true }, - } +} //// [/user/username/projects/myproject/pkg1/index.ts] *new* export const pkg1 = 1; //// [/user/username/projects/myproject/pkg1/tsconfig.json] *new* diff --git a/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-8-projects-in-a-solution.js b/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-8-projects-in-a-solution.js index baaf20c9..34b8d6cd 100644 --- a/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-8-projects-in-a-solution.js +++ b/testdata/baselines/reference/tsbuild/projectsBuilding/when-there-are-8-projects-in-a-solution.js @@ -4,10 +4,10 @@ Input:: //// [/user/username/projects/myproject/pkg0/index.ts] *new* export const pkg0 = 0; //// [/user/username/projects/myproject/pkg0/tsconfig.json] *new* - { - "compilerOptions": { "composite": true }, +{ + "compilerOptions": { "composite": true }, - } +} //// [/user/username/projects/myproject/pkg1/index.ts] *new* export const pkg1 = 1; //// [/user/username/projects/myproject/pkg1/tsconfig.json] *new* diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/files-containing-json-file-non-composite.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/files-containing-json-file-non-composite.js index ebb3b8f3..2de0d072 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/files-containing-json-file-non-composite.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/files-containing-json-file-non-composite.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": false, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": false, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "files": [ "src/index.ts", "src/hello.json", ], - } + }, + "files": [ "src/index.ts", "src/hello.json", ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/files-containing-json-file.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/files-containing-json-file.js index 6aeb3992..4d2ffe41 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/files-containing-json-file.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/files-containing-json-file.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": true, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": true, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "files": [ "src/index.ts", "src/hello.json", ], - } + }, + "files": [ "src/index.ts", "src/hello.json", ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-and-files-non-composite.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-and-files-non-composite.js index a066b6fa..a5c35c52 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-and-files-non-composite.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-and-files-non-composite.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": false, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": false, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "files": [ "src/hello.json" ], "include": [ "src/**/*" ], - } + }, + "files": [ "src/hello.json" ], "include": [ "src/**/*" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-and-files.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-and-files.js index 75c1106d..81fcda1a 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-and-files.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-and-files.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": true, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": true, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "files": [ "src/hello.json" ], "include": [ "src/**/*" ], - } + }, + "files": [ "src/hello.json" ], "include": [ "src/**/*" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-and-file-name-matches-ts-file-non-composite.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-and-file-name-matches-ts-file-non-composite.js index b91f4bdf..d7297ab4 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-and-file-name-matches-ts-file-non-composite.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-and-file-name-matches-ts-file-non-composite.js @@ -9,20 +9,20 @@ Input:: import hello from "./index.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": false, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": false, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "include": [ "src/**/*", "src/**/*.json" ], - } + }, + "include": [ "src/**/*", "src/**/*.json" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-and-file-name-matches-ts-file.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-and-file-name-matches-ts-file.js index e809cb4e..e880633a 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-and-file-name-matches-ts-file.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-and-file-name-matches-ts-file.js @@ -9,20 +9,20 @@ Input:: import hello from "./index.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": true, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": true, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "include": [ "src/**/*", "src/**/*.json" ], - } + }, + "include": [ "src/**/*", "src/**/*.json" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-non-composite.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-non-composite.js index 1cec7809..08c03058 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-non-composite.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include-non-composite.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": false, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": false, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "include": [ "src/**/*", "src/**/*.json" ], - } + }, + "include": [ "src/**/*", "src/**/*.json" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include.js index dc8239ed..9a8ea2bf 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-of-json-along-with-other-include.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": true, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": true, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "include": [ "src/**/*", "src/**/*.json" ], - } + }, + "include": [ "src/**/*", "src/**/*.json" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-non-composite.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-non-composite.js index 5bd9751d..5e9ff936 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-non-composite.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-non-composite.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": false, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": false, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "include": [ "src/**/*" ], - } + }, + "include": [ "src/**/*" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-with-json-without-rootDir-but-outside-configDirectory-non-composite.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-with-json-without-rootDir-but-outside-configDirectory-non-composite.js index a872cadd..bc173d2e 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-with-json-without-rootDir-but-outside-configDirectory-non-composite.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-with-json-without-rootDir-but-outside-configDirectory-non-composite.js @@ -9,20 +9,20 @@ Input:: import hello from "../../hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": false, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": false, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "include": [ "src/**/*" ], - } + }, + "include": [ "src/**/*" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-with-json-without-rootDir-but-outside-configDirectory.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-with-json-without-rootDir-but-outside-configDirectory.js index 8a4dc3f7..2f77989c 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-with-json-without-rootDir-but-outside-configDirectory.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-with-json-without-rootDir-but-outside-configDirectory.js @@ -9,20 +9,20 @@ Input:: import hello from "../../hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": true, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": true, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "include": [ "src/**/*" ], - } + }, + "include": [ "src/**/*" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-without-outDir-non-composite.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-without-outDir-non-composite.js index 545fcf8c..eeb98c56 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-without-outDir-non-composite.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-without-outDir-non-composite.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": false, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, +{ + "compilerOptions": { + "composite": false, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, - "skipDefaultLibCheck": true, + "skipDefaultLibCheck": true, - }, - "include": [ "src/**/*" ], - } + }, + "include": [ "src/**/*" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-without-outDir.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-without-outDir.js index 29840e78..8b71bbde 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-without-outDir.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only-without-outDir.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": true, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, +{ + "compilerOptions": { + "composite": true, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, - "skipDefaultLibCheck": true, + "skipDefaultLibCheck": true, - }, - "include": [ "src/**/*" ], - } + }, + "include": [ "src/**/*" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only.js index 75134d2b..64344f15 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/include-only.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": true, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "skipDefaultLibCheck": true, +{ + "compilerOptions": { + "composite": true, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "skipDefaultLibCheck": true, - }, - "include": [ "src/**/*" ], - } + }, + "include": [ "src/**/*" ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: DiagnosticsPresent_OutputsGenerated diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/without-outDir-non-composite.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/without-outDir-non-composite.js index a6a4b93f..2a94e0f6 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/without-outDir-non-composite.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/without-outDir-non-composite.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": false, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, +{ + "compilerOptions": { + "composite": false, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, - "skipDefaultLibCheck": true, + "skipDefaultLibCheck": true, - }, - "files": [ "src/index.ts", "src/hello.json", ], - } + }, + "files": [ "src/index.ts", "src/hello.json", ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/resolveJsonModule/without-outDir.js b/testdata/baselines/reference/tsbuild/resolveJsonModule/without-outDir.js index 01b7cb87..91bb4a9a 100644 --- a/testdata/baselines/reference/tsbuild/resolveJsonModule/without-outDir.js +++ b/testdata/baselines/reference/tsbuild/resolveJsonModule/without-outDir.js @@ -9,20 +9,20 @@ Input:: import hello from "./hello.json" export default hello.hello //// [/home/src/workspaces/solution/project/tsconfig.json] *new* - { - "compilerOptions": { - "composite": true, - "moduleResolution": "node", - "module": "commonjs", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, +{ + "compilerOptions": { + "composite": true, + "moduleResolution": "node", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, - "skipDefaultLibCheck": true, + "skipDefaultLibCheck": true, - }, - "files": [ "src/index.ts", "src/hello.json", ], - } + }, + "files": [ "src/index.ts", "src/hello.json", ], +} tsgo --b project --v --explainFiles --listEmittedFiles ExitStatus:: Success diff --git a/testdata/baselines/reference/tsbuild/sample/builds-downstream-projects-even-if-upstream-projects-have-errors.js b/testdata/baselines/reference/tsbuild/sample/builds-downstream-projects-even-if-upstream-projects-have-errors.js index 0e42fc14..1cc04c94 100644 --- a/testdata/baselines/reference/tsbuild/sample/builds-downstream-projects-even-if-upstream-projects-have-errors.js +++ b/testdata/baselines/reference/tsbuild/sample/builds-downstream-projects-even-if-upstream-projects-have-errors.js @@ -273,7 +273,7 @@ exports.m = mod; //// [/user/username/projects/sample1/logic/index.js.map] *new* {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAY,CAAC,0CAAsB;AACnC,2BAAkC;IAC9B,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AAAA,CACtB;AACD,MAAY,GAAG,kDAA8B;AAChC,QAAA,CAAC,GAAG,GAAG,CAAC"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../core/anotherModule.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"fc70810d80f598d415c6f21c113a400b-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n//# sourceMappingURL=index.d.ts.map","5ef600f6f6585506cfe942fc161e76c5-export declare const World = \"hello\";\n//# sourceMappingURL=anotherModule.d.ts.map",{"version":"4da0a6ee7d4a662685afc8fe143c994d-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.muitply();\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;","signature":"07587a8dc02fb971c487c21dd8f4849b-export declare function getSecondsInDay(): any;\nimport * as mod from '../core/anotherModule';\nexport declare const m: typeof mod;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":85,"end":92,"code":2339,"category":1,"message":"Property 'muitply' does not exist on type 'typeof import(\"/user/username/projects/sample1/core/index\")'."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../core/anotherModule.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"fc70810d80f598d415c6f21c113a400b-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n//# sourceMappingURL=index.d.ts.map","5ef600f6f6585506cfe942fc161e76c5-export declare const World = \"hello\";\n//# sourceMappingURL=anotherModule.d.ts.map",{"version":"4da0a6ee7d4a662685afc8fe143c994d-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.muitply();\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;","signature":"07587a8dc02fb971c487c21dd8f4849b-export declare function getSecondsInDay(): any;\nimport * as mod from '../core/anotherModule';\nexport declare const m: typeof mod;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":85,"end":92,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["muitply","typeof import(\"/user/username/projects/sample1/core/index\")"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -355,13 +355,17 @@ exports.m = mod; "end": 92, "code": 2339, "category": 1, - "message": "Property 'muitply' does not exist on type 'typeof import(\"/user/username/projects/sample1/core/index\")'." + "messageKey": "Property_0_does_not_exist_on_type_1_2339", + "messageArgs": [ + "muitply", + "typeof import(\"/user/username/projects/sample1/core/index\")" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 2070 + "size": 2097 } //// [/user/username/projects/sample1/tests/index.d.ts] *new* import * as mod from '../core/anotherModule'; diff --git a/testdata/baselines/reference/tsbuild/sample/reports-error-if-input-file-is-missing-with-force.js b/testdata/baselines/reference/tsbuild/sample/reports-error-if-input-file-is-missing-with-force.js index 69a3eed6..e706bf4b 100644 --- a/testdata/baselines/reference/tsbuild/sample/reports-error-if-input-file-is-missing-with-force.js +++ b/testdata/baselines/reference/tsbuild/sample/reports-error-if-input-file-is-missing-with-force.js @@ -246,7 +246,7 @@ exports.m = mod; //// [/user/username/projects/sample1/logic/index.js.map] *new* {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAY,CAAC,0CAAsB;AACnC,2BAAkC;IAC9B,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAAA,CAC7B;AACD,MAAY,GAAG,kDAA8B;AAChC,QAAA,CAAC,GAAG,GAAG,CAAC"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../core/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n",{"version":"590556060bc156a64834010df8cda255-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.multiply(10, 15);\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;","signature":"40bb9a18ac3dbfd340fea197221fa9dd-export declare function getSecondsInDay(): number;\nexport declare const m: any;\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":126,"end":149,"code":2307,"category":1,"message":"Cannot find module '../core/anotherModule' or its corresponding type declarations."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../core/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n",{"version":"590556060bc156a64834010df8cda255-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.multiply(10, 15);\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;","signature":"40bb9a18ac3dbfd340fea197221fa9dd-export declare function getSecondsInDay(): number;\nexport declare const m: any;\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":126,"end":149,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["../core/anotherModule"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -319,13 +319,16 @@ exports.m = mod; "end": 149, "code": 2307, "category": 1, - "message": "Cannot find module '../core/anotherModule' or its corresponding type declarations." + "messageKey": "Cannot_find_module_0_or_its_corresponding_type_declarations_2307", + "messageArgs": [ + "../core/anotherModule" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 1818 + "size": 1843 } //// [/user/username/projects/sample1/tests/index.d.ts] *new* export declare const m: any; @@ -375,7 +378,7 @@ const mod = __importStar(require("../core/anotherModule")); exports.m = mod; //// [/user/username/projects/sample1/tests/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../logic/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","40bb9a18ac3dbfd340fea197221fa9dd-export declare function getSecondsInDay(): number;\nexport declare const m: any;\n",{"version":"7fa4162f733e6b9e7f7d9d9410e62f61-import * as c from '../core/index';\nimport * as logic from '../logic/index';\n\nc.leftPad(\"\", 10);\nlogic.getSecondsInDay();\n\nimport * as mod from '../core/anotherModule';\nexport const m = mod;","signature":"ce0233db1f3aabecabdb072a4f4c8d1e-export declare const m: any;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":144,"end":167,"code":2307,"category":1,"message":"Cannot find module '../core/anotherModule' or its corresponding type declarations."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../logic/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","40bb9a18ac3dbfd340fea197221fa9dd-export declare function getSecondsInDay(): number;\nexport declare const m: any;\n",{"version":"7fa4162f733e6b9e7f7d9d9410e62f61-import * as c from '../core/index';\nimport * as logic from '../logic/index';\n\nc.leftPad(\"\", 10);\nlogic.getSecondsInDay();\n\nimport * as mod from '../core/anotherModule';\nexport const m = mod;","signature":"ce0233db1f3aabecabdb072a4f4c8d1e-export declare const m: any;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":144,"end":167,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["../core/anotherModule"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/tests/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -456,13 +459,16 @@ exports.m = mod; "end": 167, "code": 2307, "category": 1, - "message": "Cannot find module '../core/anotherModule' or its corresponding type declarations." + "messageKey": "Cannot_find_module_0_or_its_corresponding_type_declarations_2307", + "messageArgs": [ + "../core/anotherModule" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 1913 + "size": 1938 } core/tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/sample/reports-error-if-input-file-is-missing.js b/testdata/baselines/reference/tsbuild/sample/reports-error-if-input-file-is-missing.js index d546837a..6ebfb68c 100644 --- a/testdata/baselines/reference/tsbuild/sample/reports-error-if-input-file-is-missing.js +++ b/testdata/baselines/reference/tsbuild/sample/reports-error-if-input-file-is-missing.js @@ -246,7 +246,7 @@ exports.m = mod; //// [/user/username/projects/sample1/logic/index.js.map] *new* {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAY,CAAC,0CAAsB;AACnC,2BAAkC;IAC9B,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAAA,CAC7B;AACD,MAAY,GAAG,kDAA8B;AAChC,QAAA,CAAC,GAAG,GAAG,CAAC"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../core/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n",{"version":"590556060bc156a64834010df8cda255-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.multiply(10, 15);\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;","signature":"40bb9a18ac3dbfd340fea197221fa9dd-export declare function getSecondsInDay(): number;\nexport declare const m: any;\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":126,"end":149,"code":2307,"category":1,"message":"Cannot find module '../core/anotherModule' or its corresponding type declarations."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../core/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n",{"version":"590556060bc156a64834010df8cda255-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.multiply(10, 15);\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;","signature":"40bb9a18ac3dbfd340fea197221fa9dd-export declare function getSecondsInDay(): number;\nexport declare const m: any;\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":126,"end":149,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["../core/anotherModule"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -319,13 +319,16 @@ exports.m = mod; "end": 149, "code": 2307, "category": 1, - "message": "Cannot find module '../core/anotherModule' or its corresponding type declarations." + "messageKey": "Cannot_find_module_0_or_its_corresponding_type_declarations_2307", + "messageArgs": [ + "../core/anotherModule" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 1818 + "size": 1843 } //// [/user/username/projects/sample1/tests/index.d.ts] *new* export declare const m: any; @@ -375,7 +378,7 @@ const mod = __importStar(require("../core/anotherModule")); exports.m = mod; //// [/user/username/projects/sample1/tests/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../logic/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","40bb9a18ac3dbfd340fea197221fa9dd-export declare function getSecondsInDay(): number;\nexport declare const m: any;\n",{"version":"7fa4162f733e6b9e7f7d9d9410e62f61-import * as c from '../core/index';\nimport * as logic from '../logic/index';\n\nc.leftPad(\"\", 10);\nlogic.getSecondsInDay();\n\nimport * as mod from '../core/anotherModule';\nexport const m = mod;","signature":"ce0233db1f3aabecabdb072a4f4c8d1e-export declare const m: any;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":144,"end":167,"code":2307,"category":1,"message":"Cannot find module '../core/anotherModule' or its corresponding type declarations."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../logic/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","40bb9a18ac3dbfd340fea197221fa9dd-export declare function getSecondsInDay(): number;\nexport declare const m: any;\n",{"version":"7fa4162f733e6b9e7f7d9d9410e62f61-import * as c from '../core/index';\nimport * as logic from '../logic/index';\n\nc.leftPad(\"\", 10);\nlogic.getSecondsInDay();\n\nimport * as mod from '../core/anotherModule';\nexport const m = mod;","signature":"ce0233db1f3aabecabdb072a4f4c8d1e-export declare const m: any;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":144,"end":167,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["../core/anotherModule"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/tests/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -456,13 +459,16 @@ exports.m = mod; "end": 167, "code": 2307, "category": 1, - "message": "Cannot find module '../core/anotherModule' or its corresponding type declarations." + "messageKey": "Cannot_find_module_0_or_its_corresponding_type_declarations_2307", + "messageArgs": [ + "../core/anotherModule" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 1913 + "size": 1938 } core/tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors-when-test-does-not-reference-core.js b/testdata/baselines/reference/tsbuild/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors-when-test-does-not-reference-core.js index 2a9339f2..d116b0e0 100644 --- a/testdata/baselines/reference/tsbuild/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors-when-test-does-not-reference-core.js +++ b/testdata/baselines/reference/tsbuild/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors-when-test-does-not-reference-core.js @@ -144,7 +144,7 @@ function multiply(a, b) { return a * b; } multiply(); //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"4bf9c557eaa1c988144310898522b7b5-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }multiply();","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":177,"end":185,"code":2554,"category":1,"message":"Expected 2 arguments, but got 0.","relatedInformation":[{"pos":138,"end":147,"code":6210,"category":3,"message":"An argument for 'a' was not provided."}]}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"4bf9c557eaa1c988144310898522b7b5-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }multiply();","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":177,"end":185,"code":2554,"category":1,"messageKey":"Expected_0_arguments_but_got_1_2554","messageArgs":["2","0"],"relatedInformation":[{"pos":138,"end":147,"code":6210,"category":3,"messageKey":"An_argument_for_0_was_not_provided_6210","messageArgs":["a"]}]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -230,14 +230,21 @@ multiply(); "end": 185, "code": 2554, "category": 1, - "message": "Expected 2 arguments, but got 0.", + "messageKey": "Expected_0_arguments_but_got_1_2554", + "messageArgs": [ + "2", + "0" + ], "relatedInformation": [ { "pos": 138, "end": 147, "code": 6210, "category": 3, - "message": "An argument for 'a' was not provided." + "messageKey": "An_argument_for_0_was_not_provided_6210", + "messageArgs": [ + "a" + ] } ] } @@ -245,7 +252,7 @@ multiply(); ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 2078 + "size": 2133 } core/tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors.js b/testdata/baselines/reference/tsbuild/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors.js index 065dec9b..017400f3 100644 --- a/testdata/baselines/reference/tsbuild/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors.js +++ b/testdata/baselines/reference/tsbuild/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors.js @@ -145,7 +145,7 @@ function multiply(a, b) { return a * b; } multiply(); //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"4bf9c557eaa1c988144310898522b7b5-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }multiply();","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":177,"end":185,"code":2554,"category":1,"message":"Expected 2 arguments, but got 0.","relatedInformation":[{"pos":138,"end":147,"code":6210,"category":3,"message":"An argument for 'a' was not provided."}]}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"4bf9c557eaa1c988144310898522b7b5-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }multiply();","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":177,"end":185,"code":2554,"category":1,"messageKey":"Expected_0_arguments_but_got_1_2554","messageArgs":["2","0"],"relatedInformation":[{"pos":138,"end":147,"code":6210,"category":3,"messageKey":"An_argument_for_0_was_not_provided_6210","messageArgs":["a"]}]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -231,14 +231,21 @@ multiply(); "end": 185, "code": 2554, "category": 1, - "message": "Expected 2 arguments, but got 0.", + "messageKey": "Expected_0_arguments_but_got_1_2554", + "messageArgs": [ + "2", + "0" + ], "relatedInformation": [ { "pos": 138, "end": 147, "code": 6210, "category": 3, - "message": "An argument for 'a' was not provided." + "messageKey": "An_argument_for_0_was_not_provided_6210", + "messageArgs": [ + "a" + ] } ] } @@ -246,7 +253,7 @@ multiply(); ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 2078 + "size": 2133 } core/tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuild/transitiveReferences/reports-error-about-module-not-found-with-node-resolution-with-external-module-name.js b/testdata/baselines/reference/tsbuild/transitiveReferences/reports-error-about-module-not-found-with-node-resolution-with-external-module-name.js index 7045a5c3..f89cd02b 100644 --- a/testdata/baselines/reference/tsbuild/transitiveReferences/reports-error-about-module-not-found-with-node-resolution-with-external-module-name.js +++ b/testdata/baselines/reference/tsbuild/transitiveReferences/reports-error-about-module-not-found-with-node-resolution-with-external-module-name.js @@ -185,7 +185,7 @@ a_1.X; "size": 1083 } //// [/user/username/projects/transitiveReferences/tsconfig.b.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.esnext.full.d.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d0c1e70086e2297c6733a209dc8aebd5-import {A} from 'a';\nexport const b = new A();","signature":"5c4caa93805477a2ce78ec8e61b569d7-export declare const b: any;\n","impliedNodeFormat":1}],"options":{"composite":true,"module":199},"semanticDiagnosticsPerFile":[[2,[{"pos":16,"end":19,"code":2307,"category":1,"message":"Cannot find module 'a' or its corresponding type declarations."}]]],"latestChangedDtsFile":"./b.d.ts"} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.esnext.full.d.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d0c1e70086e2297c6733a209dc8aebd5-import {A} from 'a';\nexport const b = new A();","signature":"5c4caa93805477a2ce78ec8e61b569d7-export declare const b: any;\n","impliedNodeFormat":1}],"options":{"composite":true,"module":199},"semanticDiagnosticsPerFile":[[2,[{"pos":16,"end":19,"code":2307,"category":1,"messageKey":"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","messageArgs":["a"]}]]],"latestChangedDtsFile":"./b.d.ts"} //// [/user/username/projects/transitiveReferences/tsconfig.b.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -239,13 +239,16 @@ a_1.X; "end": 19, "code": 2307, "category": 1, - "message": "Cannot find module 'a' or its corresponding type declarations." + "messageKey": "Cannot_find_module_0_or_its_corresponding_type_declarations_2307", + "messageArgs": [ + "a" + ] } ] ] ], "latestChangedDtsFile": "./b.d.ts", - "size": 1296 + "size": 1321 } //// [/user/username/projects/transitiveReferences/tsconfig.c.tsbuildinfo] *new* {"version":"FakeTSVersion","root":["./c.ts"]} diff --git a/testdata/baselines/reference/tsbuildWatch/demo/updates-with-bad-reference.js b/testdata/baselines/reference/tsbuildWatch/demo/updates-with-bad-reference.js index 3fdefa6a..6675258b 100644 --- a/testdata/baselines/reference/tsbuildWatch/demo/updates-with-bad-reference.js +++ b/testdata/baselines/reference/tsbuildWatch/demo/updates-with-bad-reference.js @@ -397,7 +397,7 @@ Object.defineProperty(exports, "createDog", { enumerable: true, get: function () "size": 2794 } //// [/user/username/projects/demo/lib/core/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","errors":true,"root":[5],"fileNames":["lib.d.ts","../../animals/animal.ts","../../animals/dog.ts","../../animals/index.ts","../../core/utilities.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"47f086fff365b1e8b96a6df2c4313c1a-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}","signature":"1d76529d4652ddf9ebdfa65e748240fb-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}\n","impliedNodeFormat":1},{"version":"39dbb9b755eef022e56879989968e5cf-import Animal from '.';\nimport { makeRandomName } from '../core/utilities';\n\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\n\nexport function createDog(): Dog {\n return ({\n size: \"medium\",\n woof: function(this: Dog) {\n console.log(`${ this.name } says \"Woof\"!`);\n },\n name: makeRandomName()\n });\n}","signature":"4dc4bc559452869bfd0d92b5ed5d604f-import Animal from '.';\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\nexport declare function createDog(): Dog;\n","impliedNodeFormat":1},{"version":"d6a6b65b86b0330b1a1bd96b1738d5a4-import Animal from './animal';\n\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };","signature":"a3e41a5ccafc3d07a201f0603e28edcf-import Animal from './animal';\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };\n","impliedNodeFormat":1},{"version":"c71a99e072793c29cda49dd3fea04661-import * as A from '../animals'\nexport function makeRandomName() {\n return \"Bob!?! \";\n}\n\nexport function lastElementOf(arr: T[]): T | undefined {\n if (arr.length === 0) return undefined;\n return arr[arr.length - 1];\n}","signature":"096c311e7aecdb577f7b613fbf1716e5-export declare function makeRandomName(): string;\nexport declare function lastElementOf(arr: T[]): T | undefined;\n","impliedNodeFormat":1}],"fileIdsList":[[4,5],[2,3],[4]],"options":{"composite":true,"declaration":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../../core","strict":true,"target":1},"referencedMap":[[3,1],[4,2],[5,3]],"semanticDiagnosticsPerFile":[[5,[{"pos":12,"end":13,"code":6133,"category":1,"message":"'A' is declared but its value is never read.","reportsUnnecessary":true}]]],"latestChangedDtsFile":"./utilities.d.ts"} +{"version":"FakeTSVersion","errors":true,"root":[5],"fileNames":["lib.d.ts","../../animals/animal.ts","../../animals/dog.ts","../../animals/index.ts","../../core/utilities.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"47f086fff365b1e8b96a6df2c4313c1a-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}","signature":"1d76529d4652ddf9ebdfa65e748240fb-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}\n","impliedNodeFormat":1},{"version":"39dbb9b755eef022e56879989968e5cf-import Animal from '.';\nimport { makeRandomName } from '../core/utilities';\n\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\n\nexport function createDog(): Dog {\n return ({\n size: \"medium\",\n woof: function(this: Dog) {\n console.log(`${ this.name } says \"Woof\"!`);\n },\n name: makeRandomName()\n });\n}","signature":"4dc4bc559452869bfd0d92b5ed5d604f-import Animal from '.';\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\nexport declare function createDog(): Dog;\n","impliedNodeFormat":1},{"version":"d6a6b65b86b0330b1a1bd96b1738d5a4-import Animal from './animal';\n\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };","signature":"a3e41a5ccafc3d07a201f0603e28edcf-import Animal from './animal';\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };\n","impliedNodeFormat":1},{"version":"c71a99e072793c29cda49dd3fea04661-import * as A from '../animals'\nexport function makeRandomName() {\n return \"Bob!?! \";\n}\n\nexport function lastElementOf(arr: T[]): T | undefined {\n if (arr.length === 0) return undefined;\n return arr[arr.length - 1];\n}","signature":"096c311e7aecdb577f7b613fbf1716e5-export declare function makeRandomName(): string;\nexport declare function lastElementOf(arr: T[]): T | undefined;\n","impliedNodeFormat":1}],"fileIdsList":[[4,5],[2,3],[4]],"options":{"composite":true,"declaration":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../../core","strict":true,"target":1},"referencedMap":[[3,1],[4,2],[5,3]],"semanticDiagnosticsPerFile":[[5,[{"pos":12,"end":13,"code":6133,"category":1,"messageKey":"_0_is_declared_but_its_value_is_never_read_6133","messageArgs":["A"],"reportsUnnecessary":true}]]],"latestChangedDtsFile":"./utilities.d.ts"} //// [/user/username/projects/demo/lib/core/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -523,14 +523,17 @@ Object.defineProperty(exports, "createDog", { enumerable: true, get: function () "end": 13, "code": 6133, "category": 1, - "message": "'A' is declared but its value is never read.", + "messageKey": "_0_is_declared_but_its_value_is_never_read_6133", + "messageArgs": [ + "A" + ], "reportsUnnecessary": true } ] ] ], "latestChangedDtsFile": "./utilities.d.ts", - "size": 3302 + "size": 3328 } //// [/user/username/projects/demo/lib/core/utilities.d.ts] *new* export declare function makeRandomName(): string; @@ -764,7 +767,7 @@ Output:: //// [/user/username/projects/demo/lib/animals/tsconfig.tsbuildinfo] *mTime changed* //// [/user/username/projects/demo/lib/core/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","errors":true,"root":[5],"fileNames":["lib.d.ts","../../animals/animal.ts","../../animals/dog.ts","../../animals/index.ts","../../core/utilities.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"47f086fff365b1e8b96a6df2c4313c1a-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}","signature":"1d76529d4652ddf9ebdfa65e748240fb-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}\n","impliedNodeFormat":1},{"version":"39dbb9b755eef022e56879989968e5cf-import Animal from '.';\nimport { makeRandomName } from '../core/utilities';\n\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\n\nexport function createDog(): Dog {\n return ({\n size: \"medium\",\n woof: function(this: Dog) {\n console.log(`${ this.name } says \"Woof\"!`);\n },\n name: makeRandomName()\n });\n}","signature":"4dc4bc559452869bfd0d92b5ed5d604f-import Animal from '.';\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\nexport declare function createDog(): Dog;\n","impliedNodeFormat":1},{"version":"d6a6b65b86b0330b1a1bd96b1738d5a4-import Animal from './animal';\n\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };","signature":"a3e41a5ccafc3d07a201f0603e28edcf-import Animal from './animal';\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };\n","impliedNodeFormat":1},{"version":"c3e46c15bb789df9e21a5ca1964be7a1-\nimport * as A from '../animals'\nexport function makeRandomName() {\n return \"Bob!?! \";\n}\n\nexport function lastElementOf(arr: T[]): T | undefined {\n if (arr.length === 0) return undefined;\n return arr[arr.length - 1];\n}","signature":"096c311e7aecdb577f7b613fbf1716e5-export declare function makeRandomName(): string;\nexport declare function lastElementOf(arr: T[]): T | undefined;\n","impliedNodeFormat":1}],"fileIdsList":[[4,5],[2,3],[4]],"options":{"composite":true,"declaration":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../../core","strict":true,"target":1},"referencedMap":[[3,1],[4,2],[5,3]],"semanticDiagnosticsPerFile":[[5,[{"pos":13,"end":14,"code":6133,"category":1,"message":"'A' is declared but its value is never read.","reportsUnnecessary":true}]]],"latestChangedDtsFile":"./utilities.d.ts"} +{"version":"FakeTSVersion","errors":true,"root":[5],"fileNames":["lib.d.ts","../../animals/animal.ts","../../animals/dog.ts","../../animals/index.ts","../../core/utilities.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"47f086fff365b1e8b96a6df2c4313c1a-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}","signature":"1d76529d4652ddf9ebdfa65e748240fb-export type Size = \"small\" | \"medium\" | \"large\";\nexport default interface Animal {\n size: Size;\n}\n","impliedNodeFormat":1},{"version":"39dbb9b755eef022e56879989968e5cf-import Animal from '.';\nimport { makeRandomName } from '../core/utilities';\n\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\n\nexport function createDog(): Dog {\n return ({\n size: \"medium\",\n woof: function(this: Dog) {\n console.log(`${ this.name } says \"Woof\"!`);\n },\n name: makeRandomName()\n });\n}","signature":"4dc4bc559452869bfd0d92b5ed5d604f-import Animal from '.';\nexport interface Dog extends Animal {\n woof(): void;\n name: string;\n}\nexport declare function createDog(): Dog;\n","impliedNodeFormat":1},{"version":"d6a6b65b86b0330b1a1bd96b1738d5a4-import Animal from './animal';\n\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };","signature":"a3e41a5ccafc3d07a201f0603e28edcf-import Animal from './animal';\nexport default Animal;\nimport { createDog, Dog } from './dog';\nexport { createDog, Dog };\n","impliedNodeFormat":1},{"version":"c3e46c15bb789df9e21a5ca1964be7a1-\nimport * as A from '../animals'\nexport function makeRandomName() {\n return \"Bob!?! \";\n}\n\nexport function lastElementOf(arr: T[]): T | undefined {\n if (arr.length === 0) return undefined;\n return arr[arr.length - 1];\n}","signature":"096c311e7aecdb577f7b613fbf1716e5-export declare function makeRandomName(): string;\nexport declare function lastElementOf(arr: T[]): T | undefined;\n","impliedNodeFormat":1}],"fileIdsList":[[4,5],[2,3],[4]],"options":{"composite":true,"declaration":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../../core","strict":true,"target":1},"referencedMap":[[3,1],[4,2],[5,3]],"semanticDiagnosticsPerFile":[[5,[{"pos":13,"end":14,"code":6133,"category":1,"messageKey":"_0_is_declared_but_its_value_is_never_read_6133","messageArgs":["A"],"reportsUnnecessary":true}]]],"latestChangedDtsFile":"./utilities.d.ts"} //// [/user/username/projects/demo/lib/core/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -890,14 +893,17 @@ Output:: "end": 14, "code": 6133, "category": 1, - "message": "'A' is declared but its value is never read.", + "messageKey": "_0_is_declared_but_its_value_is_never_read_6133", + "messageArgs": [ + "A" + ], "reportsUnnecessary": true } ] ] ], "latestChangedDtsFile": "./utilities.d.ts", - "size": 3304 + "size": 3330 } //// [/user/username/projects/demo/lib/core/utilities.js] *rewrite with same content* diff --git a/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-with-incremental-as-modules.js b/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-with-incremental-as-modules.js index 2f795e41..6876112d 100644 --- a/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-with-incremental-as-modules.js +++ b/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-with-incremental-as-modules.js @@ -37,7 +37,7 @@ Output:: [HH:MM:SS AM] Found 1 error. Watching for file changes. //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -96,14 +96,20 @@ Output:: "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -128,7 +134,7 @@ Output:: ] ] ], - "size": 1368 + "size": 1420 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -431,7 +437,7 @@ Output:: [HH:MM:SS AM] Found 1 error. Watching for file changes. //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -468,12 +474,12 @@ Output:: { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -502,14 +508,20 @@ Output:: "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -526,7 +538,7 @@ Output:: ] ] ], - "size": 1795 + "size": 1863 } tsconfig.json:: @@ -581,7 +593,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -618,12 +630,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -652,21 +664,27 @@ const a = class { "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1759 + "size": 1827 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-with-incremental.js b/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-with-incremental.js index 516fd956..a27cc11a 100644 --- a/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-with-incremental.js +++ b/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-with-incremental.js @@ -35,7 +35,7 @@ Output:: [HH:MM:SS AM] Found 1 error. Watching for file changes. //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -89,14 +89,20 @@ Output:: "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -113,7 +119,7 @@ Output:: ] ] ], - "size": 1341 + "size": 1393 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -372,7 +378,7 @@ Output:: [HH:MM:SS AM] Found 1 error. Watching for file changes. //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -404,12 +410,12 @@ Output:: { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -427,14 +433,20 @@ Output:: "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -451,7 +463,7 @@ Output:: ] ] ], - "size": 1614 + "size": 1682 } tsconfig.json:: @@ -506,7 +518,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -538,12 +550,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -561,21 +573,27 @@ const a = class { "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1578 + "size": 1646 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js b/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js index 89195e93..7dba74d3 100644 --- a/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js +++ b/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js @@ -366,7 +366,7 @@ Output:: [HH:MM:SS AM] Found 0 errors. Watching for file changes. //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -403,12 +403,12 @@ Output:: { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -430,7 +430,7 @@ Output:: 2 ] ], - "size": 1393 + "size": 1409 } tsconfig.json:: @@ -469,7 +469,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false}} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false}} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -506,12 +506,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -526,7 +526,7 @@ const a = class { "options": { "declaration": false }, - "size": 1362 + "size": 1378 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-without-dts-enabled-with-incremental.js b/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-without-dts-enabled-with-incremental.js index 48624d3c..328ce0ff 100644 --- a/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-without-dts-enabled-with-incremental.js +++ b/testdata/baselines/reference/tsbuildWatch/noEmit/dts-errors-without-dts-enabled-with-incremental.js @@ -322,7 +322,7 @@ Output:: [HH:MM:SS AM] Found 0 errors. Watching for file changes. //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -354,12 +354,12 @@ Output:: { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -375,7 +375,7 @@ Output:: 2 ] ], - "size": 1324 + "size": 1340 } tsconfig.json:: @@ -414,7 +414,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false}} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false}} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -446,12 +446,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -460,7 +460,7 @@ const a = class { "options": { "declaration": false }, - "size": 1293 + "size": 1309 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/noEmit/semantic-errors-with-incremental-as-modules.js b/testdata/baselines/reference/tsbuildWatch/noEmit/semantic-errors-with-incremental-as-modules.js index 24ed8939..fd99d49c 100644 --- a/testdata/baselines/reference/tsbuildWatch/noEmit/semantic-errors-with-incremental-as-modules.js +++ b/testdata/baselines/reference/tsbuildWatch/noEmit/semantic-errors-with-incremental-as-modules.js @@ -33,7 +33,7 @@ Output:: [HH:MM:SS AM] Found 1 error. Watching for file changes. //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"a49e791c9509caf97ef39f9e765d5015-export const a: number = \"hello\"","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2,3]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"a49e791c9509caf97ef39f9e765d5015-export const a: number = \"hello\"","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2,3]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -92,7 +92,11 @@ Output:: "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -109,7 +113,7 @@ Output:: 3 ] ], - "size": 1204 + "size": 1231 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -390,7 +394,7 @@ Output:: [HH:MM:SS AM] Found 1 error. Watching for file changes. //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -456,7 +460,11 @@ Output:: "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -468,7 +476,7 @@ Output:: 2 ] ], - "size": 1327 + "size": 1354 } tsconfig.json:: @@ -510,7 +518,7 @@ Output:: const a = "hello"; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -576,12 +584,16 @@ const a = "hello"; "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1296 + "size": 1323 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/noEmit/semantic-errors-with-incremental.js b/testdata/baselines/reference/tsbuildWatch/noEmit/semantic-errors-with-incremental.js index 1fbba049..acbe0c4e 100644 --- a/testdata/baselines/reference/tsbuildWatch/noEmit/semantic-errors-with-incremental.js +++ b/testdata/baselines/reference/tsbuildWatch/noEmit/semantic-errors-with-incremental.js @@ -31,7 +31,7 @@ Output:: [HH:MM:SS AM] Found 1 error. Watching for file changes. //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -85,7 +85,11 @@ Output:: "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -97,7 +101,7 @@ Output:: 2 ] ], - "size": 1184 + "size": 1211 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -346,7 +350,7 @@ Output:: [HH:MM:SS AM] Found 1 error. Watching for file changes. //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -401,7 +405,11 @@ Output:: "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -413,7 +421,7 @@ Output:: 2 ] ], - "size": 1258 + "size": 1285 } tsconfig.json:: @@ -453,7 +461,7 @@ Output:: //// [/home/src/projects/project/a.js] *rewrite with same content* //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -508,12 +516,16 @@ Output:: "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1227 + "size": 1254 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/noEmitOnError/noEmitOnError-with-declaration-with-incremental.js b/testdata/baselines/reference/tsbuildWatch/noEmitOnError/noEmitOnError-with-declaration-with-incremental.js index 11b28b91..c5281c07 100644 --- a/testdata/baselines/reference/tsbuildWatch/noEmitOnError/noEmitOnError-with-declaration-with-incremental.js +++ b/testdata/baselines/reference/tsbuildWatch/noEmitOnError/noEmitOnError-with-declaration-with-incremental.js @@ -395,7 +395,7 @@ Output:: [HH:MM:SS AM] Found 1 error. Watching for file changes. //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","signature":"54943827690173f946e7a76cd9b9eb27-export interface A {\n name: string;\n}\n","impliedNodeFormat":1},{"version":"21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"affectedFilesPendingEmit":[3]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","signature":"54943827690173f946e7a76cd9b9eb27-export interface A {\n name: string;\n}\n","impliedNodeFormat":1},{"version":"21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[3]} //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -489,7 +489,11 @@ Output:: "end": 47, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] @@ -501,7 +505,7 @@ Output:: 3 ] ], - "size": 1755 + "size": 1782 } tsconfig.json:: @@ -706,7 +710,7 @@ Output:: [HH:MM:SS AM] Found 1 error. Watching for file changes. //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","signature":"54943827690173f946e7a76cd9b9eb27-export interface A {\n name: string;\n}\n","impliedNodeFormat":1},{"version":"6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };","signature":"86ced526ce468674cf13e9bae78ff450-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(53,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":53,"end":54,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":53,"end":54,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[3,17]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","signature":"54943827690173f946e7a76cd9b9eb27-export interface A {\n name: string;\n}\n","impliedNodeFormat":1},{"version":"6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };","signature":"562dfe29cab6c7ded7ded341fc9c8131-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(53,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":53,"end":54,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":53,"end":54,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[3,17]]} //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -756,11 +760,11 @@ Output:: { "fileName": "../src/main.ts", "version": "6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };", - "signature": "86ced526ce468674cf13e9bae78ff450-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(53,1): error9027: Add a type annotation to the variable a.", + "signature": "562dfe29cab6c7ded7ded341fc9c8131-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(53,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };", - "signature": "86ced526ce468674cf13e9bae78ff450-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(53,1): error9027: Add a type annotation to the variable a.", + "signature": "562dfe29cab6c7ded7ded341fc9c8131-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(53,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -800,14 +804,20 @@ Output:: "end": 54, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 53, "end": 54, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -824,7 +834,7 @@ Output:: ] ] ], - "size": 2150 + "size": 2218 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/noEmitOnError/noEmitOnError-with-incremental.js b/testdata/baselines/reference/tsbuildWatch/noEmitOnError/noEmitOnError-with-incremental.js index 2e165e22..a038e531 100644 --- a/testdata/baselines/reference/tsbuildWatch/noEmitOnError/noEmitOnError-with-incremental.js +++ b/testdata/baselines/reference/tsbuildWatch/noEmitOnError/noEmitOnError-with-incremental.js @@ -372,7 +372,7 @@ Output:: [HH:MM:SS AM] Found 1 error. Watching for file changes. //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}",{"version":"21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},"ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":false,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"affectedFilesPendingEmit":[3]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}",{"version":"21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},"ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":false,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[3]} //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -456,7 +456,11 @@ Output:: "end": 47, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] @@ -468,7 +472,7 @@ Output:: 3 ] ], - "size": 1536 + "size": 1563 } tsconfig.json:: @@ -662,7 +666,7 @@ const a = class { exports.a = a; //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}",{"version":"6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };","signature":"86ced526ce468674cf13e9bae78ff450-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(53,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},"ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":false,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}",{"version":"6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };","signature":"562dfe29cab6c7ded7ded341fc9c8131-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(53,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},"ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":false,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]]} //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -707,11 +711,11 @@ exports.a = a; { "fileName": "../src/main.ts", "version": "6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };", - "signature": "86ced526ce468674cf13e9bae78ff450-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(53,1): error9027: Add a type annotation to the variable a.", + "signature": "562dfe29cab6c7ded7ded341fc9c8131-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(53,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };", - "signature": "86ced526ce468674cf13e9bae78ff450-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(53,1): error9027: Add a type annotation to the variable a.", + "signature": "562dfe29cab6c7ded7ded341fc9c8131-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(53,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(53,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -737,7 +741,7 @@ exports.a = a; "../shared/types/db.ts" ] }, - "size": 1605 + "size": 1621 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-introduceError-when-file-with-no-error-changes.js b/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-introduceError-when-file-with-no-error-changes.js index 100bdbf0..66b738a1 100644 --- a/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-introduceError-when-file-with-no-error-changes.js +++ b/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-introduceError-when-file-with-no-error-changes.js @@ -2,10 +2,10 @@ currentDirectory::/user/username/projects/solution useCaseSensitiveFileNames::true Input:: //// [/user/username/projects/solution/app/fileWithError.ts] *new* - export var myClassWithError = class { - tags() { } +export var myClassWithError = class { + tags() { } - }; +}; //// [/user/username/projects/solution/app/fileWithoutError.ts] *new* export class myClass { } //// [/user/username/projects/solution/app/tsconfig.json] *new* @@ -74,7 +74,7 @@ class myClass { exports.myClass = myClass; //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d4354dbd4fafaa0ad3a5b65966837613- export var myClassWithError = class {\n tags() { }\n\n };","signature":"767d370715ef9e7e7e190b09dbf6cb11-export declare var myClassWithError: {\n new (): {\n tags(): void;\n };\n};\n","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"latestChangedDtsFile":"./fileWithoutError.d.ts"} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"037c56906f2b733e17b4a0bfeb8ada65-export var myClassWithError = class {\n tags() { }\n\n};","signature":"767d370715ef9e7e7e190b09dbf6cb11-export declare var myClassWithError: {\n new (): {\n tags(): void;\n };\n};\n","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"latestChangedDtsFile":"./fileWithoutError.d.ts"} //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -110,11 +110,11 @@ exports.myClass = myClass; }, { "fileName": "./fileWithError.ts", - "version": "d4354dbd4fafaa0ad3a5b65966837613- export var myClassWithError = class {\n tags() { }\n\n };", + "version": "037c56906f2b733e17b4a0bfeb8ada65-export var myClassWithError = class {\n tags() { }\n\n};", "signature": "767d370715ef9e7e7e190b09dbf6cb11-export declare var myClassWithError: {\n new (): {\n tags(): void;\n };\n};\n", "impliedNodeFormat": "CommonJS", "original": { - "version": "d4354dbd4fafaa0ad3a5b65966837613- export var myClassWithError = class {\n tags() { }\n\n };", + "version": "037c56906f2b733e17b4a0bfeb8ada65-export var myClassWithError = class {\n tags() { }\n\n};", "signature": "767d370715ef9e7e7e190b09dbf6cb11-export declare var myClassWithError: {\n new (): {\n tags(): void;\n };\n};\n", "impliedNodeFormat": 1 } @@ -135,7 +135,7 @@ exports.myClass = myClass; "composite": true }, "latestChangedDtsFile": "./fileWithoutError.d.ts", - "size": 1460 + "size": 1418 } app/tsconfig.json:: @@ -189,7 +189,7 @@ var myClassWithError = class { exports.myClassWithError = myClassWithError; //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"message":"Add a type annotation to the variable myClassWithError."}]}]]],"latestChangedDtsFile":"./fileWithError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["myClassWithError"]}]}]]],"latestChangedDtsFile":"./fileWithError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -226,11 +226,11 @@ exports.myClassWithError = myClassWithError; { "fileName": "./fileWithError.ts", "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": "CommonJS", "original": { "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": 1 } }, @@ -258,14 +258,20 @@ exports.myClassWithError = myClassWithError; "end": 27, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 11, "end": 27, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable myClassWithError." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "myClassWithError" + ] } ] } @@ -283,7 +289,7 @@ exports.myClassWithError = myClassWithError; ] } ], - "size": 2104 + "size": 2172 } app/tsconfig.json:: @@ -325,7 +331,7 @@ class myClass2 { exports.myClass2 = myClass2; //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.","impliedNodeFormat":1},{"version":"4494620e0f3a6379be16c2477b86b919-export class myClass2 { }","signature":"cdd06be46566b8da2e1a2b5b161ff551-export declare class myClass2 {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"message":"Add a type annotation to the variable myClassWithError."}]}]]],"latestChangedDtsFile":"./fileWithoutError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n","impliedNodeFormat":1},{"version":"4494620e0f3a6379be16c2477b86b919-export class myClass2 { }","signature":"cdd06be46566b8da2e1a2b5b161ff551-export declare class myClass2 {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["myClassWithError"]}]}]]],"latestChangedDtsFile":"./fileWithoutError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -362,11 +368,11 @@ exports.myClass2 = myClass2; { "fileName": "./fileWithError.ts", "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": "CommonJS", "original": { "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": 1 } }, @@ -394,14 +400,20 @@ exports.myClass2 = myClass2; "end": 27, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 11, "end": 27, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable myClassWithError." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "myClassWithError" + ] } ] } @@ -419,7 +431,7 @@ exports.myClass2 = myClass2; ] } ], - "size": 2109 + "size": 2177 } app/tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-introduceError-when-fixing-errors-only-changed-file-is-emitted.js b/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-introduceError-when-fixing-errors-only-changed-file-is-emitted.js index a1c5d40a..2225d72b 100644 --- a/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-introduceError-when-fixing-errors-only-changed-file-is-emitted.js +++ b/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-introduceError-when-fixing-errors-only-changed-file-is-emitted.js @@ -2,10 +2,10 @@ currentDirectory::/user/username/projects/solution useCaseSensitiveFileNames::true Input:: //// [/user/username/projects/solution/app/fileWithError.ts] *new* - export var myClassWithError = class { - tags() { } +export var myClassWithError = class { + tags() { } - }; +}; //// [/user/username/projects/solution/app/fileWithoutError.ts] *new* export class myClass { } //// [/user/username/projects/solution/app/tsconfig.json] *new* @@ -74,7 +74,7 @@ class myClass { exports.myClass = myClass; //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d4354dbd4fafaa0ad3a5b65966837613- export var myClassWithError = class {\n tags() { }\n\n };","signature":"767d370715ef9e7e7e190b09dbf6cb11-export declare var myClassWithError: {\n new (): {\n tags(): void;\n };\n};\n","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"latestChangedDtsFile":"./fileWithoutError.d.ts"} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"037c56906f2b733e17b4a0bfeb8ada65-export var myClassWithError = class {\n tags() { }\n\n};","signature":"767d370715ef9e7e7e190b09dbf6cb11-export declare var myClassWithError: {\n new (): {\n tags(): void;\n };\n};\n","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"latestChangedDtsFile":"./fileWithoutError.d.ts"} //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -110,11 +110,11 @@ exports.myClass = myClass; }, { "fileName": "./fileWithError.ts", - "version": "d4354dbd4fafaa0ad3a5b65966837613- export var myClassWithError = class {\n tags() { }\n\n };", + "version": "037c56906f2b733e17b4a0bfeb8ada65-export var myClassWithError = class {\n tags() { }\n\n};", "signature": "767d370715ef9e7e7e190b09dbf6cb11-export declare var myClassWithError: {\n new (): {\n tags(): void;\n };\n};\n", "impliedNodeFormat": "CommonJS", "original": { - "version": "d4354dbd4fafaa0ad3a5b65966837613- export var myClassWithError = class {\n tags() { }\n\n };", + "version": "037c56906f2b733e17b4a0bfeb8ada65-export var myClassWithError = class {\n tags() { }\n\n};", "signature": "767d370715ef9e7e7e190b09dbf6cb11-export declare var myClassWithError: {\n new (): {\n tags(): void;\n };\n};\n", "impliedNodeFormat": 1 } @@ -135,7 +135,7 @@ exports.myClass = myClass; "composite": true }, "latestChangedDtsFile": "./fileWithoutError.d.ts", - "size": 1460 + "size": 1418 } app/tsconfig.json:: @@ -189,7 +189,7 @@ var myClassWithError = class { exports.myClassWithError = myClassWithError; //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"message":"Add a type annotation to the variable myClassWithError."}]}]]],"latestChangedDtsFile":"./fileWithError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["myClassWithError"]}]}]]],"latestChangedDtsFile":"./fileWithError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -226,11 +226,11 @@ exports.myClassWithError = myClassWithError; { "fileName": "./fileWithError.ts", "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": "CommonJS", "original": { "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": 1 } }, @@ -258,14 +258,20 @@ exports.myClassWithError = myClassWithError; "end": 27, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 11, "end": 27, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable myClassWithError." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "myClassWithError" + ] } ] } @@ -283,7 +289,7 @@ exports.myClassWithError = myClassWithError; ] } ], - "size": 2104 + "size": 2172 } app/tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-when-file-with-no-error-changes.js b/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-when-file-with-no-error-changes.js index 238dfdeb..6b2d679c 100644 --- a/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-when-file-with-no-error-changes.js +++ b/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-when-file-with-no-error-changes.js @@ -85,7 +85,7 @@ class myClass { exports.myClass = myClass; //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"message":"Add a type annotation to the variable myClassWithError."}]}]]],"latestChangedDtsFile":"./fileWithoutError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["myClassWithError"]}]}]]],"latestChangedDtsFile":"./fileWithoutError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -122,11 +122,11 @@ exports.myClass = myClass; { "fileName": "./fileWithError.ts", "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": "CommonJS", "original": { "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": 1 } }, @@ -154,14 +154,20 @@ exports.myClass = myClass; "end": 27, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 11, "end": 27, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable myClassWithError." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "myClassWithError" + ] } ] } @@ -179,7 +185,7 @@ exports.myClass = myClass; ] } ], - "size": 2107 + "size": 2175 } app/tsconfig.json:: @@ -224,7 +230,7 @@ class myClass2 { exports.myClass2 = myClass2; //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.","impliedNodeFormat":1},{"version":"4494620e0f3a6379be16c2477b86b919-export class myClass2 { }","signature":"cdd06be46566b8da2e1a2b5b161ff551-export declare class myClass2 {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"message":"Add a type annotation to the variable myClassWithError."}]}]]],"latestChangedDtsFile":"./fileWithoutError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n","impliedNodeFormat":1},{"version":"4494620e0f3a6379be16c2477b86b919-export class myClass2 { }","signature":"cdd06be46566b8da2e1a2b5b161ff551-export declare class myClass2 {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["myClassWithError"]}]}]]],"latestChangedDtsFile":"./fileWithoutError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -261,11 +267,11 @@ exports.myClass2 = myClass2; { "fileName": "./fileWithError.ts", "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": "CommonJS", "original": { "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": 1 } }, @@ -293,14 +299,20 @@ exports.myClass2 = myClass2; "end": 27, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 11, "end": 27, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable myClassWithError." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "myClassWithError" + ] } ] } @@ -318,7 +330,7 @@ exports.myClass2 = myClass2; ] } ], - "size": 2109 + "size": 2177 } app/tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-when-fixing-error-files-all-files-are-emitted.js b/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-when-fixing-error-files-all-files-are-emitted.js index 14e00b8d..c62dcd47 100644 --- a/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-when-fixing-error-files-all-files-are-emitted.js +++ b/testdata/baselines/reference/tsbuildWatch/programUpdates/declarationEmitErrors-when-fixing-error-files-all-files-are-emitted.js @@ -85,7 +85,7 @@ class myClass { exports.myClass = myClass; //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"message":"Add a type annotation to the variable myClassWithError."}]}]]],"latestChangedDtsFile":"./fileWithoutError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./fileWithError.ts","./fileWithoutError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};","signature":"0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n","impliedNodeFormat":1},{"version":"181818468a51a2348d25d30b10b6b1bb-export class myClass { }","signature":"00d3ac9a4cccbf94649ca3c19d44376a-export declare class myClass {\n}\n","impliedNodeFormat":1}],"options":{"composite":true},"emitDiagnosticsPerFile":[[2,[{"pos":11,"end":27,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":11,"end":27,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["myClassWithError"]}]}]]],"latestChangedDtsFile":"./fileWithoutError.d.ts","emitSignatures":[[2,"b73b369b8f252d3d9d6dcbf326b8e0e8-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n"]]} //// [/user/username/projects/solution/app/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -122,11 +122,11 @@ exports.myClass = myClass; { "fileName": "./fileWithError.ts", "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": "CommonJS", "original": { "version": "02dc54a766c51fbc368b69a386e90b57-export var myClassWithError = class {\n tags() { }\n private p = 12\n};", - "signature": "4763ea6446bf27424942ef44caadabed-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(11,16): error9027: Add a type annotation to the variable myClassWithError.", + "signature": "0db97697d9203901ca9117430d4f5be9-export declare var myClassWithError: {\n new (): {\n tags(): void;\n p: number;\n };\n};\n\n(11,16): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(11,16): error9027: Add_a_type_annotation_to_the_variable_0_9027\nmyClassWithError\n", "impliedNodeFormat": 1 } }, @@ -154,14 +154,20 @@ exports.myClass = myClass; "end": 27, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 11, "end": 27, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable myClassWithError." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "myClassWithError" + ] } ] } @@ -179,7 +185,7 @@ exports.myClass = myClass; ] } ], - "size": 2107 + "size": 2175 } app/tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-23-projects-in-a-solution.js b/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-23-projects-in-a-solution.js index 439e6d0f..f15526f6 100644 --- a/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-23-projects-in-a-solution.js +++ b/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-23-projects-in-a-solution.js @@ -4,10 +4,10 @@ Input:: //// [/user/username/projects/myproject/pkg0/index.ts] *new* export const pkg0 = 0; //// [/user/username/projects/myproject/pkg0/tsconfig.json] *new* - { - "compilerOptions": { "composite": true }, +{ + "compilerOptions": { "composite": true }, - } +} //// [/user/username/projects/myproject/pkg1/index.ts] *new* export const pkg1 = 1; //// [/user/username/projects/myproject/pkg1/tsconfig.json] *new* diff --git a/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-3-projects-in-a-solution.js b/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-3-projects-in-a-solution.js index e5ed697e..1f77cdb7 100644 --- a/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-3-projects-in-a-solution.js +++ b/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-3-projects-in-a-solution.js @@ -4,10 +4,10 @@ Input:: //// [/user/username/projects/myproject/pkg0/index.ts] *new* export const pkg0 = 0; //// [/user/username/projects/myproject/pkg0/tsconfig.json] *new* - { - "compilerOptions": { "composite": true }, +{ + "compilerOptions": { "composite": true }, - } +} //// [/user/username/projects/myproject/pkg1/index.ts] *new* export const pkg1 = 1; //// [/user/username/projects/myproject/pkg1/tsconfig.json] *new* diff --git a/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-5-projects-in-a-solution.js b/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-5-projects-in-a-solution.js index edb535d0..ac208612 100644 --- a/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-5-projects-in-a-solution.js +++ b/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-5-projects-in-a-solution.js @@ -4,10 +4,10 @@ Input:: //// [/user/username/projects/myproject/pkg0/index.ts] *new* export const pkg0 = 0; //// [/user/username/projects/myproject/pkg0/tsconfig.json] *new* - { - "compilerOptions": { "composite": true }, +{ + "compilerOptions": { "composite": true }, - } +} //// [/user/username/projects/myproject/pkg1/index.ts] *new* export const pkg1 = 1; //// [/user/username/projects/myproject/pkg1/tsconfig.json] *new* diff --git a/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-8-projects-in-a-solution.js b/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-8-projects-in-a-solution.js index 53b176f5..75a250ca 100644 --- a/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-8-projects-in-a-solution.js +++ b/testdata/baselines/reference/tsbuildWatch/projectsBuilding/when-there-are-8-projects-in-a-solution.js @@ -4,10 +4,10 @@ Input:: //// [/user/username/projects/myproject/pkg0/index.ts] *new* export const pkg0 = 0; //// [/user/username/projects/myproject/pkg0/tsconfig.json] *new* - { - "compilerOptions": { "composite": true }, +{ + "compilerOptions": { "composite": true }, - } +} //// [/user/username/projects/myproject/pkg1/index.ts] *new* export const pkg1 = 1; //// [/user/username/projects/myproject/pkg1/tsconfig.json] *new* diff --git a/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-preserveWatchOutput-is-not-used.js b/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-preserveWatchOutput-is-not-used.js index 52aaf107..fe4f5e88 100644 --- a/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-preserveWatchOutput-is-not-used.js +++ b/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-preserveWatchOutput-is-not-used.js @@ -568,7 +568,7 @@ let y = 10; //// [/user/username/projects/sample1/logic/index.js.map] *modified* {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAY,CAAC,0CAAsB;AACnC,2BAAkC;IAC9B,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAAA,CAC7B;AACD,MAAY,GAAG,kDAA8B;AAChC,QAAA,CAAC,GAAG,GAAG,CAAC;AACrB,IAAI,CAAC,GAAW,EAAE,CAAC"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../core/anotherModule.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"fc70810d80f598d415c6f21c113a400b-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n//# sourceMappingURL=index.d.ts.map","5ef600f6f6585506cfe942fc161e76c5-export declare const World = \"hello\";\n//# sourceMappingURL=anotherModule.d.ts.map",{"version":"3abed61bf6897ffa70a069303f7ee37f-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.multiply(10, 15);\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;\nlet y: string = 10;","signature":"487f7216384ec40e22ff7dc40c01be4b-export declare function getSecondsInDay(): number;\nimport * as mod from '../core/anotherModule';\nexport declare const m: typeof mod;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":177,"end":178,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../core/anotherModule.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"fc70810d80f598d415c6f21c113a400b-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n//# sourceMappingURL=index.d.ts.map","5ef600f6f6585506cfe942fc161e76c5-export declare const World = \"hello\";\n//# sourceMappingURL=anotherModule.d.ts.map",{"version":"3abed61bf6897ffa70a069303f7ee37f-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.multiply(10, 15);\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;\nlet y: string = 10;","signature":"487f7216384ec40e22ff7dc40c01be4b-export declare function getSecondsInDay(): number;\nimport * as mod from '../core/anotherModule';\nexport declare const m: typeof mod;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":177,"end":178,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -650,13 +650,17 @@ let y = 10; "end": 178, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 2046 + "size": 2073 } //// [/user/username/projects/sample1/tests/tsconfig.tsbuildinfo] *mTime changed* @@ -703,7 +707,7 @@ function multiply(a, b) { return a * b; } let x = 10; //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"bd46ecaf1bd821bbf62f3d94c22c2a57-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }\nlet x: string = 10;","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":182,"end":183,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"bd46ecaf1bd821bbf62f3d94c22c2a57-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }\nlet x: string = 10;","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":182,"end":183,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -789,13 +793,17 @@ let x = 10; "end": 183, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 1985 + "size": 2012 } //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo] *mTime changed* //// [/user/username/projects/sample1/tests/tsconfig.tsbuildinfo] *mTime changed* diff --git a/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-preserveWatchOutput-is-passed-on-command-line.js b/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-preserveWatchOutput-is-passed-on-command-line.js index 34661be2..17d1ed8a 100644 --- a/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-preserveWatchOutput-is-passed-on-command-line.js +++ b/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-preserveWatchOutput-is-passed-on-command-line.js @@ -568,7 +568,7 @@ let y = 10; //// [/user/username/projects/sample1/logic/index.js.map] *modified* {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAY,CAAC,0CAAsB;AACnC,2BAAkC;IAC9B,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAAA,CAC7B;AACD,MAAY,GAAG,kDAA8B;AAChC,QAAA,CAAC,GAAG,GAAG,CAAC;AACrB,IAAI,CAAC,GAAW,EAAE,CAAC"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../core/anotherModule.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"fc70810d80f598d415c6f21c113a400b-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n//# sourceMappingURL=index.d.ts.map","5ef600f6f6585506cfe942fc161e76c5-export declare const World = \"hello\";\n//# sourceMappingURL=anotherModule.d.ts.map",{"version":"3abed61bf6897ffa70a069303f7ee37f-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.multiply(10, 15);\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;\nlet y: string = 10;","signature":"487f7216384ec40e22ff7dc40c01be4b-export declare function getSecondsInDay(): number;\nimport * as mod from '../core/anotherModule';\nexport declare const m: typeof mod;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":177,"end":178,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../core/anotherModule.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"fc70810d80f598d415c6f21c113a400b-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n//# sourceMappingURL=index.d.ts.map","5ef600f6f6585506cfe942fc161e76c5-export declare const World = \"hello\";\n//# sourceMappingURL=anotherModule.d.ts.map",{"version":"3abed61bf6897ffa70a069303f7ee37f-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.multiply(10, 15);\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;\nlet y: string = 10;","signature":"487f7216384ec40e22ff7dc40c01be4b-export declare function getSecondsInDay(): number;\nimport * as mod from '../core/anotherModule';\nexport declare const m: typeof mod;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":177,"end":178,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -650,13 +650,17 @@ let y = 10; "end": 178, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 2046 + "size": 2073 } //// [/user/username/projects/sample1/tests/tsconfig.tsbuildinfo] *mTime changed* @@ -703,7 +707,7 @@ function multiply(a, b) { return a * b; } let x = 10; //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"bd46ecaf1bd821bbf62f3d94c22c2a57-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }\nlet x: string = 10;","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":182,"end":183,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"bd46ecaf1bd821bbf62f3d94c22c2a57-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }\nlet x: string = 10;","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":182,"end":183,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -789,13 +793,17 @@ let x = 10; "end": 183, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 1985 + "size": 2012 } //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo] *mTime changed* //// [/user/username/projects/sample1/tests/tsconfig.tsbuildinfo] *mTime changed* diff --git a/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-stopBuildOnErrors-is-passed-on-command-line.js b/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-stopBuildOnErrors-is-passed-on-command-line.js index f39b6163..620473bc 100644 --- a/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-stopBuildOnErrors-is-passed-on-command-line.js +++ b/testdata/baselines/reference/tsbuildWatch/sample/reportErrors-when-stopBuildOnErrors-is-passed-on-command-line.js @@ -568,7 +568,7 @@ let y = 10; //// [/user/username/projects/sample1/logic/index.js.map] *modified* {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAY,CAAC,0CAAsB;AACnC,2BAAkC;IAC9B,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAAA,CAC7B;AACD,MAAY,GAAG,kDAA8B;AAChC,QAAA,CAAC,GAAG,GAAG,CAAC;AACrB,IAAI,CAAC,GAAW,EAAE,CAAC"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../core/anotherModule.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"fc70810d80f598d415c6f21c113a400b-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n//# sourceMappingURL=index.d.ts.map","5ef600f6f6585506cfe942fc161e76c5-export declare const World = \"hello\";\n//# sourceMappingURL=anotherModule.d.ts.map",{"version":"3abed61bf6897ffa70a069303f7ee37f-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.multiply(10, 15);\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;\nlet y: string = 10;","signature":"487f7216384ec40e22ff7dc40c01be4b-export declare function getSecondsInDay(): number;\nimport * as mod from '../core/anotherModule';\nexport declare const m: typeof mod;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":177,"end":178,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[4],"fileNames":["lib.d.ts","../core/index.d.ts","../core/anotherModule.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"fc70810d80f598d415c6f21c113a400b-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n//# sourceMappingURL=index.d.ts.map","5ef600f6f6585506cfe942fc161e76c5-export declare const World = \"hello\";\n//# sourceMappingURL=anotherModule.d.ts.map",{"version":"3abed61bf6897ffa70a069303f7ee37f-import * as c from '../core/index';\nexport function getSecondsInDay() {\n return c.multiply(10, 15);\n}\nimport * as mod from '../core/anotherModule';\nexport const m = mod;\nlet y: string = 10;","signature":"487f7216384ec40e22ff7dc40c01be4b-export declare function getSecondsInDay(): number;\nimport * as mod from '../core/anotherModule';\nexport declare const m: typeof mod;\n","impliedNodeFormat":1}],"fileIdsList":[[2,3]],"options":{"composite":true,"declaration":true,"skipDefaultLibCheck":true,"sourceMap":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":177,"end":178,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/logic/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -650,13 +650,17 @@ let y = 10; "end": 178, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 2046 + "size": 2073 } logic/tsconfig.json:: @@ -702,7 +706,7 @@ function multiply(a, b) { return a * b; } let x = 10; //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"bd46ecaf1bd821bbf62f3d94c22c2a57-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }\nlet x: string = 10;","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":182,"end":183,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"bd46ecaf1bd821bbf62f3d94c22c2a57-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }\nlet x: string = 10;","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":182,"end":183,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -788,13 +792,17 @@ let x = 10; "end": 183, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 1985 + "size": 2012 } core/tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors-when-test-does-not-reference-core.js b/testdata/baselines/reference/tsbuildWatch/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors-when-test-does-not-reference-core.js index 30362fa2..6c188b0e 100644 --- a/testdata/baselines/reference/tsbuildWatch/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors-when-test-does-not-reference-core.js +++ b/testdata/baselines/reference/tsbuildWatch/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors-when-test-does-not-reference-core.js @@ -145,7 +145,7 @@ function multiply(a, b) { return a * b; } multiply(); //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"4bf9c557eaa1c988144310898522b7b5-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }multiply();","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":177,"end":185,"code":2554,"category":1,"message":"Expected 2 arguments, but got 0.","relatedInformation":[{"pos":138,"end":147,"code":6210,"category":3,"message":"An argument for 'a' was not provided."}]}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"4bf9c557eaa1c988144310898522b7b5-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }multiply();","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":177,"end":185,"code":2554,"category":1,"messageKey":"Expected_0_arguments_but_got_1_2554","messageArgs":["2","0"],"relatedInformation":[{"pos":138,"end":147,"code":6210,"category":3,"messageKey":"An_argument_for_0_was_not_provided_6210","messageArgs":["a"]}]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -231,14 +231,21 @@ multiply(); "end": 185, "code": 2554, "category": 1, - "message": "Expected 2 arguments, but got 0.", + "messageKey": "Expected_0_arguments_but_got_1_2554", + "messageArgs": [ + "2", + "0" + ], "relatedInformation": [ { "pos": 138, "end": 147, "code": 6210, "category": 3, - "message": "An argument for 'a' was not provided." + "messageKey": "An_argument_for_0_was_not_provided_6210", + "messageArgs": [ + "a" + ] } ] } @@ -246,7 +253,7 @@ multiply(); ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 2078 + "size": 2133 } core/tsconfig.json:: diff --git a/testdata/baselines/reference/tsbuildWatch/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors.js b/testdata/baselines/reference/tsbuildWatch/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors.js index 508c861c..0440b344 100644 --- a/testdata/baselines/reference/tsbuildWatch/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors.js +++ b/testdata/baselines/reference/tsbuildWatch/sample/skips-builds-downstream-projects-if-upstream-projects-have-errors-with-stopBuildOnErrors.js @@ -146,7 +146,7 @@ function multiply(a, b) { return a * b; } multiply(); //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"4bf9c557eaa1c988144310898522b7b5-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }multiply();","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":177,"end":185,"code":2554,"category":1,"message":"Expected 2 arguments, but got 0.","relatedInformation":[{"pos":138,"end":147,"code":6210,"category":3,"message":"An argument for 'a' was not provided."}]}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./anotherModule.ts","./index.ts","./some_decl.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"19cd44ed7278957051fca663f821c916-export const World = \"hello\";","signature":"5aad0de3e7b08bb6e110c7b97361b89e-export declare const World = \"hello\";\n","impliedNodeFormat":1},{"version":"4bf9c557eaa1c988144310898522b7b5-export const someString: string = \"HELLO WORLD\";\nexport function leftPad(s: string, n: number) { return s + n; }\nexport function multiply(a: number, b: number) { return a * b; }multiply();","signature":"da642d80443e7ccd327091080a82a43c-export declare const someString: string;\nexport declare function leftPad(s: string, n: number): string;\nexport declare function multiply(a: number, b: number): number;\n","impliedNodeFormat":1},{"version":"6ceab83400a6167be2fb5feab881ded0-declare const dts: any;","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"skipDefaultLibCheck":true},"semanticDiagnosticsPerFile":[[3,[{"pos":177,"end":185,"code":2554,"category":1,"messageKey":"Expected_0_arguments_but_got_1_2554","messageArgs":["2","0"],"relatedInformation":[{"pos":138,"end":147,"code":6210,"category":3,"messageKey":"An_argument_for_0_was_not_provided_6210","messageArgs":["a"]}]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/user/username/projects/sample1/core/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -232,14 +232,21 @@ multiply(); "end": 185, "code": 2554, "category": 1, - "message": "Expected 2 arguments, but got 0.", + "messageKey": "Expected_0_arguments_but_got_1_2554", + "messageArgs": [ + "2", + "0" + ], "relatedInformation": [ { "pos": 138, "end": 147, "code": 6210, "category": 3, - "message": "An argument for 'a' was not provided." + "messageKey": "An_argument_for_0_was_not_provided_6210", + "messageArgs": [ + "a" + ] } ] } @@ -247,7 +254,7 @@ multiply(); ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 2078 + "size": 2133 } core/tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/commandLine/bad-locale.js b/testdata/baselines/reference/tsc/commandLine/bad-locale.js new file mode 100644 index 00000000..5d1ad434 --- /dev/null +++ b/testdata/baselines/reference/tsc/commandLine/bad-locale.js @@ -0,0 +1,9 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: + +tsgo --locale whoops --version +ExitStatus:: DiagnosticsPresent_OutputsSkipped +Output:: +error TS6048: Locale must be an IETF BCP 47 language tag. Examples: 'en', 'ja-jp'. + diff --git a/testdata/baselines/reference/tsc/commandLine/locale.js b/testdata/baselines/reference/tsc/commandLine/locale.js new file mode 100644 index 00000000..e8e5716a --- /dev/null +++ b/testdata/baselines/reference/tsc/commandLine/locale.js @@ -0,0 +1,9 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: + +tsgo --locale cs --version +ExitStatus:: Success +Output:: +Verze FakeTSVersion + diff --git a/testdata/baselines/reference/tsc/composite/synthetic-jsx-import-of-ESM-module-from-CJS-module-error-on-jsx-element.js b/testdata/baselines/reference/tsc/composite/synthetic-jsx-import-of-ESM-module-from-CJS-module-error-on-jsx-element.js index 3dfafa66..f248cf28 100644 --- a/testdata/baselines/reference/tsc/composite/synthetic-jsx-import-of-ESM-module-from-CJS-module-error-on-jsx-element.js +++ b/testdata/baselines/reference/tsc/composite/synthetic-jsx-import-of-ESM-module-from-CJS-module-error-on-jsx-element.js @@ -45,7 +45,7 @@ const jsx_runtime_1 = require("solid-js/jsx-runtime"); exports.default = jsx_runtime_1.jsx("div", {}); //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"fileNames":["lib.es2022.full.d.ts","./node_modules/solid-js/jsx-runtime.d.ts","./src/main.tsx"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"00e459cbb1596f8c4bdf988b0589433f-export namespace JSX {\n type IntrinsicElements = { div: {}; };\n}","impliedNodeFormat":99},{"version":"5af15af7f9b4d97300f8dcfb2bf5b7c4-export default

;","signature":"ca37c00363f904fe93e299b145186400-declare const _default: any;\nexport default _default;\n","impliedNodeFormat":1}],"options":{"composite":true,"jsx":4,"jsxImportSource":"solid-js","module":100},"semanticDiagnosticsPerFile":[[3,[{"pos":15,"end":21,"code":1479,"category":1,"message":"The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic 'import(\"solid-js/jsx-runtime\")' call instead.","messageChain":[{"pos":15,"end":21,"code":1483,"category":3,"message":"To convert this file to an ECMAScript module, create a local package.json file with `{ \"type\": \"module\" }`."}]}]]],"latestChangedDtsFile":"./src/main.d.ts"} +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.es2022.full.d.ts","./node_modules/solid-js/jsx-runtime.d.ts","./src/main.tsx"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"00e459cbb1596f8c4bdf988b0589433f-export namespace JSX {\n type IntrinsicElements = { div: {}; };\n}","impliedNodeFormat":99},{"version":"5af15af7f9b4d97300f8dcfb2bf5b7c4-export default
;","signature":"ca37c00363f904fe93e299b145186400-declare const _default: any;\nexport default _default;\n","impliedNodeFormat":1}],"options":{"composite":true,"jsx":4,"jsxImportSource":"solid-js","module":100},"semanticDiagnosticsPerFile":[[3,[{"pos":15,"end":21,"code":1479,"category":1,"messageKey":"The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479","messageArgs":["solid-js/jsx-runtime"],"messageChain":[{"pos":15,"end":21,"code":1483,"category":3,"messageKey":"To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483"}]}]]],"latestChangedDtsFile":"./src/main.d.ts"} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -112,14 +112,17 @@ exports.default = jsx_runtime_1.jsx("div", {}); "end": 21, "code": 1479, "category": 1, - "message": "The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic 'import(\"solid-js/jsx-runtime\")' call instead.", + "messageKey": "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479", + "messageArgs": [ + "solid-js/jsx-runtime" + ], "messageChain": [ { "pos": 15, "end": 21, "code": 1483, "category": 3, - "message": "To convert this file to an ECMAScript module, create a local package.json file with `{ \"type\": \"module\" }`." + "messageKey": "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483" } ] } @@ -127,7 +130,7 @@ exports.default = jsx_runtime_1.jsx("div", {}); ] ], "latestChangedDtsFile": "./src/main.d.ts", - "size": 1905 + "size": 1800 } //// [/home/src/tslibs/TS/Lib/lib.es2022.full.d.ts] *Lib* /// diff --git a/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js b/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js index 4cd9f7b9..3f898c49 100644 --- a/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js +++ b/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js @@ -88,7 +88,7 @@ import ky from 'ky'; export const api = ky.extend({}); //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"fileNames":["lib.esnext.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","signature":"5816fe34b5cf354b0d0d19bc77874616-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported variable 'api' has or is using name 'KyInstance' from external module \"/home/src/workspaces/project/node_modules/ky/distribution/index\" but cannot be named.","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":true,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4023,"category":1,"message":"Exported variable 'api' has or is using name 'KyInstance' from external module \"/home/src/workspaces/project/node_modules/ky/distribution/index\" but cannot be named."}]]],"latestChangedDtsFile":"./index.d.ts","emitSignatures":[[3,"5229c9e2248679a39697053812e5f6bb-export declare const api: {\n extend(options: Record): KyInstance;\n};\n"]]} +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.esnext.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","signature":"80d0207a54fef9a805b5e009ed639094-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023\napi\nKyInstance\n\"/home/src/workspaces/project/node_modules/ky/distribution/index\"\n","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":true,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4023,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023","messageArgs":["api","KyInstance","\"/home/src/workspaces/project/node_modules/ky/distribution/index\""]}]]],"latestChangedDtsFile":"./index.d.ts","emitSignatures":[[3,"5229c9e2248679a39697053812e5f6bb-export declare const api: {\n extend(options: Record): KyInstance;\n};\n"]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -131,11 +131,11 @@ export const api = ky.extend({}); { "fileName": "./index.ts", "version": "0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});", - "signature": "5816fe34b5cf354b0d0d19bc77874616-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported variable 'api' has or is using name 'KyInstance' from external module \"/home/src/workspaces/project/node_modules/ky/distribution/index\" but cannot be named.", + "signature": "80d0207a54fef9a805b5e009ed639094-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023\napi\nKyInstance\n\"/home/src/workspaces/project/node_modules/ky/distribution/index\"\n", "impliedNodeFormat": "ESNext", "original": { "version": "0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});", - "signature": "5816fe34b5cf354b0d0d19bc77874616-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported variable 'api' has or is using name 'KyInstance' from external module \"/home/src/workspaces/project/node_modules/ky/distribution/index\" but cannot be named.", + "signature": "80d0207a54fef9a805b5e009ed639094-export declare const api: {\n extend(options: Record): KyInstance;\n};\n\n(34,3): error4023: Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023\napi\nKyInstance\n\"/home/src/workspaces/project/node_modules/ky/distribution/index\"\n", "impliedNodeFormat": 99 } } @@ -166,7 +166,12 @@ export const api = ky.extend({}); "end": 37, "code": 4023, "category": 1, - "message": "Exported variable 'api' has or is using name 'KyInstance' from external module \"/home/src/workspaces/project/node_modules/ky/distribution/index\" but cannot be named." + "messageKey": "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023", + "messageArgs": [ + "api", + "KyInstance", + "\"/home/src/workspaces/project/node_modules/ky/distribution/index\"" + ] } ] ] @@ -182,7 +187,7 @@ export const api = ky.extend({}); ] } ], - "size": 2171 + "size": 2213 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/declarationEmit/when-using-Windows-paths-and-uppercase-letters.js b/testdata/baselines/reference/tsc/declarationEmit/when-using-Windows-paths-and-uppercase-letters.js index 6b382550..852c8a05 100644 --- a/testdata/baselines/reference/tsc/declarationEmit/when-using-Windows-paths-and-uppercase-letters.js +++ b/testdata/baselines/reference/tsc/declarationEmit/when-using-Windows-paths-and-uppercase-letters.js @@ -8,31 +8,31 @@ Input:: "main": "index.js" } //// [D:/Work/pkg1/src/main.ts] *new* - import { PartialType } from './utils'; +import { PartialType } from './utils'; - class Common {} +class Common {} - export class Sub extends PartialType(Common) { - id: string; - } +export class Sub extends PartialType(Common) { + id: string; +} //// [D:/Work/pkg1/src/utils/index.ts] *new* - import { MyType, MyReturnType } from './type-helpers'; +import { MyType, MyReturnType } from './type-helpers'; - export function PartialType(classRef: MyType) { - abstract class PartialClassType { - constructor() {} - } +export function PartialType(classRef: MyType) { + abstract class PartialClassType { + constructor() {} + } - return PartialClassType as MyReturnType; - } + return PartialClassType as MyReturnType; +} //// [D:/Work/pkg1/src/utils/type-helpers.ts] *new* - export type MyReturnType = { - new (...args: any[]): any; - }; +export type MyReturnType = { + new (...args: any[]): any; +}; - export interface MyType extends Function { - new (...args: any[]): T; - } +export interface MyType extends Function { + new (...args: any[]): T; +} //// [D:/Work/pkg1/tsconfig.json] *new* { "compilerOptions": { @@ -46,11 +46,11 @@ Input:: tsgo -p D:\Work\pkg1 --explainFiles ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -src/utils/index.ts:8:27 - error TS2352: Conversion of type 'typeof PartialClassType' to type 'MyReturnType' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first. +src/utils/index.ts:8:12 - error TS2352: Conversion of type 'typeof PartialClassType' to type 'MyReturnType' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first. Cannot assign an abstract constructor type to a non-abstract constructor type. -8 return PartialClassType as MyReturnType; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +8 return PartialClassType as MyReturnType; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../home/src/tslibs/TS/Lib/lib.es2017.full.d.ts Default library for target 'ES2017' diff --git a/testdata/baselines/reference/tsc/incremental/change-to-modifier-of-class-expression-field-with-declaration-emit-enabled.js b/testdata/baselines/reference/tsc/incremental/change-to-modifier-of-class-expression-field-with-declaration-emit-enabled.js index 6733ef2b..9d04eb07 100644 --- a/testdata/baselines/reference/tsc/incremental/change-to-modifier-of-class-expression-field-with-declaration-emit-enabled.js +++ b/testdata/baselines/reference/tsc/incremental/change-to-modifier-of-class-expression-field-with-declaration-emit-enabled.js @@ -214,7 +214,7 @@ Errors Files //// [/home/src/workspaces/project/main.d.ts] *rewrite with same content* //// [/home/src/workspaces/project/main.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./MessageablePerson.ts","./main.ts"],"fileInfos":[{"version":"778b786cd1eca831889c50ded7c79c1d-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };\ntype ReturnType any> = T extends (...args: any) => infer R ? R : any;\ntype InstanceType any> = T extends abstract new (...args: any) => infer R ? R : any;","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"fc3bcee26e986c769691717bfbe49525-const Messageable = () => {\n return class MessageableClass {\n protected message = 'hello';\n }\n};\nconst wrapper = () => Messageable();\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;","signature":"eb669b96f45855935c22925689eec67c-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property 'message' of exported anonymous class type may not be private or protected.\n(116,7): error9027: Add a type annotation to the variable wrapper.","impliedNodeFormat":1},{"version":"f1d6119c9df9ff1b48604c0e5c5f624f-import MessageablePerson from './MessageablePerson.js';\nfunction logMessage( person: MessageablePerson ) {\n console.log( person.message );\n}","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"declaration":true,"module":99},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":131,"end":138,"code":2445,"category":1,"message":"Property 'message' is protected and only accessible within class 'MessageableClass' and its subclasses."}]]],"emitDiagnosticsPerFile":[[2,[{"pos":116,"end":123,"code":4094,"category":1,"message":"Property 'message' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":116,"end":123,"code":9027,"category":1,"message":"Add a type annotation to the variable wrapper."}]}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./MessageablePerson.ts","./main.ts"],"fileInfos":[{"version":"778b786cd1eca831889c50ded7c79c1d-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };\ntype ReturnType any> = T extends (...args: any) => infer R ? R : any;\ntype InstanceType any> = T extends abstract new (...args: any) => infer R ? R : any;","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"fc3bcee26e986c769691717bfbe49525-const Messageable = () => {\n return class MessageableClass {\n protected message = 'hello';\n }\n};\nconst wrapper = () => Messageable();\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;","signature":"9bca542f83dba4822510bd12bc5e9db9-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\nmessage\n\n(116,7): error9027: Add_a_type_annotation_to_the_variable_0_9027\nwrapper\n","impliedNodeFormat":1},{"version":"f1d6119c9df9ff1b48604c0e5c5f624f-import MessageablePerson from './MessageablePerson.js';\nfunction logMessage( person: MessageablePerson ) {\n console.log( person.message );\n}","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"declaration":true,"module":99},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":131,"end":138,"code":2445,"category":1,"messageKey":"Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445","messageArgs":["message","MessageableClass"]}]]],"emitDiagnosticsPerFile":[[2,[{"pos":116,"end":123,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["message"],"relatedInformation":[{"pos":116,"end":123,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["wrapper"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -251,11 +251,11 @@ Errors Files { "fileName": "./MessageablePerson.ts", "version": "fc3bcee26e986c769691717bfbe49525-const Messageable = () => {\n return class MessageableClass {\n protected message = 'hello';\n }\n};\nconst wrapper = () => Messageable();\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;", - "signature": "eb669b96f45855935c22925689eec67c-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property 'message' of exported anonymous class type may not be private or protected.\n(116,7): error9027: Add a type annotation to the variable wrapper.", + "signature": "9bca542f83dba4822510bd12bc5e9db9-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\nmessage\n\n(116,7): error9027: Add_a_type_annotation_to_the_variable_0_9027\nwrapper\n", "impliedNodeFormat": "CommonJS", "original": { "version": "fc3bcee26e986c769691717bfbe49525-const Messageable = () => {\n return class MessageableClass {\n protected message = 'hello';\n }\n};\nconst wrapper = () => Messageable();\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;", - "signature": "eb669b96f45855935c22925689eec67c-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property 'message' of exported anonymous class type may not be private or protected.\n(116,7): error9027: Add a type annotation to the variable wrapper.", + "signature": "9bca542f83dba4822510bd12bc5e9db9-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\nmessage\n\n(116,7): error9027: Add_a_type_annotation_to_the_variable_0_9027\nwrapper\n", "impliedNodeFormat": 1 } }, @@ -294,7 +294,11 @@ Errors Files "end": 138, "code": 2445, "category": 1, - "message": "Property 'message' is protected and only accessible within class 'MessageableClass' and its subclasses." + "messageKey": "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445", + "messageArgs": [ + "message", + "MessageableClass" + ] } ] ] @@ -308,21 +312,27 @@ Errors Files "end": 123, "code": 4094, "category": 1, - "message": "Property 'message' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "message" + ], "relatedInformation": [ { "pos": 116, "end": 123, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable wrapper." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "wrapper" + ] } ] } ] ] ], - "size": 2717 + "size": 2812 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/incremental/change-to-modifier-of-class-expression-field.js b/testdata/baselines/reference/tsc/incremental/change-to-modifier-of-class-expression-field.js index 5fb23344..e87dc97a 100644 --- a/testdata/baselines/reference/tsc/incremental/change-to-modifier-of-class-expression-field.js +++ b/testdata/baselines/reference/tsc/incremental/change-to-modifier-of-class-expression-field.js @@ -173,7 +173,7 @@ Found 1 error in main.ts:3 //// [/home/src/workspaces/project/MessageablePerson.js] *rewrite with same content* //// [/home/src/workspaces/project/main.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./MessageablePerson.ts","./main.ts"],"fileInfos":[{"version":"778b786cd1eca831889c50ded7c79c1d-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };\ntype ReturnType any> = T extends (...args: any) => infer R ? R : any;\ntype InstanceType any> = T extends abstract new (...args: any) => infer R ? R : any;","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"fc3bcee26e986c769691717bfbe49525-const Messageable = () => {\n return class MessageableClass {\n protected message = 'hello';\n }\n};\nconst wrapper = () => Messageable();\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;","signature":"eb669b96f45855935c22925689eec67c-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property 'message' of exported anonymous class type may not be private or protected.\n(116,7): error9027: Add a type annotation to the variable wrapper.","impliedNodeFormat":1},{"version":"f1d6119c9df9ff1b48604c0e5c5f624f-import MessageablePerson from './MessageablePerson.js';\nfunction logMessage( person: MessageablePerson ) {\n console.log( person.message );\n}","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"module":99},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":131,"end":138,"code":2445,"category":1,"message":"Property 'message' is protected and only accessible within class 'MessageableClass' and its subclasses."}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./MessageablePerson.ts","./main.ts"],"fileInfos":[{"version":"778b786cd1eca831889c50ded7c79c1d-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };\ntype ReturnType any> = T extends (...args: any) => infer R ? R : any;\ntype InstanceType any> = T extends abstract new (...args: any) => infer R ? R : any;","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"fc3bcee26e986c769691717bfbe49525-const Messageable = () => {\n return class MessageableClass {\n protected message = 'hello';\n }\n};\nconst wrapper = () => Messageable();\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;","signature":"9bca542f83dba4822510bd12bc5e9db9-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\nmessage\n\n(116,7): error9027: Add_a_type_annotation_to_the_variable_0_9027\nwrapper\n","impliedNodeFormat":1},{"version":"f1d6119c9df9ff1b48604c0e5c5f624f-import MessageablePerson from './MessageablePerson.js';\nfunction logMessage( person: MessageablePerson ) {\n console.log( person.message );\n}","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"module":99},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":131,"end":138,"code":2445,"category":1,"messageKey":"Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445","messageArgs":["message","MessageableClass"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -210,11 +210,11 @@ Found 1 error in main.ts:3 { "fileName": "./MessageablePerson.ts", "version": "fc3bcee26e986c769691717bfbe49525-const Messageable = () => {\n return class MessageableClass {\n protected message = 'hello';\n }\n};\nconst wrapper = () => Messageable();\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;", - "signature": "eb669b96f45855935c22925689eec67c-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property 'message' of exported anonymous class type may not be private or protected.\n(116,7): error9027: Add a type annotation to the variable wrapper.", + "signature": "9bca542f83dba4822510bd12bc5e9db9-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\nmessage\n\n(116,7): error9027: Add_a_type_annotation_to_the_variable_0_9027\nwrapper\n", "impliedNodeFormat": "CommonJS", "original": { "version": "fc3bcee26e986c769691717bfbe49525-const Messageable = () => {\n return class MessageableClass {\n protected message = 'hello';\n }\n};\nconst wrapper = () => Messageable();\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;", - "signature": "eb669b96f45855935c22925689eec67c-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property 'message' of exported anonymous class type may not be private or protected.\n(116,7): error9027: Add a type annotation to the variable wrapper.", + "signature": "9bca542f83dba4822510bd12bc5e9db9-declare const wrapper: () => {\n new (): {\n message: string;\n };\n};\ntype MessageablePerson = InstanceType>;\nexport default MessageablePerson;\n\n(116,7): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\nmessage\n\n(116,7): error9027: Add_a_type_annotation_to_the_variable_0_9027\nwrapper\n", "impliedNodeFormat": 1 } }, @@ -252,12 +252,16 @@ Found 1 error in main.ts:3 "end": 138, "code": 2445, "category": 1, - "message": "Property 'message' is protected and only accessible within class 'MessageableClass' and its subclasses." + "messageKey": "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445", + "messageArgs": [ + "message", + "MessageableClass" + ] } ] ] ], - "size": 2392 + "size": 2435 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/incremental/react-jsx-emit-mode-with-no-backing-types-found-doesnt-crash-under---strict.js b/testdata/baselines/reference/tsc/incremental/react-jsx-emit-mode-with-no-backing-types-found-doesnt-crash-under---strict.js index ee5f8549..2935b804 100644 --- a/testdata/baselines/reference/tsc/incremental/react-jsx-emit-mode-with-no-backing-types-found-doesnt-crash-under---strict.js +++ b/testdata/baselines/reference/tsc/incremental/react-jsx-emit-mode-with-no-backing-types-found-doesnt-crash-under---strict.js @@ -70,7 +70,7 @@ const App = () => jsx_runtime_1.jsx("div", { propA: true }); exports.App = App; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./src/index.tsx","./node_modules/@types/react/index.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"0c3575e38f9aabc971cea9c73a211979-export const App = () =>
;",{"version":"a6afc3c631ce6ad7bc83db84287b52ea-export {};\ndeclare global {\n namespace JSX {\n interface Element {}\n interface IntrinsicElements {\n div: {\n propA?: boolean;\n };\n }\n }\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"jsx":4,"jsxImportSource":"react","module":1,"strict":true},"semanticDiagnosticsPerFile":[[2,[{"pos":25,"end":49,"code":7016,"category":1,"message":"Could not find a declaration file for module 'react/jsx-runtime'. '/home/src/workspaces/project/node_modules/react/jsx-runtime.js' implicitly has an 'any' type."}]]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./src/index.tsx","./node_modules/@types/react/index.d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"0c3575e38f9aabc971cea9c73a211979-export const App = () =>
;",{"version":"a6afc3c631ce6ad7bc83db84287b52ea-export {};\ndeclare global {\n namespace JSX {\n interface Element {}\n interface IntrinsicElements {\n div: {\n propA?: boolean;\n };\n }\n }\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"jsx":4,"jsxImportSource":"react","module":1,"strict":true},"semanticDiagnosticsPerFile":[[2,[{"pos":25,"end":49,"code":7016,"category":1,"messageKey":"Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016","messageArgs":["react/jsx-runtime","/home/src/workspaces/project/node_modules/react/jsx-runtime.js"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -134,12 +134,16 @@ exports.App = App; "end": 49, "code": 7016, "category": 1, - "message": "Could not find a declaration file for module 'react/jsx-runtime'. '/home/src/workspaces/project/node_modules/react/jsx-runtime.js' implicitly has an 'any' type." + "messageKey": "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016", + "messageArgs": [ + "react/jsx-runtime", + "/home/src/workspaces/project/node_modules/react/jsx-runtime.js" + ] } ] ] ], - "size": 1623 + "size": 1647 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/incremental/serializing-error-chain.js b/testdata/baselines/reference/tsc/incremental/serializing-error-chain.js index 78c6bf19..775a84f6 100644 --- a/testdata/baselines/reference/tsc/incremental/serializing-error-chain.js +++ b/testdata/baselines/reference/tsc/incremental/serializing-error-chain.js @@ -74,7 +74,7 @@ declare const console: { log(msg: any): void; }; React.createElement("div", null))); //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./index.tsx"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8ca521424834f2ae3377cc3ccc9dd3ef-declare namespace JSX {\n interface ElementChildrenAttribute { children: {}; }\n interface IntrinsicElements { div: {} }\n}\n\ndeclare var React: any;\n\ndeclare function Component(props: never): any;\ndeclare function Component(props: { children?: number }): any;\n(\n
\n
\n)","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"jsx":3,"module":99,"strict":true},"semanticDiagnosticsPerFile":[[2,[{"pos":265,"end":274,"code":2769,"category":1,"message":"No overload matches this call.","messageChain":[{"pos":265,"end":274,"code":2770,"category":1,"message":"The last overload gave the following error.","messageChain":[{"pos":265,"end":274,"code":2322,"category":1,"message":"Type '{ children: any[]; }' is not assignable to type '{ children?: number | undefined; }'.","messageChain":[{"pos":265,"end":274,"code":2326,"category":1,"message":"Types of property 'children' are incompatible.","messageChain":[{"pos":265,"end":274,"code":2322,"category":1,"message":"Type 'any[]' is not assignable to type 'number'."}]}]}]}],"relatedInformation":[{"pos":217,"end":226,"code":2771,"category":1,"message":"The last overload is declared here."}]}]]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./index.tsx"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8ca521424834f2ae3377cc3ccc9dd3ef-declare namespace JSX {\n interface ElementChildrenAttribute { children: {}; }\n interface IntrinsicElements { div: {} }\n}\n\ndeclare var React: any;\n\ndeclare function Component(props: never): any;\ndeclare function Component(props: { children?: number }): any;\n(\n
\n
\n)","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"jsx":3,"module":99,"strict":true},"semanticDiagnosticsPerFile":[[2,[{"pos":265,"end":274,"code":2769,"category":1,"messageKey":"No_overload_matches_this_call_2769","messageChain":[{"pos":265,"end":274,"code":2770,"category":1,"messageKey":"The_last_overload_gave_the_following_error_2770","messageChain":[{"pos":265,"end":274,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["{ children: any[]; }","{ children?: number | undefined; }"],"messageChain":[{"pos":265,"end":274,"code":2326,"category":1,"messageKey":"Types_of_property_0_are_incompatible_2326","messageArgs":["children"],"messageChain":[{"pos":265,"end":274,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["any[]","number"]}]}]}]}],"relatedInformation":[{"pos":217,"end":226,"code":2771,"category":1,"messageKey":"The_last_overload_is_declared_here_2771"}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -130,35 +130,46 @@ declare const console: { log(msg: any): void; }; "end": 274, "code": 2769, "category": 1, - "message": "No overload matches this call.", + "messageKey": "No_overload_matches_this_call_2769", "messageChain": [ { "pos": 265, "end": 274, "code": 2770, "category": 1, - "message": "The last overload gave the following error.", + "messageKey": "The_last_overload_gave_the_following_error_2770", "messageChain": [ { "pos": 265, "end": 274, "code": 2322, "category": 1, - "message": "Type '{ children: any[]; }' is not assignable to type '{ children?: number | undefined; }'.", + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "{ children: any[]; }", + "{ children?: number | undefined; }" + ], "messageChain": [ { "pos": 265, "end": 274, "code": 2326, "category": 1, - "message": "Types of property 'children' are incompatible.", + "messageKey": "Types_of_property_0_are_incompatible_2326", + "messageArgs": [ + "children" + ], "messageChain": [ { "pos": 265, "end": 274, "code": 2322, "category": 1, - "message": "Type 'any[]' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "any[]", + "number" + ] } ] } @@ -173,14 +184,14 @@ declare const console: { log(msg: any): void; }; "end": 226, "code": 2771, "category": 1, - "message": "The last overload is declared here." + "messageKey": "The_last_overload_is_declared_here_2771" } ] } ] ] ], - "size": 2109 + "size": 2209 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/moduleResolution/alternateResult.js b/testdata/baselines/reference/tsc/moduleResolution/alternateResult.js index 7ac02e2f..035e5f1d 100644 --- a/testdata/baselines/reference/tsc/moduleResolution/alternateResult.js +++ b/testdata/baselines/reference/tsc/moduleResolution/alternateResult.js @@ -9,17 +9,17 @@ import { bar2 } from "bar2"; //// [/home/src/projects/project/node_modules/@types/bar/index.d.ts] *new* export declare const bar: number; //// [/home/src/projects/project/node_modules/@types/bar/package.json] *new* - { - "name": "@types/bar", - "version": "1.0.0", - "types": "index.d.ts", - "exports": { - ".": { - - "require": "./index.d.ts" - } - } - } +{ + "name": "@types/bar", + "version": "1.0.0", + "types": "index.d.ts", + "exports": { + ".": { + + "require": "./index.d.ts" + } + } +} //// [/home/src/projects/project/node_modules/@types/bar2/index.d.ts] *new* export declare const bar2: number; //// [/home/src/projects/project/node_modules/@types/bar2/package.json] *new* @@ -39,37 +39,37 @@ module.exports = { bar: 1 }; //// [/home/src/projects/project/node_modules/bar/index.mjs] *new* export const bar = 1; //// [/home/src/projects/project/node_modules/bar/package.json] *new* - { - "name": "bar", - "version": "1.0.0", - "main": "index.js", - - "exports": { - ".": { - - "import": "./index.mjs", - "require": "./index.js" - } - } - } +{ + "name": "bar", + "version": "1.0.0", + "main": "index.js", + + "exports": { + ".": { + + "import": "./index.mjs", + "require": "./index.js" + } + } +} //// [/home/src/projects/project/node_modules/bar2/index.js] *new* module.exports = { bar2: 1 }; //// [/home/src/projects/project/node_modules/bar2/index.mjs] *new* export const bar2 = 1; //// [/home/src/projects/project/node_modules/bar2/package.json] *new* - { - "name": "bar2", - "version": "1.0.0", - "main": "index.js", - - "exports": { - ".": { - - "import": "./index.mjs", - "require": "./index.js" - } - } - } +{ + "name": "bar2", + "version": "1.0.0", + "main": "index.js", + + "exports": { + ".": { + + "import": "./index.mjs", + "require": "./index.js" + } + } +} //// [/home/src/projects/project/node_modules/foo/index.d.ts] *new* export declare const foo: number; //// [/home/src/projects/project/node_modules/foo/index.js] *new* @@ -77,19 +77,19 @@ module.exports = { foo: 1 }; //// [/home/src/projects/project/node_modules/foo/index.mjs] *new* export const foo = 1; //// [/home/src/projects/project/node_modules/foo/package.json] *new* - { - "name": "foo", - "version": "1.0.0", - "main": "index.js", - "types": "index.d.ts", - "exports": { - ".": { - - "import": "./index.mjs", - "require": "./index.js" - } - } - } +{ + "name": "foo", + "version": "1.0.0", + "main": "index.js", + "types": "index.d.ts", + "exports": { + ".": { + + "import": "./index.mjs", + "require": "./index.js" + } + } +} //// [/home/src/projects/project/node_modules/foo2/index.d.ts] *new* export declare const foo2: number; //// [/home/src/projects/project/node_modules/foo2/index.js] *new* @@ -327,7 +327,7 @@ Found 2 errors in the same file, starting at: index.mts:1 export {}; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[4],"fileNames":["lib.es2022.full.d.ts","./node_modules/foo2/index.d.ts","./node_modules/@types/bar2/index.d.ts","./index.mts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"165b91a7791663df5931f0b63ebf9ce2-export declare const foo2: number;","da9728b78f5d24b38c00844e001b4953-export declare const bar2: number;",{"version":"eee0814e4a127747fb836acc50eaeb5a-import { foo } from \"foo\";\nimport { bar } from \"bar\";\nimport { foo2 } from \"foo2\";\nimport { bar2 } from \"bar2\";","impliedNodeFormat":99}],"fileIdsList":[[2,3]],"options":{"module":100,"strict":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":20,"end":25,"code":7016,"category":1,"message":"Could not find a declaration file for module 'foo'. '/home/src/projects/project/node_modules/foo/index.mjs' implicitly has an 'any' type.","messageChain":[{"pos":20,"end":25,"code":6278,"category":3,"message":"There are types at '/home/src/projects/project/node_modules/foo/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The 'foo' library may need to update its package.json or typings."}]},{"pos":47,"end":52,"code":7016,"category":1,"message":"Could not find a declaration file for module 'bar'. '/home/src/projects/project/node_modules/bar/index.mjs' implicitly has an 'any' type.","messageChain":[{"pos":47,"end":52,"code":6278,"category":3,"message":"There are types at '/home/src/projects/project/node_modules/@types/bar/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The '@types/bar' library may need to update its package.json or typings."}]}]]]} +{"version":"FakeTSVersion","root":[4],"fileNames":["lib.es2022.full.d.ts","./node_modules/foo2/index.d.ts","./node_modules/@types/bar2/index.d.ts","./index.mts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"165b91a7791663df5931f0b63ebf9ce2-export declare const foo2: number;","da9728b78f5d24b38c00844e001b4953-export declare const bar2: number;",{"version":"eee0814e4a127747fb836acc50eaeb5a-import { foo } from \"foo\";\nimport { bar } from \"bar\";\nimport { foo2 } from \"foo2\";\nimport { bar2 } from \"bar2\";","impliedNodeFormat":99}],"fileIdsList":[[2,3]],"options":{"module":100,"strict":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":20,"end":25,"code":7016,"category":1,"messageKey":"Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016","messageArgs":["foo","/home/src/projects/project/node_modules/foo/index.mjs"],"messageChain":[{"pos":20,"end":25,"code":6278,"category":3,"messageKey":"There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278","messageArgs":["/home/src/projects/project/node_modules/foo/index.d.ts","foo"]}]},{"pos":47,"end":52,"code":7016,"category":1,"messageKey":"Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016","messageArgs":["bar","/home/src/projects/project/node_modules/bar/index.mjs"],"messageChain":[{"pos":47,"end":52,"code":6278,"category":3,"messageKey":"There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278","messageArgs":["/home/src/projects/project/node_modules/@types/bar/index.d.ts","@types/bar"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -406,14 +406,22 @@ export {}; "end": 25, "code": 7016, "category": 1, - "message": "Could not find a declaration file for module 'foo'. '/home/src/projects/project/node_modules/foo/index.mjs' implicitly has an 'any' type.", + "messageKey": "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016", + "messageArgs": [ + "foo", + "/home/src/projects/project/node_modules/foo/index.mjs" + ], "messageChain": [ { "pos": 20, "end": 25, "code": 6278, "category": 3, - "message": "There are types at '/home/src/projects/project/node_modules/foo/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The 'foo' library may need to update its package.json or typings." + "messageKey": "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278", + "messageArgs": [ + "/home/src/projects/project/node_modules/foo/index.d.ts", + "foo" + ] } ] }, @@ -422,21 +430,29 @@ export {}; "end": 52, "code": 7016, "category": 1, - "message": "Could not find a declaration file for module 'bar'. '/home/src/projects/project/node_modules/bar/index.mjs' implicitly has an 'any' type.", + "messageKey": "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016", + "messageArgs": [ + "bar", + "/home/src/projects/project/node_modules/bar/index.mjs" + ], "messageChain": [ { "pos": 47, "end": 52, "code": 6278, "category": 3, - "message": "There are types at '/home/src/projects/project/node_modules/@types/bar/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The '@types/bar' library may need to update its package.json or typings." + "messageKey": "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278", + "messageArgs": [ + "/home/src/projects/project/node_modules/@types/bar/index.d.ts", + "@types/bar" + ] } ] } ] ] ], - "size": 2399 + "size": 2377 } //// [/home/src/tslibs/TS/Lib/lib.es2022.full.d.ts] *Lib* /// @@ -1574,7 +1590,7 @@ Found 1 error in index.mts:1 //// [/home/src/projects/project/index.mjs] *rewrite with same content* //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[5],"fileNames":["lib.es2022.full.d.ts","./node_modules/@types/bar/index.d.ts","./node_modules/foo2/index.d.ts","./node_modules/@types/bar2/index.d.ts","./index.mts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"78bc7ca8c840e090086811119f6d6ba9-export declare const bar: number;","165b91a7791663df5931f0b63ebf9ce2-export declare const foo2: number;","da9728b78f5d24b38c00844e001b4953-export declare const bar2: number;",{"version":"eee0814e4a127747fb836acc50eaeb5a-import { foo } from \"foo\";\nimport { bar } from \"bar\";\nimport { foo2 } from \"foo2\";\nimport { bar2 } from \"bar2\";","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":99}],"fileIdsList":[[2,3,4]],"options":{"module":100,"strict":true},"referencedMap":[[5,1]],"semanticDiagnosticsPerFile":[[5,[{"pos":20,"end":25,"code":7016,"category":1,"message":"Could not find a declaration file for module 'foo'. '/home/src/projects/project/node_modules/foo/index.mjs' implicitly has an 'any' type.","messageChain":[{"pos":20,"end":25,"code":6278,"category":3,"message":"There are types at '/home/src/projects/project/node_modules/foo/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The 'foo' library may need to update its package.json or typings."}]}]]]} +{"version":"FakeTSVersion","root":[5],"fileNames":["lib.es2022.full.d.ts","./node_modules/@types/bar/index.d.ts","./node_modules/foo2/index.d.ts","./node_modules/@types/bar2/index.d.ts","./index.mts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"78bc7ca8c840e090086811119f6d6ba9-export declare const bar: number;","165b91a7791663df5931f0b63ebf9ce2-export declare const foo2: number;","da9728b78f5d24b38c00844e001b4953-export declare const bar2: number;",{"version":"eee0814e4a127747fb836acc50eaeb5a-import { foo } from \"foo\";\nimport { bar } from \"bar\";\nimport { foo2 } from \"foo2\";\nimport { bar2 } from \"bar2\";","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":99}],"fileIdsList":[[2,3,4]],"options":{"module":100,"strict":true},"referencedMap":[[5,1]],"semanticDiagnosticsPerFile":[[5,[{"pos":20,"end":25,"code":7016,"category":1,"messageKey":"Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016","messageArgs":["foo","/home/src/projects/project/node_modules/foo/index.mjs"],"messageChain":[{"pos":20,"end":25,"code":6278,"category":3,"messageKey":"There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278","messageArgs":["/home/src/projects/project/node_modules/foo/index.d.ts","foo"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1663,21 +1679,29 @@ Found 1 error in index.mts:1 "end": 25, "code": 7016, "category": 1, - "message": "Could not find a declaration file for module 'foo'. '/home/src/projects/project/node_modules/foo/index.mjs' implicitly has an 'any' type.", + "messageKey": "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016", + "messageArgs": [ + "foo", + "/home/src/projects/project/node_modules/foo/index.mjs" + ], "messageChain": [ { "pos": 20, "end": 25, "code": 6278, "category": 3, - "message": "There are types at '/home/src/projects/project/node_modules/foo/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The 'foo' library may need to update its package.json or typings." + "messageKey": "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278", + "messageArgs": [ + "/home/src/projects/project/node_modules/foo/index.d.ts", + "foo" + ] } ] } ] ] ], - "size": 2063 + "size": 2052 } tsconfig.json:: @@ -1913,17 +1937,17 @@ Signatures:: Edit [6]:: update package.json from @types so error is introduced //// [/home/src/projects/project/node_modules/@types/bar2/package.json] *modified* - { - "name": "@types/bar2", - "version": "1.0.0", - "types": "index.d.ts", - "exports": { - ".": { - - "require": "./index.d.ts" - } - } - } +{ + "name": "@types/bar2", + "version": "1.0.0", + "types": "index.d.ts", + "exports": { + ".": { + + "require": "./index.d.ts" + } + } +} tsgo ExitStatus:: DiagnosticsPresent_OutputsGenerated @@ -2086,7 +2110,7 @@ Found 1 error in index.mts:4 //// [/home/src/projects/project/index.mjs] *rewrite with same content* //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[5],"fileNames":["lib.es2022.full.d.ts","./node_modules/foo/index.d.ts","./node_modules/@types/bar/index.d.ts","./node_modules/foo2/index.d.ts","./index.mts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"2a914bfad3bba77712486af8a4cdc415-export declare const foo: number;","78bc7ca8c840e090086811119f6d6ba9-export declare const bar: number;","165b91a7791663df5931f0b63ebf9ce2-export declare const foo2: number;",{"version":"eee0814e4a127747fb836acc50eaeb5a-import { foo } from \"foo\";\nimport { bar } from \"bar\";\nimport { foo2 } from \"foo2\";\nimport { bar2 } from \"bar2\";","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":99}],"fileIdsList":[[2,3,4]],"options":{"module":100,"strict":true},"referencedMap":[[5,1]],"semanticDiagnosticsPerFile":[[5,[{"pos":104,"end":110,"code":7016,"category":1,"message":"Could not find a declaration file for module 'bar2'. '/home/src/projects/project/node_modules/bar2/index.mjs' implicitly has an 'any' type.","messageChain":[{"pos":104,"end":110,"code":6278,"category":3,"message":"There are types at '/home/src/projects/project/node_modules/@types/bar2/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The '@types/bar2' library may need to update its package.json or typings."}]}]]]} +{"version":"FakeTSVersion","root":[5],"fileNames":["lib.es2022.full.d.ts","./node_modules/foo/index.d.ts","./node_modules/@types/bar/index.d.ts","./node_modules/foo2/index.d.ts","./index.mts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"2a914bfad3bba77712486af8a4cdc415-export declare const foo: number;","78bc7ca8c840e090086811119f6d6ba9-export declare const bar: number;","165b91a7791663df5931f0b63ebf9ce2-export declare const foo2: number;",{"version":"eee0814e4a127747fb836acc50eaeb5a-import { foo } from \"foo\";\nimport { bar } from \"bar\";\nimport { foo2 } from \"foo2\";\nimport { bar2 } from \"bar2\";","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":99}],"fileIdsList":[[2,3,4]],"options":{"module":100,"strict":true},"referencedMap":[[5,1]],"semanticDiagnosticsPerFile":[[5,[{"pos":104,"end":110,"code":7016,"category":1,"messageKey":"Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016","messageArgs":["bar2","/home/src/projects/project/node_modules/bar2/index.mjs"],"messageChain":[{"pos":104,"end":110,"code":6278,"category":3,"messageKey":"There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278","messageArgs":["/home/src/projects/project/node_modules/@types/bar2/index.d.ts","@types/bar2"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -2175,21 +2199,29 @@ Found 1 error in index.mts:4 "end": 110, "code": 7016, "category": 1, - "message": "Could not find a declaration file for module 'bar2'. '/home/src/projects/project/node_modules/bar2/index.mjs' implicitly has an 'any' type.", + "messageKey": "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016", + "messageArgs": [ + "bar2", + "/home/src/projects/project/node_modules/bar2/index.mjs" + ], "messageChain": [ { "pos": 104, "end": 110, "code": 6278, "category": 3, - "message": "There are types at '/home/src/projects/project/node_modules/@types/bar2/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The '@types/bar2' library may need to update its package.json or typings." + "messageKey": "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278", + "messageArgs": [ + "/home/src/projects/project/node_modules/@types/bar2/index.d.ts", + "@types/bar2" + ] } ] } ] ] ], - "size": 2076 + "size": 2065 } tsconfig.json:: @@ -2201,19 +2233,19 @@ Signatures:: Edit [7]:: update package.json so error is introduced //// [/home/src/projects/project/node_modules/foo2/package.json] *modified* - { - "name": "foo2", - "version": "1.0.0", - "main": "index.js", - "types": "index.d.ts", - "exports": { - ".": { - - "import": "./index.mjs", - "require": "./index.js" - } - } - } +{ + "name": "foo2", + "version": "1.0.0", + "main": "index.js", + "types": "index.d.ts", + "exports": { + ".": { + + "import": "./index.mjs", + "require": "./index.js" + } + } +} tsgo ExitStatus:: DiagnosticsPresent_OutputsGenerated @@ -2417,7 +2449,7 @@ Found 2 errors in the same file, starting at: index.mts:3 //// [/home/src/projects/project/index.mjs] *rewrite with same content* //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[4],"fileNames":["lib.es2022.full.d.ts","./node_modules/foo/index.d.ts","./node_modules/@types/bar/index.d.ts","./index.mts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"2a914bfad3bba77712486af8a4cdc415-export declare const foo: number;","78bc7ca8c840e090086811119f6d6ba9-export declare const bar: number;",{"version":"eee0814e4a127747fb836acc50eaeb5a-import { foo } from \"foo\";\nimport { bar } from \"bar\";\nimport { foo2 } from \"foo2\";\nimport { bar2 } from \"bar2\";","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":99}],"fileIdsList":[[2,3]],"options":{"module":100,"strict":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":75,"end":81,"code":7016,"category":1,"message":"Could not find a declaration file for module 'foo2'. '/home/src/projects/project/node_modules/foo2/index.mjs' implicitly has an 'any' type.","messageChain":[{"pos":75,"end":81,"code":6278,"category":3,"message":"There are types at '/home/src/projects/project/node_modules/foo2/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The 'foo2' library may need to update its package.json or typings."}]},{"pos":104,"end":110,"code":7016,"category":1,"message":"Could not find a declaration file for module 'bar2'. '/home/src/projects/project/node_modules/bar2/index.mjs' implicitly has an 'any' type.","messageChain":[{"pos":104,"end":110,"code":6278,"category":3,"message":"There are types at '/home/src/projects/project/node_modules/@types/bar2/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The '@types/bar2' library may need to update its package.json or typings."}]}]]]} +{"version":"FakeTSVersion","root":[4],"fileNames":["lib.es2022.full.d.ts","./node_modules/foo/index.d.ts","./node_modules/@types/bar/index.d.ts","./index.mts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"2a914bfad3bba77712486af8a4cdc415-export declare const foo: number;","78bc7ca8c840e090086811119f6d6ba9-export declare const bar: number;",{"version":"eee0814e4a127747fb836acc50eaeb5a-import { foo } from \"foo\";\nimport { bar } from \"bar\";\nimport { foo2 } from \"foo2\";\nimport { bar2 } from \"bar2\";","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":99}],"fileIdsList":[[2,3]],"options":{"module":100,"strict":true},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":75,"end":81,"code":7016,"category":1,"messageKey":"Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016","messageArgs":["foo2","/home/src/projects/project/node_modules/foo2/index.mjs"],"messageChain":[{"pos":75,"end":81,"code":6278,"category":3,"messageKey":"There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278","messageArgs":["/home/src/projects/project/node_modules/foo2/index.d.ts","foo2"]}]},{"pos":104,"end":110,"code":7016,"category":1,"messageKey":"Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016","messageArgs":["bar2","/home/src/projects/project/node_modules/bar2/index.mjs"],"messageChain":[{"pos":104,"end":110,"code":6278,"category":3,"messageKey":"There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278","messageArgs":["/home/src/projects/project/node_modules/@types/bar2/index.d.ts","@types/bar2"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -2497,14 +2529,22 @@ Found 2 errors in the same file, starting at: index.mts:3 "end": 81, "code": 7016, "category": 1, - "message": "Could not find a declaration file for module 'foo2'. '/home/src/projects/project/node_modules/foo2/index.mjs' implicitly has an 'any' type.", + "messageKey": "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016", + "messageArgs": [ + "foo2", + "/home/src/projects/project/node_modules/foo2/index.mjs" + ], "messageChain": [ { "pos": 75, "end": 81, "code": 6278, "category": 3, - "message": "There are types at '/home/src/projects/project/node_modules/foo2/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The 'foo2' library may need to update its package.json or typings." + "messageKey": "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278", + "messageArgs": [ + "/home/src/projects/project/node_modules/foo2/index.d.ts", + "foo2" + ] } ] }, @@ -2513,21 +2553,29 @@ Found 2 errors in the same file, starting at: index.mts:3 "end": 110, "code": 7016, "category": 1, - "message": "Could not find a declaration file for module 'bar2'. '/home/src/projects/project/node_modules/bar2/index.mjs' implicitly has an 'any' type.", + "messageKey": "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016", + "messageArgs": [ + "bar2", + "/home/src/projects/project/node_modules/bar2/index.mjs" + ], "messageChain": [ { "pos": 104, "end": 110, "code": 6278, "category": 3, - "message": "There are types at '/home/src/projects/project/node_modules/@types/bar2/index.d.ts', but this result could not be resolved when respecting package.json \"exports\". The '@types/bar2' library may need to update its package.json or typings." + "messageKey": "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278", + "messageArgs": [ + "/home/src/projects/project/node_modules/@types/bar2/index.d.ts", + "@types/bar2" + ] } ] } ] ] ], - "size": 2467 + "size": 2445 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/moduleResolution/package-json-scope.js b/testdata/baselines/reference/tsc/moduleResolution/package-json-scope.js index d50d7c12..cd3c7944 100644 --- a/testdata/baselines/reference/tsc/moduleResolution/package-json-scope.js +++ b/testdata/baselines/reference/tsc/moduleResolution/package-json-scope.js @@ -106,7 +106,7 @@ exports.x = void 0; exports.x = 10; //// [/home/src/workspaces/project/src/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.es2016.full.d.ts","./main.ts","./fileB.mts","./fileA.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"28e8748a7acd58f4f59388926e914f86-export const x = 10;","signature":"f9b4154a9a5944099ecf197d4519d083-export declare const x = 10;\n","impliedNodeFormat":1},{"version":"d03690d860e74c03bcacf63f0dd68b93-export function foo() {}","signature":"7ffb4ea6089b1a385965a214ba412941-export declare function foo(): void;\n","impliedNodeFormat":99},{"version":"cc520ca096f0b81d18073ba8a9776fe3-import { foo } from \"./fileB.mjs\";\nfoo();","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[3]],"options":{"composite":true,"module":100,"target":3},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":20,"end":33,"code":1479,"category":1,"message":"The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic 'import(\"./fileB.mjs\")' call instead.","messageChain":[{"pos":20,"end":33,"code":1481,"category":3,"message":"To convert this file to an ECMAScript module, change its file extension to '.mts', or add the field `\"type\": \"module\"` to '/home/src/workspaces/project/package.json'."}]}]]],"latestChangedDtsFile":"./fileA.d.ts"} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.es2016.full.d.ts","./main.ts","./fileB.mts","./fileA.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"28e8748a7acd58f4f59388926e914f86-export const x = 10;","signature":"f9b4154a9a5944099ecf197d4519d083-export declare const x = 10;\n","impliedNodeFormat":1},{"version":"d03690d860e74c03bcacf63f0dd68b93-export function foo() {}","signature":"7ffb4ea6089b1a385965a214ba412941-export declare function foo(): void;\n","impliedNodeFormat":99},{"version":"cc520ca096f0b81d18073ba8a9776fe3-import { foo } from \"./fileB.mjs\";\nfoo();","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[3]],"options":{"composite":true,"module":100,"target":3},"referencedMap":[[4,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":20,"end":33,"code":1479,"category":1,"messageKey":"The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479","messageArgs":["./fileB.mjs"],"messageChain":[{"pos":20,"end":33,"code":1481,"category":3,"messageKey":"To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481","messageArgs":[".mts","/home/src/workspaces/project/package.json"]}]}]]],"latestChangedDtsFile":"./fileA.d.ts"} //// [/home/src/workspaces/project/src/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -200,14 +200,21 @@ exports.x = 10; "end": 33, "code": 1479, "category": 1, - "message": "The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic 'import(\"./fileB.mjs\")' call instead.", + "messageKey": "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479", + "messageArgs": [ + "./fileB.mjs" + ], "messageChain": [ { "pos": 20, "end": 33, "code": 1481, "category": 3, - "message": "To convert this file to an ECMAScript module, change its file extension to '.mts', or add the field `\"type\": \"module\"` to '/home/src/workspaces/project/package.json'." + "messageKey": "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481", + "messageArgs": [ + ".mts", + "/home/src/workspaces/project/package.json" + ] } ] } @@ -215,7 +222,7 @@ exports.x = 10; ] ], "latestChangedDtsFile": "./fileA.d.ts", - "size": 2140 + "size": 2043 } src/tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noCheck/dts-errors-with-incremental.js b/testdata/baselines/reference/tsc/noCheck/dts-errors-with-incremental.js index 31b85a5c..7efb7cb5 100644 --- a/testdata/baselines/reference/tsc/noCheck/dts-errors-with-incremental.js +++ b/testdata/baselines/reference/tsc/noCheck/dts-errors-with-incremental.js @@ -77,7 +77,7 @@ exports.b = void 0; exports.b = 10; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[1,2,3],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[1,2,3],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -115,11 +115,11 @@ exports.b = 10; { "fileName": "./a.ts", "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -152,21 +152,27 @@ exports.b = 10; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1810 + "size": 1878 } tsconfig.json:: @@ -449,7 +455,7 @@ const a = class { exports.a = a; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -487,11 +493,11 @@ exports.a = a; { "fileName": "./a.ts", "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -522,21 +528,27 @@ exports.a = a; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1806 + "size": 1874 } tsconfig.json:: @@ -588,7 +600,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -625,11 +637,11 @@ Found 1 error in a.ts:1 { "fileName": "./a.ts", "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -657,21 +669,27 @@ Found 1 error in a.ts:1 "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1753 + "size": 1821 } tsconfig.json:: @@ -871,7 +889,7 @@ exports.c = void 0; exports.c = "hello"; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -953,12 +971,16 @@ exports.c = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: @@ -1004,7 +1026,7 @@ const a = class { exports.a = a; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1044,11 +1066,11 @@ exports.a = a; { "fileName": "./a.ts", "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -1088,7 +1110,11 @@ exports.a = a; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -1102,21 +1128,27 @@ exports.a = a; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 2114 + "size": 2209 } tsconfig.json:: @@ -1143,7 +1175,7 @@ exports.a = void 0; exports.a = "hello"; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1227,12 +1259,16 @@ exports.a = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1611 + "size": 1638 } tsconfig.json:: @@ -1256,7 +1292,7 @@ Output:: Found 1 error in c.ts:1 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1338,12 +1374,16 @@ Found 1 error in c.ts:1 "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noCheck/semantic-errors-with-incremental.js b/testdata/baselines/reference/tsc/noCheck/semantic-errors-with-incremental.js index 79f70620..9f42a3e0 100644 --- a/testdata/baselines/reference/tsc/noCheck/semantic-errors-with-incremental.js +++ b/testdata/baselines/reference/tsc/noCheck/semantic-errors-with-incremental.js @@ -466,7 +466,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c3aef4914dc04eedbda88b614f5cc47-export const a: number = \"hello\";","signature":"03ee330dc35a9c186b6cc67781eafb11-export declare const a: number;\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c3aef4914dc04eedbda88b614f5cc47-export const a: number = \"hello\";","signature":"03ee330dc35a9c186b6cc67781eafb11-export declare const a: number;\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -535,12 +535,16 @@ Found 1 error in a.ts:1 "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1398 + "size": 1425 } tsconfig.json:: @@ -735,7 +739,7 @@ exports.c = void 0; exports.c = "hello"; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -817,12 +821,16 @@ exports.c = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: @@ -844,7 +852,7 @@ export declare const a: number; //// [/home/src/workspaces/project/a.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c3aef4914dc04eedbda88b614f5cc47-export const a: number = \"hello\";","signature":"03ee330dc35a9c186b6cc67781eafb11-export declare const a: number;\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c3aef4914dc04eedbda88b614f5cc47-export const a: number = \"hello\";","signature":"03ee330dc35a9c186b6cc67781eafb11-export declare const a: number;\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -928,12 +936,16 @@ export declare const a: number; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1615 + "size": 1642 } tsconfig.json:: @@ -955,7 +967,7 @@ export declare const a = "hello"; //// [/home/src/workspaces/project/a.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1039,12 +1051,16 @@ export declare const a = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1611 + "size": 1638 } tsconfig.json:: @@ -1068,7 +1084,7 @@ Output:: Found 1 error in c.ts:1 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1150,12 +1166,16 @@ Found 1 error in c.ts:1 "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noCheck/syntax-errors-with-incremental.js b/testdata/baselines/reference/tsc/noCheck/syntax-errors-with-incremental.js index 3dea3854..402fd4c2 100644 --- a/testdata/baselines/reference/tsc/noCheck/syntax-errors-with-incremental.js +++ b/testdata/baselines/reference/tsc/noCheck/syntax-errors-with-incremental.js @@ -768,7 +768,7 @@ exports.c = void 0; exports.c = "hello"; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -850,12 +850,16 @@ exports.c = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: @@ -888,7 +892,7 @@ exports.a = void 0; exports.a = "hello; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","errors":true,"checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1fca32c5d452470ed9d0aa38bbe62e60-export const a = \"hello","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","errors":true,"checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1fca32c5d452470ed9d0aa38bbe62e60-export const a = \"hello","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -973,12 +977,16 @@ exports.a = "hello; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1622 + "size": 1649 } tsconfig.json:: @@ -1003,7 +1011,7 @@ exports.a = void 0; exports.a = "hello"; //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","checkPending":true,"root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[2,[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1087,12 +1095,16 @@ exports.a = "hello"; "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1611 + "size": 1638 } tsconfig.json:: @@ -1116,7 +1128,7 @@ Output:: Found 1 error in c.ts:1 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"270675b5bc3d695752ac89c2c3af7b2e-export const a = \"hello\";","signature":"8db48ef76072c70d24f212a9f210f622-export declare const a = \"hello\";\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"32c618963fbf4ae5f1475f9be91d77bb-export const c: number = \"hello\";","signature":"330cf13f2bbf810d913e97d0cc189ea6-export declare const c: number;\n","impliedNodeFormat":1}],"options":{"declaration":true},"semanticDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1198,12 +1210,16 @@ Found 1 error in c.ts:1 "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1589 + "size": 1616 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/changes-composite.js b/testdata/baselines/reference/tsc/noEmit/changes-composite.js index 684ab7b0..37ee8204 100644 --- a/testdata/baselines/reference/tsc/noEmit/changes-composite.js +++ b/testdata/baselines/reference/tsc/noEmit/changes-composite.js @@ -331,7 +331,7 @@ Errors Files 1 src/indirectUse.ts:2 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;",{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]],"affectedFilesPendingEmit":[2,[4],3,[5]],"latestChangedDtsFile":"./src/noChangeFileWithEmitSpecificError.d.ts","emitSignatures":[[2,"8743eb01f3ddad300611aa9bbf6b6c0a-export declare class classC {\n prop: number;\n}\n"],[4,"abe7d9981d6018efb6b2b794f40a1607-export {};\n"],[5,"abe7d9981d6018efb6b2b794f40a1607-export {};\n"]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;",{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]],"affectedFilesPendingEmit":[2,[4],3,[5]],"latestChangedDtsFile":"./src/noChangeFileWithEmitSpecificError.d.ts","emitSignatures":[[2,"8743eb01f3ddad300611aa9bbf6b6c0a-export declare class classC {\n prop: number;\n}\n"],[4,"abe7d9981d6018efb6b2b794f40a1607-export {};\n"],[5,"abe7d9981d6018efb6b2b794f40a1607-export {};\n"]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -463,7 +463,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -471,7 +476,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -485,7 +493,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -493,7 +506,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -553,7 +569,7 @@ Errors Files ] } ], - "size": 3190 + "size": 3298 } tsconfig.json:: @@ -825,7 +841,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]],"latestChangedDtsFile":"./src/class.d.ts"} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]],"latestChangedDtsFile":"./src/class.d.ts"} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -967,7 +983,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -975,7 +996,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -989,7 +1013,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -997,7 +1026,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -1005,7 +1037,7 @@ exports.classC = classC; ] ], "latestChangedDtsFile": "./src/class.d.ts", - "size": 3093 + "size": 3201 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/changes-incremental-declaration.js b/testdata/baselines/reference/tsc/noEmit/changes-incremental-declaration.js index 5b783b64..095b898f 100644 --- a/testdata/baselines/reference/tsc/noEmit/changes-incremental-declaration.js +++ b/testdata/baselines/reference/tsc/noEmit/changes-incremental-declaration.js @@ -330,7 +330,7 @@ Errors Files 1 src/indirectUse.ts:2 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;",{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]],"affectedFilesPendingEmit":[2,[4],3,[5]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;",{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]],"affectedFilesPendingEmit":[2,[4],3,[5]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -462,7 +462,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -470,7 +475,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -484,7 +492,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -492,7 +505,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -525,7 +541,7 @@ Errors Files ] ] ], - "size": 2906 + "size": 3014 } tsconfig.json:: @@ -803,7 +819,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/src/indirectUse.d.ts] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -945,7 +961,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -953,7 +974,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -967,7 +991,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -975,14 +1004,17 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } ] ] ], - "size": 3053 + "size": 3161 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/changes-incremental.js b/testdata/baselines/reference/tsc/noEmit/changes-incremental.js index e7d2f13a..169d7db3 100644 --- a/testdata/baselines/reference/tsc/noEmit/changes-incremental.js +++ b/testdata/baselines/reference/tsc/noEmit/changes-incremental.js @@ -272,7 +272,7 @@ Errors Files 1 src/indirectUse.ts:2 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]],"affectedFilesPendingEmit":[2,4,3,5]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]],"affectedFilesPendingEmit":[2,4,3,5]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -405,7 +405,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -413,7 +418,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -427,7 +435,12 @@ Errors Files "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -435,7 +448,10 @@ Errors Files "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -464,7 +480,7 @@ Errors Files 5 ] ], - "size": 2807 + "size": 2915 } tsconfig.json:: @@ -713,7 +729,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -836,7 +852,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -844,7 +865,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -858,7 +882,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -866,14 +895,17 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } ] ] ], - "size": 2582 + "size": 2690 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-composite.js b/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-composite.js index 36c0d08c..446644d5 100644 --- a/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-composite.js +++ b/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-composite.js @@ -521,7 +521,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]],"latestChangedDtsFile":"./src/class.d.ts"} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"composite":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]],"latestChangedDtsFile":"./src/class.d.ts"} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -663,7 +663,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -671,7 +676,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -685,7 +693,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -693,7 +706,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -701,7 +717,7 @@ exports.classC = classC; ] ], "latestChangedDtsFile": "./src/class.d.ts", - "size": 3093 + "size": 3201 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-incremental-declaration.js b/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-incremental-declaration.js index 06cf8ee6..ee6f0436 100644 --- a/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-incremental-declaration.js +++ b/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-incremental-declaration.js @@ -497,7 +497,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/src/indirectUse.d.ts] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}","signature":"b46de008dd76697ce12a1dca20c0bf9e-export declare function writeLog(s: string): void;\n","impliedNodeFormat":1},{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","signature":"86b693f65e0d5bed7e4ac554c2edb8ba-declare function someFunc(arguments: boolean, ...rest: any[]): void;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"options":{"declaration":true},"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -639,7 +639,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -647,7 +652,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -661,7 +669,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -669,14 +682,17 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } ] ] ], - "size": 3053 + "size": 3161 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-incremental.js b/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-incremental.js index 30ecfe76..671a78cf 100644 --- a/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-incremental.js +++ b/testdata/baselines/reference/tsc/noEmit/changes-with-initial-noEmit-incremental.js @@ -412,7 +412,7 @@ exports.classC = classC; //// [/home/src/workspaces/project/src/indirectClass.js] *rewrite with same content* //// [/home/src/workspaces/project/src/indirectUse.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"message":"Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?","relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"message":"'prop1' is declared here."}]}]]]} +{"version":"FakeTSVersion","root":[[2,7]],"fileNames":["lib.d.ts","./src/class.ts","./src/indirectClass.ts","./src/directUse.ts","./src/indirectUse.ts","./src/noChangeFile.ts","./src/noChangeFileWithEmitSpecificError.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5da9f4ab128bbaf87adf83ca7ae8e2d-export class classC {\n prop1 = 1;\n}","signature":"e36cbd492db9c71062d723d518b6277f-export declare class classC {\n prop1: number;\n}\n","impliedNodeFormat":1},{"version":"2d32895543847620d7c9848ddd3a7306-import { classC } from './class';\nexport class indirectClass {\n classC = new classC();\n}","signature":"4c7e50f9604f4038b2f1bafae04987bb-import { classC } from './class';\nexport declare class indirectClass {\n classC: classC;\n}\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},{"version":"1e7a664a983b65ba5fbd926c9dad4a26-import { indirectClass } from './indirectClass';\nnew indirectClass().classC.prop;","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1},"12f2d04905c254bde932222194cd2d1b-export function writeLog(s: string) {\n}",{"version":"f54e687ca7ac9fc3c2161967d09e9950-function someFunc(arguments: boolean, ...rest: any[]) {\n}","affectsGlobalScope":true,"impliedNodeFormat":1}],"fileIdsList":[[3],[2]],"referencedMap":[[4,1],[3,2],[5,1]],"semanticDiagnosticsPerFile":[[4,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]],[5,[{"pos":76,"end":80,"code":2551,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","messageArgs":["prop","classC","prop1"],"relatedInformation":[{"file":2,"pos":26,"end":31,"code":2728,"category":3,"messageKey":"_0_is_declared_here_2728","messageArgs":["prop1"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -545,7 +545,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -553,7 +558,10 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } @@ -567,7 +575,12 @@ exports.classC = classC; "end": 80, "code": 2551, "category": 1, - "message": "Property 'prop' does not exist on type 'classC'. Did you mean 'prop1'?", + "messageKey": "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", + "messageArgs": [ + "prop", + "classC", + "prop1" + ], "relatedInformation": [ { "file": "./src/class.ts", @@ -575,14 +588,17 @@ exports.classC = classC; "end": 31, "code": 2728, "category": 3, - "message": "'prop1' is declared here." + "messageKey": "_0_is_declared_here_2728", + "messageArgs": [ + "prop1" + ] } ] } ] ] ], - "size": 2770 + "size": 2878 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/dts-errors-with-declaration-enable-changes-with-multiple-files.js b/testdata/baselines/reference/tsc/noEmit/dts-errors-with-declaration-enable-changes-with-multiple-files.js index fbd4468c..cb01d234 100644 --- a/testdata/baselines/reference/tsc/noEmit/dts-errors-with-declaration-enable-changes-with-multiple-files.js +++ b/testdata/baselines/reference/tsc/noEmit/dts-errors-with-declaration-enable-changes-with-multiple-files.js @@ -193,7 +193,7 @@ Errors Files 1 d.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17],[4,17],[5,17]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17],[4,17],[5,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -268,14 +268,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -289,14 +295,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -310,14 +322,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -358,7 +376,7 @@ Errors Files ] ] ], - "size": 2084 + "size": 2240 } tsconfig.json:: @@ -407,7 +425,7 @@ Errors Files 1 d.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };"],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[[2,49],[3,49],[4,49],[5,49]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };"],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[[2,49],[3,49],[4,49],[5,49]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -483,14 +501,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -504,14 +528,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -525,14 +555,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -573,7 +609,7 @@ Errors Files ] ] ], - "size": 2106 + "size": 2262 } tsconfig.json:: @@ -690,7 +726,7 @@ const d = class { exports.d = d; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","signature":"797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]],[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -731,11 +767,11 @@ exports.d = d; { "fileName": "./a.ts", "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": "CommonJS", "original": { "version": "9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };", - "signature": "ee8f9d3f76983159b6f8f0407d3b0dff-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable a.", + "signature": "797d7267ef7f35dc3f989be23b6d4fe3-export declare const a: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "impliedNodeFormat": 1 } }, @@ -753,22 +789,22 @@ exports.d = d; { "fileName": "./c.ts", "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": "CommonJS", "original": { "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": 1 } }, { "fileName": "./d.ts", "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": "CommonJS", "original": { "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": 1 } } @@ -785,14 +821,20 @@ exports.d = d; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -806,14 +848,20 @@ exports.d = d; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -827,21 +875,27 @@ exports.d = d; "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } ] ] ], - "size": 3087 + "size": 3291 } tsconfig.json:: @@ -861,7 +915,7 @@ tsgo --noEmit ExitStatus:: Success Output:: //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.","impliedNodeFormat":1}],"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n","impliedNodeFormat":1}],"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -924,22 +978,22 @@ Output:: { "fileName": "./c.ts", "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": "CommonJS", "original": { "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": 1 } }, { "fileName": "./d.ts", "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": "CommonJS", "original": { "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": 1 } } @@ -953,14 +1007,20 @@ Output:: "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -974,14 +1034,20 @@ Output:: "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -995,7 +1061,7 @@ Output:: 2 ] ], - "size": 2663 + "size": 2799 } tsconfig.json:: @@ -1036,7 +1102,7 @@ Errors Files 1 d.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[[2,17],[3,16],[4,16],[5,16]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[[2,17],[3,16],[4,16],[5,16]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1099,22 +1165,22 @@ Errors Files { "fileName": "./c.ts", "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": "CommonJS", "original": { "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": 1 } }, { "fileName": "./d.ts", "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": "CommonJS", "original": { "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": 1 } } @@ -1131,14 +1197,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -1152,14 +1224,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -1200,7 +1278,7 @@ Errors Files ] ] ], - "size": 2720 + "size": 2856 } tsconfig.json:: @@ -1239,7 +1317,7 @@ Errors Files 1 d.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.","impliedNodeFormat":1}],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable c."}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[[2,49],[3,48],[4,48],[5,48]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };","signature":"e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n","impliedNodeFormat":1}],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[4,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["c"]}]}]],[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[[2,49],[3,48],[4,48],[5,48]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1302,22 +1380,22 @@ Errors Files { "fileName": "./c.ts", "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": "CommonJS", "original": { "version": "6f729672e1964d12037938bd07604115-export const c = class { private p = 10; };", - "signature": "e2ca0ad93099a06094277675c8c60e6f-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable c.", + "signature": "e1e85d69ff8bbf5440c12f8f1badf3e4-export declare const c: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nc\n", "impliedNodeFormat": 1 } }, { "fileName": "./d.ts", "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": "CommonJS", "original": { "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": 1 } } @@ -1335,14 +1413,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable c." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "c" + ] } ] } @@ -1356,14 +1440,20 @@ Errors Files "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -1404,7 +1494,7 @@ Errors Files ] ] ], - "size": 2742 + "size": 2878 } tsconfig.json:: @@ -1432,7 +1522,7 @@ Output:: Found 1 error in d.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"dc7165893e9c62cfeea6f0fad1d8b57c-export const c = class { public p = 10; };","signature":"17c24c6640bff8629aa96eed43575ace-export declare const c: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.","impliedNodeFormat":1}],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[5,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable d."}]}]]],"affectedFilesPendingEmit":[[2,49],[3,48],[4,49],[5,48]]} +{"version":"FakeTSVersion","root":[[2,5]],"fileNames":["lib.d.ts","./a.ts","./b.ts","./c.ts","./d.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"257f0ffae056266a216e22aca9e25055-export const a = class { public p = 10; };","signature":"1aa32af20adf1f5d970642bd31541eeb-export declare const a: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1},{"version":"dc7165893e9c62cfeea6f0fad1d8b57c-export const c = class { public p = 10; };","signature":"17c24c6640bff8629aa96eed43575ace-export declare const c: {\n new (): {\n p: number;\n };\n};\n","impliedNodeFormat":1},{"version":"eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };","signature":"9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n","impliedNodeFormat":1}],"options":{"declaration":true,"declarationMap":true},"emitDiagnosticsPerFile":[[5,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["d"]}]}]]],"affectedFilesPendingEmit":[[2,49],[3,48],[4,49],[5,48]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1506,11 +1596,11 @@ Found 1 error in d.ts:1 { "fileName": "./d.ts", "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": "CommonJS", "original": { "version": "eee493071f513e65e5368e45a4d35584-export const d = class { private p = 10; };", - "signature": "da46c64a7214d458d5aad6924e4d69d3-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(13,1): error9027: Add a type annotation to the variable d.", + "signature": "9bb613afbef9c5e40a1cbd833df92c7f-export declare const d: {\n new (): {\n p: number;\n };\n};\n\n(13,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(13,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\nd\n", "impliedNodeFormat": 1 } } @@ -1528,14 +1618,20 @@ Found 1 error in d.ts:1 "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable d." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "d" + ] } ] } @@ -1576,7 +1672,7 @@ Found 1 error in d.ts:1 ] ] ], - "size": 2318 + "size": 2386 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/dts-errors-with-incremental-as-modules.js b/testdata/baselines/reference/tsc/noEmit/dts-errors-with-incremental-as-modules.js index 08131594..eac12bb8 100644 --- a/testdata/baselines/reference/tsc/noEmit/dts-errors-with-incremental-as-modules.js +++ b/testdata/baselines/reference/tsc/noEmit/dts-errors-with-incremental-as-modules.js @@ -29,7 +29,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"9c1fc7106f3a21aadb5219db8b3209bc-export const a = class { private p = 10; };","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":13,"end":14,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -88,14 +88,20 @@ Found 1 error in a.ts:1 "end": 14, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 13, "end": 14, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -120,7 +126,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1368 + "size": 1420 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -403,7 +409,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -440,12 +446,12 @@ Found 1 error in a.ts:1 { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -474,14 +480,20 @@ Found 1 error in a.ts:1 "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -498,7 +510,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1795 + "size": 1863 } tsconfig.json:: @@ -539,7 +551,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;","signature":"eaed5dafb4668e1b7c86b65b584b776a-export declare const b = 10;\n","impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -576,12 +588,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -610,21 +622,27 @@ const a = class { "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1759 + "size": 1827 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/dts-errors-with-incremental.js b/testdata/baselines/reference/tsc/noEmit/dts-errors-with-incremental.js index 21f7e2d3..26f97a2b 100644 --- a/testdata/baselines/reference/tsc/noEmit/dts-errors-with-incremental.js +++ b/testdata/baselines/reference/tsc/noEmit/dts-errors-with-incremental.js @@ -27,7 +27,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -81,14 +81,20 @@ Found 1 error in a.ts:1 "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -105,7 +111,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1341 + "size": 1393 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -344,7 +350,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -376,12 +382,12 @@ Found 1 error in a.ts:1 { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -399,14 +405,20 @@ Found 1 error in a.ts:1 "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -423,7 +435,7 @@ Found 1 error in a.ts:1 ] ] ], - "size": 1614 + "size": 1682 } tsconfig.json:: @@ -464,7 +476,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":true},"emitDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":6,"end":7,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -496,12 +508,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -519,21 +531,27 @@ const a = class { "end": 7, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 6, "end": 7, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } ] ] ], - "size": 1578 + "size": 1646 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js b/testdata/baselines/reference/tsc/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js index ad330475..57fd7cf9 100644 --- a/testdata/baselines/reference/tsc/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js +++ b/testdata/baselines/reference/tsc/noEmit/dts-errors-without-dts-enabled-with-incremental-as-modules.js @@ -320,7 +320,7 @@ tsgo --noEmit ExitStatus:: Success Output:: //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -357,12 +357,12 @@ Output:: { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -384,7 +384,7 @@ Output:: 2 ] ], - "size": 1393 + "size": 1409 } tsconfig.json:: @@ -406,7 +406,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false}} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false}} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -443,12 +443,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -463,7 +463,7 @@ const a = class { "options": { "declaration": false }, - "size": 1362 + "size": 1378 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/dts-errors-without-dts-enabled-with-incremental.js b/testdata/baselines/reference/tsc/noEmit/dts-errors-without-dts-enabled-with-incremental.js index e75cb287..25372313 100644 --- a/testdata/baselines/reference/tsc/noEmit/dts-errors-without-dts-enabled-with-incremental.js +++ b/testdata/baselines/reference/tsc/noEmit/dts-errors-without-dts-enabled-with-incremental.js @@ -276,7 +276,7 @@ tsgo --noEmit ExitStatus:: Success Output:: //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -308,12 +308,12 @@ Output:: { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -329,7 +329,7 @@ Output:: 2 ] ], - "size": 1324 + "size": 1340 } tsconfig.json:: @@ -351,7 +351,7 @@ const a = class { }; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false}} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };","signature":"e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false}} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -383,12 +383,12 @@ const a = class { { "fileName": "./a.ts", "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": "CommonJS", "original": { "version": "54435c7adb578d59d7e39dd2f567250e-const a = class { private p = 10; };", - "signature": "26341e8dc85f0d296deed3b6fe76a0dd-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property 'p' of exported anonymous class type may not be private or protected.\n(6,1): error9027: Add a type annotation to the variable a.", + "signature": "e4289913a1e3c6021f5a6745f65d4044-declare const a: {\n new (): {\n p: number;\n };\n};\n\n(6,1): error4094: Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094\np\n\n(6,1): error9027: Add_a_type_annotation_to_the_variable_0_9027\na\n", "affectsGlobalScope": true, "impliedNodeFormat": 1 } @@ -397,7 +397,7 @@ const a = class { "options": { "declaration": false }, - "size": 1293 + "size": 1309 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/semantic-errors-with-incremental-as-modules.js b/testdata/baselines/reference/tsc/noEmit/semantic-errors-with-incremental-as-modules.js index 549ea01b..8a074888 100644 --- a/testdata/baselines/reference/tsc/noEmit/semantic-errors-with-incremental-as-modules.js +++ b/testdata/baselines/reference/tsc/noEmit/semantic-errors-with-incremental-as-modules.js @@ -25,7 +25,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"a49e791c9509caf97ef39f9e765d5015-export const a: number = \"hello\"","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2,3]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"a49e791c9509caf97ef39f9e765d5015-export const a: number = \"hello\"","907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2,3]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -84,7 +84,11 @@ Found 1 error in a.ts:1 "end": 14, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -101,7 +105,7 @@ Found 1 error in a.ts:1 3 ] ], - "size": 1204 + "size": 1231 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -358,7 +362,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -424,7 +428,11 @@ Found 1 error in a.ts:1 "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -436,7 +444,7 @@ Found 1 error in a.ts:1 2 ] ], - "size": 1327 + "size": 1354 } tsconfig.json:: @@ -464,7 +472,7 @@ Found 1 error in a.ts:1 const a = "hello"; //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1},"907abc8137ceb88f0ddd6eccfa92d573-export const b = 10;"],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -530,12 +538,16 @@ const a = "hello"; "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1296 + "size": 1323 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmit/semantic-errors-with-incremental.js b/testdata/baselines/reference/tsc/noEmit/semantic-errors-with-incremental.js index d8d37eb0..2ef820b0 100644 --- a/testdata/baselines/reference/tsc/noEmit/semantic-errors-with-incremental.js +++ b/testdata/baselines/reference/tsc/noEmit/semantic-errors-with-incremental.js @@ -23,7 +23,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -77,7 +77,11 @@ Found 1 error in a.ts:1 "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -89,7 +93,7 @@ Found 1 error in a.ts:1 2 ] ], - "size": 1184 + "size": 1211 } //// [/home/src/tslibs/TS/Lib/lib.d.ts] *Lib* /// @@ -314,7 +318,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -369,7 +373,11 @@ Found 1 error in a.ts:1 "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] @@ -381,7 +389,7 @@ Found 1 error in a.ts:1 2 ] ], - "size": 1258 + "size": 1285 } tsconfig.json:: @@ -407,7 +415,7 @@ Found 1 error in a.ts:1 //// [/home/src/projects/project/a.js] *rewrite with same content* //// [/home/src/projects/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type 'string' is not assignable to type 'number'."}]]]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","./a.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"903d9216256112700b1325b61dcb7717-const a: number = \"hello\"","signature":"a87bf21f13058d40be607df702228523-declare const a: number;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"declaration":false},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]]]} //// [/home/src/projects/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -462,12 +470,16 @@ Found 1 error in a.ts:1 "end": 7, "code": 2322, "category": 1, - "message": "Type 'string' is not assignable to type 'number'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "string", + "number" + ] } ] ] ], - "size": 1227 + "size": 1254 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmitOnError/dts-errors-with-declaration-with-incremental.js b/testdata/baselines/reference/tsc/noEmitOnError/dts-errors-with-declaration-with-incremental.js index 9ad5ae42..60737ba2 100644 --- a/testdata/baselines/reference/tsc/noEmitOnError/dts-errors-with-declaration-with-incremental.js +++ b/testdata/baselines/reference/tsc/noEmitOnError/dts-errors-with-declaration-with-incremental.js @@ -60,7 +60,7 @@ interface Symbol { } declare const console: { log(msg: any): void; }; //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":53,"end":54,"code":4094,"category":1,"message":"Property 'p' of exported anonymous class type may not be private or protected.","relatedInformation":[{"pos":53,"end":54,"code":9027,"category":1,"message":"Add a type annotation to the variable a."}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17],[4,17]]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","6cc24027429965f7fa7493c1b9efd532-import { A } from \"../shared/types/db\";\nexport const a = class { private p = 10; };","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":53,"end":54,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["p"],"relatedInformation":[{"pos":53,"end":54,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["a"]}]}]]],"affectedFilesPendingEmit":[[2,17],[3,17],[4,17]]} //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -139,14 +139,20 @@ declare const console: { log(msg: any): void; }; "end": 54, "code": 4094, "category": 1, - "message": "Property 'p' of exported anonymous class type may not be private or protected.", + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "p" + ], "relatedInformation": [ { "pos": 53, "end": 54, "code": 9027, "category": 1, - "message": "Add a type annotation to the variable a." + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "a" + ] } ] } @@ -179,7 +185,7 @@ declare const console: { log(msg: any): void; }; ] ] ], - "size": 1628 + "size": 1680 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmitOnError/file-deleted-before-fixing-error-with-noEmitOnError.js b/testdata/baselines/reference/tsc/noEmitOnError/file-deleted-before-fixing-error-with-noEmitOnError.js index 68b50449..4cf35eb3 100644 --- a/testdata/baselines/reference/tsc/noEmitOnError/file-deleted-before-fixing-error-with-noEmitOnError.js +++ b/testdata/baselines/reference/tsc/noEmitOnError/file-deleted-before-fixing-error-with-noEmitOnError.js @@ -48,7 +48,7 @@ interface Symbol { } declare const console: { log(msg: any): void; }; //// [/home/src/workspaces/project/outDir/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","../file1.ts","../file2.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"15ec141484c003c242081ba307fd0794-export const x: 30 = \"hello\";","f7d221ab360f516a6280e3b725f4cd31-export class D { }"],"options":{"noEmitOnError":true,"outDir":"./"},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type '\"hello\"' is not assignable to type '30'."}]]],"affectedFilesPendingEmit":[2,3]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","../file1.ts","../file2.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"15ec141484c003c242081ba307fd0794-export const x: 30 = \"hello\";","f7d221ab360f516a6280e3b725f4cd31-export class D { }"],"options":{"noEmitOnError":true,"outDir":"./"},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["\"hello\"","30"]}]]],"affectedFilesPendingEmit":[2,3]} //// [/home/src/workspaces/project/outDir/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -108,7 +108,11 @@ declare const console: { log(msg: any): void; }; "end": 14, "code": 2322, "category": 1, - "message": "Type '\"hello\"' is not assignable to type '30'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "\"hello\"", + "30" + ] } ] ] @@ -125,7 +129,7 @@ declare const console: { log(msg: any): void; }; 3 ] ], - "size": 1223 + "size": 1250 } tsconfig.json:: @@ -151,7 +155,7 @@ Output:: Found 1 error in file1.ts:1 //// [/home/src/workspaces/project/outDir/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../file1.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"15ec141484c003c242081ba307fd0794-export const x: 30 = \"hello\";"],"options":{"noEmitOnError":true,"outDir":"./"},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"message":"Type '\"hello\"' is not assignable to type '30'."}]]],"affectedFilesPendingEmit":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../file1.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"15ec141484c003c242081ba307fd0794-export const x: 30 = \"hello\";"],"options":{"noEmitOnError":true,"outDir":"./"},"semanticDiagnosticsPerFile":[[2,[{"pos":13,"end":14,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["\"hello\"","30"]}]]],"affectedFilesPendingEmit":[2]} //// [/home/src/workspaces/project/outDir/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -200,7 +204,11 @@ Found 1 error in file1.ts:1 "end": 14, "code": 2322, "category": 1, - "message": "Type '\"hello\"' is not assignable to type '30'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "\"hello\"", + "30" + ] } ] ] @@ -212,7 +220,7 @@ Found 1 error in file1.ts:1 2 ] ], - "size": 1149 + "size": 1176 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmitOnError/semantic-errors-with-declaration-with-incremental.js b/testdata/baselines/reference/tsc/noEmitOnError/semantic-errors-with-declaration-with-incremental.js index 19e0e565..ffc2b7b6 100644 --- a/testdata/baselines/reference/tsc/noEmitOnError/semantic-errors-with-declaration-with-incremental.js +++ b/testdata/baselines/reference/tsc/noEmitOnError/semantic-errors-with-declaration-with-incremental.js @@ -56,7 +56,7 @@ interface Symbol { } declare const console: { log(msg: any): void; }; //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"affectedFilesPendingEmit":[2,3,4]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":true,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[2,3,4]} //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -135,7 +135,11 @@ declare const console: { log(msg: any): void; }; "end": 47, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] @@ -157,7 +161,7 @@ declare const console: { log(msg: any): void; }; 4 ] ], - "size": 1445 + "size": 1472 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmitOnError/semantic-errors-with-incremental.js b/testdata/baselines/reference/tsc/noEmitOnError/semantic-errors-with-incremental.js index 6720293a..c8267385 100644 --- a/testdata/baselines/reference/tsc/noEmitOnError/semantic-errors-with-incremental.js +++ b/testdata/baselines/reference/tsc/noEmitOnError/semantic-errors-with-incremental.js @@ -56,7 +56,7 @@ interface Symbol { } declare const console: { log(msg: any): void; }; //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":false,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"message":"Type 'number' is not assignable to type 'string'."}]]],"affectedFilesPendingEmit":[2,3,4]} +{"version":"FakeTSVersion","root":[[2,4]],"fileNames":["lib.d.ts","../shared/types/db.ts","../src/main.ts","../src/other.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"4dba75627964632af83642176cf4b611-export interface A {\n name: string;\n}","21728e732a07c83043db4a93ca54350c-import { A } from \"../shared/types/db\";\nconst a: string = 10;","ac4084c9455da7165ada8cb39f592843-console.log(\"hi\");\nexport { }"],"fileIdsList":[[2]],"options":{"declaration":false,"noEmitOnError":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":46,"end":47,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[2,3,4]} //// [/user/username/projects/noEmitOnError/dev-build/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -135,7 +135,11 @@ declare const console: { log(msg: any): void; }; "end": 47, "code": 2322, "category": 1, - "message": "Type 'number' is not assignable to type 'string'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] } ] ] @@ -157,7 +161,7 @@ declare const console: { log(msg: any): void; }; 4 ] ], - "size": 1446 + "size": 1473 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/noEmitOnError/when-declarationMap-changes.js b/testdata/baselines/reference/tsc/noEmitOnError/when-declarationMap-changes.js index 28ab717d..47ae7bdf 100644 --- a/testdata/baselines/reference/tsc/noEmitOnError/when-declarationMap-changes.js +++ b/testdata/baselines/reference/tsc/noEmitOnError/when-declarationMap-changes.js @@ -149,7 +149,7 @@ Output:: Found 1 error in a.ts:1 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6792320cbdee0286d2b3e83ff1d9fcc1-const x: 20 = 10;","signature":"c4dd771ef0ee0838482d28bc7dea6269-declare const x: 20;\n","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4448aee3ffd6eaf52054c6f2413c128a-const y = 10;","signature":"b0061f8cf6b7f4ef02673fae62fc90dd-declare const y = 10;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"noEmitOnError":true},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"message":"Type '10' is not assignable to type '20'."}]]],"affectedFilesPendingEmit":[2,[3,48]],"latestChangedDtsFile":"./b.d.ts","emitSignatures":[[2,["4be7af7f970696121f4f582a5d074177-declare const x = 10;\n"]],[3,[]]]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.d.ts","./a.ts","./b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6792320cbdee0286d2b3e83ff1d9fcc1-const x: 20 = 10;","signature":"c4dd771ef0ee0838482d28bc7dea6269-declare const x: 20;\n","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4448aee3ffd6eaf52054c6f2413c128a-const y = 10;","signature":"b0061f8cf6b7f4ef02673fae62fc90dd-declare const y = 10;\n","affectsGlobalScope":true,"impliedNodeFormat":1}],"options":{"composite":true,"declaration":true,"declarationMap":true,"noEmitOnError":true},"semanticDiagnosticsPerFile":[[2,[{"pos":6,"end":7,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["10","20"]}]]],"affectedFilesPendingEmit":[2,[3,48]],"latestChangedDtsFile":"./b.d.ts","emitSignatures":[[2,["4be7af7f970696121f4f582a5d074177-declare const x = 10;\n"]],[3,[]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -225,7 +225,11 @@ Found 1 error in a.ts:1 "end": 7, "code": 2322, "category": 1, - "message": "Type '10' is not assignable to type '20'." + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "10", + "20" + ] } ] ] @@ -267,7 +271,7 @@ Found 1 error in a.ts:1 ] } ], - "size": 1620 + "size": 1647 } tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/projectReferences/issues-a-nice-error-when-the-input-file-is-missing-when-module-reference-is-not-relative.js b/testdata/baselines/reference/tsc/projectReferences/issues-a-nice-error-when-the-input-file-is-missing-when-module-reference-is-not-relative.js index 8175413d..70775185 100644 --- a/testdata/baselines/reference/tsc/projectReferences/issues-a-nice-error-when-the-input-file-is-missing-when-module-reference-is-not-relative.js +++ b/testdata/baselines/reference/tsc/projectReferences/issues-a-nice-error-when-the-input-file-is-missing-when-module-reference-is-not-relative.js @@ -66,7 +66,7 @@ export {}; Object.defineProperty(exports, "__esModule", { value: true }); //// [/home/src/workspaces/project/beta/bin/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"311c3bac923f08ac35ab2246c3464fb7-import { m } from '@alpha/a'","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./"},"semanticDiagnosticsPerFile":[[2,[{"pos":18,"end":28,"code":6305,"category":1,"message":"Output file '/home/src/workspaces/project/alpha/bin/a.d.ts' has not been built from source file '/home/src/workspaces/project/alpha/a.ts'."}]]],"latestChangedDtsFile":"./b.d.ts"} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"311c3bac923f08ac35ab2246c3464fb7-import { m } from '@alpha/a'","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./"},"semanticDiagnosticsPerFile":[[2,[{"pos":18,"end":28,"code":6305,"category":1,"messageKey":"Output_file_0_has_not_been_built_from_source_file_1_6305","messageArgs":["/home/src/workspaces/project/alpha/bin/a.d.ts","/home/src/workspaces/project/alpha/a.ts"]}]]],"latestChangedDtsFile":"./b.d.ts"} //// [/home/src/workspaces/project/beta/bin/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -120,13 +120,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); "end": 28, "code": 6305, "category": 1, - "message": "Output file '/home/src/workspaces/project/alpha/bin/a.d.ts' has not been built from source file '/home/src/workspaces/project/alpha/a.ts'." + "messageKey": "Output_file_0_has_not_been_built_from_source_file_1_6305", + "messageArgs": [ + "/home/src/workspaces/project/alpha/bin/a.d.ts", + "/home/src/workspaces/project/alpha/a.ts" + ] } ] ] ], "latestChangedDtsFile": "./b.d.ts", - "size": 1325 + "size": 1352 } beta/tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/projectReferences/issues-a-nice-error-when-the-input-file-is-missing.js b/testdata/baselines/reference/tsc/projectReferences/issues-a-nice-error-when-the-input-file-is-missing.js index be88f86f..913e9640 100644 --- a/testdata/baselines/reference/tsc/projectReferences/issues-a-nice-error-when-the-input-file-is-missing.js +++ b/testdata/baselines/reference/tsc/projectReferences/issues-a-nice-error-when-the-input-file-is-missing.js @@ -64,7 +64,7 @@ export {}; Object.defineProperty(exports, "__esModule", { value: true }); //// [/home/src/workspaces/project/beta/bin/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"fcbf49879e154aae077c688a18cd60c0-import { m } from '../alpha/a'","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./"},"semanticDiagnosticsPerFile":[[2,[{"pos":18,"end":30,"code":6305,"category":1,"message":"Output file '/home/src/workspaces/project/alpha/bin/a.d.ts' has not been built from source file '/home/src/workspaces/project/alpha/a.ts'."}]]],"latestChangedDtsFile":"./b.d.ts"} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.d.ts","../b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"fcbf49879e154aae077c688a18cd60c0-import { m } from '../alpha/a'","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./"},"semanticDiagnosticsPerFile":[[2,[{"pos":18,"end":30,"code":6305,"category":1,"messageKey":"Output_file_0_has_not_been_built_from_source_file_1_6305","messageArgs":["/home/src/workspaces/project/alpha/bin/a.d.ts","/home/src/workspaces/project/alpha/a.ts"]}]]],"latestChangedDtsFile":"./b.d.ts"} //// [/home/src/workspaces/project/beta/bin/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -118,13 +118,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); "end": 30, "code": 6305, "category": 1, - "message": "Output file '/home/src/workspaces/project/alpha/bin/a.d.ts' has not been built from source file '/home/src/workspaces/project/alpha/a.ts'." + "messageKey": "Output_file_0_has_not_been_built_from_source_file_1_6305", + "messageArgs": [ + "/home/src/workspaces/project/alpha/bin/a.d.ts", + "/home/src/workspaces/project/alpha/a.ts" + ] } ] ] ], "latestChangedDtsFile": "./b.d.ts", - "size": 1327 + "size": 1354 } beta/tsconfig.json:: diff --git a/testdata/baselines/reference/tsc/projectReferences/redirects-to-the-output-dts-file.js b/testdata/baselines/reference/tsc/projectReferences/redirects-to-the-output-dts-file.js index fad1de31..af46244a 100644 --- a/testdata/baselines/reference/tsc/projectReferences/redirects-to-the-output-dts-file.js +++ b/testdata/baselines/reference/tsc/projectReferences/redirects-to-the-output-dts-file.js @@ -72,7 +72,7 @@ export {}; Object.defineProperty(exports, "__esModule", { value: true }); //// [/home/src/workspaces/project/beta/bin/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../../alpha/bin/a.d.ts","../b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"3145b36c4687eb0550eabb198d0c0d22-export { };",{"version":"fcbf49879e154aae077c688a18cd60c0-import { m } from '../alpha/a'","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":9,"end":10,"code":2305,"category":1,"message":"Module '\"../alpha/bin/a\"' has no exported member 'm'."}]]],"latestChangedDtsFile":"./b.d.ts"} +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.d.ts","../../alpha/bin/a.d.ts","../b.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"3145b36c4687eb0550eabb198d0c0d22-export { };",{"version":"fcbf49879e154aae077c688a18cd60c0-import { m } from '../alpha/a'","signature":"abe7d9981d6018efb6b2b794f40a1607-export {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"outDir":"./"},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":9,"end":10,"code":2305,"category":1,"messageKey":"Module_0_has_no_exported_member_1_2305","messageArgs":["\"../alpha/bin/a\"","m"]}]]],"latestChangedDtsFile":"./b.d.ts"} //// [/home/src/workspaces/project/beta/bin/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -143,13 +143,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); "end": 10, "code": 2305, "category": 1, - "message": "Module '\"../alpha/bin/a\"' has no exported member 'm'." + "messageKey": "Module_0_has_no_exported_member_1_2305", + "messageArgs": [ + "\"../alpha/bin/a\"", + "m" + ] } ] ] ], "latestChangedDtsFile": "./b.d.ts", - "size": 1359 + "size": 1386 } beta/tsconfig.json::