@zzzen/pyright-internal 1.2.0-dev.20230820 → 1.2.0-dev.20230827
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/checker.js +46 -64
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +23 -1
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +2 -1
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +1 -1
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/decorators.js +11 -6
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/deprecatedSymbols.d.ts +9 -0
- package/dist/analyzer/deprecatedSymbols.js +292 -0
- package/dist/analyzer/deprecatedSymbols.js.map +1 -0
- package/dist/analyzer/docStringConversion.js +7 -1
- package/dist/analyzer/docStringConversion.js.map +1 -1
- package/dist/analyzer/importResolver.js +5 -0
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/program.d.ts +3 -3
- package/dist/analyzer/program.js +5 -9
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/sourceFile.js +1 -0
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +530 -432
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeGuards.js +15 -4
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +2 -2
- package/dist/analyzer/typeUtils.js +10 -5
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.js +3 -1
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/types.d.ts +6 -1
- package/dist/analyzer/types.js +19 -0
- package/dist/analyzer/types.js.map +1 -1
- package/dist/common/cancellationUtils.d.ts +2 -1
- package/dist/common/cancellationUtils.js +3 -0
- package/dist/common/cancellationUtils.js.map +1 -1
- package/dist/common/configOptions.d.ts +1 -0
- package/dist/common/configOptions.js +5 -1
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/diagnosticRules.d.ts +1 -0
- package/dist/common/diagnosticRules.js +1 -0
- package/dist/common/diagnosticRules.js.map +1 -1
- package/dist/languageService/completionProvider.js +9 -3
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +3 -0
- package/dist/localization/localize.js +1 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +12 -10
- package/dist/localization/package.nls.de.json +12 -10
- package/dist/localization/package.nls.en-us.json +2 -1
- package/dist/localization/package.nls.es.json +12 -10
- package/dist/localization/package.nls.fr.json +12 -10
- package/dist/localization/package.nls.it.json +12 -10
- package/dist/localization/package.nls.ja.json +12 -10
- package/dist/localization/package.nls.ko.json +12 -10
- package/dist/localization/package.nls.pl.json +12 -10
- package/dist/localization/package.nls.pt-br.json +12 -10
- package/dist/localization/package.nls.qps-ploc.json +12 -10
- package/dist/localization/package.nls.ru.json +12 -10
- package/dist/localization/package.nls.tr.json +12 -10
- package/dist/localization/package.nls.zh-cn.json +12 -10
- package/dist/localization/package.nls.zh-tw.json +12 -10
- package/dist/parser/parser.js +2 -0
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.d.ts +1 -1
- package/dist/parser/tokenizer.js +9 -5
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/tests/checker.test.js +34 -13
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/completions.test.js +39 -2
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/docStringConversion.test.js +23 -0
- package/dist/tests/docStringConversion.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +4 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +4 -0
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +14 -20
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +12 -0
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +24 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/workspaceFactory.d.ts +1 -1
- package/dist/workspaceFactory.js +3 -3
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +1 -1
package/dist/analyzer/checker.js
CHANGED
@@ -48,6 +48,7 @@ const stringTokenUtils_1 = require("../parser/stringTokenUtils");
|
|
48
48
|
const AnalyzerNodeInfo = __importStar(require("./analyzerNodeInfo"));
|
49
49
|
const declaration_1 = require("./declaration");
|
50
50
|
const declarationUtils_1 = require("./declarationUtils");
|
51
|
+
const deprecatedSymbols_1 = require("./deprecatedSymbols");
|
51
52
|
const importResolver_1 = require("./importResolver");
|
52
53
|
const importStatementUtils_1 = require("./importStatementUtils");
|
53
54
|
const parameterUtils_1 = require("./parameterUtils");
|
@@ -66,43 +67,6 @@ const typeGuards_1 = require("./typeGuards");
|
|
66
67
|
const typeUtils_1 = require("./typeUtils");
|
67
68
|
const typeVarContext_1 = require("./typeVarContext");
|
68
69
|
const types_1 = require("./types");
|
69
|
-
const deprecatedAliases = new Map([
|
70
|
-
['Tuple', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.tuple', replacementText: 'tuple' }],
|
71
|
-
['List', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.list', replacementText: 'list' }],
|
72
|
-
['Dict', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.dict', replacementText: 'dict' }],
|
73
|
-
['Set', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.set', replacementText: 'set' }],
|
74
|
-
['FrozenSet', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.frozenset', replacementText: 'frozenset' }],
|
75
|
-
['Type', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.type', replacementText: 'type' }],
|
76
|
-
['Deque', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'collections.deque', replacementText: 'collections.deque' }],
|
77
|
-
[
|
78
|
-
'DefaultDict',
|
79
|
-
{
|
80
|
-
version: pythonVersion_1.PythonVersion.V3_9,
|
81
|
-
fullName: 'collections.defaultdict',
|
82
|
-
replacementText: 'collections.defaultdict',
|
83
|
-
},
|
84
|
-
],
|
85
|
-
[
|
86
|
-
'OrderedDict',
|
87
|
-
{
|
88
|
-
version: pythonVersion_1.PythonVersion.V3_9,
|
89
|
-
fullName: 'collections.OrderedDict',
|
90
|
-
replacementText: 'collections.OrderedDict',
|
91
|
-
},
|
92
|
-
],
|
93
|
-
[
|
94
|
-
'Counter',
|
95
|
-
{ version: pythonVersion_1.PythonVersion.V3_9, fullName: 'collections.Counter', replacementText: 'collections.Counter' },
|
96
|
-
],
|
97
|
-
[
|
98
|
-
'ChainMap',
|
99
|
-
{ version: pythonVersion_1.PythonVersion.V3_9, fullName: 'collections.ChainMap', replacementText: 'collections.ChainMap' },
|
100
|
-
],
|
101
|
-
]);
|
102
|
-
const deprecatedSpecialForms = new Map([
|
103
|
-
['Optional', { version: pythonVersion_1.PythonVersion.V3_10, fullName: 'typing.Optional', replacementText: '| None' }],
|
104
|
-
['Union', { version: pythonVersion_1.PythonVersion.V3_10, fullName: 'typing.Union', replacementText: '|' }],
|
105
|
-
]);
|
106
70
|
// When enabled, this debug flag causes the code complexity of
|
107
71
|
// functions to be emitted.
|
108
72
|
const isPrintCodeComplexityEnabled = false;
|
@@ -936,7 +900,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
936
900
|
}
|
937
901
|
visitMemberAccess(node) {
|
938
902
|
const type = this._evaluator.getType(node);
|
939
|
-
this.
|
903
|
+
const leftExprType = this._evaluator.getType(node.leftExpression);
|
904
|
+
this._reportDeprecatedUse(node.memberName, type, leftExprType && (0, types_1.isModule)(leftExprType) && leftExprType.moduleName === 'typing');
|
940
905
|
this._conditionallyReportPrivateUsage(node.memberName);
|
941
906
|
// Walk the leftExpression but not the memberName.
|
942
907
|
this.walk(node.leftExpression);
|
@@ -975,7 +940,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
975
940
|
return true;
|
976
941
|
}
|
977
942
|
visitImportFromAs(node) {
|
978
|
-
var _a;
|
943
|
+
var _a, _b;
|
979
944
|
if (this._fileInfo.isStubFile) {
|
980
945
|
return false;
|
981
946
|
}
|
@@ -999,8 +964,16 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
999
964
|
this._addMissingModuleSourceDiagnosticIfNeeded(importResult, node.name);
|
1000
965
|
break;
|
1001
966
|
}
|
1002
|
-
|
1003
|
-
|
967
|
+
let isImportFromTyping = false;
|
968
|
+
if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ImportFrom */) {
|
969
|
+
if (node.parent.module.leadingDots === 0 && node.parent.module.nameParts.length === 1) {
|
970
|
+
if (node.parent.module.nameParts[0].value === 'typing') {
|
971
|
+
isImportFromTyping = true;
|
972
|
+
}
|
973
|
+
}
|
974
|
+
}
|
975
|
+
const type = this._evaluator.getType((_b = node.alias) !== null && _b !== void 0 ? _b : node.name);
|
976
|
+
this._reportDeprecatedUse(node.name, type, isImportFromTyping);
|
1004
977
|
return false;
|
1005
978
|
}
|
1006
979
|
visitModuleName(node) {
|
@@ -1935,17 +1908,25 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1935
1908
|
implementationFunction = type;
|
1936
1909
|
}
|
1937
1910
|
if (!implementationFunction) {
|
1938
|
-
let
|
1911
|
+
let exemptMissingImplementation = false;
|
1939
1912
|
const containingClassNode = ParseTreeUtils.getEnclosingClassOrFunction(primaryDecl.node);
|
1940
1913
|
if (containingClassNode && containingClassNode.nodeType === 10 /* Class */) {
|
1941
1914
|
const classType = this._evaluator.getTypeOfClass(containingClassNode);
|
1942
|
-
if (classType
|
1943
|
-
|
1915
|
+
if (classType) {
|
1916
|
+
if (types_1.ClassType.isProtocolClass(classType.classType)) {
|
1917
|
+
exemptMissingImplementation = true;
|
1918
|
+
}
|
1919
|
+
else if (types_1.ClassType.supportsAbstractMethods(classType.classType)) {
|
1920
|
+
if ((0, types_1.isOverloadedFunction)(type) &&
|
1921
|
+
types_1.OverloadedFunctionType.getOverloads(type).every((overload) => types_1.FunctionType.isAbstractMethod(overload))) {
|
1922
|
+
exemptMissingImplementation = true;
|
1923
|
+
}
|
1924
|
+
}
|
1944
1925
|
}
|
1945
1926
|
}
|
1946
1927
|
// If this is a method within a protocol class, don't require that
|
1947
1928
|
// there is an implementation.
|
1948
|
-
if (!
|
1929
|
+
if (!exemptMissingImplementation) {
|
1949
1930
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overloadWithoutImplementation().format({
|
1950
1931
|
name: primaryDecl.node.name.value,
|
1951
1932
|
}), primaryDecl.node.name);
|
@@ -2639,8 +2620,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2639
2620
|
}
|
2640
2621
|
return false;
|
2641
2622
|
}
|
2642
|
-
_reportDeprecatedUse(node, type) {
|
2643
|
-
var _a;
|
2623
|
+
_reportDeprecatedUse(node, type, isImportFromTyping = false) {
|
2624
|
+
var _a, _b;
|
2644
2625
|
if (!type) {
|
2645
2626
|
return;
|
2646
2627
|
}
|
@@ -2717,24 +2698,25 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2717
2698
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, errorMessage + diag.getString(), node);
|
2718
2699
|
}
|
2719
2700
|
}
|
2720
|
-
|
2721
|
-
|
2722
|
-
if (0) {
|
2723
|
-
const deprecatedForm = (_a = deprecatedAliases.get(node.value)) !== null && _a !== void 0 ? _a : deprecatedSpecialForms.get(node.value);
|
2701
|
+
if (this._fileInfo.diagnosticRuleSet.deprecateTypingAliases) {
|
2702
|
+
const deprecatedForm = (_a = deprecatedSymbols_1.deprecatedAliases.get(node.value)) !== null && _a !== void 0 ? _a : deprecatedSymbols_1.deprecatedSpecialForms.get(node.value);
|
2724
2703
|
if (deprecatedForm) {
|
2725
|
-
if ((0, types_1.isInstantiableClass)(type) && type.details.fullName === deprecatedForm.fullName)
|
2704
|
+
if (((0, types_1.isInstantiableClass)(type) && type.details.fullName === deprecatedForm.fullName) ||
|
2705
|
+
((_b = type.typeAliasInfo) === null || _b === void 0 ? void 0 : _b.fullName) === deprecatedForm.fullName) {
|
2726
2706
|
if (this._fileInfo.executionEnvironment.pythonVersion >= deprecatedForm.version) {
|
2727
|
-
if (
|
2728
|
-
this.
|
2729
|
-
|
2730
|
-
|
2731
|
-
|
2732
|
-
|
2733
|
-
|
2734
|
-
|
2735
|
-
|
2736
|
-
|
2737
|
-
|
2707
|
+
if (!deprecatedForm.typingImportOnly || isImportFromTyping) {
|
2708
|
+
if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
|
2709
|
+
this._evaluator.addDeprecated(localize_1.Localizer.Diagnostic.deprecatedType().format({
|
2710
|
+
version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
|
2711
|
+
replacement: deprecatedForm.replacementText,
|
2712
|
+
}), node);
|
2713
|
+
}
|
2714
|
+
else {
|
2715
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, localize_1.Localizer.Diagnostic.deprecatedType().format({
|
2716
|
+
version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
|
2717
|
+
replacement: deprecatedForm.replacementText,
|
2718
|
+
}), node);
|
2719
|
+
}
|
2738
2720
|
}
|
2739
2721
|
}
|
2740
2722
|
}
|
@@ -3961,7 +3943,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3961
3943
|
if (!(0, types_1.isInstantiableClass)(baseClassAndSymbol.classType)) {
|
3962
3944
|
return;
|
3963
3945
|
}
|
3964
|
-
if (baseClassAndSymbol.symbol.isIgnoredForOverrideChecks()) {
|
3946
|
+
if (baseClassAndSymbol.symbol.isIgnoredForOverrideChecks() || overrideSymbol.isIgnoredForOverrideChecks()) {
|
3965
3947
|
return;
|
3966
3948
|
}
|
3967
3949
|
// If the base class doesn't provide a type declaration, we won't bother
|