@zzzen/pyright-internal 1.2.0-dev.20250413 → 1.2.0-dev.20250802
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 +0 -1
- package/dist/analyzer/analyzerFileInfo.js.map +1 -1
- package/dist/analyzer/analyzerNodeInfo.js +1 -1
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/binder.d.ts +2 -1
- package/dist/analyzer/binder.js +45 -38
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.js +81 -44
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +19 -7
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/codeFlowTypes.d.ts +9 -8
- package/dist/analyzer/codeFlowTypes.js +9 -8
- package/dist/analyzer/codeFlowTypes.js.map +1 -1
- package/dist/analyzer/codeFlowUtils.js +4 -2
- package/dist/analyzer/codeFlowUtils.js.map +1 -1
- package/dist/analyzer/dataClasses.js +7 -2
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/docStringUtils.js +3 -1
- package/dist/analyzer/docStringUtils.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +0 -1
- package/dist/analyzer/importResolver.js +2 -25
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importResult.d.ts +0 -1
- package/dist/analyzer/importStatementUtils.js +5 -3
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +10 -0
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.js +1 -1
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +5 -3
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parameterUtils.js +10 -3
- package/dist/analyzer/parameterUtils.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +3 -4
- package/dist/analyzer/parseTreeUtils.js +19 -225
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +4 -0
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +12 -2
- package/dist/analyzer/program.js +78 -75
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/programTypes.d.ts +2 -2
- package/dist/analyzer/programTypes.js.map +1 -1
- package/dist/analyzer/properties.js +3 -5
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +13 -3
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/sentinel.d.ts +4 -0
- package/dist/analyzer/sentinel.js +51 -0
- package/dist/analyzer/sentinel.js.map +1 -0
- package/dist/analyzer/service.d.ts +2 -2
- package/dist/analyzer/service.js +7 -6
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +5 -2
- package/dist/analyzer/sourceFile.js +53 -15
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfo.d.ts +10 -1
- package/dist/analyzer/sourceFileInfo.js +28 -0
- package/dist/analyzer/sourceFileInfo.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.js +4 -4
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/sourceMapper.d.ts +1 -1
- package/dist/analyzer/sourceMapper.js +20 -20
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/symbol.d.ts +3 -0
- package/dist/analyzer/symbol.js +11 -0
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/testWalker.js +2 -13
- package/dist/analyzer/testWalker.js.map +1 -1
- package/dist/analyzer/tracePrinter.js +1 -1
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +278 -147
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +8 -4
- package/dist/analyzer/typeEvaluatorTypes.js +15 -2
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +47 -13
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +10 -2
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typePrinterUtils.js +2 -2
- package/dist/analyzer/typePrinterUtils.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +2 -0
- package/dist/analyzer/typeUtils.js +14 -3
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.js +9 -5
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +9 -2
- package/dist/analyzer/types.js +39 -1
- package/dist/analyzer/types.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.d.ts +96 -0
- package/dist/commands/dumpFileDebugInfoCommand.js +13 -2
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/cancellationUtils.d.ts +1 -1
- package/dist/common/cancellationUtils.js +2 -2
- package/dist/common/cancellationUtils.js.map +1 -1
- package/dist/common/charCodes.d.ts +1 -1
- package/dist/common/charCodes.js +1 -1
- package/dist/common/charCodes.js.map +1 -1
- package/dist/common/configOptions.d.ts +1 -0
- package/dist/common/configOptions.js +5 -0
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/core.d.ts +1 -3
- package/dist/common/core.js +3 -4
- package/dist/common/core.js.map +1 -1
- package/dist/common/diagnostic.d.ts +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/common/docRange.d.ts +6 -0
- package/dist/common/docRange.js +10 -0
- package/dist/common/docRange.js.map +1 -0
- package/dist/common/envVarUtils.js +1 -6
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/common/extensibility.d.ts +11 -2
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileBasedCancellationUtils.d.ts +1 -0
- package/dist/common/fileBasedCancellationUtils.js +1 -0
- package/dist/common/fileBasedCancellationUtils.js.map +1 -1
- package/dist/common/logTracker.d.ts +5 -1
- package/dist/common/logTracker.js +43 -26
- package/dist/common/logTracker.js.map +1 -1
- package/dist/common/pathUtils.d.ts +1 -1
- package/dist/common/pathUtils.js +3 -2
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/realFileSystem.d.ts +1 -1
- package/dist/common/realFileSystem.js +2 -1
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProviderExtensions.js +2 -2
- package/dist/common/serviceProviderExtensions.js.map +1 -1
- package/dist/common/stringUtils.d.ts +0 -1
- package/dist/common/stringUtils.js +0 -42
- package/dist/common/stringUtils.js.map +1 -1
- package/dist/common/textEditTracker.js +5 -3
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/common/textRange.d.ts +5 -11
- package/dist/common/textRange.js +31 -56
- package/dist/common/textRange.js.map +1 -1
- package/dist/common/textRangeCollection.js +3 -2
- package/dist/common/textRangeCollection.js.map +1 -1
- package/dist/common/uri/baseUri.js +2 -1
- package/dist/common/uri/baseUri.js.map +1 -1
- package/dist/common/uri/uri.d.ts +5 -2
- package/dist/common/uri/uri.js +21 -5
- package/dist/common/uri/uri.js.map +1 -1
- package/dist/common/uri/uriUtils.d.ts +2 -2
- package/dist/common/uri/uriUtils.js +4 -3
- package/dist/common/uri/uriUtils.js.map +1 -1
- package/dist/common/workspaceEditUtils.js +9 -9
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +5 -3
- package/dist/languageServerBase.js +44 -37
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.d.ts +3 -0
- package/dist/languageService/analyzerServiceExecutor.js +1 -0
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +2 -2
- package/dist/languageService/autoImporter.js +3 -3
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +2 -3
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.js +16 -13
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/definitionProvider.d.ts +2 -1
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +4 -1
- package/dist/languageService/documentSymbolCollector.js +9 -7
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/hoverProvider.js +1 -9
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/importSorter.js +1 -0
- package/dist/languageService/importSorter.js.map +1 -1
- package/dist/languageService/navigationUtils.d.ts +1 -1
- package/dist/languageService/referencesProvider.d.ts +2 -1
- package/dist/languageService/referencesProvider.js +8 -7
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameProvider.js +4 -19
- package/dist/languageService/renameProvider.js.map +1 -1
- package/dist/languageService/tooltipUtils.d.ts +2 -0
- package/dist/languageService/tooltipUtils.js +2 -0
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.js +1 -1
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +16 -2
- package/dist/localization/localize.js +16 -2
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +23 -9
- package/dist/localization/package.nls.de.json +18 -4
- package/dist/localization/package.nls.en-us.json +53 -3
- package/dist/localization/package.nls.es.json +18 -4
- package/dist/localization/package.nls.fr.json +22 -8
- package/dist/localization/package.nls.it.json +23 -9
- package/dist/localization/package.nls.ja.json +18 -4
- package/dist/localization/package.nls.ko.json +23 -9
- package/dist/localization/package.nls.pl.json +18 -4
- package/dist/localization/package.nls.pt-br.json +18 -4
- package/dist/localization/package.nls.qps-ploc.json +17 -3
- package/dist/localization/package.nls.ru.json +18 -4
- package/dist/localization/package.nls.tr.json +23 -9
- package/dist/localization/package.nls.zh-cn.json +18 -4
- package/dist/localization/package.nls.zh-tw.json +18 -4
- package/dist/parser/characters.d.ts +1 -8
- package/dist/parser/characters.js +6 -3
- package/dist/parser/characters.js.map +1 -1
- package/dist/parser/parseNodeUtils.d.ts +12 -0
- package/dist/parser/parseNodeUtils.js +136 -0
- package/dist/parser/parseNodeUtils.js.map +1 -0
- package/dist/parser/parseNodes.d.ts +12 -2
- package/dist/parser/parseNodes.js +17 -2
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parser.d.ts +5 -2
- package/dist/parser/parser.js +83 -47
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.d.ts +3 -3
- package/dist/parser/tokenizer.js +58 -38
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/tokenizerTypes.d.ts +4 -3
- package/dist/parser/tokenizerTypes.js +4 -3
- package/dist/parser/tokenizerTypes.js.map +1 -1
- package/dist/pyright.js +1 -1
- package/dist/pyright.js.map +1 -1
- package/dist/server.js +3 -3
- package/dist/server.js.map +1 -1
- package/dist/tests/checker.test.js +2 -2
- package/dist/tests/common.test.js +6 -6
- package/dist/tests/common.test.js.map +1 -1
- package/dist/tests/fourslash/completions.autoimport.unicode.fourslash.js +29 -0
- package/dist/tests/fourslash/completions.autoimport.unicode.fourslash.js.map +1 -0
- package/dist/tests/fourslash/completions.declNames.method.fourslash.js +8 -8
- package/dist/tests/fourslash/import.pytyped.privateSymbols.fourslash.js +0 -18
- package/dist/tests/fourslash/import.pytyped.privateSymbols.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +3 -2
- package/dist/tests/harness/fourslash/testState.js +9 -3
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/lsp/languageServer.js +1 -1
- package/dist/tests/lsp/languageServer.js.map +1 -1
- package/dist/tests/lsp/languageServerTestUtils.d.ts +1 -2
- package/dist/tests/lsp/languageServerTestUtils.js +2 -2
- package/dist/tests/lsp/languageServerTestUtils.js.map +1 -1
- package/dist/tests/parser.test.js +17 -0
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/positionUtils.test.js +1 -1
- package/dist/tests/service.test.js +4 -4
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +21 -4
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/stringUtils.test.js +0 -12
- package/dist/tests/stringUtils.test.js.map +1 -1
- package/dist/tests/testStateUtils.js +8 -3
- package/dist/tests/testStateUtils.js.map +1 -1
- package/dist/tests/testUtils.js +1 -1
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/tokenizer.test.js +5 -5
- package/dist/tests/tokenizer.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +11 -13
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +15 -1
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +16 -1
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +10 -4
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/typeEvaluator6.test.js +1 -1
- package/dist/tests/typeEvaluator7.test.js +9 -0
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typeEvaluator8.test.js +8 -0
- package/dist/tests/typeEvaluator8.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +7 -9
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/workspaceFactory.d.ts +12 -1
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +2 -3
- package/dist/tests/fourslash/rename.args.fourslash.js +0 -72
- package/dist/tests/fourslash/rename.args.fourslash.js.map +0 -1
- /package/dist/tests/fourslash/{rename.args.fourslash.d.ts → completions.autoimport.unicode.fourslash.d.ts} +0 -0
package/dist/parser/parser.js
CHANGED
|
@@ -36,13 +36,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
exports.Parser = exports.ParseTextMode = exports.ParseOptions = void 0;
|
|
39
|
-
const sourceFile_1 = require("../analyzer/sourceFile");
|
|
40
39
|
const collectionUtils_1 = require("../common/collectionUtils");
|
|
41
40
|
const debug_1 = require("../common/debug");
|
|
42
41
|
const diagnostic_1 = require("../common/diagnostic");
|
|
43
42
|
const diagnosticSink_1 = require("../common/diagnosticSink");
|
|
44
43
|
const positionUtils_1 = require("../common/positionUtils");
|
|
45
44
|
const pythonVersion_1 = require("../common/pythonVersion");
|
|
45
|
+
const stringUtils_1 = require("../common/stringUtils");
|
|
46
46
|
const textRange_1 = require("../common/textRange");
|
|
47
47
|
const timing_1 = require("../common/timing");
|
|
48
48
|
const localize_1 = require("../localization/localize");
|
|
@@ -50,13 +50,15 @@ const parseNodes_1 = require("./parseNodes");
|
|
|
50
50
|
const StringTokenUtils = __importStar(require("./stringTokenUtils"));
|
|
51
51
|
const tokenizer_1 = require("./tokenizer");
|
|
52
52
|
const tokenizerTypes_1 = require("./tokenizerTypes");
|
|
53
|
+
const commentRegEx = /^(\s*#\s*type:\s*)([^\r\n]*)/;
|
|
54
|
+
const ignoreCommentRegEx = /^ignore(\s|\[|$)/;
|
|
53
55
|
class ParseOptions {
|
|
54
56
|
constructor() {
|
|
55
57
|
this.isStubFile = false;
|
|
56
58
|
this.pythonVersion = pythonVersion_1.latestStablePythonVersion;
|
|
57
59
|
this.reportInvalidStringEscapeSequence = false;
|
|
58
60
|
this.skipFunctionAndClassBody = false;
|
|
59
|
-
this.
|
|
61
|
+
this.useNotebookMode = false;
|
|
60
62
|
this.reportErrorsForParsedStringContents = false;
|
|
61
63
|
}
|
|
62
64
|
}
|
|
@@ -81,6 +83,8 @@ class Parser {
|
|
|
81
83
|
this._isParsingTypeAnnotation = false;
|
|
82
84
|
this._isParsingIndexTrailer = false;
|
|
83
85
|
this._isParsingQuotedText = false;
|
|
86
|
+
this._isInFinallyBlock = false;
|
|
87
|
+
this._isInFinallyLoop = false;
|
|
84
88
|
this._futureImports = new Set();
|
|
85
89
|
this._importedModules = [];
|
|
86
90
|
this._containsWildcardImport = false;
|
|
@@ -126,6 +130,7 @@ class Parser {
|
|
|
126
130
|
(0, debug_1.assert)(this._tokenizerOutput !== undefined);
|
|
127
131
|
return {
|
|
128
132
|
text: fileContents,
|
|
133
|
+
contentHash: (0, stringUtils_1.hashString)(fileContents),
|
|
129
134
|
parserOutput: {
|
|
130
135
|
parseTree: moduleNode,
|
|
131
136
|
importedModules: this._importedModules,
|
|
@@ -135,6 +140,7 @@ class Parser {
|
|
|
135
140
|
hasTypeAnnotations: this._hasTypeAnnotations,
|
|
136
141
|
},
|
|
137
142
|
tokenizerOutput: this._tokenizerOutput,
|
|
143
|
+
lines: this._tokenizerOutput.lines,
|
|
138
144
|
};
|
|
139
145
|
}
|
|
140
146
|
parseTextExpression(fileContents, textOffset, textLength, parseOptions, parseTextMode = 0 /* ParseTextMode.Expression */, initialParenDepth = 0, typingSymbolAliases) {
|
|
@@ -184,7 +190,7 @@ class Parser {
|
|
|
184
190
|
this._diagSink = diagSink;
|
|
185
191
|
// Tokenize the file contents.
|
|
186
192
|
const tokenizer = new tokenizer_1.Tokenizer();
|
|
187
|
-
this._tokenizerOutput = tokenizer.tokenize(fileContents, textOffset, textLength, initialParenDepth, this._parseOptions.
|
|
193
|
+
this._tokenizerOutput = tokenizer.tokenize(fileContents, textOffset, textLength, initialParenDepth, this._parseOptions.useNotebookMode);
|
|
188
194
|
this._tokenIndex = 0;
|
|
189
195
|
}
|
|
190
196
|
// stmt: simple_stmt | compound_stmt
|
|
@@ -1060,6 +1066,11 @@ class Parser {
|
|
|
1060
1066
|
_parseLoopSuite() {
|
|
1061
1067
|
const wasInLoop = this._isInLoop;
|
|
1062
1068
|
this._isInLoop = true;
|
|
1069
|
+
// Record the fact that we are no longer in a finally block
|
|
1070
|
+
// that is contained within a loop. A loop within the finally
|
|
1071
|
+
// block resets this. See PEP 765 for details.
|
|
1072
|
+
const wasInFinallyLoop = this._isInFinallyLoop;
|
|
1073
|
+
this._isInFinallyLoop = false;
|
|
1063
1074
|
let typeComment;
|
|
1064
1075
|
const suite = this._parseSuite(this._isInFunction, /* skipBody */ false, () => {
|
|
1065
1076
|
const comment = this._getTypeAnnotationCommentText();
|
|
@@ -1068,6 +1079,7 @@ class Parser {
|
|
|
1068
1079
|
}
|
|
1069
1080
|
});
|
|
1070
1081
|
this._isInLoop = wasInLoop;
|
|
1082
|
+
this._isInFinallyLoop = wasInFinallyLoop;
|
|
1071
1083
|
if (typeComment) {
|
|
1072
1084
|
suite.d.typeComment = typeComment;
|
|
1073
1085
|
}
|
|
@@ -1391,23 +1403,32 @@ class Parser {
|
|
|
1391
1403
|
}
|
|
1392
1404
|
let typeExpr;
|
|
1393
1405
|
let symbolName;
|
|
1406
|
+
let isAsKeywordAllowed = true;
|
|
1394
1407
|
if (this._peekTokenType() !== 10 /* TokenType.Colon */) {
|
|
1395
|
-
|
|
1408
|
+
const listResult = this._parseExpressionListGeneric(() => this._parseTestExpression(/* allowAssignmentExpression */ true));
|
|
1409
|
+
if (listResult.parseError) {
|
|
1410
|
+
typeExpr = listResult.parseError;
|
|
1411
|
+
}
|
|
1412
|
+
else {
|
|
1413
|
+
typeExpr = this._makeExpressionOrTuple(listResult, /* enclosedInParens */ false);
|
|
1414
|
+
// Python 3.14 allows more than one exception type to be provided in
|
|
1415
|
+
// an except clause.
|
|
1416
|
+
if (listResult.list.length > 1) {
|
|
1417
|
+
if (pythonVersion_1.PythonVersion.isLessThan(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_14)) {
|
|
1418
|
+
this._addSyntaxError(localize_1.LocMessage.exceptRequiresParens(), typeExpr);
|
|
1419
|
+
}
|
|
1420
|
+
isAsKeywordAllowed = false;
|
|
1421
|
+
}
|
|
1422
|
+
}
|
|
1396
1423
|
if (this._consumeTokenIfKeyword(1 /* KeywordType.As */)) {
|
|
1424
|
+
if (!isAsKeywordAllowed) {
|
|
1425
|
+
this._addSyntaxError(localize_1.LocMessage.exceptWithAsRequiresParens(), typeExpr);
|
|
1426
|
+
}
|
|
1397
1427
|
symbolName = this._getTokenIfIdentifier();
|
|
1398
1428
|
if (!symbolName) {
|
|
1399
1429
|
this._addSyntaxError(localize_1.LocMessage.expectedNameAfterAs(), this._peekToken());
|
|
1400
1430
|
}
|
|
1401
1431
|
}
|
|
1402
|
-
else {
|
|
1403
|
-
// Handle the python 2.x syntax in a graceful manner.
|
|
1404
|
-
const peekToken = this._peekToken();
|
|
1405
|
-
if (this._consumeTokenIfType(12 /* TokenType.Comma */)) {
|
|
1406
|
-
this._addSyntaxError(localize_1.LocMessage.expectedAsAfterException(), peekToken);
|
|
1407
|
-
// Parse the expression expected in python 2.x, but discard it.
|
|
1408
|
-
this._parseTestExpression(/* allowAssignmentExpression */ false);
|
|
1409
|
-
}
|
|
1410
|
-
}
|
|
1411
1432
|
}
|
|
1412
1433
|
else if (isExceptGroup) {
|
|
1413
1434
|
this._addSyntaxError(localize_1.LocMessage.exceptGroupRequiresType(), this._peekToken());
|
|
@@ -1445,7 +1466,13 @@ class Parser {
|
|
|
1445
1466
|
}
|
|
1446
1467
|
}
|
|
1447
1468
|
if (this._consumeTokenIfKeyword(16 /* KeywordType.Finally */)) {
|
|
1469
|
+
const wasInFinallyBlock = this._isInFinallyBlock;
|
|
1470
|
+
const wasInFinallyLoop = this._isInFinallyLoop;
|
|
1471
|
+
this._isInFinallyBlock = true;
|
|
1472
|
+
this._isInFinallyLoop = this._isInLoop;
|
|
1448
1473
|
tryNode.d.finallySuite = this._parseSuite(this._isInFunction);
|
|
1474
|
+
this._isInFinallyBlock = wasInFinallyBlock;
|
|
1475
|
+
this._isInFinallyLoop = wasInFinallyLoop;
|
|
1449
1476
|
tryNode.d.finallySuite.parent = tryNode;
|
|
1450
1477
|
(0, parseNodes_1.extendRange)(tryNode, tryNode.d.finallySuite);
|
|
1451
1478
|
}
|
|
@@ -1489,12 +1516,18 @@ class Parser {
|
|
|
1489
1516
|
let functionTypeAnnotationToken;
|
|
1490
1517
|
const wasInExceptionGroup = this._isInExceptionGroup;
|
|
1491
1518
|
this._isInExceptionGroup = false;
|
|
1519
|
+
const wasInFinallyBlock = this._isInFinallyBlock;
|
|
1520
|
+
const wasInFinallyLoop = this._isInFinallyLoop;
|
|
1521
|
+
this._isInFinallyBlock = false;
|
|
1522
|
+
this._isInFinallyLoop = false;
|
|
1492
1523
|
const suite = this._parseSuite(/* isFunction */ true, this._parseOptions.skipFunctionAndClassBody, () => {
|
|
1493
1524
|
if (!functionTypeAnnotationToken) {
|
|
1494
1525
|
functionTypeAnnotationToken = this._getTypeAnnotationCommentText();
|
|
1495
1526
|
}
|
|
1496
1527
|
});
|
|
1497
1528
|
this._isInExceptionGroup = wasInExceptionGroup;
|
|
1529
|
+
this._isInFinallyBlock = wasInFinallyBlock;
|
|
1530
|
+
this._isInFinallyLoop = wasInFinallyLoop;
|
|
1498
1531
|
const functionNode = parseNodes_1.FunctionNode.create(defToken, parseNodes_1.NameNode.create(nameToken), suite, typeParameters);
|
|
1499
1532
|
if (asyncToken) {
|
|
1500
1533
|
functionNode.d.isAsync = true;
|
|
@@ -1929,6 +1962,9 @@ class Parser {
|
|
|
1929
1962
|
else if (this._isInExceptionGroup) {
|
|
1930
1963
|
this._addSyntaxError(localize_1.LocMessage.breakInExceptionGroup(), breakToken);
|
|
1931
1964
|
}
|
|
1965
|
+
if (this._isInFinallyLoop && pythonVersion_1.PythonVersion.isGreaterOrEqualTo(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_14)) {
|
|
1966
|
+
this._addSyntaxError(localize_1.LocMessage.finallyBreak(), breakToken);
|
|
1967
|
+
}
|
|
1932
1968
|
return parseNodes_1.BreakNode.create(breakToken);
|
|
1933
1969
|
}
|
|
1934
1970
|
_parseContinueStatement() {
|
|
@@ -1939,6 +1975,9 @@ class Parser {
|
|
|
1939
1975
|
else if (this._isInExceptionGroup) {
|
|
1940
1976
|
this._addSyntaxError(localize_1.LocMessage.continueInExceptionGroup(), continueToken);
|
|
1941
1977
|
}
|
|
1978
|
+
if (this._isInFinallyLoop && pythonVersion_1.PythonVersion.isGreaterOrEqualTo(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_14)) {
|
|
1979
|
+
this._addSyntaxError(localize_1.LocMessage.finallyContinue(), continueToken);
|
|
1980
|
+
}
|
|
1942
1981
|
return parseNodes_1.ContinueNode.create(continueToken);
|
|
1943
1982
|
}
|
|
1944
1983
|
// return_stmt: 'return' [testlist]
|
|
@@ -1951,6 +1990,9 @@ class Parser {
|
|
|
1951
1990
|
else if (this._isInExceptionGroup) {
|
|
1952
1991
|
this._addSyntaxError(localize_1.LocMessage.returnInExceptionGroup(), returnToken);
|
|
1953
1992
|
}
|
|
1993
|
+
if (this._isInFinallyBlock && pythonVersion_1.PythonVersion.isGreaterOrEqualTo(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_14)) {
|
|
1994
|
+
this._addSyntaxError(localize_1.LocMessage.finallyReturn(), returnToken);
|
|
1995
|
+
}
|
|
1954
1996
|
if (!this._isNextTokenNeverExpression()) {
|
|
1955
1997
|
const returnExpr = this._parseTestOrStarListAsExpression(
|
|
1956
1998
|
/* allowAssignmentExpression */ true,
|
|
@@ -3052,8 +3094,7 @@ class Parser {
|
|
|
3052
3094
|
return { args: argList, trailingComma };
|
|
3053
3095
|
}
|
|
3054
3096
|
// argument: ( test [comp_for] |
|
|
3055
|
-
//
|
|
3056
|
-
// name '=' |
|
|
3097
|
+
// test '=' test |
|
|
3057
3098
|
// '**' test |
|
|
3058
3099
|
// '*' test )
|
|
3059
3100
|
_parseArgument() {
|
|
@@ -3066,34 +3107,16 @@ class Parser {
|
|
|
3066
3107
|
argType = 2 /* ArgCategory.UnpackedDictionary */;
|
|
3067
3108
|
}
|
|
3068
3109
|
let valueExpr = this._parseTestExpression(/* allowAssignmentExpression */ true);
|
|
3069
|
-
let
|
|
3070
|
-
let isNameSameAsValue = false;
|
|
3071
|
-
let assignmentToken;
|
|
3110
|
+
let nameIdentifier;
|
|
3072
3111
|
if (argType === 0 /* ArgCategory.Simple */) {
|
|
3073
|
-
const nextToken = this._peekToken();
|
|
3074
3112
|
if (this._consumeTokenIfOperator(2 /* OperatorType.Assign */)) {
|
|
3075
|
-
assignmentToken = nextToken;
|
|
3076
3113
|
const nameExpr = valueExpr;
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
if (pythonVersion_1.PythonVersion.isLessThan(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_14)) {
|
|
3081
|
-
this._addSyntaxError(localize_1.LocMessage.keywordArgShortcutIllegal(), assignmentToken);
|
|
3082
|
-
valueExpr = parseNodes_1.ErrorNode.create(assignmentToken, 14 /* ErrorExpressionCategory.MissingKeywordArgValue */);
|
|
3083
|
-
}
|
|
3084
|
-
else {
|
|
3085
|
-
valueExpr = parseNodes_1.NameNode.create(nameExpr.d.token);
|
|
3086
|
-
isNameSameAsValue = true;
|
|
3087
|
-
}
|
|
3114
|
+
valueExpr = this._parseTestExpression(/* allowAssignmentExpression */ false);
|
|
3115
|
+
if (nameExpr.nodeType === 38 /* ParseNodeType.Name */) {
|
|
3116
|
+
nameIdentifier = nameExpr.d.token;
|
|
3088
3117
|
}
|
|
3089
3118
|
else {
|
|
3090
|
-
|
|
3091
|
-
if (nameExpr.nodeType === 38 /* ParseNodeType.Name */) {
|
|
3092
|
-
nameNode = parseNodes_1.NameNode.create(nameExpr.d.token);
|
|
3093
|
-
}
|
|
3094
|
-
else {
|
|
3095
|
-
this._addSyntaxError(localize_1.LocMessage.expectedParamName(), nameExpr);
|
|
3096
|
-
}
|
|
3119
|
+
this._addSyntaxError(localize_1.LocMessage.expectedParamName(), nameExpr);
|
|
3097
3120
|
}
|
|
3098
3121
|
}
|
|
3099
3122
|
else {
|
|
@@ -3104,13 +3127,9 @@ class Parser {
|
|
|
3104
3127
|
}
|
|
3105
3128
|
}
|
|
3106
3129
|
const argNode = parseNodes_1.ArgumentNode.create(firstToken, valueExpr, argType);
|
|
3107
|
-
if (
|
|
3108
|
-
argNode.d.name =
|
|
3109
|
-
argNode.d.isNameSameAsValue = isNameSameAsValue;
|
|
3130
|
+
if (nameIdentifier) {
|
|
3131
|
+
argNode.d.name = parseNodes_1.NameNode.create(nameIdentifier);
|
|
3110
3132
|
argNode.d.name.parent = argNode;
|
|
3111
|
-
if (assignmentToken) {
|
|
3112
|
-
(0, parseNodes_1.extendRange)(argNode, assignmentToken);
|
|
3113
|
-
}
|
|
3114
3133
|
}
|
|
3115
3134
|
return argNode;
|
|
3116
3135
|
}
|
|
@@ -3657,6 +3676,20 @@ class Parser {
|
|
|
3657
3676
|
if (stringToken.flags & 16 /* StringTokenFlags.Unicode */) {
|
|
3658
3677
|
this._addSyntaxError(localize_1.LocMessage.formatStringUnicode(), stringToken);
|
|
3659
3678
|
}
|
|
3679
|
+
if (stringToken.flags & 128 /* StringTokenFlags.Template */) {
|
|
3680
|
+
this._addSyntaxError(localize_1.LocMessage.formatStringTemplate(), stringToken);
|
|
3681
|
+
}
|
|
3682
|
+
}
|
|
3683
|
+
if (stringToken.flags & 128 /* StringTokenFlags.Template */) {
|
|
3684
|
+
if (pythonVersion_1.PythonVersion.isLessThan(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_14)) {
|
|
3685
|
+
this._addSyntaxError(localize_1.LocMessage.templateStringIllegal(), stringToken);
|
|
3686
|
+
}
|
|
3687
|
+
if (stringToken.flags & 32 /* StringTokenFlags.Bytes */) {
|
|
3688
|
+
this._addSyntaxError(localize_1.LocMessage.templateStringBytes(), stringToken);
|
|
3689
|
+
}
|
|
3690
|
+
if (stringToken.flags & 16 /* StringTokenFlags.Unicode */) {
|
|
3691
|
+
this._addSyntaxError(localize_1.LocMessage.templateStringUnicode(), stringToken);
|
|
3692
|
+
}
|
|
3660
3693
|
}
|
|
3661
3694
|
}
|
|
3662
3695
|
_makeStringNode(stringToken) {
|
|
@@ -3674,7 +3707,6 @@ class Parser {
|
|
|
3674
3707
|
return undefined;
|
|
3675
3708
|
}
|
|
3676
3709
|
const interTokenContents = this._fileContents.slice(curToken.start + curToken.length, nextToken.start);
|
|
3677
|
-
const commentRegEx = /^(\s*#\s*type:\s*)([^\r\n]*)/;
|
|
3678
3710
|
const match = interTokenContents.match(commentRegEx);
|
|
3679
3711
|
if (!match) {
|
|
3680
3712
|
return undefined;
|
|
@@ -3685,7 +3717,7 @@ class Parser {
|
|
|
3685
3717
|
// expression because mypy supports ignore comments of the
|
|
3686
3718
|
// form ignore[errorCode, ...]. We'll treat these as regular
|
|
3687
3719
|
// ignore statements (as though no errorCodes were included).
|
|
3688
|
-
if (typeString.trim().match(
|
|
3720
|
+
if (typeString.trim().match(ignoreCommentRegEx)) {
|
|
3689
3721
|
return undefined;
|
|
3690
3722
|
}
|
|
3691
3723
|
const tokenOffset = curToken.start + curToken.length + match[1].length;
|
|
@@ -3918,7 +3950,11 @@ class Parser {
|
|
|
3918
3950
|
this._addSyntaxError(localize_1.LocMessage.annotationStringEscape(), stringNode);
|
|
3919
3951
|
}
|
|
3920
3952
|
}
|
|
3921
|
-
else if ((stringToken.flags &
|
|
3953
|
+
else if ((stringToken.flags &
|
|
3954
|
+
(8 /* StringTokenFlags.Raw */ |
|
|
3955
|
+
32 /* StringTokenFlags.Bytes */ |
|
|
3956
|
+
64 /* StringTokenFlags.Format */ |
|
|
3957
|
+
128 /* StringTokenFlags.Template */)) ===
|
|
3922
3958
|
0) {
|
|
3923
3959
|
const parser = new Parser();
|
|
3924
3960
|
const parseResults = parser.parseTextExpression(this._fileContents, tokenOffset + prefixLength, unescapedString.length, this._parseOptions, 1 /* ParseTextMode.VariableAnnotation */, (stringNode.d.strings[0].d.token.flags & 4 /* StringTokenFlags.Triplicate */) !== 0 ? 1 : 0, this._typingSymbolAliases);
|