@zzzen/pyright-internal 1.2.0-dev.20250420 → 1.2.0-dev.20250802

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/dist/analyzer/analyzerNodeInfo.js +1 -1
  2. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  3. package/dist/analyzer/binder.d.ts +2 -1
  4. package/dist/analyzer/binder.js +33 -18
  5. package/dist/analyzer/binder.js.map +1 -1
  6. package/dist/analyzer/checker.js +81 -44
  7. package/dist/analyzer/checker.js.map +1 -1
  8. package/dist/analyzer/codeFlowEngine.js +19 -7
  9. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  10. package/dist/analyzer/codeFlowTypes.d.ts +9 -8
  11. package/dist/analyzer/codeFlowTypes.js +9 -8
  12. package/dist/analyzer/codeFlowTypes.js.map +1 -1
  13. package/dist/analyzer/codeFlowUtils.js +4 -2
  14. package/dist/analyzer/codeFlowUtils.js.map +1 -1
  15. package/dist/analyzer/docStringUtils.js +3 -1
  16. package/dist/analyzer/docStringUtils.js.map +1 -1
  17. package/dist/analyzer/importStatementUtils.js +5 -3
  18. package/dist/analyzer/importStatementUtils.js.map +1 -1
  19. package/dist/analyzer/operations.js +1 -1
  20. package/dist/analyzer/operations.js.map +1 -1
  21. package/dist/analyzer/packageTypeVerifier.js +5 -3
  22. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  23. package/dist/analyzer/parameterUtils.js +10 -3
  24. package/dist/analyzer/parameterUtils.js.map +1 -1
  25. package/dist/analyzer/parseTreeUtils.d.ts +3 -4
  26. package/dist/analyzer/parseTreeUtils.js +19 -225
  27. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  28. package/dist/analyzer/patternMatching.js +4 -0
  29. package/dist/analyzer/patternMatching.js.map +1 -1
  30. package/dist/analyzer/program.d.ts +12 -2
  31. package/dist/analyzer/program.js +74 -58
  32. package/dist/analyzer/program.js.map +1 -1
  33. package/dist/analyzer/properties.js +3 -5
  34. package/dist/analyzer/properties.js.map +1 -1
  35. package/dist/analyzer/protocols.js +13 -3
  36. package/dist/analyzer/protocols.js.map +1 -1
  37. package/dist/analyzer/sentinel.d.ts +4 -0
  38. package/dist/analyzer/sentinel.js +51 -0
  39. package/dist/analyzer/sentinel.js.map +1 -0
  40. package/dist/analyzer/service.d.ts +2 -2
  41. package/dist/analyzer/service.js +7 -6
  42. package/dist/analyzer/service.js.map +1 -1
  43. package/dist/analyzer/sourceFile.d.ts +4 -0
  44. package/dist/analyzer/sourceFile.js +52 -12
  45. package/dist/analyzer/sourceFile.js.map +1 -1
  46. package/dist/analyzer/sourceFileInfo.d.ts +10 -1
  47. package/dist/analyzer/sourceFileInfo.js +28 -0
  48. package/dist/analyzer/sourceFileInfo.js.map +1 -1
  49. package/dist/analyzer/sourceFileInfoUtils.js +4 -4
  50. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  51. package/dist/analyzer/sourceMapper.d.ts +1 -1
  52. package/dist/analyzer/sourceMapper.js +20 -20
  53. package/dist/analyzer/sourceMapper.js.map +1 -1
  54. package/dist/analyzer/symbol.d.ts +3 -0
  55. package/dist/analyzer/symbol.js +11 -0
  56. package/dist/analyzer/symbol.js.map +1 -1
  57. package/dist/analyzer/testWalker.js +2 -13
  58. package/dist/analyzer/testWalker.js.map +1 -1
  59. package/dist/analyzer/tracePrinter.js +1 -1
  60. package/dist/analyzer/tracePrinter.js.map +1 -1
  61. package/dist/analyzer/typeEvaluator.js +261 -137
  62. package/dist/analyzer/typeEvaluator.js.map +1 -1
  63. package/dist/analyzer/typeEvaluatorTypes.d.ts +8 -4
  64. package/dist/analyzer/typeEvaluatorTypes.js +15 -2
  65. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  66. package/dist/analyzer/typeGuards.js +47 -13
  67. package/dist/analyzer/typeGuards.js.map +1 -1
  68. package/dist/analyzer/typePrinter.js +10 -2
  69. package/dist/analyzer/typePrinter.js.map +1 -1
  70. package/dist/analyzer/typePrinterUtils.js +2 -2
  71. package/dist/analyzer/typePrinterUtils.js.map +1 -1
  72. package/dist/analyzer/typeUtils.d.ts +2 -0
  73. package/dist/analyzer/typeUtils.js +10 -0
  74. package/dist/analyzer/typeUtils.js.map +1 -1
  75. package/dist/analyzer/typedDicts.js +9 -5
  76. package/dist/analyzer/typedDicts.js.map +1 -1
  77. package/dist/analyzer/types.d.ts +9 -2
  78. package/dist/analyzer/types.js +39 -1
  79. package/dist/analyzer/types.js.map +1 -1
  80. package/dist/commands/dumpFileDebugInfoCommand.d.ts +96 -0
  81. package/dist/commands/dumpFileDebugInfoCommand.js +13 -2
  82. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  83. package/dist/common/cancellationUtils.d.ts +1 -1
  84. package/dist/common/cancellationUtils.js +2 -2
  85. package/dist/common/cancellationUtils.js.map +1 -1
  86. package/dist/common/charCodes.d.ts +1 -1
  87. package/dist/common/charCodes.js +1 -1
  88. package/dist/common/charCodes.js.map +1 -1
  89. package/dist/common/configOptions.d.ts +1 -0
  90. package/dist/common/configOptions.js +5 -0
  91. package/dist/common/configOptions.js.map +1 -1
  92. package/dist/common/core.d.ts +1 -3
  93. package/dist/common/core.js +3 -4
  94. package/dist/common/core.js.map +1 -1
  95. package/dist/common/diagnostic.d.ts +1 -1
  96. package/dist/common/diagnosticRules.d.ts +1 -0
  97. package/dist/common/diagnosticRules.js +1 -0
  98. package/dist/common/diagnosticRules.js.map +1 -1
  99. package/dist/common/docRange.d.ts +6 -0
  100. package/dist/common/docRange.js +10 -0
  101. package/dist/common/docRange.js.map +1 -0
  102. package/dist/common/envVarUtils.js +1 -6
  103. package/dist/common/envVarUtils.js.map +1 -1
  104. package/dist/common/extensibility.d.ts +11 -2
  105. package/dist/common/extensibility.js.map +1 -1
  106. package/dist/common/fileBasedCancellationUtils.d.ts +1 -0
  107. package/dist/common/fileBasedCancellationUtils.js +1 -0
  108. package/dist/common/fileBasedCancellationUtils.js.map +1 -1
  109. package/dist/common/logTracker.d.ts +5 -1
  110. package/dist/common/logTracker.js +43 -26
  111. package/dist/common/logTracker.js.map +1 -1
  112. package/dist/common/pathUtils.d.ts +1 -1
  113. package/dist/common/pathUtils.js +3 -2
  114. package/dist/common/pathUtils.js.map +1 -1
  115. package/dist/common/realFileSystem.d.ts +1 -1
  116. package/dist/common/realFileSystem.js +2 -1
  117. package/dist/common/realFileSystem.js.map +1 -1
  118. package/dist/common/stringUtils.d.ts +0 -1
  119. package/dist/common/stringUtils.js +0 -42
  120. package/dist/common/stringUtils.js.map +1 -1
  121. package/dist/common/textEditTracker.js +5 -3
  122. package/dist/common/textEditTracker.js.map +1 -1
  123. package/dist/common/textRange.d.ts +5 -11
  124. package/dist/common/textRange.js +31 -56
  125. package/dist/common/textRange.js.map +1 -1
  126. package/dist/common/textRangeCollection.js +3 -2
  127. package/dist/common/textRangeCollection.js.map +1 -1
  128. package/dist/common/uri/baseUri.js +2 -1
  129. package/dist/common/uri/baseUri.js.map +1 -1
  130. package/dist/common/uri/uri.d.ts +5 -2
  131. package/dist/common/uri/uri.js +21 -5
  132. package/dist/common/uri/uri.js.map +1 -1
  133. package/dist/common/uri/uriUtils.d.ts +2 -2
  134. package/dist/common/uri/uriUtils.js +4 -3
  135. package/dist/common/uri/uriUtils.js.map +1 -1
  136. package/dist/common/workspaceEditUtils.js +9 -9
  137. package/dist/common/workspaceEditUtils.js.map +1 -1
  138. package/dist/languageServerBase.d.ts +5 -3
  139. package/dist/languageServerBase.js +44 -37
  140. package/dist/languageServerBase.js.map +1 -1
  141. package/dist/languageService/analyzerServiceExecutor.d.ts +3 -0
  142. package/dist/languageService/analyzerServiceExecutor.js +1 -0
  143. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  144. package/dist/languageService/autoImporter.d.ts +2 -2
  145. package/dist/languageService/autoImporter.js +3 -3
  146. package/dist/languageService/autoImporter.js.map +1 -1
  147. package/dist/languageService/callHierarchyProvider.js +2 -3
  148. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  149. package/dist/languageService/completionProvider.js +16 -13
  150. package/dist/languageService/completionProvider.js.map +1 -1
  151. package/dist/languageService/definitionProvider.d.ts +2 -1
  152. package/dist/languageService/definitionProvider.js.map +1 -1
  153. package/dist/languageService/documentSymbolCollector.d.ts +4 -1
  154. package/dist/languageService/documentSymbolCollector.js +9 -7
  155. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  156. package/dist/languageService/hoverProvider.js +1 -9
  157. package/dist/languageService/hoverProvider.js.map +1 -1
  158. package/dist/languageService/importSorter.js +1 -0
  159. package/dist/languageService/importSorter.js.map +1 -1
  160. package/dist/languageService/navigationUtils.d.ts +1 -1
  161. package/dist/languageService/referencesProvider.d.ts +2 -1
  162. package/dist/languageService/referencesProvider.js +8 -7
  163. package/dist/languageService/referencesProvider.js.map +1 -1
  164. package/dist/languageService/renameProvider.js +4 -19
  165. package/dist/languageService/renameProvider.js.map +1 -1
  166. package/dist/languageService/tooltipUtils.d.ts +2 -0
  167. package/dist/languageService/tooltipUtils.js +2 -0
  168. package/dist/languageService/tooltipUtils.js.map +1 -1
  169. package/dist/languageService/workspaceSymbolProvider.js +1 -1
  170. package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
  171. package/dist/localization/localize.d.ts +12 -2
  172. package/dist/localization/localize.js +12 -2
  173. package/dist/localization/localize.js.map +1 -1
  174. package/dist/localization/package.nls.cs.json +23 -9
  175. package/dist/localization/package.nls.de.json +18 -4
  176. package/dist/localization/package.nls.en-us.json +36 -2
  177. package/dist/localization/package.nls.es.json +18 -4
  178. package/dist/localization/package.nls.fr.json +22 -8
  179. package/dist/localization/package.nls.it.json +23 -9
  180. package/dist/localization/package.nls.ja.json +18 -4
  181. package/dist/localization/package.nls.ko.json +23 -9
  182. package/dist/localization/package.nls.pl.json +18 -4
  183. package/dist/localization/package.nls.pt-br.json +18 -4
  184. package/dist/localization/package.nls.qps-ploc.json +17 -3
  185. package/dist/localization/package.nls.ru.json +18 -4
  186. package/dist/localization/package.nls.tr.json +23 -9
  187. package/dist/localization/package.nls.zh-cn.json +18 -4
  188. package/dist/localization/package.nls.zh-tw.json +18 -4
  189. package/dist/parser/characters.d.ts +1 -8
  190. package/dist/parser/characters.js +6 -3
  191. package/dist/parser/characters.js.map +1 -1
  192. package/dist/parser/parseNodeUtils.d.ts +12 -0
  193. package/dist/parser/parseNodeUtils.js +136 -0
  194. package/dist/parser/parseNodeUtils.js.map +1 -0
  195. package/dist/parser/parseNodes.d.ts +12 -2
  196. package/dist/parser/parseNodes.js +17 -2
  197. package/dist/parser/parseNodes.js.map +1 -1
  198. package/dist/parser/parser.d.ts +3 -2
  199. package/dist/parser/parser.js +54 -47
  200. package/dist/parser/parser.js.map +1 -1
  201. package/dist/parser/tokenizer.d.ts +3 -3
  202. package/dist/parser/tokenizer.js +58 -38
  203. package/dist/parser/tokenizer.js.map +1 -1
  204. package/dist/parser/tokenizerTypes.d.ts +4 -3
  205. package/dist/parser/tokenizerTypes.js +4 -3
  206. package/dist/parser/tokenizerTypes.js.map +1 -1
  207. package/dist/pyright.js +1 -1
  208. package/dist/pyright.js.map +1 -1
  209. package/dist/server.js +3 -3
  210. package/dist/server.js.map +1 -1
  211. package/dist/tests/checker.test.js +2 -2
  212. package/dist/tests/common.test.js +6 -6
  213. package/dist/tests/common.test.js.map +1 -1
  214. package/dist/tests/fourslash/completions.autoimport.unicode.fourslash.js +29 -0
  215. package/dist/tests/fourslash/completions.autoimport.unicode.fourslash.js.map +1 -0
  216. package/dist/tests/fourslash/completions.declNames.method.fourslash.js +8 -8
  217. package/dist/tests/harness/fourslash/testState.d.ts +3 -2
  218. package/dist/tests/harness/fourslash/testState.js +9 -3
  219. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  220. package/dist/tests/lsp/languageServer.js +1 -1
  221. package/dist/tests/lsp/languageServer.js.map +1 -1
  222. package/dist/tests/lsp/languageServerTestUtils.d.ts +1 -2
  223. package/dist/tests/lsp/languageServerTestUtils.js +2 -2
  224. package/dist/tests/lsp/languageServerTestUtils.js.map +1 -1
  225. package/dist/tests/positionUtils.test.js +1 -1
  226. package/dist/tests/service.test.js +4 -4
  227. package/dist/tests/service.test.js.map +1 -1
  228. package/dist/tests/sourceFile.test.js +19 -1
  229. package/dist/tests/sourceFile.test.js.map +1 -1
  230. package/dist/tests/stringUtils.test.js +0 -12
  231. package/dist/tests/stringUtils.test.js.map +1 -1
  232. package/dist/tests/testStateUtils.js +8 -3
  233. package/dist/tests/testStateUtils.js.map +1 -1
  234. package/dist/tests/tokenizer.test.js +5 -5
  235. package/dist/tests/tokenizer.test.js.map +1 -1
  236. package/dist/tests/typeEvaluator1.test.js +11 -13
  237. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  238. package/dist/tests/typeEvaluator2.test.js +15 -1
  239. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  240. package/dist/tests/typeEvaluator4.test.js +16 -1
  241. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  242. package/dist/tests/typeEvaluator5.test.js +9 -3
  243. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  244. package/dist/tests/typeEvaluator6.test.js +1 -1
  245. package/dist/tests/typeEvaluator7.test.js +9 -0
  246. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  247. package/dist/tests/typeEvaluator8.test.js +4 -0
  248. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  249. package/dist/tests/workspaceEditUtils.test.js +7 -9
  250. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  251. package/dist/types.d.ts +1 -1
  252. package/dist/workspaceFactory.d.ts +12 -1
  253. package/dist/workspaceFactory.js.map +1 -1
  254. package/package.json +2 -3
  255. package/dist/tests/fourslash/rename.args.fourslash.js +0 -72
  256. package/dist/tests/fourslash/rename.args.fourslash.js.map +0 -1
  257. /package/dist/tests/fourslash/{rename.args.fourslash.d.ts → completions.autoimport.unicode.fourslash.d.ts} +0 -0
@@ -36,13 +36,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
36
36
  };
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
38
  exports.Parser = exports.ParseTextMode = exports.ParseOptions = void 0;
39
- const sourceFile_1 = require("../analyzer/sourceFile");
40
39
  const collectionUtils_1 = require("../common/collectionUtils");
41
40
  const debug_1 = require("../common/debug");
42
41
  const diagnostic_1 = require("../common/diagnostic");
43
42
  const diagnosticSink_1 = require("../common/diagnosticSink");
44
43
  const positionUtils_1 = require("../common/positionUtils");
45
44
  const pythonVersion_1 = require("../common/pythonVersion");
45
+ const stringUtils_1 = require("../common/stringUtils");
46
46
  const textRange_1 = require("../common/textRange");
47
47
  const timing_1 = require("../common/timing");
48
48
  const localize_1 = require("../localization/localize");
@@ -50,13 +50,15 @@ const parseNodes_1 = require("./parseNodes");
50
50
  const StringTokenUtils = __importStar(require("./stringTokenUtils"));
51
51
  const tokenizer_1 = require("./tokenizer");
52
52
  const tokenizerTypes_1 = require("./tokenizerTypes");
53
+ const commentRegEx = /^(\s*#\s*type:\s*)([^\r\n]*)/;
54
+ const ignoreCommentRegEx = /^ignore(\s|\[|$)/;
53
55
  class ParseOptions {
54
56
  constructor() {
55
57
  this.isStubFile = false;
56
58
  this.pythonVersion = pythonVersion_1.latestStablePythonVersion;
57
59
  this.reportInvalidStringEscapeSequence = false;
58
60
  this.skipFunctionAndClassBody = false;
59
- this.ipythonMode = sourceFile_1.IPythonMode.None;
61
+ this.useNotebookMode = false;
60
62
  this.reportErrorsForParsedStringContents = false;
61
63
  }
62
64
  }
@@ -128,6 +130,7 @@ class Parser {
128
130
  (0, debug_1.assert)(this._tokenizerOutput !== undefined);
129
131
  return {
130
132
  text: fileContents,
133
+ contentHash: (0, stringUtils_1.hashString)(fileContents),
131
134
  parserOutput: {
132
135
  parseTree: moduleNode,
133
136
  importedModules: this._importedModules,
@@ -137,6 +140,7 @@ class Parser {
137
140
  hasTypeAnnotations: this._hasTypeAnnotations,
138
141
  },
139
142
  tokenizerOutput: this._tokenizerOutput,
143
+ lines: this._tokenizerOutput.lines,
140
144
  };
141
145
  }
142
146
  parseTextExpression(fileContents, textOffset, textLength, parseOptions, parseTextMode = 0 /* ParseTextMode.Expression */, initialParenDepth = 0, typingSymbolAliases) {
@@ -186,7 +190,7 @@ class Parser {
186
190
  this._diagSink = diagSink;
187
191
  // Tokenize the file contents.
188
192
  const tokenizer = new tokenizer_1.Tokenizer();
189
- this._tokenizerOutput = tokenizer.tokenize(fileContents, textOffset, textLength, initialParenDepth, this._parseOptions.ipythonMode);
193
+ this._tokenizerOutput = tokenizer.tokenize(fileContents, textOffset, textLength, initialParenDepth, this._parseOptions.useNotebookMode);
190
194
  this._tokenIndex = 0;
191
195
  }
192
196
  // stmt: simple_stmt | compound_stmt
@@ -1399,23 +1403,32 @@ class Parser {
1399
1403
  }
1400
1404
  let typeExpr;
1401
1405
  let symbolName;
1406
+ let isAsKeywordAllowed = true;
1402
1407
  if (this._peekTokenType() !== 10 /* TokenType.Colon */) {
1403
- typeExpr = this._parseTestExpression(/* allowAssignmentExpression */ true);
1408
+ const listResult = this._parseExpressionListGeneric(() => this._parseTestExpression(/* allowAssignmentExpression */ true));
1409
+ if (listResult.parseError) {
1410
+ typeExpr = listResult.parseError;
1411
+ }
1412
+ else {
1413
+ typeExpr = this._makeExpressionOrTuple(listResult, /* enclosedInParens */ false);
1414
+ // Python 3.14 allows more than one exception type to be provided in
1415
+ // an except clause.
1416
+ if (listResult.list.length > 1) {
1417
+ if (pythonVersion_1.PythonVersion.isLessThan(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_14)) {
1418
+ this._addSyntaxError(localize_1.LocMessage.exceptRequiresParens(), typeExpr);
1419
+ }
1420
+ isAsKeywordAllowed = false;
1421
+ }
1422
+ }
1404
1423
  if (this._consumeTokenIfKeyword(1 /* KeywordType.As */)) {
1424
+ if (!isAsKeywordAllowed) {
1425
+ this._addSyntaxError(localize_1.LocMessage.exceptWithAsRequiresParens(), typeExpr);
1426
+ }
1405
1427
  symbolName = this._getTokenIfIdentifier();
1406
1428
  if (!symbolName) {
1407
1429
  this._addSyntaxError(localize_1.LocMessage.expectedNameAfterAs(), this._peekToken());
1408
1430
  }
1409
1431
  }
1410
- else {
1411
- // Handle the python 2.x syntax in a graceful manner.
1412
- const peekToken = this._peekToken();
1413
- if (this._consumeTokenIfType(12 /* TokenType.Comma */)) {
1414
- this._addSyntaxError(localize_1.LocMessage.expectedAsAfterException(), peekToken);
1415
- // Parse the expression expected in python 2.x, but discard it.
1416
- this._parseTestExpression(/* allowAssignmentExpression */ false);
1417
- }
1418
- }
1419
1432
  }
1420
1433
  else if (isExceptGroup) {
1421
1434
  this._addSyntaxError(localize_1.LocMessage.exceptGroupRequiresType(), this._peekToken());
@@ -3081,8 +3094,7 @@ class Parser {
3081
3094
  return { args: argList, trailingComma };
3082
3095
  }
3083
3096
  // argument: ( test [comp_for] |
3084
- // name '=' test |
3085
- // name '=' |
3097
+ // test '=' test |
3086
3098
  // '**' test |
3087
3099
  // '*' test )
3088
3100
  _parseArgument() {
@@ -3095,34 +3107,16 @@ class Parser {
3095
3107
  argType = 2 /* ArgCategory.UnpackedDictionary */;
3096
3108
  }
3097
3109
  let valueExpr = this._parseTestExpression(/* allowAssignmentExpression */ true);
3098
- let nameNode;
3099
- let isNameSameAsValue = false;
3100
- let assignmentToken;
3110
+ let nameIdentifier;
3101
3111
  if (argType === 0 /* ArgCategory.Simple */) {
3102
- const nextToken = this._peekToken();
3103
3112
  if (this._consumeTokenIfOperator(2 /* OperatorType.Assign */)) {
3104
- assignmentToken = nextToken;
3105
3113
  const nameExpr = valueExpr;
3106
- if (nameExpr.nodeType === 38 /* ParseNodeType.Name */ &&
3107
- (this._peekTokenType() === 12 /* TokenType.Comma */ || this._peekTokenType() === 14 /* TokenType.CloseParenthesis */)) {
3108
- nameNode = parseNodes_1.NameNode.create(nameExpr.d.token);
3109
- if (pythonVersion_1.PythonVersion.isLessThan(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_14)) {
3110
- this._addSyntaxError(localize_1.LocMessage.keywordArgShortcutIllegal(), assignmentToken);
3111
- valueExpr = parseNodes_1.ErrorNode.create(assignmentToken, 14 /* ErrorExpressionCategory.MissingKeywordArgValue */);
3112
- }
3113
- else {
3114
- valueExpr = parseNodes_1.NameNode.create(nameExpr.d.token);
3115
- isNameSameAsValue = true;
3116
- }
3114
+ valueExpr = this._parseTestExpression(/* allowAssignmentExpression */ false);
3115
+ if (nameExpr.nodeType === 38 /* ParseNodeType.Name */) {
3116
+ nameIdentifier = nameExpr.d.token;
3117
3117
  }
3118
3118
  else {
3119
- valueExpr = this._parseTestExpression(/* allowAssignmentExpression */ false);
3120
- if (nameExpr.nodeType === 38 /* ParseNodeType.Name */) {
3121
- nameNode = parseNodes_1.NameNode.create(nameExpr.d.token);
3122
- }
3123
- else {
3124
- this._addSyntaxError(localize_1.LocMessage.expectedParamName(), nameExpr);
3125
- }
3119
+ this._addSyntaxError(localize_1.LocMessage.expectedParamName(), nameExpr);
3126
3120
  }
3127
3121
  }
3128
3122
  else {
@@ -3133,13 +3127,9 @@ class Parser {
3133
3127
  }
3134
3128
  }
3135
3129
  const argNode = parseNodes_1.ArgumentNode.create(firstToken, valueExpr, argType);
3136
- if (nameNode) {
3137
- argNode.d.name = nameNode;
3138
- argNode.d.isNameSameAsValue = isNameSameAsValue;
3130
+ if (nameIdentifier) {
3131
+ argNode.d.name = parseNodes_1.NameNode.create(nameIdentifier);
3139
3132
  argNode.d.name.parent = argNode;
3140
- if (assignmentToken) {
3141
- (0, parseNodes_1.extendRange)(argNode, assignmentToken);
3142
- }
3143
3133
  }
3144
3134
  return argNode;
3145
3135
  }
@@ -3686,6 +3676,20 @@ class Parser {
3686
3676
  if (stringToken.flags & 16 /* StringTokenFlags.Unicode */) {
3687
3677
  this._addSyntaxError(localize_1.LocMessage.formatStringUnicode(), stringToken);
3688
3678
  }
3679
+ if (stringToken.flags & 128 /* StringTokenFlags.Template */) {
3680
+ this._addSyntaxError(localize_1.LocMessage.formatStringTemplate(), stringToken);
3681
+ }
3682
+ }
3683
+ if (stringToken.flags & 128 /* StringTokenFlags.Template */) {
3684
+ if (pythonVersion_1.PythonVersion.isLessThan(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_14)) {
3685
+ this._addSyntaxError(localize_1.LocMessage.templateStringIllegal(), stringToken);
3686
+ }
3687
+ if (stringToken.flags & 32 /* StringTokenFlags.Bytes */) {
3688
+ this._addSyntaxError(localize_1.LocMessage.templateStringBytes(), stringToken);
3689
+ }
3690
+ if (stringToken.flags & 16 /* StringTokenFlags.Unicode */) {
3691
+ this._addSyntaxError(localize_1.LocMessage.templateStringUnicode(), stringToken);
3692
+ }
3689
3693
  }
3690
3694
  }
3691
3695
  _makeStringNode(stringToken) {
@@ -3703,7 +3707,6 @@ class Parser {
3703
3707
  return undefined;
3704
3708
  }
3705
3709
  const interTokenContents = this._fileContents.slice(curToken.start + curToken.length, nextToken.start);
3706
- const commentRegEx = /^(\s*#\s*type:\s*)([^\r\n]*)/;
3707
3710
  const match = interTokenContents.match(commentRegEx);
3708
3711
  if (!match) {
3709
3712
  return undefined;
@@ -3714,7 +3717,7 @@ class Parser {
3714
3717
  // expression because mypy supports ignore comments of the
3715
3718
  // form ignore[errorCode, ...]. We'll treat these as regular
3716
3719
  // ignore statements (as though no errorCodes were included).
3717
- if (typeString.trim().match(/^ignore(\s|\[|$)/)) {
3720
+ if (typeString.trim().match(ignoreCommentRegEx)) {
3718
3721
  return undefined;
3719
3722
  }
3720
3723
  const tokenOffset = curToken.start + curToken.length + match[1].length;
@@ -3947,7 +3950,11 @@ class Parser {
3947
3950
  this._addSyntaxError(localize_1.LocMessage.annotationStringEscape(), stringNode);
3948
3951
  }
3949
3952
  }
3950
- else if ((stringToken.flags & (8 /* StringTokenFlags.Raw */ | 32 /* StringTokenFlags.Bytes */ | 64 /* StringTokenFlags.Format */)) ===
3953
+ else if ((stringToken.flags &
3954
+ (8 /* StringTokenFlags.Raw */ |
3955
+ 32 /* StringTokenFlags.Bytes */ |
3956
+ 64 /* StringTokenFlags.Format */ |
3957
+ 128 /* StringTokenFlags.Template */)) ===
3951
3958
  0) {
3952
3959
  const parser = new Parser();
3953
3960
  const parseResults = parser.parseTextExpression(this._fileContents, tokenOffset + prefixLength, unescapedString.length, this._parseOptions, 1 /* ParseTextMode.VariableAnnotation */, (stringNode.d.strings[0].d.token.flags & 4 /* StringTokenFlags.Triplicate */) !== 0 ? 1 : 0, this._typingSymbolAliases);