@zzzen/pyright-internal 1.2.0-dev.20260802 → 1.2.0-dev.20260816

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.
Files changed (56) hide show
  1. package/dist/analyzer/analyzerNodeInfo.d.ts +4 -1
  2. package/dist/analyzer/analyzerNodeInfo.js +13 -0
  3. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  4. package/dist/analyzer/binder.js +88 -1
  5. package/dist/analyzer/binder.js.map +1 -1
  6. package/dist/analyzer/checker.d.ts +1 -0
  7. package/dist/analyzer/checker.js +71 -15
  8. package/dist/analyzer/checker.js.map +1 -1
  9. package/dist/analyzer/constraintSolver.js +47 -7
  10. package/dist/analyzer/constraintSolver.js.map +1 -1
  11. package/dist/analyzer/constructors.js +18 -8
  12. package/dist/analyzer/constructors.js.map +1 -1
  13. package/dist/analyzer/dataClasses.d.ts +1 -0
  14. package/dist/analyzer/dataClasses.js +98 -19
  15. package/dist/analyzer/dataClasses.js.map +1 -1
  16. package/dist/analyzer/decorators.js +18 -0
  17. package/dist/analyzer/decorators.js.map +1 -1
  18. package/dist/analyzer/scope.d.ts +3 -0
  19. package/dist/analyzer/scope.js +10 -0
  20. package/dist/analyzer/scope.js.map +1 -1
  21. package/dist/analyzer/symbol.d.ts +4 -1
  22. package/dist/analyzer/symbol.js +8 -0
  23. package/dist/analyzer/symbol.js.map +1 -1
  24. package/dist/analyzer/typeCacheUtils.d.ts +6 -2
  25. package/dist/analyzer/typeCacheUtils.js +16 -37
  26. package/dist/analyzer/typeCacheUtils.js.map +1 -1
  27. package/dist/analyzer/typeEvaluator.js +955 -105
  28. package/dist/analyzer/typeEvaluator.js.map +1 -1
  29. package/dist/analyzer/typeGuards.js +11 -8
  30. package/dist/analyzer/typeGuards.js.map +1 -1
  31. package/dist/analyzer/types.d.ts +11 -1
  32. package/dist/analyzer/types.js +48 -0
  33. package/dist/analyzer/types.js.map +1 -1
  34. package/dist/localization/localize.d.ts +6 -0
  35. package/dist/localization/localize.js +4 -0
  36. package/dist/localization/localize.js.map +1 -1
  37. package/dist/localization/package.nls.en-us.json +13 -0
  38. package/dist/tests/typeCacheUtils.test.d.ts +1 -0
  39. package/dist/tests/typeCacheUtils.test.js +69 -0
  40. package/dist/tests/typeCacheUtils.test.js.map +1 -0
  41. package/dist/tests/typeEvaluator3.test.js +8 -0
  42. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  43. package/dist/tests/typeEvaluator5.test.js +12 -0
  44. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  45. package/dist/tests/typeEvaluator6.test.js +33 -1
  46. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  47. package/dist/tests/typeEvaluator7.test.js +37 -0
  48. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  49. package/dist/tests/typeEvaluator8.test.js +318 -4
  50. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  51. package/dist/tests/types.test.d.ts +1 -0
  52. package/dist/tests/types.test.js +63 -0
  53. package/dist/tests/types.test.js.map +1 -0
  54. package/dist/typeServer/typeGuards.js +4 -3
  55. package/dist/typeServer/typeGuards.js.map +1 -1
  56. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { ClassNode, ComprehensionNode, ExecutionScopeNode, FunctionNode, LambdaNode, ModuleNode, ParseNode, StringNode } from '../parser/parseNodes';
1
+ import { ClassNode, ComprehensionNode, ExecutionScopeNode, FunctionNode, IfNode, LambdaNode, ModuleNode, ParseNode, StringNode } from '../parser/parseNodes';
2
2
  import { AnalyzerFileInfo } from './analyzerFileInfo';
3
3
  import { FlowNode } from './codeFlowTypes';
4
4
  import { Declaration } from './declaration';
@@ -18,6 +18,7 @@ export interface AnalyzerNodeInfo {
18
18
  fileInfo?: AnalyzerFileInfo;
19
19
  codeFlowExpressions?: Set<string>;
20
20
  codeFlowComplexity?: number;
21
+ staticConditionValue?: boolean;
21
22
  dunderAllInfo?: DunderAllInfo | undefined;
22
23
  }
23
24
  export type ScopedNode = ModuleNode | ClassNode | FunctionNode | LambdaNode | ComprehensionNode;
@@ -38,6 +39,8 @@ export declare function getCodeFlowExpressions(node: ExecutionScopeNode): Set<st
38
39
  export declare function setCodeFlowExpressions(node: ExecutionScopeNode, expressions: Set<string>): void;
39
40
  export declare function getCodeFlowComplexity(node: ExecutionScopeNode): number;
40
41
  export declare function setCodeFlowComplexity(node: ExecutionScopeNode, complexity: number): void;
42
+ export declare function getStaticConditionValue(node: IfNode): boolean | undefined;
43
+ export declare function setStaticConditionValue(node: IfNode, value: boolean | undefined): void;
41
44
  export declare function getDunderAllInfo(node: ModuleNode): DunderAllInfo | undefined;
42
45
  export declare function setDunderAllInfo(node: ModuleNode, names: DunderAllInfo | undefined): void;
43
46
  export declare function isCodeUnreachable(node: ParseNode): boolean;
@@ -28,6 +28,8 @@ exports.getCodeFlowExpressions = getCodeFlowExpressions;
28
28
  exports.setCodeFlowExpressions = setCodeFlowExpressions;
29
29
  exports.getCodeFlowComplexity = getCodeFlowComplexity;
30
30
  exports.setCodeFlowComplexity = setCodeFlowComplexity;
31
+ exports.getStaticConditionValue = getStaticConditionValue;
32
+ exports.setStaticConditionValue = setStaticConditionValue;
31
33
  exports.getDunderAllInfo = getDunderAllInfo;
32
34
  exports.setDunderAllInfo = setDunderAllInfo;
33
35
  exports.isCodeUnreachable = isCodeUnreachable;
@@ -57,6 +59,9 @@ function cleanNodeAnalysisInfo(node) {
57
59
  if (info?.codeFlowComplexity) {
58
60
  info.codeFlowComplexity = undefined;
59
61
  }
62
+ if (info?.staticConditionValue !== undefined) {
63
+ info.staticConditionValue = undefined;
64
+ }
60
65
  if (info?.dunderAllInfo) {
61
66
  info.dunderAllInfo = undefined;
62
67
  }
@@ -128,6 +133,14 @@ function setCodeFlowComplexity(node, complexity) {
128
133
  const info = getAnalyzerInfoForWrite(node);
129
134
  info.codeFlowComplexity = complexity;
130
135
  }
136
+ function getStaticConditionValue(node) {
137
+ const info = getAnalyzerInfo(node);
138
+ return info?.staticConditionValue;
139
+ }
140
+ function setStaticConditionValue(node, value) {
141
+ const info = getAnalyzerInfoForWrite(node);
142
+ info.staticConditionValue = value;
143
+ }
131
144
  function getDunderAllInfo(node) {
132
145
  const info = getAnalyzerInfo(node);
133
146
  return info?.dunderAllInfo;
@@ -1 +1 @@
1
- {"version":3,"file":"analyzerNodeInfo.js","sourceRoot":"","sources":["../../../../../src/analyzer/analyzerNodeInfo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyzerNodeInfo.js","sourceRoot":"","sources":["../../../../../src/analyzer/analyzerNodeInfo.ts"],"names":[],"mappings":"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"}
@@ -68,6 +68,63 @@ const scope_1 = require("./scope");
68
68
  const StaticExpressions = __importStar(require("./staticExpressions"));
69
69
  const symbol_1 = require("./symbol");
70
70
  const symbolNameUtils_1 = require("./symbolNameUtils");
71
+ function isStaticClassAssignmentTarget(target) {
72
+ switch (target.nodeType) {
73
+ case 38 /* ParseNodeType.Name */:
74
+ return true;
75
+ case 54 /* ParseNodeType.TypeAnnotation */:
76
+ return isStaticClassAssignmentTarget(target.d.valueExpr);
77
+ case 52 /* ParseNodeType.Tuple */:
78
+ case 34 /* ParseNodeType.List */:
79
+ return target.d.items.every((item) => isStaticClassAssignmentTarget(item));
80
+ case 56 /* ParseNodeType.Unpack */:
81
+ return isStaticClassAssignmentTarget(target.d.expr);
82
+ default:
83
+ return false;
84
+ }
85
+ }
86
+ function getCalledBuiltInName(scope, expression, visitedSymbols = new Set()) {
87
+ if (expression.nodeType === 38 /* ParseNodeType.Name */) {
88
+ const symbolWithScope = scope.lookUpSymbolRecursive(expression.d.value);
89
+ if (!symbolWithScope || visitedSymbols.has(symbolWithScope.symbol)) {
90
+ return undefined;
91
+ }
92
+ visitedSymbols.add(symbolWithScope.symbol);
93
+ if (symbolWithScope.scope.type === 5 /* ScopeType.Builtin */) {
94
+ return expression.d.value;
95
+ }
96
+ const declarations = symbolWithScope.symbol.getDeclarations();
97
+ const declaration = declarations[declarations.length - 1];
98
+ if (declaration?.type === 1 /* DeclarationType.Variable */ &&
99
+ (declaration.inferredTypeSource?.nodeType === 38 /* ParseNodeType.Name */ ||
100
+ declaration.inferredTypeSource?.nodeType === 35 /* ParseNodeType.MemberAccess */)) {
101
+ return getCalledBuiltInName(scope, declaration.inferredTypeSource, visitedSymbols);
102
+ }
103
+ if (declaration?.type === 8 /* DeclarationType.Alias */ &&
104
+ declaration.moduleName === 'builtins' &&
105
+ declaration.symbolName) {
106
+ return declaration.symbolName;
107
+ }
108
+ }
109
+ else if (expression.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
110
+ expression.d.leftExpr.nodeType === 38 /* ParseNodeType.Name */) {
111
+ const symbolWithScope = scope.lookUpSymbolRecursive(expression.d.leftExpr.d.value);
112
+ const declarations = symbolWithScope?.symbol.getDeclarations() ?? [];
113
+ const declaration = declarations[declarations.length - 1];
114
+ if (declaration?.type === 8 /* DeclarationType.Alias */ &&
115
+ declaration.moduleName === 'builtins' &&
116
+ !declaration.symbolName) {
117
+ return expression.d.member.d.value;
118
+ }
119
+ }
120
+ return undefined;
121
+ }
122
+ function doesCallExposeClassNamespace(scope, node) {
123
+ const builtInName = getCalledBuiltInName(scope, node.d.leftExpr);
124
+ return (builtInName === 'exec' ||
125
+ (builtInName === 'eval' && node.d.args.length === 1) ||
126
+ ((builtInName === 'locals' || builtInName === 'vars') && node.d.args.length === 0));
127
+ }
71
128
  // For each flow node within an execution context, we'll add a small
72
129
  // amount to the complexity factor. Without this, the complexity
73
130
  // calculation fails to take into account large numbers of non-cyclical
@@ -480,6 +537,9 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
480
537
  return false;
481
538
  }
482
539
  visitCall(node) {
540
+ if (this._currentScope.type === 3 /* ScopeType.Class */ && doesCallExposeClassNamespace(this._currentScope, node)) {
541
+ this._currentScope.hasPotentiallyDynamicSymbolTable = true;
542
+ }
483
543
  this._disableTrueFalseTargets(() => {
484
544
  this.walk(node.d.leftExpr);
485
545
  const sortedArgs = ParseTreeUtils.getArgsByRuntimeOrder(node);
@@ -766,9 +826,23 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
766
826
  }
767
827
  });
768
828
  }
829
+ else if (expr.nodeType === 18 /* ParseNodeType.Dictionary */) {
830
+ expr.d.items.forEach((dictionaryEntryNode) => {
831
+ if (dictionaryEntryNode.nodeType === 20 /* ParseNodeType.DictionaryKeyEntry */ &&
832
+ dictionaryEntryNode.d.keyExpr.nodeType === 48 /* ParseNodeType.StringList */ &&
833
+ dictionaryEntryNode.d.keyExpr.d.strings.length === 1 &&
834
+ dictionaryEntryNode.d.keyExpr.d.strings[0].nodeType === 49 /* ParseNodeType.String */) {
835
+ this._dunderSlotsEntries.push(dictionaryEntryNode.d.keyExpr);
836
+ }
837
+ else {
838
+ isExpressionUnderstood = false;
839
+ }
840
+ });
841
+ }
769
842
  else {
770
843
  isExpressionUnderstood = false;
771
844
  }
845
+ this._currentScope.setHasNonEmptySlots(this._dunderSlotsEntries.some((entry) => entry.d.strings[0].d.value !== '__dict__'));
772
846
  if (!isExpressionUnderstood) {
773
847
  this._dunderSlotsEntries = undefined;
774
848
  }
@@ -1056,6 +1130,7 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
1056
1130
  // Determine if the test condition is always true or always false. If so,
1057
1131
  // we can treat either the then or the else clause as unconditional.
1058
1132
  const constExprValue = StaticExpressions.evaluateStaticBoolLikeExpression(node.d.testExpr, this._fileInfo.executionEnvironment, this._fileInfo.definedConstants, this._typingImportAliases, this._sysImportAliases);
1133
+ AnalyzerNodeInfo.setStaticConditionValue(node, constExprValue);
1059
1134
  this._bindConditional(node.d.testExpr, thenLabel, elseLabel);
1060
1135
  // Handle the if clause.
1061
1136
  this._currentFlowNode =
@@ -1413,7 +1488,7 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
1413
1488
  }
1414
1489
  visitImportFrom(node) {
1415
1490
  const typingSymbolsOfInterest = ['Final', 'ClassVar', 'Annotated'];
1416
- const dataclassesSymbolsOfInterest = ['InitVar'];
1491
+ const dataclassesSymbolsOfInterest = ['InitVar', 'KW_ONLY'];
1417
1492
  const importInfo = AnalyzerNodeInfo.getImportInfo(node.d.module);
1418
1493
  AnalyzerNodeInfo.setFlowNode(node, this._currentFlowNode);
1419
1494
  let resolvedPath = uri_1.Uri.empty();
@@ -2892,6 +2967,9 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
2892
2967
  return undefined;
2893
2968
  }
2894
2969
  _bindPossibleTupleNamedTarget(target, addedSymbols) {
2970
+ if (this._currentScope.type === 3 /* ScopeType.Class */ && !isStaticClassAssignmentTarget(target)) {
2971
+ this._currentScope.hasPotentiallyDynamicSymbolTable = true;
2972
+ }
2895
2973
  switch (target.nodeType) {
2896
2974
  case 38 /* ParseNodeType.Name */: {
2897
2975
  this._bindNameToScope(this._currentScope, target, addedSymbols);
@@ -3182,6 +3260,15 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
3182
3260
  }
3183
3261
  }
3184
3262
  }
3263
+ if (this._isDataclassesAnnotation(typeAnnotation, 'KW_ONLY')) {
3264
+ symbolWithScope.symbol.setIsDataClassKeywordOnly();
3265
+ }
3266
+ else if (typeAnnotation.nodeType === 27 /* ParseNodeType.Index */ &&
3267
+ this._isTypingAnnotation(typeAnnotation.d.leftExpr, 'Annotated') &&
3268
+ typeAnnotation.d.items.length > 0 &&
3269
+ this._isDataclassesAnnotation(typeAnnotation.d.items[0].d.valueExpr, 'KW_ONLY')) {
3270
+ symbolWithScope.symbol.setIsDataClassKeywordOnly();
3271
+ }
3185
3272
  }
3186
3273
  declarationHandled = true;
3187
3274
  break;