@zzzen/pyright-internal 1.2.0-dev.20240107 → 1.2.0-dev.20240121
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/binder.d.ts +1 -3
- package/dist/analyzer/binder.js +27 -37
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +2 -2
- package/dist/analyzer/checker.js +345 -351
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +2 -2
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/commentUtils.js +7 -7
- package/dist/analyzer/commentUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +29 -30
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +10 -11
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/constructors.d.ts +3 -3
- package/dist/analyzer/constructors.js +12 -14
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +17 -17
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/decorators.d.ts +1 -2
- package/dist/analyzer/decorators.js +13 -10
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/enums.d.ts +4 -2
- package/dist/analyzer/enums.js +109 -50
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/functionTransform.js +1 -2
- package/dist/analyzer/functionTransform.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +2 -2
- package/dist/analyzer/importResolver.js +96 -27
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/namedTuples.js +8 -7
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.js +19 -21
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +1 -1
- package/dist/analyzer/parseTreeUtils.js +37 -0
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +26 -23
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.js +18 -4
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.js +8 -8
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +37 -30
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.d.ts +1 -1
- package/dist/analyzer/service.js +21 -20
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +2 -2
- package/dist/analyzer/sourceFile.js +17 -17
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.js +1 -1
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +1042 -875
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +12 -11
- package/dist/analyzer/typeEvaluatorTypes.js +2 -4
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +16 -11
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +3 -4
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +5 -2
- package/dist/analyzer/typeUtils.js +19 -0
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.js +30 -34
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +12 -13
- package/dist/analyzer/types.js +49 -61
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +12 -11
- package/dist/backgroundAnalysisBase.js +60 -64
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.d.ts +6 -5
- package/dist/backgroundThreadBase.js +63 -60
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/quickActionCommand.js +1 -1
- package/dist/commands/quickActionCommand.js.map +1 -1
- package/dist/common/cancellationUtils.d.ts +6 -3
- package/dist/common/cancellationUtils.js +29 -5
- package/dist/common/cancellationUtils.js.map +1 -1
- package/dist/common/commandLineOptions.d.ts +1 -0
- package/dist/common/commandLineOptions.js.map +1 -1
- package/dist/common/commandUtils.d.ts +2 -0
- package/dist/common/commandUtils.js +24 -0
- package/dist/common/commandUtils.js.map +1 -0
- package/dist/common/configOptions.d.ts +1 -0
- package/dist/common/configOptions.js +13 -11
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/core.d.ts +1 -1
- package/dist/common/core.js.map +1 -1
- package/dist/common/extensibility.d.ts +7 -6
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileBasedCancellationUtils.js +19 -13
- package/dist/common/fileBasedCancellationUtils.js.map +1 -1
- package/dist/common/fullAccessHost.d.ts +1 -1
- package/dist/common/fullAccessHost.js +2 -2
- package/dist/common/fullAccessHost.js.map +1 -1
- package/dist/common/host.d.ts +2 -2
- package/dist/common/host.js.map +1 -1
- package/dist/common/realFileSystem.js +8 -8
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProvider.js +8 -1
- package/dist/common/serviceProvider.js.map +1 -1
- package/dist/common/uri/baseUri.d.ts +11 -3
- package/dist/common/uri/baseUri.js +54 -25
- package/dist/common/uri/baseUri.js.map +1 -1
- package/dist/common/uri/emptyUri.d.ts +9 -4
- package/dist/common/uri/emptyUri.js +22 -8
- package/dist/common/uri/emptyUri.js.map +1 -1
- package/dist/common/uri/fileUri.d.ts +14 -4
- package/dist/common/uri/fileUri.js +65 -9
- package/dist/common/uri/fileUri.js.map +1 -1
- package/dist/common/uri/memoization.js +1 -1
- package/dist/common/uri/memoization.js.map +1 -1
- package/dist/common/uri/uri.d.ts +9 -2
- package/dist/common/uri/uri.js +5 -2
- package/dist/common/uri/uri.js.map +1 -1
- package/dist/common/uri/uriUtils.d.ts +2 -0
- package/dist/common/uri/uriUtils.js +21 -4
- package/dist/common/uri/uriUtils.js.map +1 -1
- package/dist/common/uri/webUri.d.ts +8 -1
- package/dist/common/uri/webUri.js +59 -13
- package/dist/common/uri/webUri.js.map +1 -1
- package/dist/common/workspaceEditUtils.d.ts +6 -5
- package/dist/common/workspaceEditUtils.js +18 -17
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +2 -0
- package/dist/languageServerBase.js +29 -25
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.d.ts +1 -2
- package/dist/languageService/analyzerServiceExecutor.js +8 -5
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/autoImporter.js +3 -3
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +9 -7
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/codeActionProvider.js +3 -2
- package/dist/languageService/codeActionProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +2 -4
- package/dist/languageService/completionProvider.js +14 -18
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.js +5 -4
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/navigationUtils.js +2 -1
- package/dist/languageService/navigationUtils.js.map +1 -1
- package/dist/languageService/renameProvider.js +2 -2
- package/dist/languageService/renameProvider.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.js +2 -1
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +10 -9
- package/dist/localization/localize.js +9 -5
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +50 -9
- package/dist/localization/package.nls.de.json +51 -10
- package/dist/localization/package.nls.en-us.json +11 -9
- package/dist/localization/package.nls.es.json +51 -10
- package/dist/localization/package.nls.fr.json +50 -9
- package/dist/localization/package.nls.it.json +51 -10
- package/dist/localization/package.nls.ja.json +51 -10
- package/dist/localization/package.nls.ko.json +51 -10
- package/dist/localization/package.nls.pl.json +51 -10
- package/dist/localization/package.nls.pt-br.json +51 -10
- package/dist/localization/package.nls.qps-ploc.json +51 -10
- package/dist/localization/package.nls.ru.json +50 -9
- package/dist/localization/package.nls.tr.json +51 -10
- package/dist/localization/package.nls.zh-cn.json +51 -10
- package/dist/localization/package.nls.zh-tw.json +51 -10
- package/dist/parser/parser.d.ts +1 -4
- package/dist/parser/parser.js +201 -201
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.d.ts +2 -4
- package/dist/parser/tokenizer.js +5 -6
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/tokenizerTypes.d.ts +2 -2
- package/dist/parser/tokenizerTypes.js.map +1 -1
- package/dist/pyright.js +11 -9
- package/dist/pyright.js.map +1 -1
- package/dist/pyrightFileSystem.js +2 -2
- package/dist/server.js +7 -5
- package/dist/server.js.map +1 -1
- package/dist/tests/chainedSourceFiles.test.js +8 -8
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/completions.test.js +3 -3
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/config.test.js +14 -6
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/filesystem.test.js +6 -6
- package/dist/tests/filesystem.test.js.map +1 -1
- package/dist/tests/fourSlashParser.test.js +23 -9
- package/dist/tests/fourSlashParser.test.js.map +1 -1
- package/dist/tests/fourslash/rename.multipleDecl.fourslash.d.ts +1 -1
- package/dist/tests/harness/fourslash/fourSlashParser.js +4 -0
- package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
- package/dist/tests/harness/fourslash/fourSlashTypes.d.ts +3 -0
- package/dist/tests/harness/fourslash/fourSlashTypes.js.map +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.js +2 -0
- package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +13 -0
- package/dist/tests/harness/fourslash/testState.js +14 -8
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/vfs/factory.d.ts +1 -1
- package/dist/tests/harness/vfs/factory.js +4 -4
- package/dist/tests/harness/vfs/factory.js.map +1 -1
- package/dist/tests/importStatementUtils.test.js +1 -1
- package/dist/tests/importStatementUtils.test.js.map +1 -1
- package/dist/tests/ipythonMode.test.js +21 -22
- package/dist/tests/ipythonMode.test.js.map +1 -1
- package/dist/tests/localizer.test.js +2 -2
- package/dist/tests/localizer.test.js.map +1 -1
- package/dist/tests/serialization.test.d.ts +2 -0
- package/dist/tests/serialization.test.js +88 -0
- package/dist/tests/serialization.test.js.map +1 -0
- package/dist/tests/service.test.js +1 -1
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/signatureHelp.test.js +2 -3
- package/dist/tests/signatureHelp.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +3 -3
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/sourceMapperUtils.test.js +2 -2
- package/dist/tests/sourceMapperUtils.test.js.map +1 -1
- package/dist/tests/testState.test.js +1 -1
- package/dist/tests/testState.test.js.map +1 -1
- package/dist/tests/testStateUtils.js +2 -2
- package/dist/tests/testStateUtils.js.map +1 -1
- package/dist/tests/textEditUtil.test.js +1 -2
- package/dist/tests/textEditUtil.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +15 -3
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +12 -8
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +24 -6
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +5 -5
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +4 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/uri.test.js +95 -15
- package/dist/tests/uri.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +8 -8
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/dist/workspaceFactory.d.ts +1 -0
- package/dist/workspaceFactory.js +2 -1
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +2 -1
package/dist/parser/parser.js
CHANGED
@@ -102,10 +102,10 @@ class Parser {
|
|
102
102
|
this._getNextToken();
|
103
103
|
const indentToken = nextToken;
|
104
104
|
if (indentToken.isIndentAmbiguous) {
|
105
|
-
this.
|
105
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentTabs(), indentToken);
|
106
106
|
}
|
107
107
|
else {
|
108
|
-
this.
|
108
|
+
this._addSyntaxError(localize_1.LocMessage.unexpectedIndent(), nextToken);
|
109
109
|
}
|
110
110
|
}
|
111
111
|
const statement = this._parseStatement();
|
@@ -155,7 +155,7 @@ class Parser {
|
|
155
155
|
}
|
156
156
|
else {
|
157
157
|
if (exprListResult.list.length === 0) {
|
158
|
-
this.
|
158
|
+
this._addSyntaxError(localize_1.LocMessage.expectedExpr(), this._peekToken());
|
159
159
|
}
|
160
160
|
parseTree = this._makeExpressionOrTuple(exprListResult, /* enclosedInParens */ false);
|
161
161
|
}
|
@@ -164,7 +164,7 @@ class Parser {
|
|
164
164
|
this._getNextToken();
|
165
165
|
}
|
166
166
|
if (!this._atEof()) {
|
167
|
-
this.
|
167
|
+
this._addSyntaxError(localize_1.LocMessage.unexpectedExprToken(), this._peekToken());
|
168
168
|
}
|
169
169
|
return {
|
170
170
|
parseTree,
|
@@ -188,7 +188,7 @@ class Parser {
|
|
188
188
|
// Handle the errant condition of a dedent token here to provide
|
189
189
|
// better recovery.
|
190
190
|
if (this._consumeTokenIfType(4 /* TokenType.Dedent */)) {
|
191
|
-
this.
|
191
|
+
this._addSyntaxError(localize_1.LocMessage.unexpectedUnindent(), this._peekToken());
|
192
192
|
}
|
193
193
|
switch (this._peekKeywordType()) {
|
194
194
|
case 20 /* KeywordType.If */:
|
@@ -257,14 +257,14 @@ class Parser {
|
|
257
257
|
case 17 /* KeywordType.For */:
|
258
258
|
return this._parseForStatement(asyncToken);
|
259
259
|
}
|
260
|
-
this.
|
260
|
+
this._addSyntaxError(localize_1.LocMessage.unexpectedAsyncToken(), asyncToken);
|
261
261
|
return undefined;
|
262
262
|
}
|
263
263
|
// type_alias_stmt: "type" name [type_param_seq] = expr
|
264
264
|
_parseTypeAliasStatement() {
|
265
265
|
const typeToken = this._getKeywordToken(35 /* KeywordType.Type */);
|
266
266
|
if (!this._parseOptions.isStubFile && this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_12) {
|
267
|
-
this.
|
267
|
+
this._addSyntaxError(localize_1.LocMessage.typeAliasStatementIllegal(), typeToken);
|
268
268
|
}
|
269
269
|
const nameToken = this._getTokenIfIdentifier();
|
270
270
|
(0, debug_1.assert)(nameToken !== undefined);
|
@@ -276,7 +276,7 @@ class Parser {
|
|
276
276
|
const assignToken = this._peekToken();
|
277
277
|
if (assignToken.type !== 9 /* TokenType.Operator */ ||
|
278
278
|
assignToken.operatorType !== 2 /* OperatorType.Assign */) {
|
279
|
-
this.
|
279
|
+
this._addSyntaxError(localize_1.LocMessage.expectedEquals(), assignToken);
|
280
280
|
}
|
281
281
|
else {
|
282
282
|
this._getNextToken();
|
@@ -293,7 +293,7 @@ class Parser {
|
|
293
293
|
const firstToken = this._peekToken();
|
294
294
|
if (firstToken.type === 16 /* TokenType.CloseBracket */) {
|
295
295
|
if (typeVariableNodes.length === 0) {
|
296
|
-
this.
|
296
|
+
this._addSyntaxError(localize_1.LocMessage.typeParametersMissing(), this._peekToken());
|
297
297
|
}
|
298
298
|
break;
|
299
299
|
}
|
@@ -308,7 +308,7 @@ class Parser {
|
|
308
308
|
}
|
309
309
|
const closingToken = this._peekToken();
|
310
310
|
if (closingToken.type !== 16 /* TokenType.CloseBracket */) {
|
311
|
-
this.
|
311
|
+
this._addSyntaxError(localize_1.LocMessage.expectedCloseBracket(), this._peekToken());
|
312
312
|
this._consumeTokensUntilType([2 /* TokenType.NewLine */, 16 /* TokenType.CloseBracket */, 10 /* TokenType.Colon */]);
|
313
313
|
}
|
314
314
|
else {
|
@@ -327,7 +327,7 @@ class Parser {
|
|
327
327
|
}
|
328
328
|
const nameToken = this._getTokenIfIdentifier();
|
329
329
|
if (!nameToken) {
|
330
|
-
this.
|
330
|
+
this._addSyntaxError(localize_1.LocMessage.expectedTypeParameterName(), this._peekToken());
|
331
331
|
return undefined;
|
332
332
|
}
|
333
333
|
const name = parseNodes_1.NameNode.create(nameToken);
|
@@ -335,7 +335,7 @@ class Parser {
|
|
335
335
|
if (this._consumeTokenIfType(10 /* TokenType.Colon */)) {
|
336
336
|
boundExpression = this._parseExpression(/* allowUnpack */ false);
|
337
337
|
if (typeParamCategory !== parseNodes_1.TypeParameterCategory.TypeVar) {
|
338
|
-
this.
|
338
|
+
this._addSyntaxError(localize_1.LocMessage.typeParameterBoundNotAllowed(), boundExpression);
|
339
339
|
}
|
340
340
|
}
|
341
341
|
let defaultExpression;
|
@@ -343,7 +343,7 @@ class Parser {
|
|
343
343
|
defaultExpression = this._parseExpression(
|
344
344
|
/* allowUnpack */ typeParamCategory === parseNodes_1.TypeParameterCategory.TypeVarTuple);
|
345
345
|
if (!this._parseOptions.isStubFile && this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_13) {
|
346
|
-
this.
|
346
|
+
this._addSyntaxError(localize_1.LocMessage.typeVarDefaultIllegal(), defaultExpression);
|
347
347
|
}
|
348
348
|
}
|
349
349
|
return parseNodes_1.TypeParameterNode.create(name, typeParamCategory, boundExpression, defaultExpression);
|
@@ -364,7 +364,7 @@ class Parser {
|
|
364
364
|
this._getKeywordToken(25 /* KeywordType.Match */);
|
365
365
|
const expression = this._parseTestOrStarListAsExpression(
|
366
366
|
/* allowAssignmentExpression */ true,
|
367
|
-
/* allowMultipleUnpack */ true, 12 /* ErrorExpressionCategory.MissingPatternSubject */, () => localize_1.
|
367
|
+
/* allowMultipleUnpack */ true, 12 /* ErrorExpressionCategory.MissingPatternSubject */, () => localize_1.LocMessage.expectedReturnExpr());
|
368
368
|
smellsLikeMatchStatement =
|
369
369
|
expression.nodeType !== 0 /* ParseNodeType.Error */ && this._peekToken().type === 10 /* TokenType.Colon */;
|
370
370
|
// Set the token index back to the start.
|
@@ -376,11 +376,11 @@ class Parser {
|
|
376
376
|
const matchToken = this._getKeywordToken(25 /* KeywordType.Match */);
|
377
377
|
const subjectExpression = this._parseTestOrStarListAsExpression(
|
378
378
|
/* allowAssignmentExpression */ true,
|
379
|
-
/* allowMultipleUnpack */ true, 12 /* ErrorExpressionCategory.MissingPatternSubject */, () => localize_1.
|
379
|
+
/* allowMultipleUnpack */ true, 12 /* ErrorExpressionCategory.MissingPatternSubject */, () => localize_1.LocMessage.expectedReturnExpr());
|
380
380
|
const matchNode = parseNodes_1.MatchNode.create(matchToken, subjectExpression);
|
381
381
|
const nextToken = this._peekToken();
|
382
382
|
if (!this._consumeTokenIfType(10 /* TokenType.Colon */)) {
|
383
|
-
this.
|
383
|
+
this._addSyntaxError(localize_1.LocMessage.expectedColon(), nextToken);
|
384
384
|
// Try to perform parse recovery by consuming tokens until
|
385
385
|
// we find the end of the line.
|
386
386
|
if (this._consumeTokensUntilType([2 /* TokenType.NewLine */, 10 /* TokenType.Colon */])) {
|
@@ -390,17 +390,17 @@ class Parser {
|
|
390
390
|
else {
|
391
391
|
(0, parseNodes_1.extendRange)(matchNode, nextToken);
|
392
392
|
if (!this._consumeTokenIfType(2 /* TokenType.NewLine */)) {
|
393
|
-
this.
|
393
|
+
this._addSyntaxError(localize_1.LocMessage.expectedNewline(), nextToken);
|
394
394
|
}
|
395
395
|
else {
|
396
396
|
const possibleIndent = this._peekToken();
|
397
397
|
if (!this._consumeTokenIfType(3 /* TokenType.Indent */)) {
|
398
|
-
this.
|
398
|
+
this._addSyntaxError(localize_1.LocMessage.expectedIndentedBlock(), this._peekToken());
|
399
399
|
}
|
400
400
|
else {
|
401
401
|
const indentToken = possibleIndent;
|
402
402
|
if (indentToken.isIndentAmbiguous) {
|
403
|
-
this.
|
403
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentTabs(), indentToken);
|
404
404
|
}
|
405
405
|
}
|
406
406
|
while (true) {
|
@@ -410,10 +410,10 @@ class Parser {
|
|
410
410
|
this._getNextToken();
|
411
411
|
const indentToken = possibleUnexpectedIndent;
|
412
412
|
if (indentToken.isIndentAmbiguous) {
|
413
|
-
this.
|
413
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentTabs(), indentToken);
|
414
414
|
}
|
415
415
|
else {
|
416
|
-
this.
|
416
|
+
this._addSyntaxError(localize_1.LocMessage.unexpectedIndent(), possibleUnexpectedIndent);
|
417
417
|
}
|
418
418
|
}
|
419
419
|
const caseStatement = this._parseCaseStatement();
|
@@ -430,10 +430,10 @@ class Parser {
|
|
430
430
|
const dedentToken = this._peekToken();
|
431
431
|
if (this._consumeTokenIfType(4 /* TokenType.Dedent */)) {
|
432
432
|
if (!dedentToken.matchesIndent) {
|
433
|
-
this.
|
433
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentIndent(), dedentToken);
|
434
434
|
}
|
435
435
|
if (dedentToken.isDedentAmbiguous) {
|
436
|
-
this.
|
436
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentTabs(), dedentToken);
|
437
437
|
}
|
438
438
|
break;
|
439
439
|
}
|
@@ -446,18 +446,18 @@ class Parser {
|
|
446
446
|
(0, parseNodes_1.extendRange)(matchNode, matchNode.cases[matchNode.cases.length - 1]);
|
447
447
|
}
|
448
448
|
else {
|
449
|
-
this.
|
449
|
+
this._addSyntaxError(localize_1.LocMessage.zeroCaseStatementsFound(), matchToken);
|
450
450
|
}
|
451
451
|
}
|
452
452
|
// This feature requires Python 3.10.
|
453
453
|
if (this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_10) {
|
454
|
-
this.
|
454
|
+
this._addSyntaxError(localize_1.LocMessage.matchIncompatible(), matchToken);
|
455
455
|
}
|
456
456
|
// Validate that only the last entry uses an irrefutable pattern.
|
457
457
|
for (let i = 0; i < matchNode.cases.length - 1; i++) {
|
458
458
|
const caseNode = matchNode.cases[i];
|
459
459
|
if (!caseNode.guardExpression && caseNode.isIrrefutable) {
|
460
|
-
this.
|
460
|
+
this._addSyntaxError(localize_1.LocMessage.casePatternIsIrrefutable(), caseNode.pattern);
|
461
461
|
}
|
462
462
|
}
|
463
463
|
return matchNode;
|
@@ -468,7 +468,7 @@ class Parser {
|
|
468
468
|
_parseCaseStatement() {
|
469
469
|
const caseToken = this._peekToken();
|
470
470
|
if (!this._consumeTokenIfKeyword(6 /* KeywordType.Case */)) {
|
471
|
-
this.
|
471
|
+
this._addSyntaxError(localize_1.LocMessage.expectedCase(), caseToken);
|
472
472
|
return undefined;
|
473
473
|
}
|
474
474
|
const patternList = this._parsePatternSequence();
|
@@ -477,7 +477,7 @@ class Parser {
|
|
477
477
|
casePattern = patternList.parseError;
|
478
478
|
}
|
479
479
|
else if (patternList.list.length === 0) {
|
480
|
-
this.
|
480
|
+
this._addSyntaxError(localize_1.LocMessage.expectedPatternExpr(), this._peekToken());
|
481
481
|
casePattern = parseNodes_1.ErrorNode.create(caseToken, 11 /* ErrorExpressionCategory.MissingPattern */);
|
482
482
|
}
|
483
483
|
else if (patternList.list.length === 1 && !patternList.trailingComma) {
|
@@ -522,7 +522,7 @@ class Parser {
|
|
522
522
|
_reportDuplicatePatternCaptureTargets(node, globalNameMap, localNameMap) {
|
523
523
|
const reportTargetIfDuplicate = (nameNode) => {
|
524
524
|
if (globalNameMap.has(nameNode.value) || localNameMap.has(nameNode.value)) {
|
525
|
-
this.
|
525
|
+
this._addSyntaxError(localize_1.LocMessage.duplicateCapturePatternTarget().format({
|
526
526
|
name: nameNode.value,
|
527
527
|
}), nameNode);
|
528
528
|
}
|
@@ -643,7 +643,7 @@ class Parser {
|
|
643
643
|
entry.orPatterns[0].nodeType === 69 /* ParseNodeType.PatternCapture */ &&
|
644
644
|
entry.orPatterns[0].isStar);
|
645
645
|
if (starEntries.length > 1) {
|
646
|
-
this.
|
646
|
+
this._addSyntaxError(localize_1.LocMessage.duplicateStarPattern(), starEntries[1].orPatterns[0]);
|
647
647
|
}
|
648
648
|
return patternList;
|
649
649
|
}
|
@@ -662,7 +662,7 @@ class Parser {
|
|
662
662
|
// Star patterns cannot be ORed with other patterns.
|
663
663
|
orPatterns.forEach((patternAtom) => {
|
664
664
|
if (patternAtom.nodeType === 69 /* ParseNodeType.PatternCapture */ && patternAtom.isStar) {
|
665
|
-
this.
|
665
|
+
this._addSyntaxError(localize_1.LocMessage.starPatternInOrPattern(), patternAtom);
|
666
666
|
}
|
667
667
|
});
|
668
668
|
}
|
@@ -673,7 +673,7 @@ class Parser {
|
|
673
673
|
target = parseNodes_1.NameNode.create(nameToken);
|
674
674
|
}
|
675
675
|
else {
|
676
|
-
this.
|
676
|
+
this._addSyntaxError(localize_1.LocMessage.expectedNameAfterAs(), this._peekToken());
|
677
677
|
}
|
678
678
|
}
|
679
679
|
// Star patterns cannot be used with AS pattern.
|
@@ -681,12 +681,12 @@ class Parser {
|
|
681
681
|
orPatterns.length === 1 &&
|
682
682
|
orPatterns[0].nodeType === 69 /* ParseNodeType.PatternCapture */ &&
|
683
683
|
orPatterns[0].isStar) {
|
684
|
-
this.
|
684
|
+
this._addSyntaxError(localize_1.LocMessage.starPatternInAsPattern(), orPatterns[0]);
|
685
685
|
}
|
686
686
|
// Validate that irrefutable patterns are not in any entries other than the last.
|
687
687
|
orPatterns.forEach((orPattern, index) => {
|
688
688
|
if (index < orPatterns.length - 1 && this._isPatternIrrefutable(orPattern)) {
|
689
|
-
this.
|
689
|
+
this._addSyntaxError(localize_1.LocMessage.orPatternIrrefutable(), orPattern);
|
690
690
|
}
|
691
691
|
});
|
692
692
|
// Validate that all bound variables are the same within all or patterns.
|
@@ -700,10 +700,10 @@ class Parser {
|
|
700
700
|
if (localNameSet.size < fullNameSet.size) {
|
701
701
|
const missingNames = Array.from(fullNameSet.keys()).filter((name) => !localNameSet.has(name));
|
702
702
|
const diag = new diagnostic_1.DiagnosticAddendum();
|
703
|
-
diag.addMessage(localize_1.
|
703
|
+
diag.addMessage(localize_1.LocAddendum.orPatternMissingName().format({
|
704
704
|
name: missingNames.map((name) => `"${name}"`).join(', '),
|
705
705
|
}));
|
706
|
-
this.
|
706
|
+
this._addSyntaxError(localize_1.LocMessage.orPatternMissingName() + diag.getString(), orPattern);
|
707
707
|
}
|
708
708
|
});
|
709
709
|
return parseNodes_1.PatternAsNode.create(orPatterns, target);
|
@@ -739,7 +739,7 @@ class Parser {
|
|
739
739
|
: patternCaptureOrValue.expression;
|
740
740
|
const classPattern = parseNodes_1.PatternClassNode.create(classNameExpr, args);
|
741
741
|
if (!this._consumeTokenIfType(14 /* TokenType.CloseParenthesis */)) {
|
742
|
-
this.
|
742
|
+
this._addSyntaxError(localize_1.LocMessage.expectedCloseParen(), openParenToken);
|
743
743
|
// Consume the remainder of tokens on the line for error
|
744
744
|
// recovery.
|
745
745
|
this._consumeTokensUntilType([2 /* TokenType.NewLine */]);
|
@@ -755,7 +755,7 @@ class Parser {
|
|
755
755
|
const starToken = this._getNextToken();
|
756
756
|
const identifierToken = this._getTokenIfIdentifier();
|
757
757
|
if (!identifierToken) {
|
758
|
-
this.
|
758
|
+
this._addSyntaxError(localize_1.LocMessage.expectedIdentifier(), this._peekToken());
|
759
759
|
return parseNodes_1.ErrorNode.create(starToken, 2 /* ErrorExpressionCategory.MissingExpression */);
|
760
760
|
}
|
761
761
|
else {
|
@@ -789,9 +789,9 @@ class Parser {
|
|
789
789
|
(0, parseNodes_1.extendRange)(casePattern, endToken);
|
790
790
|
}
|
791
791
|
else {
|
792
|
-
this.
|
793
|
-
? localize_1.
|
794
|
-
: localize_1.
|
792
|
+
this._addSyntaxError(nextToken.type === 13 /* TokenType.OpenParenthesis */
|
793
|
+
? localize_1.LocMessage.expectedCloseParen()
|
794
|
+
: localize_1.LocMessage.expectedCloseBracket(), nextToken);
|
795
795
|
this._consumeTokensUntilType([
|
796
796
|
10 /* TokenType.Colon */,
|
797
797
|
nextToken.type === 13 /* TokenType.OpenParenthesis */ ? 14 /* TokenType.CloseParenthesis */ : 16 /* TokenType.CloseBracket */,
|
@@ -807,12 +807,12 @@ class Parser {
|
|
807
807
|
(0, parseNodes_1.extendRange)(mappingPattern, lastToken);
|
808
808
|
}
|
809
809
|
else {
|
810
|
-
this.
|
810
|
+
this._addSyntaxError(localize_1.LocMessage.expectedCloseBrace(), nextToken);
|
811
811
|
this._consumeTokensUntilType([10 /* TokenType.Colon */, 18 /* TokenType.CloseCurlyBrace */]);
|
812
812
|
}
|
813
813
|
return mappingPattern;
|
814
814
|
}
|
815
|
-
return this._handleExpressionParseError(11 /* ErrorExpressionCategory.MissingPattern */, localize_1.
|
815
|
+
return this._handleExpressionParseError(11 /* ErrorExpressionCategory.MissingPattern */, localize_1.LocMessage.expectedPatternExpr());
|
816
816
|
}
|
817
817
|
// pattern_arguments:
|
818
818
|
// | positional_patterns [',' keyword_patterns]
|
@@ -834,7 +834,7 @@ class Parser {
|
|
834
834
|
sawKeywordArg = true;
|
835
835
|
}
|
836
836
|
else if (sawKeywordArg && !arg.name) {
|
837
|
-
this.
|
837
|
+
this._addSyntaxError(localize_1.LocMessage.positionArgAfterNamedArg(), arg);
|
838
838
|
}
|
839
839
|
argList.push(arg);
|
840
840
|
if (!this._consumeTokenIfType(12 /* TokenType.Comma */)) {
|
@@ -880,7 +880,7 @@ class Parser {
|
|
880
880
|
// Check for f-strings, which are not allowed.
|
881
881
|
stringList.strings.forEach((stringAtom) => {
|
882
882
|
if (stringAtom.nodeType === 27 /* ParseNodeType.FormatString */) {
|
883
|
-
this.
|
883
|
+
this._addSyntaxError(localize_1.LocMessage.formatStringInPattern(), stringAtom);
|
884
884
|
}
|
885
885
|
});
|
886
886
|
return parseNodes_1.PatternLiteralNode.create(stringList);
|
@@ -914,7 +914,7 @@ class Parser {
|
|
914
914
|
realValue = realValue.expression;
|
915
915
|
}
|
916
916
|
if (realValue.nodeType !== 40 /* ParseNodeType.Number */ || (imagValue !== undefined && realValue.isImaginary)) {
|
917
|
-
this.
|
917
|
+
this._addSyntaxError(localize_1.LocMessage.expectedComplexNumberLiteral(), expression);
|
918
918
|
imagValue = undefined;
|
919
919
|
}
|
920
920
|
}
|
@@ -923,7 +923,7 @@ class Parser {
|
|
923
923
|
imagValue = imagValue.expression;
|
924
924
|
}
|
925
925
|
if (imagValue.nodeType !== 40 /* ParseNodeType.Number */ || !imagValue.isImaginary) {
|
926
|
-
this.
|
926
|
+
this._addSyntaxError(localize_1.LocMessage.expectedComplexNumberLiteral(), expression);
|
927
927
|
}
|
928
928
|
}
|
929
929
|
return parseNodes_1.PatternLiteralNode.create(expression);
|
@@ -934,7 +934,7 @@ class Parser {
|
|
934
934
|
// Verify there's at most one ** entry.
|
935
935
|
const starStarEntries = itemList.list.filter((entry) => entry.nodeType === 72 /* ParseNodeType.PatternMappingExpandEntry */);
|
936
936
|
if (starStarEntries.length > 1) {
|
937
|
-
this.
|
937
|
+
this._addSyntaxError(localize_1.LocMessage.duplicateStarStarPattern(), starStarEntries[1]);
|
938
938
|
}
|
939
939
|
return parseNodes_1.PatternMappingNode.create(firstToken, itemList.list);
|
940
940
|
}
|
@@ -949,12 +949,12 @@ class Parser {
|
|
949
949
|
if (this._consumeTokenIfOperator(29 /* OperatorType.Power */)) {
|
950
950
|
const identifierToken = this._getTokenIfIdentifier();
|
951
951
|
if (!identifierToken) {
|
952
|
-
this.
|
952
|
+
this._addSyntaxError(localize_1.LocMessage.expectedIdentifier(), this._peekToken());
|
953
953
|
return parseNodes_1.ErrorNode.create(this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
954
954
|
}
|
955
955
|
const nameNode = parseNodes_1.NameNode.create(identifierToken);
|
956
956
|
if (identifierToken.value === '_') {
|
957
|
-
this.
|
957
|
+
this._addSyntaxError(localize_1.LocMessage.starStarWildcardNotAllowed(), nameNode);
|
958
958
|
}
|
959
959
|
return parseNodes_1.PatternMappingExpandEntryNode.create(doubleStar, nameNode);
|
960
960
|
}
|
@@ -969,18 +969,18 @@ class Parser {
|
|
969
969
|
keyExpression = patternCaptureOrValue;
|
970
970
|
}
|
971
971
|
else {
|
972
|
-
this.
|
972
|
+
this._addSyntaxError(localize_1.LocMessage.expectedPatternValue(), patternCaptureOrValue);
|
973
973
|
keyExpression = parseNodes_1.ErrorNode.create(this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
974
974
|
}
|
975
975
|
}
|
976
976
|
}
|
977
977
|
if (!keyExpression) {
|
978
|
-
this.
|
978
|
+
this._addSyntaxError(localize_1.LocMessage.expectedPatternExpr(), this._peekToken());
|
979
979
|
keyExpression = parseNodes_1.ErrorNode.create(this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
980
980
|
}
|
981
981
|
let valuePattern;
|
982
982
|
if (!this._consumeTokenIfType(10 /* TokenType.Colon */)) {
|
983
|
-
this.
|
983
|
+
this._addSyntaxError(localize_1.LocMessage.expectedColon(), this._peekToken());
|
984
984
|
valuePattern = parseNodes_1.ErrorNode.create(this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
985
985
|
}
|
986
986
|
else {
|
@@ -999,7 +999,7 @@ class Parser {
|
|
999
999
|
nameOrMember = nameOrMember ? parseNodes_1.MemberAccessNode.create(nameOrMember, nameNode) : nameNode;
|
1000
1000
|
}
|
1001
1001
|
else {
|
1002
|
-
this.
|
1002
|
+
this._addSyntaxError(localize_1.LocMessage.expectedIdentifier(), this._peekToken());
|
1003
1003
|
break;
|
1004
1004
|
}
|
1005
1005
|
if (!this._consumeTokenIfType(20 /* TokenType.Dot */)) {
|
@@ -1007,7 +1007,7 @@ class Parser {
|
|
1007
1007
|
}
|
1008
1008
|
}
|
1009
1009
|
if (!nameOrMember) {
|
1010
|
-
this.
|
1010
|
+
this._addSyntaxError(localize_1.LocMessage.expectedIdentifier(), this._peekToken());
|
1011
1011
|
return parseNodes_1.ErrorNode.create(this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
1012
1012
|
}
|
1013
1013
|
if (nameOrMember.nodeType === 35 /* ParseNodeType.MemberAccess */) {
|
@@ -1062,7 +1062,7 @@ class Parser {
|
|
1062
1062
|
const nextToken = this._peekToken();
|
1063
1063
|
const suite = parseNodes_1.SuiteNode.create(nextToken);
|
1064
1064
|
if (!this._consumeTokenIfType(10 /* TokenType.Colon */)) {
|
1065
|
-
this.
|
1065
|
+
this._addSyntaxError(localize_1.LocMessage.expectedColon(), nextToken);
|
1066
1066
|
// Try to perform parse recovery by consuming tokens.
|
1067
1067
|
if (this._consumeTokensUntilType([2 /* TokenType.NewLine */, 10 /* TokenType.Colon */])) {
|
1068
1068
|
if (this._peekTokenType() === 10 /* TokenType.Colon */) {
|
@@ -1086,7 +1086,7 @@ class Parser {
|
|
1086
1086
|
}
|
1087
1087
|
if (nextToken.type === 4 /* TokenType.Dedent */) {
|
1088
1088
|
if (nextToken.isDedentAmbiguous) {
|
1089
|
-
this.
|
1089
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentTabs(), nextToken);
|
1090
1090
|
}
|
1091
1091
|
indent--;
|
1092
1092
|
if (indent === 0) {
|
@@ -1118,12 +1118,12 @@ class Parser {
|
|
1118
1118
|
}
|
1119
1119
|
const possibleIndent = this._peekToken();
|
1120
1120
|
if (!this._consumeTokenIfType(3 /* TokenType.Indent */)) {
|
1121
|
-
this.
|
1121
|
+
this._addSyntaxError(localize_1.LocMessage.expectedIndentedBlock(), this._peekToken());
|
1122
1122
|
return suite;
|
1123
1123
|
}
|
1124
1124
|
const bodyIndentToken = possibleIndent;
|
1125
1125
|
if (bodyIndentToken.isIndentAmbiguous) {
|
1126
|
-
this.
|
1126
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentTabs(), bodyIndentToken);
|
1127
1127
|
}
|
1128
1128
|
while (true) {
|
1129
1129
|
// Handle a common error here and see if we can recover.
|
@@ -1132,20 +1132,20 @@ class Parser {
|
|
1132
1132
|
this._getNextToken();
|
1133
1133
|
const indentToken = nextToken;
|
1134
1134
|
if (indentToken.isIndentAmbiguous) {
|
1135
|
-
this.
|
1135
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentTabs(), indentToken);
|
1136
1136
|
}
|
1137
1137
|
else {
|
1138
|
-
this.
|
1138
|
+
this._addSyntaxError(localize_1.LocMessage.unexpectedIndent(), nextToken);
|
1139
1139
|
}
|
1140
1140
|
}
|
1141
1141
|
else if (nextToken.type === 4 /* TokenType.Dedent */) {
|
1142
1142
|
// When we see a dedent, stop before parsing the dedented statement.
|
1143
1143
|
const dedentToken = nextToken;
|
1144
1144
|
if (!dedentToken.matchesIndent) {
|
1145
|
-
this.
|
1145
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentIndent(), dedentToken);
|
1146
1146
|
}
|
1147
1147
|
if (dedentToken.isDedentAmbiguous) {
|
1148
|
-
this.
|
1148
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentTabs(), dedentToken);
|
1149
1149
|
}
|
1150
1150
|
// When the suite is incomplete (no statements), leave the dedent token for
|
1151
1151
|
// recovery. This allows a single dedent token to cause us to break out of
|
@@ -1201,18 +1201,18 @@ class Parser {
|
|
1201
1201
|
// for_stmt: [async] 'for' exprlist 'in' testlist suite ['else' suite]
|
1202
1202
|
_parseForStatement(asyncToken) {
|
1203
1203
|
const forToken = this._getKeywordToken(17 /* KeywordType.For */);
|
1204
|
-
const targetExpr = this._parseExpressionListAsPossibleTuple(2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.
|
1204
|
+
const targetExpr = this._parseExpressionListAsPossibleTuple(2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedExpr(), forToken);
|
1205
1205
|
let seqExpr;
|
1206
1206
|
let forSuite;
|
1207
1207
|
let elseSuite;
|
1208
1208
|
if (!this._consumeTokenIfKeyword(22 /* KeywordType.In */)) {
|
1209
|
-
seqExpr = this._handleExpressionParseError(0 /* ErrorExpressionCategory.MissingIn */, localize_1.
|
1209
|
+
seqExpr = this._handleExpressionParseError(0 /* ErrorExpressionCategory.MissingIn */, localize_1.LocMessage.expectedIn());
|
1210
1210
|
forSuite = parseNodes_1.SuiteNode.create(this._peekToken());
|
1211
1211
|
}
|
1212
1212
|
else {
|
1213
1213
|
seqExpr = this._parseTestOrStarListAsExpression(
|
1214
1214
|
/* allowAssignmentExpression */ false,
|
1215
|
-
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.
|
1215
|
+
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedInExpr());
|
1216
1216
|
forSuite = this._parseLoopSuite();
|
1217
1217
|
// Versions of Python earlier than 3.9 didn't allow unpack operators if the
|
1218
1218
|
// tuple wasn't enclosed in parentheses.
|
@@ -1221,7 +1221,7 @@ class Parser {
|
|
1221
1221
|
let sawStar = false;
|
1222
1222
|
seqExpr.expressions.forEach((expr) => {
|
1223
1223
|
if (expr.nodeType === 56 /* ParseNodeType.Unpack */ && !sawStar) {
|
1224
|
-
this.
|
1224
|
+
this._addSyntaxError(localize_1.LocMessage.unpackOperatorNotAllowed(), expr);
|
1225
1225
|
sawStar = true;
|
1226
1226
|
}
|
1227
1227
|
});
|
@@ -1254,10 +1254,10 @@ class Parser {
|
|
1254
1254
|
return undefined;
|
1255
1255
|
}
|
1256
1256
|
if (target.nodeType === 56 /* ParseNodeType.Unpack */) {
|
1257
|
-
this.
|
1257
|
+
this._addSyntaxError(localize_1.LocMessage.unpackIllegalInComprehension(), target);
|
1258
1258
|
}
|
1259
1259
|
else if (target.nodeType === 16 /* ParseNodeType.DictionaryExpandEntry */) {
|
1260
|
-
this.
|
1260
|
+
this._addSyntaxError(localize_1.LocMessage.dictExpandIllegalInComprehension(), target);
|
1261
1261
|
}
|
1262
1262
|
const listCompNode = parseNodes_1.ListComprehensionNode.create(target, isGenerator);
|
1263
1263
|
const forIfList = [compFor];
|
@@ -1295,10 +1295,10 @@ class Parser {
|
|
1295
1295
|
asyncToken = this._getKeywordToken(3 /* KeywordType.Async */);
|
1296
1296
|
}
|
1297
1297
|
const forToken = this._getKeywordToken(17 /* KeywordType.For */);
|
1298
|
-
const targetExpr = this._parseExpressionListAsPossibleTuple(2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.
|
1298
|
+
const targetExpr = this._parseExpressionListAsPossibleTuple(2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedExpr(), forToken);
|
1299
1299
|
let seqExpr;
|
1300
1300
|
if (!this._consumeTokenIfKeyword(22 /* KeywordType.In */)) {
|
1301
|
-
seqExpr = this._handleExpressionParseError(0 /* ErrorExpressionCategory.MissingIn */, localize_1.
|
1301
|
+
seqExpr = this._handleExpressionParseError(0 /* ErrorExpressionCategory.MissingIn */, localize_1.LocMessage.expectedIn());
|
1302
1302
|
}
|
1303
1303
|
else {
|
1304
1304
|
this._disallowAssignmentExpression(() => {
|
@@ -1356,7 +1356,7 @@ class Parser {
|
|
1356
1356
|
let isExceptGroup = false;
|
1357
1357
|
if (this._consumeTokenIfOperator(26 /* OperatorType.Multiply */)) {
|
1358
1358
|
if (this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_11 && !this._parseOptions.isStubFile) {
|
1359
|
-
this.
|
1359
|
+
this._addSyntaxError(localize_1.LocMessage.exceptionGroupIncompatible(), possibleStarToken);
|
1360
1360
|
}
|
1361
1361
|
isExceptGroup = true;
|
1362
1362
|
}
|
@@ -1367,14 +1367,14 @@ class Parser {
|
|
1367
1367
|
if (this._consumeTokenIfKeyword(1 /* KeywordType.As */)) {
|
1368
1368
|
symbolName = this._getTokenIfIdentifier();
|
1369
1369
|
if (!symbolName) {
|
1370
|
-
this.
|
1370
|
+
this._addSyntaxError(localize_1.LocMessage.expectedNameAfterAs(), this._peekToken());
|
1371
1371
|
}
|
1372
1372
|
}
|
1373
1373
|
else {
|
1374
1374
|
// Handle the python 2.x syntax in a graceful manner.
|
1375
1375
|
const peekToken = this._peekToken();
|
1376
1376
|
if (this._consumeTokenIfType(12 /* TokenType.Comma */)) {
|
1377
|
-
this.
|
1377
|
+
this._addSyntaxError(localize_1.LocMessage.expectedAsAfterException(), peekToken);
|
1378
1378
|
// Parse the expression expected in python 2.x, but discard it.
|
1379
1379
|
this._parseTestExpression(/* allowAssignmentExpression */ false);
|
1380
1380
|
}
|
@@ -1382,13 +1382,13 @@ class Parser {
|
|
1382
1382
|
}
|
1383
1383
|
if (!typeExpr) {
|
1384
1384
|
if (sawCatchAllExcept) {
|
1385
|
-
this.
|
1385
|
+
this._addSyntaxError(localize_1.LocMessage.duplicateCatchAll(), exceptToken);
|
1386
1386
|
}
|
1387
1387
|
sawCatchAllExcept = true;
|
1388
1388
|
}
|
1389
1389
|
else {
|
1390
1390
|
if (sawCatchAllExcept) {
|
1391
|
-
this.
|
1391
|
+
this._addSyntaxError(localize_1.LocMessage.namedExceptAfterCatchAll(), typeExpr);
|
1392
1392
|
}
|
1393
1393
|
}
|
1394
1394
|
const exceptSuite = this._parseSuite(this._isInFunction);
|
@@ -1418,7 +1418,7 @@ class Parser {
|
|
1418
1418
|
(0, parseNodes_1.extendRange)(tryNode, tryNode.finallySuite);
|
1419
1419
|
}
|
1420
1420
|
if (!tryNode.finallySuite && tryNode.exceptClauses.length === 0) {
|
1421
|
-
this.
|
1421
|
+
this._addSyntaxError(localize_1.LocMessage.tryWithoutExcept(), tryToken);
|
1422
1422
|
}
|
1423
1423
|
return tryNode;
|
1424
1424
|
}
|
@@ -1428,7 +1428,7 @@ class Parser {
|
|
1428
1428
|
const defToken = this._getKeywordToken(10 /* KeywordType.Def */);
|
1429
1429
|
const nameToken = this._getTokenIfIdentifier();
|
1430
1430
|
if (!nameToken) {
|
1431
|
-
this.
|
1431
|
+
this._addSyntaxError(localize_1.LocMessage.expectedFunctionName(), defToken);
|
1432
1432
|
return parseNodes_1.ErrorNode.create(defToken, 10 /* ErrorExpressionCategory.MissingFunctionParameterList */, undefined, decorators);
|
1433
1433
|
}
|
1434
1434
|
let typeParameters;
|
@@ -1436,17 +1436,17 @@ class Parser {
|
|
1436
1436
|
if (possibleOpenBracket.type === 15 /* TokenType.OpenBracket */) {
|
1437
1437
|
typeParameters = this._parseTypeParameterList();
|
1438
1438
|
if (!this._parseOptions.isStubFile && this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_12) {
|
1439
|
-
this.
|
1439
|
+
this._addSyntaxError(localize_1.LocMessage.functionTypeParametersIllegal(), typeParameters);
|
1440
1440
|
}
|
1441
1441
|
}
|
1442
1442
|
const openParenToken = this._peekToken();
|
1443
1443
|
if (!this._consumeTokenIfType(13 /* TokenType.OpenParenthesis */)) {
|
1444
|
-
this.
|
1444
|
+
this._addSyntaxError(localize_1.LocMessage.expectedOpenParen(), this._peekToken());
|
1445
1445
|
return parseNodes_1.ErrorNode.create(nameToken, 10 /* ErrorExpressionCategory.MissingFunctionParameterList */, parseNodes_1.NameNode.create(nameToken), decorators);
|
1446
1446
|
}
|
1447
1447
|
const paramList = this._parseVarArgsList(14 /* TokenType.CloseParenthesis */, /* allowAnnotations */ true);
|
1448
1448
|
if (!this._consumeTokenIfType(14 /* TokenType.CloseParenthesis */)) {
|
1449
|
-
this.
|
1449
|
+
this._addSyntaxError(localize_1.LocMessage.expectedCloseParen(), openParenToken);
|
1450
1450
|
this._consumeTokensUntilType([10 /* TokenType.Colon */]);
|
1451
1451
|
}
|
1452
1452
|
let returnType;
|
@@ -1523,7 +1523,7 @@ class Parser {
|
|
1523
1523
|
if (param.name) {
|
1524
1524
|
const name = param.name.value;
|
1525
1525
|
if (paramMap.has(name)) {
|
1526
|
-
this.
|
1526
|
+
this._addSyntaxError(localize_1.LocMessage.duplicateParam().format({ name }), param.name);
|
1527
1527
|
}
|
1528
1528
|
else {
|
1529
1529
|
paramMap.set(name, name);
|
@@ -1531,19 +1531,19 @@ class Parser {
|
|
1531
1531
|
}
|
1532
1532
|
else if (param.category === 0 /* ParameterCategory.Simple */) {
|
1533
1533
|
if (paramList.length === 0) {
|
1534
|
-
this.
|
1534
|
+
this._addSyntaxError(localize_1.LocMessage.positionOnlyFirstParam(), param);
|
1535
1535
|
}
|
1536
1536
|
}
|
1537
1537
|
if (param.category === 0 /* ParameterCategory.Simple */) {
|
1538
1538
|
if (!param.name) {
|
1539
1539
|
if (sawPositionOnlySeparator) {
|
1540
|
-
this.
|
1540
|
+
this._addSyntaxError(localize_1.LocMessage.duplicatePositionOnly(), param);
|
1541
1541
|
}
|
1542
1542
|
else if (sawKeywordOnlySeparator) {
|
1543
|
-
this.
|
1543
|
+
this._addSyntaxError(localize_1.LocMessage.positionOnlyAfterKeywordOnly(), param);
|
1544
1544
|
}
|
1545
1545
|
else if (sawArgs) {
|
1546
|
-
this.
|
1546
|
+
this._addSyntaxError(localize_1.LocMessage.positionOnlyAfterArgs(), param);
|
1547
1547
|
}
|
1548
1548
|
sawPositionOnlySeparator = true;
|
1549
1549
|
}
|
@@ -1557,7 +1557,7 @@ class Parser {
|
|
1557
1557
|
else if (sawDefaultParam && !sawKeywordOnlySeparator && !sawArgs) {
|
1558
1558
|
// Report this error only once.
|
1559
1559
|
if (!reportedNonDefaultParamErr) {
|
1560
|
-
this.
|
1560
|
+
this._addSyntaxError(localize_1.LocMessage.nonDefaultAfterDefault(), param);
|
1561
1561
|
reportedNonDefaultParamErr = true;
|
1562
1562
|
}
|
1563
1563
|
}
|
@@ -1567,32 +1567,32 @@ class Parser {
|
|
1567
1567
|
if (param.category === 1 /* ParameterCategory.ArgsList */) {
|
1568
1568
|
if (!param.name) {
|
1569
1569
|
if (sawKeywordOnlySeparator) {
|
1570
|
-
this.
|
1570
|
+
this._addSyntaxError(localize_1.LocMessage.duplicateKeywordOnly(), param);
|
1571
1571
|
}
|
1572
1572
|
else if (sawArgs) {
|
1573
|
-
this.
|
1573
|
+
this._addSyntaxError(localize_1.LocMessage.keywordOnlyAfterArgs(), param);
|
1574
1574
|
}
|
1575
1575
|
sawKeywordOnlySeparator = true;
|
1576
1576
|
}
|
1577
1577
|
else {
|
1578
1578
|
if (sawKeywordOnlySeparator || sawArgs) {
|
1579
|
-
this.
|
1579
|
+
this._addSyntaxError(localize_1.LocMessage.duplicateArgsParam(), param);
|
1580
1580
|
}
|
1581
1581
|
sawArgs = true;
|
1582
1582
|
}
|
1583
1583
|
}
|
1584
1584
|
if (param.category === 2 /* ParameterCategory.KwargsDict */) {
|
1585
1585
|
if (sawKwArgs) {
|
1586
|
-
this.
|
1586
|
+
this._addSyntaxError(localize_1.LocMessage.duplicateKwargsParam(), param);
|
1587
1587
|
}
|
1588
1588
|
sawKwArgs = true;
|
1589
1589
|
// A **kwargs cannot immediately follow a keyword-only separator ("*").
|
1590
1590
|
if (sawKeywordOnlySeparator && !sawKeywordOnlyParamAfterSeparator) {
|
1591
|
-
this.
|
1591
|
+
this._addSyntaxError(localize_1.LocMessage.keywordParameterMissing(), param);
|
1592
1592
|
}
|
1593
1593
|
}
|
1594
1594
|
else if (sawKwArgs) {
|
1595
|
-
this.
|
1595
|
+
this._addSyntaxError(localize_1.LocMessage.paramAfterKwargsParam(), param);
|
1596
1596
|
}
|
1597
1597
|
const foundComma = this._consumeTokenIfType(12 /* TokenType.Comma */);
|
1598
1598
|
if (allowAnnotations && !param.typeAnnotation) {
|
@@ -1611,7 +1611,7 @@ class Parser {
|
|
1611
1611
|
if (paramList.length > 0) {
|
1612
1612
|
const lastParam = paramList[paramList.length - 1];
|
1613
1613
|
if (lastParam.category === 1 /* ParameterCategory.ArgsList */ && !lastParam.name) {
|
1614
|
-
this.
|
1614
|
+
this._addSyntaxError(localize_1.LocMessage.expectedNamedParameter(), lastParam);
|
1615
1615
|
}
|
1616
1616
|
}
|
1617
1617
|
return paramList;
|
@@ -1628,7 +1628,7 @@ class Parser {
|
|
1628
1628
|
}
|
1629
1629
|
else if (this._consumeTokenIfOperator(10 /* OperatorType.Divide */)) {
|
1630
1630
|
if (this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_8 && !this._parseOptions.isStubFile) {
|
1631
|
-
this.
|
1631
|
+
this._addSyntaxError(localize_1.LocMessage.positionOnlyIncompatible(), firstToken);
|
1632
1632
|
}
|
1633
1633
|
slashCount = 1;
|
1634
1634
|
}
|
@@ -1648,10 +1648,10 @@ class Parser {
|
|
1648
1648
|
if (this._consumeTokensUntilType([14 /* TokenType.CloseParenthesis */])) {
|
1649
1649
|
this._getNextToken();
|
1650
1650
|
}
|
1651
|
-
this.
|
1651
|
+
this._addSyntaxError(localize_1.LocMessage.sublistParamsIncompatible(), sublistStart);
|
1652
1652
|
}
|
1653
1653
|
else {
|
1654
|
-
this.
|
1654
|
+
this._addSyntaxError(localize_1.LocMessage.expectedParamName(), this._peekToken());
|
1655
1655
|
}
|
1656
1656
|
}
|
1657
1657
|
let paramType = 0 /* ParameterCategory.Simple */;
|
@@ -1677,7 +1677,7 @@ class Parser {
|
|
1677
1677
|
paramNode.defaultValue.parent = paramNode;
|
1678
1678
|
(0, parseNodes_1.extendRange)(paramNode, paramNode.defaultValue);
|
1679
1679
|
if (starCount > 0) {
|
1680
|
-
this.
|
1680
|
+
this._addSyntaxError(localize_1.LocMessage.defaultValueNotAllowed(), paramNode.defaultValue);
|
1681
1681
|
}
|
1682
1682
|
}
|
1683
1683
|
return paramNode;
|
@@ -1718,7 +1718,7 @@ class Parser {
|
|
1718
1718
|
if (isParenthesizedWithItemList) {
|
1719
1719
|
this._consumeTokenIfType(13 /* TokenType.OpenParenthesis */);
|
1720
1720
|
if (this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_9) {
|
1721
|
-
this.
|
1721
|
+
this._addSyntaxError(localize_1.LocMessage.parenthesizedContextManagerIllegal(), possibleParen);
|
1722
1722
|
}
|
1723
1723
|
}
|
1724
1724
|
while (true) {
|
@@ -1732,7 +1732,7 @@ class Parser {
|
|
1732
1732
|
}
|
1733
1733
|
if (isParenthesizedWithItemList) {
|
1734
1734
|
if (!this._consumeTokenIfType(14 /* TokenType.CloseParenthesis */)) {
|
1735
|
-
this.
|
1735
|
+
this._addSyntaxError(localize_1.LocMessage.expectedCloseParen(), possibleParen);
|
1736
1736
|
}
|
1737
1737
|
}
|
1738
1738
|
let typeComment;
|
@@ -1785,7 +1785,7 @@ class Parser {
|
|
1785
1785
|
if (nextToken.keywordType === 3 /* KeywordType.Async */) {
|
1786
1786
|
this._getNextToken();
|
1787
1787
|
if (this._peekKeywordType() !== 10 /* KeywordType.Def */) {
|
1788
|
-
this.
|
1788
|
+
this._addSyntaxError(localize_1.LocMessage.expectedFunctionAfterAsync(), this._peekToken());
|
1789
1789
|
}
|
1790
1790
|
else {
|
1791
1791
|
return this._parseFunctionDef(nextToken, decoratorList);
|
@@ -1798,7 +1798,7 @@ class Parser {
|
|
1798
1798
|
return this._parseClassDef(decoratorList);
|
1799
1799
|
}
|
1800
1800
|
}
|
1801
|
-
this.
|
1801
|
+
this._addSyntaxError(localize_1.LocMessage.expectedAfterDecorator(), this._peekToken());
|
1802
1802
|
// Return a dummy class declaration so the completion provider has
|
1803
1803
|
// some parse nodes to work with.
|
1804
1804
|
return parseNodes_1.ClassNode.createDummyForDecorators(decoratorList);
|
@@ -1820,12 +1820,12 @@ class Parser {
|
|
1820
1820
|
isSupportedExpressionForm = true;
|
1821
1821
|
}
|
1822
1822
|
if (!isSupportedExpressionForm) {
|
1823
|
-
this.
|
1823
|
+
this._addSyntaxError(localize_1.LocMessage.expectedDecoratorExpr(), expression);
|
1824
1824
|
}
|
1825
1825
|
}
|
1826
1826
|
const decoratorNode = parseNodes_1.DecoratorNode.create(atOperator, expression);
|
1827
1827
|
if (!this._consumeTokenIfType(2 /* TokenType.NewLine */)) {
|
1828
|
-
this.
|
1828
|
+
this._addSyntaxError(localize_1.LocMessage.expectedDecoratorNewline(), this._peekToken());
|
1829
1829
|
this._consumeTokensUntilType([2 /* TokenType.NewLine */]);
|
1830
1830
|
}
|
1831
1831
|
return decoratorNode;
|
@@ -1844,7 +1844,7 @@ class Parser {
|
|
1844
1844
|
const classToken = this._getKeywordToken(7 /* KeywordType.Class */);
|
1845
1845
|
let nameToken = this._getTokenIfIdentifier();
|
1846
1846
|
if (!nameToken) {
|
1847
|
-
this.
|
1847
|
+
this._addSyntaxError(localize_1.LocMessage.expectedClassName(), this._peekToken());
|
1848
1848
|
nameToken = tokenizerTypes_1.IdentifierToken.create(0, 0, '', /* comments */ undefined);
|
1849
1849
|
}
|
1850
1850
|
let typeParameters;
|
@@ -1852,7 +1852,7 @@ class Parser {
|
|
1852
1852
|
if (possibleOpenBracket.type === 15 /* TokenType.OpenBracket */) {
|
1853
1853
|
typeParameters = this._parseTypeParameterList();
|
1854
1854
|
if (!this._parseOptions.isStubFile && this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_12) {
|
1855
|
-
this.
|
1855
|
+
this._addSyntaxError(localize_1.LocMessage.classTypeParametersIllegal(), typeParameters);
|
1856
1856
|
}
|
1857
1857
|
}
|
1858
1858
|
let argList = [];
|
@@ -1860,7 +1860,7 @@ class Parser {
|
|
1860
1860
|
if (this._consumeTokenIfType(13 /* TokenType.OpenParenthesis */)) {
|
1861
1861
|
argList = this._parseArgList().args;
|
1862
1862
|
if (!this._consumeTokenIfType(14 /* TokenType.CloseParenthesis */)) {
|
1863
|
-
this.
|
1863
|
+
this._addSyntaxError(localize_1.LocMessage.expectedCloseParen(), openParenToken);
|
1864
1864
|
}
|
1865
1865
|
}
|
1866
1866
|
const suite = this._parseSuite(/* isFunction */ false, this._parseOptions.skipFunctionAndClassBody);
|
@@ -1886,17 +1886,17 @@ class Parser {
|
|
1886
1886
|
_parseBreakStatement() {
|
1887
1887
|
const breakToken = this._getKeywordToken(5 /* KeywordType.Break */);
|
1888
1888
|
if (!this._isInLoop) {
|
1889
|
-
this.
|
1889
|
+
this._addSyntaxError(localize_1.LocMessage.breakOutsideLoop(), breakToken);
|
1890
1890
|
}
|
1891
1891
|
return parseNodes_1.BreakNode.create(breakToken);
|
1892
1892
|
}
|
1893
1893
|
_parseContinueStatement() {
|
1894
1894
|
const continueToken = this._getKeywordToken(8 /* KeywordType.Continue */);
|
1895
1895
|
if (!this._isInLoop) {
|
1896
|
-
this.
|
1896
|
+
this._addSyntaxError(localize_1.LocMessage.continueOutsideLoop(), continueToken);
|
1897
1897
|
}
|
1898
1898
|
else if (this._isInFinally) {
|
1899
|
-
this.
|
1899
|
+
this._addSyntaxError(localize_1.LocMessage.continueInFinally(), continueToken);
|
1900
1900
|
}
|
1901
1901
|
return parseNodes_1.ContinueNode.create(continueToken);
|
1902
1902
|
}
|
@@ -1905,12 +1905,12 @@ class Parser {
|
|
1905
1905
|
const returnToken = this._getKeywordToken(32 /* KeywordType.Return */);
|
1906
1906
|
const returnNode = parseNodes_1.ReturnNode.create(returnToken);
|
1907
1907
|
if (!this._isInFunction) {
|
1908
|
-
this.
|
1908
|
+
this._addSyntaxError(localize_1.LocMessage.returnOutsideFunction(), returnToken);
|
1909
1909
|
}
|
1910
1910
|
if (!this._isNextTokenNeverExpression()) {
|
1911
1911
|
const returnExpr = this._parseTestOrStarListAsExpression(
|
1912
1912
|
/* allowAssignmentExpression */ true,
|
1913
|
-
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.
|
1913
|
+
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedReturnExpr());
|
1914
1914
|
this._reportConditionalErrorForStarTupleElement(returnExpr);
|
1915
1915
|
returnNode.returnExpression = returnExpr;
|
1916
1916
|
returnNode.returnExpression.parent = returnNode;
|
@@ -1931,7 +1931,7 @@ class Parser {
|
|
1931
1931
|
const isFutureImport = modName.leadingDots === 0 && modName.nameParts.length === 1 && modName.nameParts[0].value === '__future__';
|
1932
1932
|
const possibleInputToken = this._peekToken();
|
1933
1933
|
if (!this._consumeTokenIfKeyword(21 /* KeywordType.Import */)) {
|
1934
|
-
this.
|
1934
|
+
this._addSyntaxError(localize_1.LocMessage.expectedImport(), this._peekToken());
|
1935
1935
|
if (!modName.hasTrailingDot) {
|
1936
1936
|
importFromNode.missingImportKeyword = true;
|
1937
1937
|
}
|
@@ -1960,7 +1960,7 @@ class Parser {
|
|
1960
1960
|
if (this._consumeTokenIfKeyword(1 /* KeywordType.As */)) {
|
1961
1961
|
const aliasName = this._getTokenIfIdentifier();
|
1962
1962
|
if (!aliasName) {
|
1963
|
-
this.
|
1963
|
+
this._addSyntaxError(localize_1.LocMessage.expectedImportAlias(), this._peekToken());
|
1964
1964
|
}
|
1965
1965
|
else {
|
1966
1966
|
importFromAsNode.alias = parseNodes_1.NameNode.create(aliasName);
|
@@ -1982,20 +1982,20 @@ class Parser {
|
|
1982
1982
|
trailingCommaToken = nextToken;
|
1983
1983
|
}
|
1984
1984
|
if (importFromNode.imports.length === 0) {
|
1985
|
-
this.
|
1985
|
+
this._addSyntaxError(localize_1.LocMessage.expectedImportSymbols(), this._peekToken());
|
1986
1986
|
}
|
1987
1987
|
if (inParen) {
|
1988
1988
|
importFromNode.usesParens = true;
|
1989
1989
|
const nextToken = this._peekToken();
|
1990
1990
|
if (!this._consumeTokenIfType(14 /* TokenType.CloseParenthesis */)) {
|
1991
|
-
this.
|
1991
|
+
this._addSyntaxError(localize_1.LocMessage.expectedCloseParen(), openParenToken);
|
1992
1992
|
}
|
1993
1993
|
else {
|
1994
1994
|
(0, parseNodes_1.extendRange)(importFromNode, nextToken);
|
1995
1995
|
}
|
1996
1996
|
}
|
1997
1997
|
else if (trailingCommaToken) {
|
1998
|
-
this.
|
1998
|
+
this._addSyntaxError(localize_1.LocMessage.trailingCommaInFromImport(), trailingCommaToken);
|
1999
1999
|
}
|
2000
2000
|
}
|
2001
2001
|
}
|
@@ -2048,11 +2048,11 @@ class Parser {
|
|
2048
2048
|
(0, parseNodes_1.extendRange)(importAsNode, importAsNode.alias);
|
2049
2049
|
}
|
2050
2050
|
else {
|
2051
|
-
this.
|
2051
|
+
this._addSyntaxError(localize_1.LocMessage.expectedImportAlias(), this._peekToken());
|
2052
2052
|
}
|
2053
2053
|
}
|
2054
2054
|
if (importAsNode.module.leadingDots > 0) {
|
2055
|
-
this.
|
2055
|
+
this._addSyntaxError(localize_1.LocMessage.relativeImportNotAllowed(), importAsNode.module);
|
2056
2056
|
}
|
2057
2057
|
importNode.list.push(importAsNode);
|
2058
2058
|
importAsNode.parent = importNode;
|
@@ -2118,7 +2118,7 @@ class Parser {
|
|
2118
2118
|
const identifier = this._getTokenIfIdentifier();
|
2119
2119
|
if (!identifier) {
|
2120
2120
|
if (!allowJustDots || moduleNameNode.leadingDots === 0 || moduleNameNode.nameParts.length > 0) {
|
2121
|
-
this.
|
2121
|
+
this._addSyntaxError(localize_1.LocMessage.expectedModuleName(), this._peekToken());
|
2122
2122
|
moduleNameNode.hasTrailingDot = true;
|
2123
2123
|
}
|
2124
2124
|
break;
|
@@ -2165,7 +2165,7 @@ class Parser {
|
|
2165
2165
|
while (true) {
|
2166
2166
|
const name = this._getTokenIfIdentifier();
|
2167
2167
|
if (!name) {
|
2168
|
-
this.
|
2168
|
+
this._addSyntaxError(localize_1.LocMessage.expectedIdentifier(), this._peekToken());
|
2169
2169
|
break;
|
2170
2170
|
}
|
2171
2171
|
nameList.push(parseNodes_1.NameNode.create(name));
|
@@ -2223,7 +2223,7 @@ class Parser {
|
|
2223
2223
|
const delToken = this._getKeywordToken(11 /* KeywordType.Del */);
|
2224
2224
|
const exprListResult = this._parseExpressionList(/* allowStar */ true);
|
2225
2225
|
if (!exprListResult.parseError && exprListResult.list.length === 0) {
|
2226
|
-
this.
|
2226
|
+
this._addSyntaxError(localize_1.LocMessage.expectedDelExpr(), this._peekToken());
|
2227
2227
|
}
|
2228
2228
|
const delNode = parseNodes_1.DelNode.create(delToken);
|
2229
2229
|
delNode.expressions = exprListResult.list;
|
@@ -2242,7 +2242,7 @@ class Parser {
|
|
2242
2242
|
const nextToken = this._peekToken();
|
2243
2243
|
if (this._consumeTokenIfKeyword(18 /* KeywordType.From */)) {
|
2244
2244
|
if (this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_3) {
|
2245
|
-
this.
|
2245
|
+
this._addSyntaxError(localize_1.LocMessage.yieldFromIllegal(), nextToken);
|
2246
2246
|
}
|
2247
2247
|
return parseNodes_1.YieldFromNode.create(yieldToken, this._parseTestExpression(/* allowAssignmentExpression */ false));
|
2248
2248
|
}
|
@@ -2250,7 +2250,7 @@ class Parser {
|
|
2250
2250
|
if (!this._isNextTokenNeverExpression()) {
|
2251
2251
|
exprList = this._parseTestOrStarListAsExpression(
|
2252
2252
|
/* allowAssignmentExpression */ false,
|
2253
|
-
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.
|
2253
|
+
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedYieldExpr());
|
2254
2254
|
this._reportConditionalErrorForStarTupleElement(exprList);
|
2255
2255
|
}
|
2256
2256
|
return parseNodes_1.YieldNode.create(yieldToken, exprList);
|
@@ -2271,7 +2271,7 @@ class Parser {
|
|
2271
2271
|
const text = this._fileContents.substr(invalidToken.start, invalidToken.length);
|
2272
2272
|
const firstCharCode = text.charCodeAt(0);
|
2273
2273
|
// Remove any non-printable characters.
|
2274
|
-
this.
|
2274
|
+
this._addSyntaxError(localize_1.LocMessage.invalidTokenChars().format({ text: `\\u${firstCharCode.toString(16)}` }), invalidToken);
|
2275
2275
|
this._consumeTokensUntilType([2 /* TokenType.NewLine */]);
|
2276
2276
|
break;
|
2277
2277
|
}
|
@@ -2294,7 +2294,7 @@ class Parser {
|
|
2294
2294
|
}
|
2295
2295
|
}
|
2296
2296
|
if (!this._consumeTokenIfType(2 /* TokenType.NewLine */)) {
|
2297
|
-
this.
|
2297
|
+
this._addSyntaxError(localize_1.LocMessage.expectedNewlineOrSemicolon(), this._peekToken());
|
2298
2298
|
}
|
2299
2299
|
return statement;
|
2300
2300
|
}
|
@@ -2356,7 +2356,7 @@ class Parser {
|
|
2356
2356
|
// that's surrounded by parens.
|
2357
2357
|
if (exprListResult.list.length === 1 && !exprListResult.trailingComma) {
|
2358
2358
|
if (exprListResult.list[0].nodeType === 56 /* ParseNodeType.Unpack */) {
|
2359
|
-
this.
|
2359
|
+
this._addSyntaxError(localize_1.LocMessage.unpackOperatorNotAllowed(), exprListResult.list[0]);
|
2360
2360
|
}
|
2361
2361
|
return exprListResult.list[0];
|
2362
2362
|
}
|
@@ -2375,7 +2375,7 @@ class Parser {
|
|
2375
2375
|
}
|
2376
2376
|
_parseExpressionListAsPossibleTuple(errorCategory, getErrorString, errorToken) {
|
2377
2377
|
if (this._isNextTokenNeverExpression()) {
|
2378
|
-
this.
|
2378
|
+
this._addSyntaxError(getErrorString(), errorToken);
|
2379
2379
|
return parseNodes_1.ErrorNode.create(errorToken, errorCategory);
|
2380
2380
|
}
|
2381
2381
|
const exprListResult = this._parseExpressionList(/* allowStar */ true);
|
@@ -2418,7 +2418,7 @@ class Parser {
|
|
2418
2418
|
for (const expr of exprListResult.list) {
|
2419
2419
|
if (expr.nodeType === 56 /* ParseNodeType.Unpack */) {
|
2420
2420
|
if (sawStar) {
|
2421
|
-
this.
|
2421
|
+
this._addSyntaxError(localize_1.LocMessage.duplicateUnpack(), expr);
|
2422
2422
|
break;
|
2423
2423
|
}
|
2424
2424
|
sawStar = true;
|
@@ -2461,7 +2461,7 @@ class Parser {
|
|
2461
2461
|
return testExpr;
|
2462
2462
|
}
|
2463
2463
|
if (!this._consumeTokenIfKeyword(13 /* KeywordType.Else */)) {
|
2464
|
-
return parseNodes_1.TernaryNode.create(ifExpr, testExpr, this._handleExpressionParseError(1 /* ErrorExpressionCategory.MissingElse */, localize_1.
|
2464
|
+
return parseNodes_1.TernaryNode.create(ifExpr, testExpr, this._handleExpressionParseError(1 /* ErrorExpressionCategory.MissingElse */, localize_1.LocMessage.expectedElse()));
|
2465
2465
|
}
|
2466
2466
|
const elseExpr = this._parseTestExpression(/* allowAssignmentExpression */ true);
|
2467
2467
|
return parseNodes_1.TernaryNode.create(ifExpr, testExpr, elseExpr);
|
@@ -2480,10 +2480,10 @@ class Parser {
|
|
2480
2480
|
return leftExpr;
|
2481
2481
|
}
|
2482
2482
|
if (!this._assignmentExpressionsAllowed || disallowAssignmentExpression) {
|
2483
|
-
this.
|
2483
|
+
this._addSyntaxError(localize_1.LocMessage.walrusNotAllowed(), walrusToken);
|
2484
2484
|
}
|
2485
2485
|
if (this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_8) {
|
2486
|
-
this.
|
2486
|
+
this._addSyntaxError(localize_1.LocMessage.walrusIllegal(), walrusToken);
|
2487
2487
|
}
|
2488
2488
|
const rightExpr = this._parseTestExpression(/* allowAssignmentExpression */ false);
|
2489
2489
|
return parseNodes_1.AssignmentExpressionNode.create(leftExpr, rightExpr);
|
@@ -2542,7 +2542,7 @@ class Parser {
|
|
2542
2542
|
if (tokenizer_1.Tokenizer.isOperatorComparison(this._peekOperatorType())) {
|
2543
2543
|
comparisonOperator = this._peekOperatorType();
|
2544
2544
|
if (comparisonOperator === 19 /* OperatorType.LessOrGreaterThan */) {
|
2545
|
-
this.
|
2545
|
+
this._addSyntaxError(localize_1.LocMessage.operatorLessOrGreaterDeprecated(), peekToken);
|
2546
2546
|
comparisonOperator = 28 /* OperatorType.NotEquals */;
|
2547
2547
|
}
|
2548
2548
|
this._getNextToken();
|
@@ -2731,7 +2731,7 @@ class Parser {
|
|
2731
2731
|
if (this._peekKeywordType() === 4 /* KeywordType.Await */) {
|
2732
2732
|
awaitToken = this._getKeywordToken(4 /* KeywordType.Await */);
|
2733
2733
|
if (this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_5) {
|
2734
|
-
this.
|
2734
|
+
this._addSyntaxError(localize_1.LocMessage.awaitIllegal(), awaitToken);
|
2735
2735
|
}
|
2736
2736
|
}
|
2737
2737
|
let atomExpression = this._parseAtom();
|
@@ -2753,7 +2753,7 @@ class Parser {
|
|
2753
2753
|
argListResult.args.forEach((arg) => {
|
2754
2754
|
if (arg.valueExpression.nodeType === 32 /* ParseNodeType.ListComprehension */) {
|
2755
2755
|
if (!arg.valueExpression.isParenthesized) {
|
2756
|
-
this.
|
2756
|
+
this._addSyntaxError(localize_1.LocMessage.generatorNotParenthesized(), arg.valueExpression);
|
2757
2757
|
}
|
2758
2758
|
}
|
2759
2759
|
});
|
@@ -2761,7 +2761,7 @@ class Parser {
|
|
2761
2761
|
const nextToken = this._peekToken();
|
2762
2762
|
let isArgListTerminated = false;
|
2763
2763
|
if (!this._consumeTokenIfType(14 /* TokenType.CloseParenthesis */)) {
|
2764
|
-
this.
|
2764
|
+
this._addSyntaxError(localize_1.LocMessage.expectedCloseParen(), startOfTrailerToken);
|
2765
2765
|
// Consume the remainder of tokens on the line for error
|
2766
2766
|
// recovery.
|
2767
2767
|
this._consumeTokensUntilType([2 /* TokenType.NewLine */]);
|
@@ -2777,7 +2777,7 @@ class Parser {
|
|
2777
2777
|
atomExpression = callNode;
|
2778
2778
|
if (atomExpression.maxChildDepth !== undefined && atomExpression.maxChildDepth >= maxChildNodeDepth) {
|
2779
2779
|
atomExpression = parseNodes_1.ErrorNode.create(atomExpression, 14 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
2780
|
-
this.
|
2780
|
+
this._addSyntaxError(localize_1.LocMessage.maxParseDepthExceeded(), atomExpression);
|
2781
2781
|
}
|
2782
2782
|
// If the argument list wasn't terminated, break out of the loop
|
2783
2783
|
if (!isArgListTerminated) {
|
@@ -2805,24 +2805,24 @@ class Parser {
|
|
2805
2805
|
if (!this._consumeTokenIfType(16 /* TokenType.CloseBracket */)) {
|
2806
2806
|
// Handle the error case, but don't use the error node in this
|
2807
2807
|
// case because it creates problems for the completion provider.
|
2808
|
-
this._handleExpressionParseError(6 /* ErrorExpressionCategory.MissingIndexCloseBracket */, localize_1.
|
2808
|
+
this._handleExpressionParseError(6 /* ErrorExpressionCategory.MissingIndexCloseBracket */, localize_1.LocMessage.expectedCloseBracket(), startOfTrailerToken, indexNode);
|
2809
2809
|
}
|
2810
2810
|
atomExpression = indexNode;
|
2811
2811
|
if (atomExpression.maxChildDepth !== undefined && atomExpression.maxChildDepth >= maxChildNodeDepth) {
|
2812
2812
|
atomExpression = parseNodes_1.ErrorNode.create(atomExpression, 14 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
2813
|
-
this.
|
2813
|
+
this._addSyntaxError(localize_1.LocMessage.maxParseDepthExceeded(), atomExpression);
|
2814
2814
|
}
|
2815
2815
|
}
|
2816
2816
|
else if (this._consumeTokenIfType(20 /* TokenType.Dot */)) {
|
2817
2817
|
// Is it a member access?
|
2818
2818
|
const memberName = this._getTokenIfIdentifier();
|
2819
2819
|
if (!memberName) {
|
2820
|
-
return this._handleExpressionParseError(7 /* ErrorExpressionCategory.MissingMemberAccessName */, localize_1.
|
2820
|
+
return this._handleExpressionParseError(7 /* ErrorExpressionCategory.MissingMemberAccessName */, localize_1.LocMessage.expectedMemberName(), startOfTrailerToken, atomExpression, [8 /* TokenType.Keyword */]);
|
2821
2821
|
}
|
2822
2822
|
atomExpression = parseNodes_1.MemberAccessNode.create(atomExpression, parseNodes_1.NameNode.create(memberName));
|
2823
2823
|
if (atomExpression.maxChildDepth !== undefined && atomExpression.maxChildDepth >= maxChildNodeDepth) {
|
2824
2824
|
atomExpression = parseNodes_1.ErrorNode.create(atomExpression, 14 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
2825
|
-
this.
|
2825
|
+
this._addSyntaxError(localize_1.LocMessage.maxParseDepthExceeded(), atomExpression);
|
2826
2826
|
}
|
2827
2827
|
}
|
2828
2828
|
else {
|
@@ -2863,7 +2863,7 @@ class Parser {
|
|
2863
2863
|
nameIdentifier = nameExpr.token;
|
2864
2864
|
}
|
2865
2865
|
else {
|
2866
|
-
this.
|
2866
|
+
this._addSyntaxError(localize_1.LocMessage.expectedParamName(), nameExpr);
|
2867
2867
|
}
|
2868
2868
|
}
|
2869
2869
|
else if (valueExpr.nodeType === 38 /* ParseNodeType.Name */ &&
|
@@ -2872,7 +2872,7 @@ class Parser {
|
|
2872
2872
|
valueExpr = this._parseTestExpression(/* allowAssignmentExpression */ true);
|
2873
2873
|
// Python 3.10 and newer allow assignment expressions to be used inside of a subscript.
|
2874
2874
|
if (!this._parseOptions.isStubFile && this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_10) {
|
2875
|
-
this.
|
2875
|
+
this._addSyntaxError(localize_1.LocMessage.assignmentExprInSubscript(), valueExpr);
|
2876
2876
|
}
|
2877
2877
|
}
|
2878
2878
|
}
|
@@ -2885,21 +2885,21 @@ class Parser {
|
|
2885
2885
|
sawKeywordArg = true;
|
2886
2886
|
}
|
2887
2887
|
else if (sawKeywordArg && argNode.argumentCategory === 0 /* ArgumentCategory.Simple */) {
|
2888
|
-
this.
|
2888
|
+
this._addSyntaxError(localize_1.LocMessage.positionArgAfterNamedArg(), argNode);
|
2889
2889
|
}
|
2890
2890
|
argList.push(argNode);
|
2891
2891
|
if (argNode.name) {
|
2892
|
-
this.
|
2892
|
+
this._addSyntaxError(localize_1.LocMessage.keywordSubscriptIllegal(), argNode.name);
|
2893
2893
|
}
|
2894
2894
|
if (argType !== 0 /* ArgumentCategory.Simple */) {
|
2895
2895
|
const unpackListAllowed = this._parseOptions.isStubFile ||
|
2896
2896
|
this._isParsingQuotedText ||
|
2897
2897
|
this._getLanguageVersion() >= pythonVersion_1.PythonVersion.V3_11;
|
2898
2898
|
if (argType === 1 /* ArgumentCategory.UnpackedList */ && !unpackListAllowed) {
|
2899
|
-
this.
|
2899
|
+
this._addSyntaxError(localize_1.LocMessage.unpackedSubscriptIllegal(), argNode);
|
2900
2900
|
}
|
2901
2901
|
if (argType === 2 /* ArgumentCategory.UnpackedDictionary */) {
|
2902
|
-
this.
|
2902
|
+
this._addSyntaxError(localize_1.LocMessage.unpackedDictSubscriptIllegal(), argNode);
|
2903
2903
|
}
|
2904
2904
|
}
|
2905
2905
|
if (!this._consumeTokenIfType(12 /* TokenType.Comma */)) {
|
@@ -2910,7 +2910,7 @@ class Parser {
|
|
2910
2910
|
}
|
2911
2911
|
// An empty subscript list is illegal.
|
2912
2912
|
if (argList.length === 0) {
|
2913
|
-
const errorNode = this._handleExpressionParseError(3 /* ErrorExpressionCategory.MissingIndexOrSlice */, localize_1.
|
2913
|
+
const errorNode = this._handleExpressionParseError(3 /* ErrorExpressionCategory.MissingIndexOrSlice */, localize_1.LocMessage.expectedSliceIndex(),
|
2914
2914
|
/* targetToken */ undefined,
|
2915
2915
|
/* childNode */ undefined, [16 /* TokenType.CloseBracket */]);
|
2916
2916
|
argList.push(parseNodes_1.ArgumentNode.create(this._peekToken(), errorNode, 0 /* ArgumentCategory.Simple */));
|
@@ -2987,7 +2987,7 @@ class Parser {
|
|
2987
2987
|
sawKeywordArg = true;
|
2988
2988
|
}
|
2989
2989
|
else if (sawKeywordArg && arg.argumentCategory === 0 /* ArgumentCategory.Simple */) {
|
2990
|
-
this.
|
2990
|
+
this._addSyntaxError(localize_1.LocMessage.positionArgAfterNamedArg(), arg);
|
2991
2991
|
}
|
2992
2992
|
argList.push(arg);
|
2993
2993
|
if (!this._consumeTokenIfType(12 /* TokenType.Comma */)) {
|
@@ -3020,7 +3020,7 @@ class Parser {
|
|
3020
3020
|
nameIdentifier = nameExpr.token;
|
3021
3021
|
}
|
3022
3022
|
else {
|
3023
|
-
this.
|
3023
|
+
this._addSyntaxError(localize_1.LocMessage.expectedParamName(), nameExpr);
|
3024
3024
|
}
|
3025
3025
|
}
|
3026
3026
|
else {
|
@@ -3060,8 +3060,8 @@ class Parser {
|
|
3060
3060
|
// Atoms with backticks are no longer allowed in Python 3.x, but they
|
3061
3061
|
// were a thing in Python 2.x. We'll parse them to improve parse recovery
|
3062
3062
|
// and emit an error.
|
3063
|
-
this.
|
3064
|
-
const expressionNode = this._parseTestListAsExpression(2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.
|
3063
|
+
this._addSyntaxError(localize_1.LocMessage.backticksIllegal(), nextToken);
|
3064
|
+
const expressionNode = this._parseTestListAsExpression(2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedExpr());
|
3065
3065
|
this._consumeTokenIfType(22 /* TokenType.Backtick */);
|
3066
3066
|
return expressionNode;
|
3067
3067
|
}
|
@@ -3104,7 +3104,7 @@ class Parser {
|
|
3104
3104
|
return parseNodes_1.NameNode.create(keywordAsIdentifier);
|
3105
3105
|
}
|
3106
3106
|
}
|
3107
|
-
return this._handleExpressionParseError(2 /* ErrorExpressionCategory.MissingExpression */, localize_1.
|
3107
|
+
return this._handleExpressionParseError(2 /* ErrorExpressionCategory.MissingExpression */, localize_1.LocMessage.expectedExpr());
|
3108
3108
|
}
|
3109
3109
|
// Allocates a dummy "error expression" and consumes the remainder
|
3110
3110
|
// of the tokens on the line for error recovery. A partially-completed
|
@@ -3112,7 +3112,7 @@ class Parser {
|
|
3112
3112
|
// what to do.
|
3113
3113
|
_handleExpressionParseError(category, errorMsg, targetToken, childNode, additionalStopTokens) {
|
3114
3114
|
var _a;
|
3115
|
-
this.
|
3115
|
+
this._addSyntaxError(errorMsg, targetToken !== null && targetToken !== void 0 ? targetToken : this._peekToken());
|
3116
3116
|
const stopTokens = [2 /* TokenType.NewLine */];
|
3117
3117
|
if (additionalStopTokens) {
|
3118
3118
|
(0, collectionUtils_1.appendArray)(stopTokens, additionalStopTokens);
|
@@ -3132,7 +3132,7 @@ class Parser {
|
|
3132
3132
|
const lambdaToken = this._getKeywordToken(24 /* KeywordType.Lambda */);
|
3133
3133
|
const argList = this._parseVarArgsList(10 /* TokenType.Colon */, /* allowAnnotations */ false);
|
3134
3134
|
if (!this._consumeTokenIfType(10 /* TokenType.Colon */)) {
|
3135
|
-
this.
|
3135
|
+
this._addSyntaxError(localize_1.LocMessage.expectedColon(), this._peekToken());
|
3136
3136
|
}
|
3137
3137
|
let testExpr;
|
3138
3138
|
if (allowConditional) {
|
@@ -3163,7 +3163,7 @@ class Parser {
|
|
3163
3163
|
const yieldExpr = this._tryParseYieldExpression();
|
3164
3164
|
if (yieldExpr) {
|
3165
3165
|
if (this._peekTokenType() !== 14 /* TokenType.CloseParenthesis */) {
|
3166
|
-
return this._handleExpressionParseError(8 /* ErrorExpressionCategory.MissingTupleCloseParen */, localize_1.
|
3166
|
+
return this._handleExpressionParseError(8 /* ErrorExpressionCategory.MissingTupleCloseParen */, localize_1.LocMessage.expectedCloseParen(), startParen, yieldExpr);
|
3167
3167
|
}
|
3168
3168
|
else {
|
3169
3169
|
(0, parseNodes_1.extendRange)(yieldExpr, this._getNextToken());
|
@@ -3174,7 +3174,7 @@ class Parser {
|
|
3174
3174
|
const tupleOrExpression = this._makeExpressionOrTuple(exprListResult, /* enclosedInParens */ true);
|
3175
3175
|
(0, parseNodes_1.extendRange)(tupleOrExpression, startParen);
|
3176
3176
|
if (this._peekTokenType() !== 14 /* TokenType.CloseParenthesis */) {
|
3177
|
-
return this._handleExpressionParseError(8 /* ErrorExpressionCategory.MissingTupleCloseParen */, localize_1.
|
3177
|
+
return this._handleExpressionParseError(8 /* ErrorExpressionCategory.MissingTupleCloseParen */, localize_1.LocMessage.expectedCloseParen(), startParen, (_a = exprListResult.parseError) !== null && _a !== void 0 ? _a : tupleOrExpression);
|
3178
3178
|
}
|
3179
3179
|
else {
|
3180
3180
|
(0, parseNodes_1.extendRange)(tupleOrExpression, this._getNextToken());
|
@@ -3190,7 +3190,7 @@ class Parser {
|
|
3190
3190
|
const exprListResult = this._parseTestListWithComprehension(/* isGenerator */ false);
|
3191
3191
|
const closeBracket = this._peekToken();
|
3192
3192
|
if (!this._consumeTokenIfType(16 /* TokenType.CloseBracket */)) {
|
3193
|
-
return this._handleExpressionParseError(9 /* ErrorExpressionCategory.MissingListCloseBracket */, localize_1.
|
3193
|
+
return this._handleExpressionParseError(9 /* ErrorExpressionCategory.MissingListCloseBracket */, localize_1.LocMessage.expectedCloseBracket(), startBracket, (_a = exprListResult.parseError) !== null && _a !== void 0 ? _a : _createList());
|
3194
3194
|
}
|
3195
3195
|
return _createList();
|
3196
3196
|
function _createList() {
|
@@ -3257,10 +3257,10 @@ class Parser {
|
|
3257
3257
|
}
|
3258
3258
|
if (keyExpression && valueExpression) {
|
3259
3259
|
if (keyExpression.nodeType === 56 /* ParseNodeType.Unpack */) {
|
3260
|
-
this.
|
3260
|
+
this._addSyntaxError(localize_1.LocMessage.unpackInDict(), keyExpression);
|
3261
3261
|
}
|
3262
3262
|
if (isSet) {
|
3263
|
-
this.
|
3263
|
+
this._addSyntaxError(localize_1.LocMessage.keyValueInSet(), valueExpression);
|
3264
3264
|
}
|
3265
3265
|
else {
|
3266
3266
|
const keyEntryNode = parseNodes_1.DictionaryKeyEntryNode.create(keyExpression, valueExpression);
|
@@ -3270,7 +3270,7 @@ class Parser {
|
|
3270
3270
|
dictEntry = listComp;
|
3271
3271
|
sawListComprehension = true;
|
3272
3272
|
if (!isFirstEntry) {
|
3273
|
-
this.
|
3273
|
+
this._addSyntaxError(localize_1.LocMessage.comprehensionInDict(), dictEntry);
|
3274
3274
|
}
|
3275
3275
|
}
|
3276
3276
|
dictionaryEntries.push(dictEntry);
|
@@ -3279,7 +3279,7 @@ class Parser {
|
|
3279
3279
|
}
|
3280
3280
|
else if (doubleStarExpression) {
|
3281
3281
|
if (isSet) {
|
3282
|
-
this.
|
3282
|
+
this._addSyntaxError(localize_1.LocMessage.unpackInSet(), doubleStarExpression);
|
3283
3283
|
}
|
3284
3284
|
else {
|
3285
3285
|
const listEntryNode = parseNodes_1.DictionaryExpandEntryNode.create(doubleStarExpression);
|
@@ -3290,7 +3290,7 @@ class Parser {
|
|
3290
3290
|
expandEntryNode = listComp;
|
3291
3291
|
sawListComprehension = true;
|
3292
3292
|
if (!isFirstEntry) {
|
3293
|
-
this.
|
3293
|
+
this._addSyntaxError(localize_1.LocMessage.comprehensionInDict(), doubleStarExpression);
|
3294
3294
|
}
|
3295
3295
|
}
|
3296
3296
|
dictionaryEntries.push(expandEntryNode);
|
@@ -3304,7 +3304,7 @@ class Parser {
|
|
3304
3304
|
const missingValueErrorNode = parseNodes_1.ErrorNode.create(this._peekToken(), 13 /* ErrorExpressionCategory.MissingDictValue */);
|
3305
3305
|
const keyEntryNode = parseNodes_1.DictionaryKeyEntryNode.create(keyExpression, missingValueErrorNode);
|
3306
3306
|
dictionaryEntries.push(keyEntryNode);
|
3307
|
-
this.
|
3307
|
+
this._addSyntaxError(localize_1.LocMessage.dictKeyValuePairs(), keyExpression);
|
3308
3308
|
}
|
3309
3309
|
else {
|
3310
3310
|
const listComp = this._tryParseListComprehension(keyExpression, /* isGenerator */ false);
|
@@ -3312,7 +3312,7 @@ class Parser {
|
|
3312
3312
|
keyExpression = listComp;
|
3313
3313
|
sawListComprehension = true;
|
3314
3314
|
if (!isFirstEntry) {
|
3315
|
-
this.
|
3315
|
+
this._addSyntaxError(localize_1.LocMessage.comprehensionInSet(), keyExpression);
|
3316
3316
|
}
|
3317
3317
|
}
|
3318
3318
|
setEntries.push(keyExpression);
|
@@ -3332,7 +3332,7 @@ class Parser {
|
|
3332
3332
|
}
|
3333
3333
|
let closeCurlyBrace = this._peekToken();
|
3334
3334
|
if (!this._consumeTokenIfType(18 /* TokenType.CloseCurlyBrace */)) {
|
3335
|
-
this.
|
3335
|
+
this._addSyntaxError(localize_1.LocMessage.expectedCloseBrace(), startBrace);
|
3336
3336
|
closeCurlyBrace = undefined;
|
3337
3337
|
}
|
3338
3338
|
if (isSet) {
|
@@ -3402,7 +3402,7 @@ class Parser {
|
|
3402
3402
|
var _a, _b;
|
3403
3403
|
let leftExpr = this._parseTestOrStarListAsExpression(
|
3404
3404
|
/* allowAssignmentExpression */ false,
|
3405
|
-
/* allowMultipleUnpack */ false, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.
|
3405
|
+
/* allowMultipleUnpack */ false, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedExpr());
|
3406
3406
|
let annotationExpr;
|
3407
3407
|
if (leftExpr.nodeType === 0 /* ParseNodeType.Error */) {
|
3408
3408
|
return leftExpr;
|
@@ -3412,7 +3412,7 @@ class Parser {
|
|
3412
3412
|
annotationExpr = this._parseTypeAnnotation();
|
3413
3413
|
leftExpr = parseNodes_1.TypeAnnotationNode.create(leftExpr, annotationExpr);
|
3414
3414
|
if (!this._parseOptions.isStubFile && this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_6) {
|
3415
|
-
this.
|
3415
|
+
this._addSyntaxError(localize_1.LocMessage.varAnnotationIllegal(), annotationExpr);
|
3416
3416
|
}
|
3417
3417
|
if (!this._consumeTokenIfOperator(2 /* OperatorType.Assign */)) {
|
3418
3418
|
return leftExpr;
|
@@ -3428,7 +3428,7 @@ class Parser {
|
|
3428
3428
|
}
|
3429
3429
|
const rightExpr = (_a = this._tryParseYieldExpression()) !== null && _a !== void 0 ? _a : this._parseTestOrStarListAsExpression(
|
3430
3430
|
/* allowAssignmentExpression */ false,
|
3431
|
-
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.
|
3431
|
+
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedAssignRightHandExpr());
|
3432
3432
|
this._isParsingTypeAnnotation = wasParsingTypeAnnotation;
|
3433
3433
|
return parseNodes_1.AssignmentNode.create(leftExpr, rightExpr);
|
3434
3434
|
}
|
@@ -3438,7 +3438,7 @@ class Parser {
|
|
3438
3438
|
}
|
3439
3439
|
if (tokenizer_1.Tokenizer.isOperatorAssignment(this._peekOperatorType())) {
|
3440
3440
|
const operatorToken = this._getNextToken();
|
3441
|
-
const rightExpr = (_b = this._tryParseYieldExpression()) !== null && _b !== void 0 ? _b : this._parseTestListAsExpression(2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.
|
3441
|
+
const rightExpr = (_b = this._tryParseYieldExpression()) !== null && _b !== void 0 ? _b : this._parseTestListAsExpression(2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedBinaryRightHandExpr());
|
3442
3442
|
// Make a shallow copy of the dest expression but give it a new ID.
|
3443
3443
|
const destExpr = Object.assign({}, leftExpr);
|
3444
3444
|
destExpr.id = (0, parseNodes_1.getNextNodeId)();
|
@@ -3455,7 +3455,7 @@ class Parser {
|
|
3455
3455
|
rightExpr =
|
3456
3456
|
(_a = this._tryParseYieldExpression()) !== null && _a !== void 0 ? _a : this._parseTestOrStarListAsExpression(
|
3457
3457
|
/* allowAssignmentExpression */ false,
|
3458
|
-
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.
|
3458
|
+
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedAssignRightHandExpr());
|
3459
3459
|
if (rightExpr.nodeType === 0 /* ParseNodeType.Error */) {
|
3460
3460
|
break;
|
3461
3461
|
}
|
@@ -3494,7 +3494,7 @@ class Parser {
|
|
3494
3494
|
_parseFunctionTypeAnnotation() {
|
3495
3495
|
const openParenToken = this._peekToken();
|
3496
3496
|
if (!this._consumeTokenIfType(13 /* TokenType.OpenParenthesis */)) {
|
3497
|
-
this.
|
3497
|
+
this._addSyntaxError(localize_1.LocMessage.expectedOpenParen(), this._peekToken());
|
3498
3498
|
return undefined;
|
3499
3499
|
}
|
3500
3500
|
let paramAnnotations = [];
|
@@ -3516,11 +3516,11 @@ class Parser {
|
|
3516
3516
|
}
|
3517
3517
|
}
|
3518
3518
|
if (!this._consumeTokenIfType(14 /* TokenType.CloseParenthesis */)) {
|
3519
|
-
this.
|
3519
|
+
this._addSyntaxError(localize_1.LocMessage.expectedCloseParen(), openParenToken);
|
3520
3520
|
this._consumeTokensUntilType([10 /* TokenType.Colon */]);
|
3521
3521
|
}
|
3522
3522
|
if (!this._consumeTokenIfType(21 /* TokenType.Arrow */)) {
|
3523
|
-
this.
|
3523
|
+
this._addSyntaxError(localize_1.LocMessage.expectedArrow(), this._peekToken());
|
3524
3524
|
return undefined;
|
3525
3525
|
}
|
3526
3526
|
const returnType = this._parseTypeAnnotation();
|
@@ -3543,7 +3543,7 @@ class Parser {
|
|
3543
3543
|
!this._parseOptions.isStubFile &&
|
3544
3544
|
!this._isParsingQuotedText &&
|
3545
3545
|
this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_11) {
|
3546
|
-
this.
|
3546
|
+
this._addSyntaxError(localize_1.LocMessage.unpackedSubscriptIllegal(), startToken);
|
3547
3547
|
}
|
3548
3548
|
let result = this._parseTestExpression(/* allowAssignmentExpression */ false);
|
3549
3549
|
if (isUnpack) {
|
@@ -3554,20 +3554,20 @@ class Parser {
|
|
3554
3554
|
}
|
3555
3555
|
_reportStringTokenErrors(stringToken, unescapedResult) {
|
3556
3556
|
if (stringToken.flags & 65536 /* StringTokenFlags.Unterminated */) {
|
3557
|
-
this.
|
3557
|
+
this._addSyntaxError(localize_1.LocMessage.stringUnterminated(), stringToken);
|
3558
3558
|
}
|
3559
3559
|
if (unescapedResult === null || unescapedResult === void 0 ? void 0 : unescapedResult.nonAsciiInBytes) {
|
3560
|
-
this.
|
3560
|
+
this._addSyntaxError(localize_1.LocMessage.stringNonAsciiBytes(), stringToken);
|
3561
3561
|
}
|
3562
3562
|
if (stringToken.flags & 64 /* StringTokenFlags.Format */) {
|
3563
3563
|
if (this._getLanguageVersion() < pythonVersion_1.PythonVersion.V3_6) {
|
3564
|
-
this.
|
3564
|
+
this._addSyntaxError(localize_1.LocMessage.formatStringIllegal(), stringToken);
|
3565
3565
|
}
|
3566
3566
|
if (stringToken.flags & 32 /* StringTokenFlags.Bytes */) {
|
3567
|
-
this.
|
3567
|
+
this._addSyntaxError(localize_1.LocMessage.formatStringBytes(), stringToken);
|
3568
3568
|
}
|
3569
3569
|
if (stringToken.flags & 16 /* StringTokenFlags.Unicode */) {
|
3570
|
-
this.
|
3570
|
+
this._addSyntaxError(localize_1.LocMessage.formatStringUnicode(), stringToken);
|
3571
3571
|
}
|
3572
3572
|
}
|
3573
3573
|
}
|
@@ -3615,7 +3615,7 @@ class Parser {
|
|
3615
3615
|
const parseResults = parser.parseTextExpression(this._fileContents, stringToken.start, stringToken.length, this._parseOptions, 1 /* ParseTextMode.VariableAnnotation */,
|
3616
3616
|
/* initialParenDepth */ undefined, this._typingSymbolAliases);
|
3617
3617
|
parseResults.diagnostics.forEach((diag) => {
|
3618
|
-
this.
|
3618
|
+
this._addSyntaxError(diag.message, stringListNode);
|
3619
3619
|
});
|
3620
3620
|
if (!parseResults.parseTree) {
|
3621
3621
|
return undefined;
|
@@ -3630,7 +3630,7 @@ class Parser {
|
|
3630
3630
|
const parseResults = parser.parseTextExpression(this._fileContents, stringToken.start, stringToken.length, this._parseOptions, 2 /* ParseTextMode.FunctionAnnotation */,
|
3631
3631
|
/* initialParenDepth */ undefined, this._typingSymbolAliases);
|
3632
3632
|
parseResults.diagnostics.forEach((diag) => {
|
3633
|
-
this.
|
3633
|
+
this._addSyntaxError(diag.message, stringListNode);
|
3634
3634
|
});
|
3635
3635
|
if (!parseResults.parseTree || parseResults.parseTree.nodeType !== 62 /* ParseNodeType.FunctionAnnotation */) {
|
3636
3636
|
return;
|
@@ -3648,7 +3648,7 @@ class Parser {
|
|
3648
3648
|
// Consume the expression.
|
3649
3649
|
const expr = (_a = this._tryParseYieldExpression()) !== null && _a !== void 0 ? _a : this._parseTestOrStarListAsExpression(
|
3650
3650
|
/* allowAssignmentExpression */ true,
|
3651
|
-
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.
|
3651
|
+
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedExpr());
|
3652
3652
|
fieldExpressions.push(expr);
|
3653
3653
|
if (expr.nodeType === 0 /* ParseNodeType.Error */) {
|
3654
3654
|
return false;
|
@@ -3659,7 +3659,7 @@ class Parser {
|
|
3659
3659
|
nextToken.operatorType === 2 /* OperatorType.Assign */) {
|
3660
3660
|
// This feature requires Python 3.8 or newer.
|
3661
3661
|
if (this._parseOptions.pythonVersion < pythonVersion_1.PythonVersion.V3_8) {
|
3662
|
-
this.
|
3662
|
+
this._addSyntaxError(localize_1.LocMessage.formatStringDebuggingIllegal(), nextToken);
|
3663
3663
|
}
|
3664
3664
|
this._getNextToken();
|
3665
3665
|
nextToken = this._peekToken();
|
@@ -3669,7 +3669,7 @@ class Parser {
|
|
3669
3669
|
this._getNextToken();
|
3670
3670
|
nextToken = this._peekToken();
|
3671
3671
|
if (nextToken.type !== 7 /* TokenType.Identifier */) {
|
3672
|
-
this.
|
3672
|
+
this._addSyntaxError(localize_1.LocMessage.formatStringExpectedConversion(), nextToken);
|
3673
3673
|
}
|
3674
3674
|
else {
|
3675
3675
|
this._getNextToken();
|
@@ -3682,7 +3682,7 @@ class Parser {
|
|
3682
3682
|
nextToken = this._peekToken();
|
3683
3683
|
}
|
3684
3684
|
if (nextToken.type !== 18 /* TokenType.CloseCurlyBrace */) {
|
3685
|
-
this.
|
3685
|
+
this._addSyntaxError(localize_1.LocMessage.formatStringUnterminated(), nextToken);
|
3686
3686
|
return false;
|
3687
3687
|
}
|
3688
3688
|
else {
|
@@ -3705,7 +3705,7 @@ class Parser {
|
|
3705
3705
|
// The Python interpreter reports an error at the point where the
|
3706
3706
|
// nesting level exceeds 1. Don't report the error again for deeper nestings.
|
3707
3707
|
if (nestingDepth === 2) {
|
3708
|
-
this.
|
3708
|
+
this._addSyntaxError(localize_1.LocMessage.formatStringNestedFormatSpecifier(), nextToken);
|
3709
3709
|
}
|
3710
3710
|
this._parseFStringReplacementField(fieldExpressions, middleTokens, formatExpressions, nestingDepth + 1);
|
3711
3711
|
continue;
|
@@ -3724,7 +3724,7 @@ class Parser {
|
|
3724
3724
|
if (nextToken.type === 26 /* TokenType.FStringEnd */) {
|
3725
3725
|
endToken = nextToken;
|
3726
3726
|
if ((endToken.flags & 65536 /* StringTokenFlags.Unterminated */) !== 0) {
|
3727
|
-
this.
|
3727
|
+
this._addSyntaxError(localize_1.LocMessage.stringUnterminated(), startToken);
|
3728
3728
|
}
|
3729
3729
|
this._getNextToken();
|
3730
3730
|
break;
|
@@ -3750,9 +3750,9 @@ class Parser {
|
|
3750
3750
|
if (this._consumeTokensUntilType([26 /* TokenType.FStringEnd */])) {
|
3751
3751
|
this._getNextToken();
|
3752
3752
|
}
|
3753
|
-
this.
|
3754
|
-
? localize_1.
|
3755
|
-
: localize_1.
|
3753
|
+
this._addSyntaxError(nextToken.type === 18 /* TokenType.CloseCurlyBrace */
|
3754
|
+
? localize_1.LocMessage.formatStringBrace()
|
3755
|
+
: localize_1.LocMessage.stringUnterminated(), nextToken);
|
3756
3756
|
break;
|
3757
3757
|
}
|
3758
3758
|
this._reportStringTokenErrors(startToken);
|
@@ -3764,11 +3764,11 @@ class Parser {
|
|
3764
3764
|
// or type evaluator.
|
3765
3765
|
if (leftExpression.maxChildDepth !== undefined && leftExpression.maxChildDepth >= maxChildNodeDepth) {
|
3766
3766
|
leftExpression = parseNodes_1.ErrorNode.create(leftExpression, 14 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
3767
|
-
this.
|
3767
|
+
this._addSyntaxError(localize_1.LocMessage.maxParseDepthExceeded(), leftExpression);
|
3768
3768
|
}
|
3769
3769
|
if (rightExpression.maxChildDepth !== undefined && rightExpression.maxChildDepth >= maxChildNodeDepth) {
|
3770
3770
|
rightExpression = parseNodes_1.ErrorNode.create(rightExpression, 14 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
3771
|
-
this.
|
3771
|
+
this._addSyntaxError(localize_1.LocMessage.maxParseDepthExceeded(), rightExpression);
|
3772
3772
|
}
|
3773
3773
|
return parseNodes_1.BinaryOperationNode.create(leftExpression, rightExpression, operatorToken, operator);
|
3774
3774
|
}
|
@@ -3778,7 +3778,7 @@ class Parser {
|
|
3778
3778
|
// or type evaluator.
|
3779
3779
|
if (expression.maxChildDepth !== undefined && expression.maxChildDepth >= maxChildNodeDepth) {
|
3780
3780
|
expression = parseNodes_1.ErrorNode.create(expression, 14 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
3781
|
-
this.
|
3781
|
+
this._addSyntaxError(localize_1.LocMessage.maxParseDepthExceeded(), expression);
|
3782
3782
|
}
|
3783
3783
|
return parseNodes_1.UnaryOperationNode.create(operatorToken, expression, operator);
|
3784
3784
|
}
|
@@ -3803,12 +3803,12 @@ class Parser {
|
|
3803
3803
|
// parse errors that span strings.
|
3804
3804
|
if (stringNode.strings.length > 1) {
|
3805
3805
|
if (this._isParsingQuotedText) {
|
3806
|
-
this.
|
3806
|
+
this._addSyntaxError(localize_1.LocMessage.annotationSpansStrings(), stringNode);
|
3807
3807
|
}
|
3808
3808
|
}
|
3809
3809
|
else if (stringNode.strings[0].nodeType === 27 /* ParseNodeType.FormatString */) {
|
3810
3810
|
if (this._isParsingQuotedText) {
|
3811
|
-
this.
|
3811
|
+
this._addSyntaxError(localize_1.LocMessage.annotationFormatString(), stringNode);
|
3812
3812
|
}
|
3813
3813
|
}
|
3814
3814
|
else {
|
@@ -3821,7 +3821,7 @@ class Parser {
|
|
3821
3821
|
// error ranges back to the escaped text.
|
3822
3822
|
if (unescapedString.length !== stringToken.length - prefixLength - stringToken.quoteMarkLength) {
|
3823
3823
|
if (this._isParsingQuotedText) {
|
3824
|
-
this.
|
3824
|
+
this._addSyntaxError(localize_1.LocMessage.annotationStringEscape(), stringNode);
|
3825
3825
|
}
|
3826
3826
|
}
|
3827
3827
|
else {
|
@@ -3830,7 +3830,7 @@ class Parser {
|
|
3830
3830
|
if (parseResults.diagnostics.length === 0 ||
|
3831
3831
|
this._parseOptions.reportErrorsForParsedStringContents) {
|
3832
3832
|
parseResults.diagnostics.forEach((diag) => {
|
3833
|
-
this.
|
3833
|
+
this._addSyntaxError(diag.message, stringNode);
|
3834
3834
|
});
|
3835
3835
|
if (parseResults.parseTree) {
|
3836
3836
|
(0, debug_1.assert)(parseResults.parseTree.nodeType !== 62 /* ParseNodeType.FunctionAnnotation */);
|
@@ -3858,7 +3858,7 @@ class Parser {
|
|
3858
3858
|
}
|
3859
3859
|
for (const expr of possibleTupleExpr.expressions) {
|
3860
3860
|
if (expr.nodeType === 56 /* ParseNodeType.Unpack */) {
|
3861
|
-
this.
|
3861
|
+
this._addSyntaxError(localize_1.LocMessage.unpackTuplesIllegal(), expr);
|
3862
3862
|
return;
|
3863
3863
|
}
|
3864
3864
|
}
|
@@ -3965,7 +3965,7 @@ class Parser {
|
|
3965
3965
|
// If the next token is invalid, treat it as an identifier.
|
3966
3966
|
if (nextToken.type === 0 /* TokenType.Invalid */) {
|
3967
3967
|
this._getNextToken();
|
3968
|
-
this.
|
3968
|
+
this._addSyntaxError(localize_1.LocMessage.invalidIdentifierChar(), nextToken);
|
3969
3969
|
return tokenizerTypes_1.IdentifierToken.create(nextToken.start, nextToken.length, '', nextToken.comments);
|
3970
3970
|
}
|
3971
3971
|
// If this is a "soft keyword", it can be converted into an identifier.
|
@@ -4036,7 +4036,7 @@ class Parser {
|
|
4036
4036
|
this._areErrorsSuppressed = errorsWereSuppressed;
|
4037
4037
|
}
|
4038
4038
|
}
|
4039
|
-
|
4039
|
+
_addSyntaxError(message, range) {
|
4040
4040
|
(0, debug_1.assert)(range !== undefined);
|
4041
4041
|
if (!this._areErrorsSuppressed) {
|
4042
4042
|
this._diagSink.addError(message, (0, positionUtils_1.convertOffsetsToRange)(range.start, range.start + range.length, this._tokenizerOutput.lines));
|