@zzzen/pyright-internal 1.2.0-dev.20260809 → 1.2.0-dev.20260823
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer/analyzerNodeInfo.d.ts +119 -24
- package/dist/analyzer/analyzerNodeInfo.js +408 -89
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/binder.d.ts +6 -3
- package/dist/analyzer/binder.js +157 -70
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +5 -2
- package/dist/analyzer/checker.js +92 -34
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.d.ts +2 -1
- package/dist/analyzer/codeFlowEngine.js +12 -10
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/codeFlowUtils.d.ts +2 -1
- package/dist/analyzer/codeFlowUtils.js +2 -3
- package/dist/analyzer/codeFlowUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +47 -7
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructors.js +18 -8
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.d.ts +6 -4
- package/dist/analyzer/dataClasses.js +119 -75
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declarationUtils.d.ts +2 -1
- package/dist/analyzer/declarationUtils.js +2 -2
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/decorators.d.ts +5 -4
- package/dist/analyzer/decorators.js +38 -21
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/enums.d.ts +5 -4
- package/dist/analyzer/enums.js +11 -10
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +1 -1
- package/dist/analyzer/importResolver.js +5 -3
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importStatementUtils.d.ts +3 -1
- package/dist/analyzer/importStatementUtils.js +14 -7
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.d.ts +2 -1
- package/dist/analyzer/namedTuples.js +3 -4
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.d.ts +3 -2
- package/dist/analyzer/operations.js +8 -8
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +2 -2
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +13 -11
- package/dist/analyzer/parseTreeUtils.js +62 -36
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/parseTreeWalker.d.ts +7 -2
- package/dist/analyzer/parseTreeWalker.js +29 -175
- package/dist/analyzer/parseTreeWalker.js.map +1 -1
- package/dist/analyzer/patternMatching.d.ts +4 -3
- package/dist/analyzer/patternMatching.js +47 -43
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +12 -0
- package/dist/analyzer/program.js +235 -29
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.d.ts +4 -3
- package/dist/analyzer/properties.js +7 -8
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +14 -2
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/scope.d.ts +3 -0
- package/dist/analyzer/scope.js +10 -0
- package/dist/analyzer/scope.js.map +1 -1
- package/dist/analyzer/scopeUtils.d.ts +4 -3
- package/dist/analyzer/scopeUtils.js +8 -8
- package/dist/analyzer/scopeUtils.js.map +1 -1
- package/dist/analyzer/sentinel.d.ts +2 -1
- package/dist/analyzer/sentinel.js +2 -3
- package/dist/analyzer/sentinel.js.map +1 -1
- package/dist/analyzer/service.js +28 -10
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceEnumerator.d.ts +5 -0
- package/dist/analyzer/sourceEnumerator.js +57 -3
- package/dist/analyzer/sourceEnumerator.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +12 -6
- package/dist/analyzer/sourceFile.js +73 -50
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.d.ts +1 -0
- package/dist/analyzer/sourceFileInfoUtils.js +8 -0
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/sourceMapper.d.ts +4 -1
- package/dist/analyzer/sourceMapper.js +14 -8
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/symbol.d.ts +4 -1
- package/dist/analyzer/symbol.js +8 -0
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/testWalker.js +2 -1
- package/dist/analyzer/testWalker.js.map +1 -1
- package/dist/analyzer/tracePrinter.d.ts +2 -1
- package/dist/analyzer/tracePrinter.js +2 -2
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/tuples.d.ts +3 -2
- package/dist/analyzer/tuples.js +5 -5
- package/dist/analyzer/tuples.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.d.ts +6 -2
- package/dist/analyzer/typeCacheUtils.js +16 -37
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.d.ts +5 -7
- package/dist/analyzer/typeDocStringUtils.js +229 -132
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.d.ts +2 -0
- package/dist/analyzer/typeEvaluator.js +1280 -302
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +2 -0
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.d.ts +3 -2
- package/dist/analyzer/typeGuards.js +37 -33
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +12 -9
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.js +3 -1
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.d.ts +4 -3
- package/dist/analyzer/typedDicts.js +15 -14
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +11 -1
- package/dist/analyzer/types.js +48 -0
- package/dist/analyzer/types.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/collectionUtils.js +15 -6
- package/dist/common/collectionUtils.js.map +1 -1
- package/dist/common/commandLineOptions.d.ts +1 -0
- package/dist/common/commandLineOptions.js.map +1 -1
- package/dist/common/configOptions.d.ts +4 -1
- package/dist/common/configOptions.js +68 -12
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/envVarUtils.d.ts +1 -0
- package/dist/common/envVarUtils.js +41 -10
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/common/extensibility.d.ts +3 -1
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/extraPathGlob.d.ts +12 -0
- package/dist/common/extraPathGlob.js +315 -0
- package/dist/common/extraPathGlob.js.map +1 -0
- package/dist/common/host.d.ts +2 -0
- package/dist/common/host.js.map +1 -1
- package/dist/common/languageServerInterface.d.ts +2 -1
- package/dist/common/languageServerInterface.js.map +1 -1
- package/dist/common/pathConsts.d.ts +1 -0
- package/dist/common/pathConsts.js +11 -1
- package/dist/common/pathConsts.js.map +1 -1
- package/dist/common/processUtils.d.ts +4 -2
- package/dist/common/processUtils.js +3 -0
- package/dist/common/processUtils.js.map +1 -1
- package/dist/common/stringUtils.d.ts +6 -0
- package/dist/common/stringUtils.js +87 -5
- package/dist/common/stringUtils.js.map +1 -1
- package/dist/common/textEditTracker.d.ts +3 -1
- package/dist/common/textEditTracker.js +8 -6
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/common/textRangeCollection.d.ts +1 -0
- package/dist/common/textRangeCollection.js +32 -1
- package/dist/common/textRangeCollection.js.map +1 -1
- package/dist/common/uri/uriUtils.d.ts +3 -0
- package/dist/common/uri/uriUtils.js +65 -15
- package/dist/common/uri/uriUtils.js.map +1 -1
- package/dist/fileSystemMapping.d.ts +10 -0
- package/dist/fileSystemMapping.js +176 -0
- package/dist/fileSystemMapping.js.map +1 -0
- package/dist/languageService/analyzerServiceExecutor.js +2 -1
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +1 -0
- package/dist/languageService/autoImporter.js +32 -5
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.d.ts +7 -0
- package/dist/languageService/callHierarchyProvider.js +97 -11
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +30 -8
- package/dist/languageService/completionProvider.js +298 -93
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/definitionProvider.js +7 -6
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentHighlightProvider.js +2 -1
- package/dist/languageService/documentHighlightProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +3 -1
- package/dist/languageService/documentSymbolCollector.js +78 -14
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.js +3 -2
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/fileWatcherDynamicFeature.js +28 -1
- package/dist/languageService/fileWatcherDynamicFeature.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +2 -1
- package/dist/languageService/hoverProvider.js +48 -16
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/importSorter.d.ts +3 -1
- package/dist/languageService/importSorter.js +4 -2
- package/dist/languageService/importSorter.js.map +1 -1
- package/dist/languageService/importStatementCandidates.js +4 -2
- package/dist/languageService/importStatementCandidates.js.map +1 -1
- package/dist/languageService/quickActions.js +2 -1
- package/dist/languageService/quickActions.js.map +1 -1
- package/dist/languageService/referencesProvider.js +12 -5
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.d.ts +3 -0
- package/dist/languageService/signatureHelpProvider.js +56 -18
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.d.ts +2 -1
- package/dist/languageService/symbolIndexer.js +7 -7
- package/dist/languageService/symbolIndexer.js.map +1 -1
- package/dist/languageService/tooltipUtils.d.ts +1 -1
- package/dist/languageService/tooltipUtils.js +103 -35
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.js +3 -2
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +12 -0
- package/dist/localization/localize.js +14 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +11 -0
- package/dist/localization/package.nls.de.json +11 -0
- package/dist/localization/package.nls.en-us.json +18 -0
- package/dist/localization/package.nls.es.json +11 -0
- package/dist/localization/package.nls.fr.json +11 -0
- package/dist/localization/package.nls.it.json +11 -0
- package/dist/localization/package.nls.ja.json +11 -0
- package/dist/localization/package.nls.ko.json +11 -0
- package/dist/localization/package.nls.pl.json +11 -0
- package/dist/localization/package.nls.pt-br.json +11 -0
- package/dist/localization/package.nls.qps-ploc.json +11 -0
- package/dist/localization/package.nls.ru.json +11 -0
- package/dist/localization/package.nls.tr.json +11 -0
- package/dist/localization/package.nls.zh-cn.json +12 -1
- package/dist/localization/package.nls.zh-tw.json +13 -2
- package/dist/parser/parseNodes.d.ts +85 -80
- package/dist/parser/parseNodes.js +182 -159
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parseTreeUtils.d.ts +3 -0
- package/dist/parser/parseTreeUtils.js +209 -0
- package/dist/parser/parseTreeUtils.js.map +1 -0
- package/dist/parser/parser.d.ts +16 -6
- package/dist/parser/parser.js +210 -144
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/stringAnnotationInfo.d.ts +16 -0
- package/dist/parser/stringAnnotationInfo.js +26 -0
- package/dist/parser/stringAnnotationInfo.js.map +1 -0
- package/dist/readonlyAugmentedFileSystem.d.ts +2 -9
- package/dist/readonlyAugmentedFileSystem.js +17 -144
- package/dist/readonlyAugmentedFileSystem.js.map +1 -1
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/tests/analyzerNodeInfo.test.d.ts +1 -0
- package/dist/tests/analyzerNodeInfo.test.js +113 -0
- package/dist/tests/analyzerNodeInfo.test.js.map +1 -0
- package/dist/tests/collectionUtils.test.js +46 -0
- package/dist/tests/collectionUtils.test.js.map +1 -1
- package/dist/tests/completions.test.js +34 -0
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/config.test.js +131 -6
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/extraPathGlob.test.d.ts +1 -0
- package/dist/tests/extraPathGlob.test.js +434 -0
- package/dist/tests/extraPathGlob.test.js.map +1 -0
- package/dist/tests/fileSystemMapping.test.d.ts +1 -0
- package/dist/tests/fileSystemMapping.test.js +458 -0
- package/dist/tests/fileSystemMapping.test.js.map +1 -0
- package/dist/tests/fourslash/completions.call.typedDict.fourslash.js +23 -0
- package/dist/tests/fourslash/completions.call.typedDict.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js +14 -0
- package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js +7 -0
- package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js +41 -0
- package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js.map +1 -0
- package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js +2 -0
- package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js +5 -0
- package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.stringLiteral.fourslash.js +4 -0
- package/dist/tests/fourslash/completions.stringLiteral.fourslash.js.map +1 -1
- package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js +48 -0
- package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js.map +1 -0
- package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js +8 -2
- package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js.map +1 -1
- package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js +5 -2
- package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js.map +1 -1
- package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js +2 -2
- package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.js +1 -1
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/hoverProvider.test.js +38 -0
- package/dist/tests/hoverProvider.test.js.map +1 -1
- package/dist/tests/importStatementUtils.test.js +6 -3
- package/dist/tests/importStatementUtils.test.js.map +1 -1
- package/dist/tests/ipythonMode.test.js +38 -0
- package/dist/tests/ipythonMode.test.js.map +1 -1
- package/dist/tests/parseTreeUtils.test.js +88 -0
- package/dist/tests/parseTreeUtils.test.js.map +1 -1
- package/dist/tests/parser.test.js +60 -3
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/positionUtils.test.js +23 -0
- package/dist/tests/positionUtils.test.js.map +1 -1
- package/dist/tests/pyrightFileSystem.test.js +41 -0
- package/dist/tests/pyrightFileSystem.test.js.map +1 -1
- package/dist/tests/service.test.js +77 -0
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/sourceEnumeratorSymlink.test.d.ts +1 -0
- package/dist/tests/sourceEnumeratorSymlink.test.js +203 -0
- package/dist/tests/sourceEnumeratorSymlink.test.js.map +1 -0
- package/dist/tests/stringUtils.test.js +84 -0
- package/dist/tests/stringUtils.test.js.map +1 -1
- package/dist/tests/symlinkAliasInvalidation.test.d.ts +1 -0
- package/dist/tests/symlinkAliasInvalidation.test.js +471 -0
- package/dist/tests/symlinkAliasInvalidation.test.js.map +1 -0
- package/dist/tests/testUtils.d.ts +2 -0
- package/dist/tests/testUtils.js +7 -1
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/textEditUtil.test.js +2 -2
- package/dist/tests/textEditUtil.test.js.map +1 -1
- package/dist/tests/textRangeCollection.test.d.ts +1 -0
- package/dist/tests/textRangeCollection.test.js +137 -0
- package/dist/tests/textRangeCollection.test.js.map +1 -0
- package/dist/tests/typeCacheUtils.test.d.ts +1 -0
- package/dist/tests/typeCacheUtils.test.js +69 -0
- package/dist/tests/typeCacheUtils.test.js.map +1 -0
- package/dist/tests/typeEvaluator1.test.js +24 -3
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +8 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +4 -0
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +12 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/typeEvaluator6.test.js +33 -1
- package/dist/tests/typeEvaluator6.test.js.map +1 -1
- package/dist/tests/typeEvaluator7.test.js +29 -0
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typeEvaluator8.test.js +318 -4
- package/dist/tests/typeEvaluator8.test.js.map +1 -1
- package/dist/tests/typeServer/typeCache.test.d.ts +1 -0
- package/dist/tests/typeServer/typeCache.test.js +69 -0
- package/dist/tests/typeServer/typeCache.test.js.map +1 -0
- package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js +18 -0
- package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js.map +1 -1
- package/dist/tests/types.test.d.ts +1 -0
- package/dist/{analyzer/parseTreeCleaner.js → tests/types.test.js} +23 -25
- package/dist/tests/types.test.js.map +1 -0
- package/dist/tests/uri.test.js +51 -0
- package/dist/tests/uri.test.js.map +1 -1
- package/dist/typeServer/notebookDocumentHandler.d.ts +9 -2
- package/dist/typeServer/notebookDocumentHandler.js +16 -6
- package/dist/typeServer/notebookDocumentHandler.js.map +1 -1
- package/dist/typeServer/programWrapper.d.ts +1 -0
- package/dist/typeServer/programWrapper.js +28 -15
- package/dist/typeServer/programWrapper.js.map +1 -1
- package/dist/typeServer/protocol/tspSupplemental.d.ts +1 -1
- package/dist/typeServer/protocol/tspSupplemental.js +2 -2
- package/dist/typeServer/server.d.ts +13 -2
- package/dist/typeServer/server.js +36 -23
- package/dist/typeServer/server.js.map +1 -1
- package/dist/typeServer/typeCache.d.ts +8 -4
- package/dist/typeServer/typeCache.js +33 -5
- package/dist/typeServer/typeCache.js.map +1 -1
- package/dist/typeServer/typeEvalUtils.d.ts +2 -1
- package/dist/typeServer/typeEvalUtils.js +7 -3
- package/dist/typeServer/typeEvalUtils.js.map +1 -1
- package/dist/typeServer/typeServerFileSystem.d.ts +10 -9
- package/dist/typeServer/typeServerFileSystem.js +16 -12
- package/dist/typeServer/typeServerFileSystem.js.map +1 -1
- package/package.json +7 -5
- package/dist/analyzer/parseTreeCleaner.d.ts +0 -8
- package/dist/analyzer/parseTreeCleaner.js.map +0 -1
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* symlinkAliasInvalidation.test.ts
|
|
4
|
+
*
|
|
5
|
+
* Regression tests for stale diagnostics across filesystem symlink aliases.
|
|
6
|
+
*
|
|
7
|
+
* A filesystem symlink and its target are tracked as two independent
|
|
8
|
+
* SourceFileInfo entries (the source-file map is keyed by uri.key, with no
|
|
9
|
+
* realpath/inode dedup). When a change is routed to one alias (e.g. the fs
|
|
10
|
+
* watcher fires for the real target path after an editor save/undo), the other
|
|
11
|
+
* alias — and any consumer that imported *that* alias — must also be
|
|
12
|
+
* invalidated. Invalidation recurses only through `importedBy`, so without an
|
|
13
|
+
* explicit realpath-twin bridge the consumer is never re-checked, its
|
|
14
|
+
* diagnostics are never recomputed, and a stale diagnostic persists until the
|
|
15
|
+
* file is manually edited.
|
|
16
|
+
*
|
|
17
|
+
* The twin must be invalidated at the CONTENT level (markDirty -> re-parse from
|
|
18
|
+
* disk), not merely re-check-required: otherwise it keeps its cached symbol
|
|
19
|
+
* table and the consumer re-resolves against stale symbols.
|
|
20
|
+
*/
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
const assert_1 = __importDefault(require("assert"));
|
|
26
|
+
const uri_1 = require("../common/uri/uri");
|
|
27
|
+
const testState_1 = require("./harness/fourslash/testState");
|
|
28
|
+
// Consumer imports the symbol from the SYMLINK twin; a change routed to the real
|
|
29
|
+
// target must still re-check it.
|
|
30
|
+
const consumerOfTwin = `
|
|
31
|
+
// @filename: linked/__init__.py
|
|
32
|
+
//// # package marker
|
|
33
|
+
|
|
34
|
+
// @filename: linked/shared.py
|
|
35
|
+
//// class SharedType:
|
|
36
|
+
//// pass
|
|
37
|
+
|
|
38
|
+
// @filename: consumer.py
|
|
39
|
+
//// from linked.shared_link import SharedType
|
|
40
|
+
//// x = SharedType()
|
|
41
|
+
`;
|
|
42
|
+
// Consumer imports the symbol from the REAL target; a change routed to the
|
|
43
|
+
// symlink twin must still re-check it (reverse direction).
|
|
44
|
+
const consumerOfTarget = `
|
|
45
|
+
// @filename: linked/__init__.py
|
|
46
|
+
//// # package marker
|
|
47
|
+
|
|
48
|
+
// @filename: linked/shared.py
|
|
49
|
+
//// class SharedType:
|
|
50
|
+
//// pass
|
|
51
|
+
|
|
52
|
+
// @filename: consumer.py
|
|
53
|
+
//// from linked.shared import SharedType
|
|
54
|
+
//// x = SharedType()
|
|
55
|
+
`;
|
|
56
|
+
const removedTargetContent = 'class RenamedType:\n pass\n';
|
|
57
|
+
test('symlink twin invalidation clears stale diagnostics on the consumer of the twin', () => {
|
|
58
|
+
const state = (0, testState_1.parseAndGetTestState)(consumerOfTwin, '/proj').state;
|
|
59
|
+
const provider = state.serviceProvider;
|
|
60
|
+
const sharedUri = uri_1.Uri.file('/proj/linked/shared.py', provider);
|
|
61
|
+
const linkUri = uri_1.Uri.file('/proj/linked/shared_link.py', provider);
|
|
62
|
+
const consumerUri = uri_1.Uri.file('/proj/consumer.py', provider);
|
|
63
|
+
// shared_link.py is a symlink to shared.py, so it resolves to the same
|
|
64
|
+
// realpath and exposes the same symbols.
|
|
65
|
+
state.testFS.symlinkSync('/proj/linked/shared.py', '/proj/linked/shared_link.py');
|
|
66
|
+
state.program.addTrackedFiles([sharedUri, linkUri, consumerUri]);
|
|
67
|
+
state.analyze();
|
|
68
|
+
// Baseline: SharedType exists via the symlink twin, so the consumer is clean.
|
|
69
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
70
|
+
// Capture the twin's content version so we can assert it advances (i.e. the
|
|
71
|
+
// twin is invalidated at the CONTENT level, not merely re-check-required).
|
|
72
|
+
const twinVersionBefore = state.program.getSourceFile(linkUri).getFileContentsVersion();
|
|
73
|
+
// Rewrite the backing file to remove SharedType (as an editor save/undo would).
|
|
74
|
+
// Because shared_link.py is a symlink to shared.py, reading the twin now yields
|
|
75
|
+
// the new content too.
|
|
76
|
+
state.testFS.writeFileSync(sharedUri, removedTargetContent);
|
|
77
|
+
// Simulate the fs watcher firing for the real target path only.
|
|
78
|
+
state.program.markFilesDirty([sharedUri], /* evenIfContentsAreSame */ false);
|
|
79
|
+
state.analyze();
|
|
80
|
+
// The twin's content version must advance: co-invalidation calls markDirty on
|
|
81
|
+
// the twin, which re-parses it from disk. If a future refactor downgrades this
|
|
82
|
+
// to re-check-only, the version would stay put and this guard would fail.
|
|
83
|
+
assert_1.default.ok(state.program.getSourceFile(linkUri).getFileContentsVersion() > twinVersionBefore, 'Expected the symlink twin fileContentsVersion to advance after co-invalidation');
|
|
84
|
+
// The consumer imported `linked.shared_link` (the twin), which no longer
|
|
85
|
+
// exposes SharedType. Its stale "clean" diagnostics must be recomputed to the
|
|
86
|
+
// exact unresolved-import error. The exact message (rather than a substring)
|
|
87
|
+
// also guards against a future refactor that downgrades twin invalidation to
|
|
88
|
+
// re-check-only, which would leave the twin's cached symbol table intact and
|
|
89
|
+
// produce no error at all.
|
|
90
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), [unknownImportError('SharedType')]);
|
|
91
|
+
});
|
|
92
|
+
test('symlink target invalidation clears stale diagnostics on the consumer of the real target', () => {
|
|
93
|
+
const state = (0, testState_1.parseAndGetTestState)(consumerOfTarget, '/proj').state;
|
|
94
|
+
const provider = state.serviceProvider;
|
|
95
|
+
const sharedUri = uri_1.Uri.file('/proj/linked/shared.py', provider);
|
|
96
|
+
const linkUri = uri_1.Uri.file('/proj/linked/shared_link.py', provider);
|
|
97
|
+
const consumerUri = uri_1.Uri.file('/proj/consumer.py', provider);
|
|
98
|
+
state.testFS.symlinkSync('/proj/linked/shared.py', '/proj/linked/shared_link.py');
|
|
99
|
+
state.program.addTrackedFiles([sharedUri, linkUri, consumerUri]);
|
|
100
|
+
state.analyze();
|
|
101
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
102
|
+
// Rewrite the backing file, then route the change to the SYMLINK twin only.
|
|
103
|
+
state.testFS.writeFileSync(sharedUri, removedTargetContent);
|
|
104
|
+
state.program.markFilesDirty([linkUri], /* evenIfContentsAreSame */ false);
|
|
105
|
+
state.analyze();
|
|
106
|
+
// The consumer imported `linked.shared` (the real target); marking the twin
|
|
107
|
+
// dirty must bridge back to the target and re-check the consumer.
|
|
108
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), [unknownImportError('SharedType')]);
|
|
109
|
+
});
|
|
110
|
+
test('non-symlinked files do not spuriously invalidate unrelated consumers', () => {
|
|
111
|
+
// Two distinct real modules (no symlink). Changing one must not re-check a
|
|
112
|
+
// consumer of the other — guards against over-broad alias invalidation.
|
|
113
|
+
const code = `
|
|
114
|
+
// @filename: pkg/__init__.py
|
|
115
|
+
//// # package marker
|
|
116
|
+
|
|
117
|
+
// @filename: pkg/a.py
|
|
118
|
+
//// class AType:
|
|
119
|
+
//// pass
|
|
120
|
+
|
|
121
|
+
// @filename: pkg/b.py
|
|
122
|
+
//// class BType:
|
|
123
|
+
//// pass
|
|
124
|
+
|
|
125
|
+
// @filename: consumer.py
|
|
126
|
+
//// from pkg.b import BType
|
|
127
|
+
//// y = BType()
|
|
128
|
+
`;
|
|
129
|
+
const state = (0, testState_1.parseAndGetTestState)(code, '/proj').state;
|
|
130
|
+
const provider = state.serviceProvider;
|
|
131
|
+
const aUri = uri_1.Uri.file('/proj/pkg/a.py', provider);
|
|
132
|
+
const consumerUri = uri_1.Uri.file('/proj/consumer.py', provider);
|
|
133
|
+
state.analyze();
|
|
134
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
135
|
+
// Change an unrelated module and mark it dirty.
|
|
136
|
+
state.testFS.writeFileSync(aUri, 'class ARenamed:\n pass\n');
|
|
137
|
+
state.program.markFilesDirty([aUri], /* evenIfContentsAreSame */ false);
|
|
138
|
+
state.analyze();
|
|
139
|
+
// Consumer of pkg.b is unaffected.
|
|
140
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
141
|
+
});
|
|
142
|
+
test('closing a symlink alias co-invalidates the twin so its consumer is re-checked', () => {
|
|
143
|
+
// Exercises the setFileClosed entrypoint (not just markFilesDirty). The
|
|
144
|
+
// consumer imports the symlink twin; the real target is open and then closed
|
|
145
|
+
// after its backing file changed on disk. setFileClosed must bridge to the
|
|
146
|
+
// twin (same realpath) and re-check the twin's consumer.
|
|
147
|
+
const state = (0, testState_1.parseAndGetTestState)(consumerOfTwin, '/proj').state;
|
|
148
|
+
const provider = state.serviceProvider;
|
|
149
|
+
const sharedUri = uri_1.Uri.file('/proj/linked/shared.py', provider);
|
|
150
|
+
const linkUri = uri_1.Uri.file('/proj/linked/shared_link.py', provider);
|
|
151
|
+
const consumerUri = uri_1.Uri.file('/proj/consumer.py', provider);
|
|
152
|
+
state.testFS.symlinkSync('/proj/linked/shared.py', '/proj/linked/shared_link.py');
|
|
153
|
+
state.program.addTrackedFiles([sharedUri, linkUri, consumerUri]);
|
|
154
|
+
// Open the real target as an editor document, then analyze.
|
|
155
|
+
state.program.setFileOpened(sharedUri, 1, 'class SharedType:\n pass\n');
|
|
156
|
+
state.analyze();
|
|
157
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
158
|
+
// The backing file changes on disk (rename/undo save), then the target
|
|
159
|
+
// document is closed. Closing must co-invalidate the symlink twin.
|
|
160
|
+
state.testFS.writeFileSync(sharedUri, removedTargetContent);
|
|
161
|
+
state.program.setFileClosed(sharedUri);
|
|
162
|
+
state.analyze();
|
|
163
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), [unknownImportError('SharedType')]);
|
|
164
|
+
});
|
|
165
|
+
test('open-content invalidation (evenIfContentsAreSame) still bridges symlink twins when disk changed', () => {
|
|
166
|
+
// The open-document update path calls markFilesDirty(evenIfContentsAreSame=true).
|
|
167
|
+
// When the backing file actually changed on disk, twin co-invalidation must
|
|
168
|
+
// still fire, and unrelated files must not be dragged in.
|
|
169
|
+
const code = `
|
|
170
|
+
// @filename: linked/__init__.py
|
|
171
|
+
//// # package marker
|
|
172
|
+
|
|
173
|
+
// @filename: linked/shared.py
|
|
174
|
+
//// class SharedType:
|
|
175
|
+
//// pass
|
|
176
|
+
|
|
177
|
+
// @filename: unrelated.py
|
|
178
|
+
//// value = 1
|
|
179
|
+
|
|
180
|
+
// @filename: consumer.py
|
|
181
|
+
//// from linked.shared_link import SharedType
|
|
182
|
+
//// x = SharedType()
|
|
183
|
+
`;
|
|
184
|
+
const state = (0, testState_1.parseAndGetTestState)(code, '/proj').state;
|
|
185
|
+
const provider = state.serviceProvider;
|
|
186
|
+
const sharedUri = uri_1.Uri.file('/proj/linked/shared.py', provider);
|
|
187
|
+
const linkUri = uri_1.Uri.file('/proj/linked/shared_link.py', provider);
|
|
188
|
+
const consumerUri = uri_1.Uri.file('/proj/consumer.py', provider);
|
|
189
|
+
const unrelatedUri = uri_1.Uri.file('/proj/unrelated.py', provider);
|
|
190
|
+
state.testFS.symlinkSync('/proj/linked/shared.py', '/proj/linked/shared_link.py');
|
|
191
|
+
state.program.addTrackedFiles([sharedUri, linkUri, consumerUri, unrelatedUri]);
|
|
192
|
+
state.analyze();
|
|
193
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
194
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, unrelatedUri), []);
|
|
195
|
+
state.testFS.writeFileSync(sharedUri, removedTargetContent);
|
|
196
|
+
state.program.markFilesDirty([sharedUri], /* evenIfContentsAreSame */ true);
|
|
197
|
+
state.analyze();
|
|
198
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), [unknownImportError('SharedType')]);
|
|
199
|
+
// The unrelated file (not a realpath alias) must remain clean.
|
|
200
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, unrelatedUri), []);
|
|
201
|
+
});
|
|
202
|
+
test('an in-memory open edit (evenIfContentsAreSame, no disk change) does not re-check the twin', () => {
|
|
203
|
+
// Regression for over-invalidation: updateOpenFileContents calls
|
|
204
|
+
// markFilesDirty(evenIfContentsAreSame=true) on every keystroke. Twin fan-out
|
|
205
|
+
// must NOT force the other alias (and its importer subtree) to be re-checked
|
|
206
|
+
// when the twin's on-disk contents are unchanged, otherwise every keystroke on
|
|
207
|
+
// one alias triggers a full recheck of the other alias's dependents.
|
|
208
|
+
const code = `
|
|
209
|
+
// @filename: linked/__init__.py
|
|
210
|
+
//// # package marker
|
|
211
|
+
|
|
212
|
+
// @filename: linked/shared.py
|
|
213
|
+
//// class SharedType:
|
|
214
|
+
//// pass
|
|
215
|
+
|
|
216
|
+
// @filename: consumer.py
|
|
217
|
+
//// from linked.shared_link import SharedType
|
|
218
|
+
//// x = SharedType()
|
|
219
|
+
`;
|
|
220
|
+
const state = (0, testState_1.parseAndGetTestState)(code, '/proj').state;
|
|
221
|
+
const provider = state.serviceProvider;
|
|
222
|
+
const sharedUri = uri_1.Uri.file('/proj/linked/shared.py', provider);
|
|
223
|
+
const linkUri = uri_1.Uri.file('/proj/linked/shared_link.py', provider);
|
|
224
|
+
const consumerUri = uri_1.Uri.file('/proj/consumer.py', provider);
|
|
225
|
+
state.testFS.symlinkSync('/proj/linked/shared.py', '/proj/linked/shared_link.py');
|
|
226
|
+
state.program.addTrackedFiles([sharedUri, linkUri, consumerUri]);
|
|
227
|
+
// Open the real target as an editor document, then analyze so everything is clean.
|
|
228
|
+
state.program.setFileOpened(sharedUri, 1, 'class SharedType:\n pass\n');
|
|
229
|
+
state.analyze();
|
|
230
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
231
|
+
// Simulate a keystroke: the open document's in-memory contents change but the
|
|
232
|
+
// backing file on disk does NOT. This is exactly what updateOpenFileContents
|
|
233
|
+
// does (markFilesDirty with evenIfContentsAreSame=true).
|
|
234
|
+
state.program.setFileOpened(sharedUri, 2, 'class SharedType:\n pass\n# edit\n');
|
|
235
|
+
state.program.markFilesDirty([sharedUri], /* evenIfContentsAreSame */ true);
|
|
236
|
+
// The edited (open) file itself needs re-checking, but the twin alias must not
|
|
237
|
+
// have been dragged in, since its on-disk contents are unchanged.
|
|
238
|
+
const linkInfo = state.program.getSourceFileInfo(linkUri);
|
|
239
|
+
const consumerInfo = state.program.getSourceFileInfo(consumerUri);
|
|
240
|
+
assert_1.default.ok(linkInfo, 'expected twin alias to be tracked');
|
|
241
|
+
assert_1.default.ok(consumerInfo, 'expected twin consumer to be tracked');
|
|
242
|
+
assert_1.default.strictEqual(linkInfo.sourceFile.isCheckingRequired(), false, 'twin alias must not be re-checked on an in-memory-only edit');
|
|
243
|
+
assert_1.default.strictEqual(consumerInfo.sourceFile.isCheckingRequired(), false, "twin's consumer must not be re-checked on an in-memory-only edit");
|
|
244
|
+
});
|
|
245
|
+
test('a 3+ member symlink group fans out to every alias consumer', () => {
|
|
246
|
+
// Two symlinks to one target, with a distinct consumer per symlink. A change
|
|
247
|
+
// routed to the target must re-check BOTH alias consumers — exercises the
|
|
248
|
+
// multi-entry aliasKeys fan-out (not just a 2-member group).
|
|
249
|
+
const code = `
|
|
250
|
+
// @filename: linked/__init__.py
|
|
251
|
+
//// # package marker
|
|
252
|
+
|
|
253
|
+
// @filename: linked/shared.py
|
|
254
|
+
//// class SharedType:
|
|
255
|
+
//// pass
|
|
256
|
+
|
|
257
|
+
// @filename: consumer1.py
|
|
258
|
+
//// from linked.link1 import SharedType
|
|
259
|
+
//// a = SharedType()
|
|
260
|
+
|
|
261
|
+
// @filename: consumer2.py
|
|
262
|
+
//// from linked.link2 import SharedType
|
|
263
|
+
//// b = SharedType()
|
|
264
|
+
`;
|
|
265
|
+
const state = (0, testState_1.parseAndGetTestState)(code, '/proj').state;
|
|
266
|
+
const provider = state.serviceProvider;
|
|
267
|
+
const sharedUri = uri_1.Uri.file('/proj/linked/shared.py', provider);
|
|
268
|
+
const link1Uri = uri_1.Uri.file('/proj/linked/link1.py', provider);
|
|
269
|
+
const link2Uri = uri_1.Uri.file('/proj/linked/link2.py', provider);
|
|
270
|
+
const consumer1Uri = uri_1.Uri.file('/proj/consumer1.py', provider);
|
|
271
|
+
const consumer2Uri = uri_1.Uri.file('/proj/consumer2.py', provider);
|
|
272
|
+
state.testFS.symlinkSync('/proj/linked/shared.py', '/proj/linked/link1.py');
|
|
273
|
+
state.testFS.symlinkSync('/proj/linked/shared.py', '/proj/linked/link2.py');
|
|
274
|
+
state.program.addTrackedFiles([sharedUri, link1Uri, link2Uri, consumer1Uri, consumer2Uri]);
|
|
275
|
+
state.analyze();
|
|
276
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumer1Uri), []);
|
|
277
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumer2Uri), []);
|
|
278
|
+
state.testFS.writeFileSync(sharedUri, removedTargetContent);
|
|
279
|
+
state.program.markFilesDirty([sharedUri], /* evenIfContentsAreSame */ false);
|
|
280
|
+
state.analyze();
|
|
281
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumer1Uri), [unknownImportError('SharedType')]);
|
|
282
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumer2Uri), [unknownImportError('SharedType')]);
|
|
283
|
+
});
|
|
284
|
+
test('multiple consumers of the same twin are all re-checked', () => {
|
|
285
|
+
const code = `
|
|
286
|
+
// @filename: linked/__init__.py
|
|
287
|
+
//// # package marker
|
|
288
|
+
|
|
289
|
+
// @filename: linked/shared.py
|
|
290
|
+
//// class SharedType:
|
|
291
|
+
//// pass
|
|
292
|
+
|
|
293
|
+
// @filename: consumer1.py
|
|
294
|
+
//// from linked.shared_link import SharedType
|
|
295
|
+
//// a = SharedType()
|
|
296
|
+
|
|
297
|
+
// @filename: consumer2.py
|
|
298
|
+
//// from linked.shared_link import SharedType
|
|
299
|
+
//// b = SharedType()
|
|
300
|
+
`;
|
|
301
|
+
const state = (0, testState_1.parseAndGetTestState)(code, '/proj').state;
|
|
302
|
+
const provider = state.serviceProvider;
|
|
303
|
+
const sharedUri = uri_1.Uri.file('/proj/linked/shared.py', provider);
|
|
304
|
+
const linkUri = uri_1.Uri.file('/proj/linked/shared_link.py', provider);
|
|
305
|
+
const consumer1Uri = uri_1.Uri.file('/proj/consumer1.py', provider);
|
|
306
|
+
const consumer2Uri = uri_1.Uri.file('/proj/consumer2.py', provider);
|
|
307
|
+
state.testFS.symlinkSync('/proj/linked/shared.py', '/proj/linked/shared_link.py');
|
|
308
|
+
state.program.addTrackedFiles([sharedUri, linkUri, consumer1Uri, consumer2Uri]);
|
|
309
|
+
state.analyze();
|
|
310
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumer1Uri), []);
|
|
311
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumer2Uri), []);
|
|
312
|
+
state.testFS.writeFileSync(sharedUri, removedTargetContent);
|
|
313
|
+
state.program.markFilesDirty([sharedUri], /* evenIfContentsAreSame */ false);
|
|
314
|
+
state.analyze();
|
|
315
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumer1Uri), [unknownImportError('SharedType')]);
|
|
316
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumer2Uri), [unknownImportError('SharedType')]);
|
|
317
|
+
});
|
|
318
|
+
test('two independent symlink groups do not cross-invalidate', () => {
|
|
319
|
+
const code = `
|
|
320
|
+
// @filename: pkg/__init__.py
|
|
321
|
+
//// # package marker
|
|
322
|
+
|
|
323
|
+
// @filename: pkg/a.py
|
|
324
|
+
//// class TypeA:
|
|
325
|
+
//// pass
|
|
326
|
+
|
|
327
|
+
// @filename: pkg/b.py
|
|
328
|
+
//// class TypeB:
|
|
329
|
+
//// pass
|
|
330
|
+
|
|
331
|
+
// @filename: consumerA.py
|
|
332
|
+
//// from pkg.a_link import TypeA
|
|
333
|
+
//// a = TypeA()
|
|
334
|
+
|
|
335
|
+
// @filename: consumerB.py
|
|
336
|
+
//// from pkg.b_link import TypeB
|
|
337
|
+
//// b = TypeB()
|
|
338
|
+
`;
|
|
339
|
+
const state = (0, testState_1.parseAndGetTestState)(code, '/proj').state;
|
|
340
|
+
const provider = state.serviceProvider;
|
|
341
|
+
const aUri = uri_1.Uri.file('/proj/pkg/a.py', provider);
|
|
342
|
+
const bUri = uri_1.Uri.file('/proj/pkg/b.py', provider);
|
|
343
|
+
const aLinkUri = uri_1.Uri.file('/proj/pkg/a_link.py', provider);
|
|
344
|
+
const bLinkUri = uri_1.Uri.file('/proj/pkg/b_link.py', provider);
|
|
345
|
+
const consumerAUri = uri_1.Uri.file('/proj/consumerA.py', provider);
|
|
346
|
+
const consumerBUri = uri_1.Uri.file('/proj/consumerB.py', provider);
|
|
347
|
+
state.testFS.symlinkSync('/proj/pkg/a.py', '/proj/pkg/a_link.py');
|
|
348
|
+
state.testFS.symlinkSync('/proj/pkg/b.py', '/proj/pkg/b_link.py');
|
|
349
|
+
state.program.addTrackedFiles([aUri, bUri, aLinkUri, bLinkUri, consumerAUri, consumerBUri]);
|
|
350
|
+
state.analyze();
|
|
351
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerAUri), []);
|
|
352
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerBUri), []);
|
|
353
|
+
// Change group A's target only.
|
|
354
|
+
state.testFS.writeFileSync(aUri, 'class RenamedA:\n pass\n');
|
|
355
|
+
state.program.markFilesDirty([aUri], /* evenIfContentsAreSame */ false);
|
|
356
|
+
state.analyze();
|
|
357
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerAUri), [unknownImportError('TypeA')]);
|
|
358
|
+
// Group B is a different realpath group and must stay clean.
|
|
359
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerBUri), []);
|
|
360
|
+
});
|
|
361
|
+
test('alias index survives file removal and re-add', () => {
|
|
362
|
+
// Exercises _unindexRealpathAlias (on removal) and re-indexing (on re-add):
|
|
363
|
+
// after the alias group is torn down and rebuilt, co-invalidation must still
|
|
364
|
+
// work and no stale index entry may misdirect invalidation.
|
|
365
|
+
const state = (0, testState_1.parseAndGetTestState)(consumerOfTwin, '/proj').state;
|
|
366
|
+
const provider = state.serviceProvider;
|
|
367
|
+
const sharedUri = uri_1.Uri.file('/proj/linked/shared.py', provider);
|
|
368
|
+
const linkUri = uri_1.Uri.file('/proj/linked/shared_link.py', provider);
|
|
369
|
+
const consumerUri = uri_1.Uri.file('/proj/consumer.py', provider);
|
|
370
|
+
state.testFS.symlinkSync('/proj/linked/shared.py', '/proj/linked/shared_link.py');
|
|
371
|
+
state.program.addTrackedFiles([sharedUri, linkUri, consumerUri]);
|
|
372
|
+
state.analyze();
|
|
373
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
374
|
+
// Tear down: untrack everything so _removeUnneededFiles evicts the files
|
|
375
|
+
// (and _unindexRealpathAlias runs for the symlink group).
|
|
376
|
+
state.program.setTrackedFiles([]);
|
|
377
|
+
state.analyze();
|
|
378
|
+
assert_1.default.strictEqual(state.program.getSourceFileInfo(linkUri), undefined, 'Expected the symlink twin to be removed from the program after untracking');
|
|
379
|
+
// Re-add the same files; the alias index must be rebuilt from scratch.
|
|
380
|
+
state.program.addTrackedFiles([sharedUri, linkUri, consumerUri]);
|
|
381
|
+
state.analyze();
|
|
382
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
383
|
+
// Co-invalidation must work again against the rebuilt index.
|
|
384
|
+
state.testFS.writeFileSync(sharedUri, removedTargetContent);
|
|
385
|
+
state.program.markFilesDirty([sharedUri], /* evenIfContentsAreSame */ false);
|
|
386
|
+
state.analyze();
|
|
387
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), [unknownImportError('SharedType')]);
|
|
388
|
+
});
|
|
389
|
+
test('a twin first seen as an untracked import is indexed once it becomes tracked', () => {
|
|
390
|
+
// Ordering gap: the symlink twin is discovered first via import resolution
|
|
391
|
+
// (untracked -> skipped by the user-code-only index), then later tracked. The
|
|
392
|
+
// tracked-flip must (re-)index it so co-invalidation applies.
|
|
393
|
+
const state = (0, testState_1.parseAndGetTestState)(consumerOfTwin, '/proj').state;
|
|
394
|
+
const provider = state.serviceProvider;
|
|
395
|
+
const sharedUri = uri_1.Uri.file('/proj/linked/shared.py', provider);
|
|
396
|
+
const linkUri = uri_1.Uri.file('/proj/linked/shared_link.py', provider);
|
|
397
|
+
const consumerUri = uri_1.Uri.file('/proj/consumer.py', provider);
|
|
398
|
+
state.testFS.symlinkSync('/proj/linked/shared.py', '/proj/linked/shared_link.py');
|
|
399
|
+
// Track only the target + consumer. The twin (shared_link.py) is pulled in as
|
|
400
|
+
// an untracked referenced import during analysis.
|
|
401
|
+
state.program.addTrackedFiles([sharedUri, consumerUri]);
|
|
402
|
+
state.analyze();
|
|
403
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
404
|
+
// Now the twin becomes tracked (e.g. enumeration catches up / it is opened).
|
|
405
|
+
state.program.setTrackedFiles([sharedUri, linkUri, consumerUri]);
|
|
406
|
+
state.analyze();
|
|
407
|
+
// Route a change to the real target; the now-tracked twin must be bridged.
|
|
408
|
+
state.testFS.writeFileSync(sharedUri, removedTargetContent);
|
|
409
|
+
state.program.markFilesDirty([sharedUri], /* evenIfContentsAreSame */ false);
|
|
410
|
+
state.analyze();
|
|
411
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), [unknownImportError('SharedType')]);
|
|
412
|
+
});
|
|
413
|
+
test('re-adding only the realpath target rebuilds the alias group', () => {
|
|
414
|
+
// Comment-2 scenario: remove ONLY the realpath target (leaving the symlink
|
|
415
|
+
// twin tracked), then re-add ONLY the target. The alias group must be
|
|
416
|
+
// rebuilt so co-invalidation through the twin keeps working.
|
|
417
|
+
const state = (0, testState_1.parseAndGetTestState)(consumerOfTwin, '/proj').state;
|
|
418
|
+
const provider = state.serviceProvider;
|
|
419
|
+
const sharedUri = uri_1.Uri.file('/proj/linked/shared.py', provider);
|
|
420
|
+
const linkUri = uri_1.Uri.file('/proj/linked/shared_link.py', provider);
|
|
421
|
+
const consumerUri = uri_1.Uri.file('/proj/consumer.py', provider);
|
|
422
|
+
state.testFS.symlinkSync('/proj/linked/shared.py', '/proj/linked/shared_link.py');
|
|
423
|
+
state.program.addTrackedFiles([sharedUri, linkUri, consumerUri]);
|
|
424
|
+
state.analyze();
|
|
425
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
426
|
+
// Untrack only the realpath target; the symlink twin + consumer stay tracked.
|
|
427
|
+
state.program.setTrackedFiles([linkUri, consumerUri]);
|
|
428
|
+
state.analyze();
|
|
429
|
+
assert_1.default.strictEqual(state.program.getSourceFileInfo(sharedUri), undefined, 'Expected the realpath target to be removed from the program after untracking it');
|
|
430
|
+
// Re-add only the realpath target. The alias group (still holding the twin)
|
|
431
|
+
// must be rebuilt to include the target again.
|
|
432
|
+
state.program.setTrackedFiles([sharedUri, linkUri, consumerUri]);
|
|
433
|
+
state.analyze();
|
|
434
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), []);
|
|
435
|
+
// Co-invalidation must work again through the rebuilt group.
|
|
436
|
+
state.testFS.writeFileSync(sharedUri, removedTargetContent);
|
|
437
|
+
state.program.markFilesDirty([sharedUri], /* evenIfContentsAreSame */ false);
|
|
438
|
+
state.analyze();
|
|
439
|
+
assert_1.default.deepStrictEqual(errorMessagesOn(state, consumerUri), [unknownImportError('SharedType')]);
|
|
440
|
+
});
|
|
441
|
+
test('an alias whose realpath target is never indexed does not leak a stale group on removal', () => {
|
|
442
|
+
// A symlink whose resolved target is never added (e.g. it resolves outside
|
|
443
|
+
// the workspace) seeds the alias group with the unindexed target key.
|
|
444
|
+
// Removing the alias must drop the group entirely rather than leaving a
|
|
445
|
+
// permanent one-entry remnant behind that accumulates over a long session.
|
|
446
|
+
const state = (0, testState_1.parseAndGetTestState)(consumerOfTwin, '/proj').state;
|
|
447
|
+
const provider = state.serviceProvider;
|
|
448
|
+
const unindexedTargetUri = uri_1.Uri.file('/proj/linked/ext_real.py', provider);
|
|
449
|
+
const aliasUri = uri_1.Uri.file('/proj/linked/ext_link.py', provider);
|
|
450
|
+
// ext_link.py is a symlink to a file that is never tracked or imported, so
|
|
451
|
+
// only the alias is indexed while its realpath target remains unindexed.
|
|
452
|
+
state.testFS.writeFileSync(unindexedTargetUri, 'value = 1\n');
|
|
453
|
+
state.testFS.symlinkSync('/proj/linked/ext_real.py', '/proj/linked/ext_link.py');
|
|
454
|
+
state.program.addTrackedFiles([aliasUri]);
|
|
455
|
+
state.analyze();
|
|
456
|
+
const aliasMap = state.program._realpathAliasMap;
|
|
457
|
+
assert_1.default.strictEqual(aliasMap.size, 1, 'Expected the alias to seed a realpath group while tracked');
|
|
458
|
+
// Untracking the alias must not leave a lingering realpath group behind,
|
|
459
|
+
// since the only remaining key is the never-indexed target seed.
|
|
460
|
+
state.program.setTrackedFiles([]);
|
|
461
|
+
state.analyze();
|
|
462
|
+
assert_1.default.strictEqual(aliasMap.size, 0, 'Expected no lingering realpath alias group after removing an alias whose target was never indexed');
|
|
463
|
+
});
|
|
464
|
+
function unknownImportError(name) {
|
|
465
|
+
return `"${name}" is unknown import symbol`;
|
|
466
|
+
}
|
|
467
|
+
function errorMessagesOn(state, uri) {
|
|
468
|
+
const diags = state.program.getSourceFile(uri).getDiagnostics(state.configOptions) ?? [];
|
|
469
|
+
return diags.filter((d) => d.category === 0 /* DiagnosticCategory.Error */).map((d) => d.message);
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=symlinkAliasInvalidation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symlinkAliasInvalidation.test.js","sourceRoot":"","sources":["../../../../../src/tests/symlinkAliasInvalidation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Program } from '../analyzer/program';
|
|
2
|
+
import { Scope } from '../analyzer/scope';
|
|
2
3
|
import { ConfigOptions, ExecutionEnvironment } from '../common/configOptions';
|
|
3
4
|
import { ConsoleWithLogLevel } from '../common/console';
|
|
4
5
|
import { Diagnostic } from '../common/diagnostic';
|
|
@@ -8,6 +9,7 @@ import { ParseFileResults, ParseOptions } from '../parser/parser';
|
|
|
8
9
|
export interface FileAnalysisResult {
|
|
9
10
|
fileUri: Uri;
|
|
10
11
|
parseResults?: ParseFileResults | undefined;
|
|
12
|
+
moduleScope?: Scope | undefined;
|
|
11
13
|
errors: Diagnostic[];
|
|
12
14
|
warnings: Diagnostic[];
|
|
13
15
|
infos: Diagnostic[];
|
package/dist/tests/testUtils.js
CHANGED
|
@@ -51,6 +51,7 @@ exports.validateResults = validateResults;
|
|
|
51
51
|
const assert = __importStar(require("assert"));
|
|
52
52
|
const fs = __importStar(require("fs"));
|
|
53
53
|
const path = __importStar(require("path"));
|
|
54
|
+
const AnalyzerNodeInfo = __importStar(require("../analyzer/analyzerNodeInfo"));
|
|
54
55
|
const importResolver_1 = require("../analyzer/importResolver");
|
|
55
56
|
const program_1 = require("../analyzer/program");
|
|
56
57
|
const testWalker_1 = require("../analyzer/testWalker");
|
|
@@ -130,9 +131,13 @@ function getAnalysisResults(program, fileUris, configOptions = new configOptions
|
|
|
130
131
|
return sourceFiles.map((sourceFile, index) => {
|
|
131
132
|
if (sourceFile) {
|
|
132
133
|
const diagnostics = sourceFile.getDiagnostics(configOptions) || [];
|
|
134
|
+
const parseResults = sourceFile.getParseResults();
|
|
133
135
|
const analysisResult = {
|
|
134
136
|
fileUri: sourceFile.getUri(),
|
|
135
|
-
parseResults
|
|
137
|
+
parseResults,
|
|
138
|
+
moduleScope: parseResults
|
|
139
|
+
? AnalyzerNodeInfo.getScope(parseResults.parserOutput.parseTree, program.analyzerNodeInfoContext)
|
|
140
|
+
: undefined,
|
|
136
141
|
errors: diagnostics.filter((diag) => diag.category === 0 /* DiagnosticCategory.Error */),
|
|
137
142
|
warnings: diagnostics.filter((diag) => diag.category === 1 /* DiagnosticCategory.Warning */),
|
|
138
143
|
infos: diagnostics.filter((diag) => diag.category === 2 /* DiagnosticCategory.Information */),
|
|
@@ -147,6 +152,7 @@ function getAnalysisResults(program, fileUris, configOptions = new configOptions
|
|
|
147
152
|
const analysisResult = {
|
|
148
153
|
fileUri: uri_1.Uri.empty(),
|
|
149
154
|
parseResults: undefined,
|
|
155
|
+
moduleScope: undefined,
|
|
150
156
|
errors: [],
|
|
151
157
|
warnings: [],
|
|
152
158
|
infos: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../../../../src/tests/testUtils.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../../../../src/tests/testUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,7 +88,7 @@ test('handle comments', () => {
|
|
|
88
88
|
});
|
|
89
89
|
function verifyRemoveNodes(code) {
|
|
90
90
|
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
|
91
|
-
const tracker = new textEditTracker_1.TextEditTracker();
|
|
91
|
+
const tracker = new textEditTracker_1.TextEditTracker(state.program.analyzerNodeInfoContext);
|
|
92
92
|
const ranges = state.getRanges();
|
|
93
93
|
const changeRanges = _getChangeRanges(ranges);
|
|
94
94
|
for (const range of changeRanges) {
|
|
@@ -103,7 +103,7 @@ function verifyRemoveNodes(code) {
|
|
|
103
103
|
}
|
|
104
104
|
function verifyEdits(code, mergeOnlyDuplications = true) {
|
|
105
105
|
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
|
106
|
-
const tracker = new textEditTracker_1.TextEditTracker(mergeOnlyDuplications);
|
|
106
|
+
const tracker = new textEditTracker_1.TextEditTracker(state.program.analyzerNodeInfoContext, mergeOnlyDuplications);
|
|
107
107
|
const ranges = state.getRanges();
|
|
108
108
|
const changeRanges = _getChangeRanges(ranges);
|
|
109
109
|
for (const range of changeRanges) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textEditUtil.test.js","sourceRoot":"","sources":["../../../../../src/tests/textEditUtil.test.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;AAEH,oDAA4B;AAC5B,mDAAmD;AAEnD,+DAA8D;AAC9D,qDAAsD;AACtD,+DAA4D;AAE5D,6DAAgF;AAChF,qDAAgE;AAEhE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;IACpB,MAAM,IAAI,GAAG;;KAEZ,CAAC;IAEF,WAAW,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE;IACxB,MAAM,IAAI,GAAG;;KAEZ,CAAC;IAEF,WAAW,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE;IACxB,MAAM,IAAI,GAAG;;KAEZ,CAAC;IAEF,WAAW,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC3B,MAAM,IAAI,GAAG;;KAEZ,CAAC;IAEF,WAAW,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACnC,MAAM,IAAI,GAAG;;;KAGZ,CAAC;IAEF,WAAW,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC7B,MAAM,IAAI,GAAG;;KAEZ,CAAC;IAEF,WAAW,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACnC,MAAM,IAAI,GAAG;;KAEZ,CAAC;IAEF,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;IACtC,MAAM,IAAI,GAAG;;KAEZ,CAAC;IAEF,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;IAC9C,MAAM,IAAI,GAAG;;;KAGZ,CAAC;IAEF,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACnC,MAAM,IAAI,GAAG;;KAEZ,CAAC;IAEF,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;IACzB,MAAM,IAAI,GAAG;;;;;KAKZ,CAAC;IAEF,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAA,gCAAoB,EAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,iCAAe,
|
|
1
|
+
{"version":3,"file":"textEditUtil.test.js","sourceRoot":"","sources":["../../../../../src/tests/textEditUtil.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|