@zzzen/pyright-internal 1.2.0-dev.20230514 → 1.2.0-dev.20230521
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/analyzerFileInfo.d.ts +1 -0
- package/dist/analyzer/analyzerFileInfo.js +4 -3
- package/dist/analyzer/analyzerFileInfo.js.map +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +17 -15
- package/dist/analyzer/backgroundAnalysisProgram.js +43 -53
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/binder.d.ts +0 -2
- package/dist/analyzer/binder.js +2 -20
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +1 -1
- package/dist/analyzer/checker.js +61 -28
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +5 -1
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/constructors.js +14 -12
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +3 -0
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declarationUtils.js +1 -0
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +4 -4
- package/dist/analyzer/importResolver.js +46 -40
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importResult.d.ts +2 -2
- package/dist/analyzer/importStatementUtils.js +2 -2
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +1 -1
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.js +2 -34
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/parseTreeWalker.js +2 -2
- package/dist/analyzer/parseTreeWalker.js.map +1 -1
- package/dist/analyzer/patternMatching.js +1 -0
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +12 -18
- package/dist/analyzer/program.js +25 -12
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/protocols.js +3 -1
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.d.ts +4 -4
- package/dist/analyzer/service.js +21 -24
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +1 -6
- package/dist/analyzer/sourceFile.js +7 -26
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceMapper.js +1 -1
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.js +1 -1
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.d.ts +2 -2
- package/dist/analyzer/typeEvaluator.js +134 -55
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +3 -2
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +1 -0
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +8 -1
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.js +1 -1
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.js +2 -2
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typedDicts.js +138 -41
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +7 -1
- package/dist/analyzer/types.js +19 -6
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +25 -19
- package/dist/backgroundAnalysisBase.js +145 -115
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.d.ts +1 -1
- package/dist/backgroundThreadBase.js +1 -1
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +3 -3
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/configOptions.js +1 -1
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/extensibility.d.ts +2 -4
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/textRange.js +1 -1
- package/dist/common/textRange.js.map +1 -1
- package/dist/common/workspaceEditUtils.d.ts +1 -1
- package/dist/common/workspaceEditUtils.js +5 -7
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.js +2 -2
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +3 -3
- package/dist/languageService/autoImporter.js +3 -3
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +3 -2
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +2 -2
- package/dist/languageService/completionProvider.js +37 -30
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.js +9 -9
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/referencesProvider.js +1 -1
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.js +1 -1
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.d.ts +0 -8
- package/dist/languageService/symbolIndexer.js.map +1 -1
- package/dist/localization/localize.d.ts +22 -3
- package/dist/localization/localize.js +12 -3
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +14 -5
- package/dist/parser/parseNodes.d.ts +8 -8
- package/dist/parser/parseNodes.js +20 -10
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parser.d.ts +3 -3
- package/dist/parser/parser.js +133 -159
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/stringTokenUtils.d.ts +3 -13
- package/dist/parser/stringTokenUtils.js +8 -181
- package/dist/parser/stringTokenUtils.js.map +1 -1
- package/dist/parser/tokenizer.d.ts +3 -0
- package/dist/parser/tokenizer.js +211 -24
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/tokenizerTypes.d.ts +31 -1
- package/dist/parser/tokenizerTypes.js +51 -1
- package/dist/parser/tokenizerTypes.js.map +1 -1
- package/dist/readonlyAugmentedFileSystem.js +1 -1
- package/dist/readonlyAugmentedFileSystem.js.map +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.js +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.js +2 -1
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/importResolver.test.js +3 -3
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/textRange.test.d.ts +1 -0
- package/dist/tests/textRange.test.js +45 -0
- package/dist/tests/textRange.test.js.map +1 -0
- package/dist/tests/tokenizer.test.js +272 -58
- package/dist/tests/tokenizer.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 +10 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +7 -2
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +8 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/workspaceFactory.js +3 -5
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +1 -1
package/dist/analyzer/checker.js
CHANGED
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
35
35
|
exports.Checker = void 0;
|
36
36
|
const vscode_languageserver_1 = require("vscode-languageserver");
|
37
|
+
const collectionUtils_1 = require("../common/collectionUtils");
|
37
38
|
const debug_1 = require("../common/debug");
|
38
39
|
const diagnostic_1 = require("../common/diagnostic");
|
39
40
|
const diagnosticRules_1 = require("../common/diagnosticRules");
|
@@ -61,9 +62,9 @@ const SymbolNameUtils = __importStar(require("./symbolNameUtils"));
|
|
61
62
|
const symbolUtils_1 = require("./symbolUtils");
|
62
63
|
const typeEvaluator_1 = require("./typeEvaluator");
|
63
64
|
const typeGuards_1 = require("./typeGuards");
|
64
|
-
const types_1 = require("./types");
|
65
65
|
const typeUtils_1 = require("./typeUtils");
|
66
66
|
const typeVarContext_1 = require("./typeVarContext");
|
67
|
+
const types_1 = require("./types");
|
67
68
|
const deprecatedAliases = new Map([
|
68
69
|
['Tuple', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.tuple', replacementText: 'tuple' }],
|
69
70
|
['List', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.list', replacementText: 'list' }],
|
@@ -829,28 +830,47 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
829
830
|
return true;
|
830
831
|
}
|
831
832
|
visitStringList(node) {
|
833
|
+
// If this is Python 3.11 or older, there are several restrictions
|
834
|
+
// associated with f-strings that we need to validate. Determine whether
|
835
|
+
// we're within an f-string (or multiple f-strings if nesting is used).
|
836
|
+
const fStringContainers = [];
|
837
|
+
if (this._fileInfo.executionEnvironment.pythonVersion < pythonVersion_1.PythonVersion.V3_12) {
|
838
|
+
let curNode = node;
|
839
|
+
while (curNode) {
|
840
|
+
if (curNode.nodeType === 27 /* FormatString */) {
|
841
|
+
fStringContainers.push(curNode);
|
842
|
+
}
|
843
|
+
curNode = curNode.parent;
|
844
|
+
}
|
845
|
+
}
|
832
846
|
for (const stringNode of node.strings) {
|
833
|
-
|
834
|
-
|
847
|
+
const stringTokens = stringNode.nodeType === 49 /* String */ ? [stringNode.token] : stringNode.middleTokens;
|
848
|
+
stringTokens.forEach((token) => {
|
849
|
+
const unescapedResult = (0, stringTokenUtils_1.getUnescapedString)(token);
|
850
|
+
let start = token.start;
|
851
|
+
if (token.type === 5 /* String */) {
|
852
|
+
start += token.prefixLength + token.quoteMarkLength;
|
853
|
+
}
|
835
854
|
unescapedResult.unescapeErrors.forEach((error) => {
|
836
|
-
const start = stringNode.token.start +
|
837
|
-
stringNode.token.prefixLength +
|
838
|
-
stringNode.token.quoteMarkLength +
|
839
|
-
error.offset;
|
840
|
-
const textRange = { start, length: error.length };
|
841
855
|
if (error.errorType === 0 /* InvalidEscapeSequence */) {
|
842
|
-
this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportInvalidStringEscapeSequence, diagnosticRules_1.DiagnosticRule.reportInvalidStringEscapeSequence, localize_1.Localizer.Diagnostic.stringUnsupportedEscape(),
|
843
|
-
}
|
844
|
-
else if (error.errorType === 1 /* EscapeWithinFormatExpression */) {
|
845
|
-
this._evaluator.addDiagnosticForTextRange(this._fileInfo, 'error', '', localize_1.Localizer.Diagnostic.formatStringEscape(), textRange);
|
846
|
-
}
|
847
|
-
else if (error.errorType === 2 /* SingleCloseBraceWithinFormatLiteral */) {
|
848
|
-
this._evaluator.addDiagnosticForTextRange(this._fileInfo, 'error', '', localize_1.Localizer.Diagnostic.formatStringBrace(), textRange);
|
849
|
-
}
|
850
|
-
else if (error.errorType === 3 /* UnterminatedFormatExpression */) {
|
851
|
-
this._evaluator.addDiagnosticForTextRange(this._fileInfo, 'error', '', localize_1.Localizer.Diagnostic.formatStringUnterminated(), textRange);
|
856
|
+
this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportInvalidStringEscapeSequence, diagnosticRules_1.DiagnosticRule.reportInvalidStringEscapeSequence, localize_1.Localizer.Diagnostic.stringUnsupportedEscape(), { start: start + error.offset, length: error.length });
|
852
857
|
}
|
853
858
|
});
|
859
|
+
// Prior to Python 3.12, it was not allowed to include a slash in an f-string.
|
860
|
+
if (fStringContainers.length > 0) {
|
861
|
+
const escapeOffset = token.escapedValue.indexOf('\\');
|
862
|
+
if (escapeOffset >= 0) {
|
863
|
+
this._evaluator.addDiagnosticForTextRange(this._fileInfo, 'error', '', localize_1.Localizer.Diagnostic.formatStringEscape(), { start, length: 1 });
|
864
|
+
}
|
865
|
+
}
|
866
|
+
});
|
867
|
+
// Prior to Python 3.12, it was not allowed to nest strings that
|
868
|
+
// used the same quote scheme within an f-string.
|
869
|
+
if (fStringContainers.length > 0) {
|
870
|
+
const quoteTypeMask = 1 /* SingleQuote */ | 2 /* DoubleQuote */ | 4 /* Triplicate */;
|
871
|
+
if (fStringContainers.some((fStringContainer) => (fStringContainer.token.flags & quoteTypeMask) === (stringNode.token.flags & quoteTypeMask))) {
|
872
|
+
this._evaluator.addError(localize_1.Localizer.Diagnostic.formatStringNestedQuote(), stringNode);
|
873
|
+
}
|
854
874
|
}
|
855
875
|
}
|
856
876
|
if (node.typeAnnotation) {
|
@@ -862,8 +882,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
862
882
|
return true;
|
863
883
|
}
|
864
884
|
visitFormatString(node) {
|
865
|
-
node.
|
866
|
-
this._evaluator.getType(
|
885
|
+
node.fieldExpressions.forEach((expr) => {
|
886
|
+
this._evaluator.getType(expr);
|
887
|
+
});
|
888
|
+
node.formatExpressions.forEach((expr) => {
|
889
|
+
this._evaluator.getType(expr);
|
867
890
|
});
|
868
891
|
return true;
|
869
892
|
}
|
@@ -2737,7 +2760,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2737
2760
|
const desc = {
|
2738
2761
|
nameParts: moduleName.split('.'),
|
2739
2762
|
leadingDots: 0,
|
2740
|
-
importedSymbols:
|
2763
|
+
importedSymbols: new Set(),
|
2741
2764
|
};
|
2742
2765
|
const stdlibPath = this._importResolver.getTypeshedStdLibPath(this._fileInfo.executionEnvironment);
|
2743
2766
|
if (stdlibPath &&
|
@@ -2783,7 +2806,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2783
2806
|
const module = {
|
2784
2807
|
nameParts,
|
2785
2808
|
leadingDots: 0,
|
2786
|
-
importedSymbols:
|
2809
|
+
importedSymbols: new Set(),
|
2787
2810
|
};
|
2788
2811
|
// Make sure the module is a potential stdlib one so we don't spend the time
|
2789
2812
|
// searching for the definition.
|
@@ -3317,7 +3340,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3317
3340
|
// variables. We need to make sure these are initialized.
|
3318
3341
|
const abstractSymbols = new Map();
|
3319
3342
|
if (types_1.ClassType.isFinal(classType)) {
|
3320
|
-
(0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols,
|
3343
|
+
(0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 1024 /* SupportsAbstractMethods */);
|
3321
3344
|
}
|
3322
3345
|
classType.details.fields.forEach((localSymbol, name) => {
|
3323
3346
|
abstractSymbols.delete(name);
|
@@ -3812,14 +3835,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3812
3835
|
if (!firstOverride) {
|
3813
3836
|
// If this is a method decorated with @override, validate that there
|
3814
3837
|
// is a base class method of the same name.
|
3815
|
-
this._validateOverrideDecoratorNotPresent(typeOfSymbol);
|
3838
|
+
this._validateOverrideDecoratorNotPresent(symbol, typeOfSymbol);
|
3816
3839
|
}
|
3817
3840
|
else {
|
3818
|
-
this._validateOverrideDecoratorPresent(typeOfSymbol, firstOverride);
|
3841
|
+
this._validateOverrideDecoratorPresent(symbol, typeOfSymbol, firstOverride);
|
3819
3842
|
}
|
3820
3843
|
});
|
3821
3844
|
}
|
3822
|
-
_validateOverrideDecoratorPresent(overrideType, baseMember) {
|
3845
|
+
_validateOverrideDecoratorPresent(symbol, overrideType, baseMember) {
|
3823
3846
|
var _a;
|
3824
3847
|
// Skip this check if disabled.
|
3825
3848
|
if (this._fileInfo.diagnosticRuleSet.reportImplicitOverride === 'none') {
|
@@ -3848,6 +3871,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3848
3871
|
if (overrideFunction.details.name === '__init__' || overrideFunction.details.name === '__new__') {
|
3849
3872
|
return;
|
3850
3873
|
}
|
3874
|
+
// If the declaration for the override function is not the same as the
|
3875
|
+
// declaration for the symbol, the function was probably replaced by a decorator.
|
3876
|
+
if (!symbol.getDeclarations().some((decl) => decl === overrideFunction.details.declaration)) {
|
3877
|
+
return;
|
3878
|
+
}
|
3851
3879
|
const funcNode = overrideFunction.details.declaration.node;
|
3852
3880
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportImplicitOverride, diagnosticRules_1.DiagnosticRule.reportImplicitOverride, localize_1.Localizer.Diagnostic.overrideDecoratorMissing().format({
|
3853
3881
|
name: funcNode.name.value,
|
@@ -3857,7 +3885,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3857
3885
|
// Determines whether the type is a function or overloaded function with an @override
|
3858
3886
|
// decorator. In this case, an error is reported because no base class has declared
|
3859
3887
|
// a method of the same name.
|
3860
|
-
_validateOverrideDecoratorNotPresent(overrideType) {
|
3888
|
+
_validateOverrideDecoratorNotPresent(symbol, overrideType) {
|
3861
3889
|
var _a;
|
3862
3890
|
let overrideFunction;
|
3863
3891
|
if ((0, types_1.isFunction)(overrideType)) {
|
@@ -3878,6 +3906,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3878
3906
|
if (!(overrideFunction === null || overrideFunction === void 0 ? void 0 : overrideFunction.details.declaration) || !types_1.FunctionType.isOverridden(overrideFunction)) {
|
3879
3907
|
return;
|
3880
3908
|
}
|
3909
|
+
// If the declaration for the override function is not the same as the
|
3910
|
+
// declaration for the symbol, the function was probably replaced by a decorator.
|
3911
|
+
if (!symbol.getDeclarations().some((decl) => decl === overrideFunction.details.declaration)) {
|
3912
|
+
return;
|
3913
|
+
}
|
3881
3914
|
const funcNode = overrideFunction.details.declaration.node;
|
3882
3915
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overriddenMethodNotFound().format({ name: funcNode.name.value }), funcNode.name);
|
3883
3916
|
}
|
@@ -4422,7 +4455,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4422
4455
|
this._evaluator.addUnreachableCode(except, except.exceptSuite);
|
4423
4456
|
}
|
4424
4457
|
}
|
4425
|
-
|
4458
|
+
(0, collectionUtils_1.appendArray)(exceptionTypesSoFar, typesOfThisExcept);
|
4426
4459
|
});
|
4427
4460
|
}
|
4428
4461
|
_reportDuplicateImports() {
|