@zzzen/pyright-internal 1.2.0-dev.20261018 → 1.2.0-dev.20261108

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 (238) hide show
  1. package/dist/analyzer/binder.js +29 -12
  2. package/dist/analyzer/binder.js.map +1 -1
  3. package/dist/analyzer/checker.js +4 -0
  4. package/dist/analyzer/checker.js.map +1 -1
  5. package/dist/analyzer/codeFlowEngine.js +3 -3
  6. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  7. package/dist/analyzer/constructorTransform.js +12 -0
  8. package/dist/analyzer/constructorTransform.js.map +1 -1
  9. package/dist/analyzer/constructors.d.ts +1 -1
  10. package/dist/analyzer/constructors.js +1 -1
  11. package/dist/analyzer/constructors.js.map +1 -1
  12. package/dist/analyzer/dataClasses.js +14 -5
  13. package/dist/analyzer/dataClasses.js.map +1 -1
  14. package/dist/analyzer/decorators.d.ts +2 -2
  15. package/dist/analyzer/decorators.js +22 -2
  16. package/dist/analyzer/decorators.js.map +1 -1
  17. package/dist/analyzer/functionTransform.d.ts +5 -0
  18. package/dist/analyzer/functionTransform.js +6 -3
  19. package/dist/analyzer/functionTransform.js.map +1 -1
  20. package/dist/analyzer/missingBindingMetadata.d.ts +6 -0
  21. package/dist/analyzer/missingBindingMetadata.js +22 -0
  22. package/dist/analyzer/missingBindingMetadata.js.map +1 -0
  23. package/dist/analyzer/namedTuples.d.ts +5 -1
  24. package/dist/analyzer/namedTuples.js +64 -35
  25. package/dist/analyzer/namedTuples.js.map +1 -1
  26. package/dist/analyzer/operations.js +45 -1
  27. package/dist/analyzer/operations.js.map +1 -1
  28. package/dist/analyzer/parseTreeUtils.d.ts +2 -0
  29. package/dist/analyzer/parseTreeUtils.js +43 -0
  30. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  31. package/dist/analyzer/patternMatching.d.ts +5 -1
  32. package/dist/analyzer/patternMatching.js +6 -1
  33. package/dist/analyzer/patternMatching.js.map +1 -1
  34. package/dist/analyzer/program.d.ts +3 -0
  35. package/dist/analyzer/program.js +71 -1
  36. package/dist/analyzer/program.js.map +1 -1
  37. package/dist/analyzer/sentinel.js +7 -1
  38. package/dist/analyzer/sentinel.js.map +1 -1
  39. package/dist/analyzer/sourceFile.js +13 -6
  40. package/dist/analyzer/sourceFile.js.map +1 -1
  41. package/dist/analyzer/tupleComparison.d.ts +6 -0
  42. package/dist/analyzer/tupleComparison.js +731 -0
  43. package/dist/analyzer/tupleComparison.js.map +1 -0
  44. package/dist/analyzer/tuples.d.ts +1 -1
  45. package/dist/analyzer/tuples.js +35 -4
  46. package/dist/analyzer/tuples.js.map +1 -1
  47. package/dist/analyzer/typeCacheUtils.d.ts +1 -0
  48. package/dist/analyzer/typeCacheUtils.js +10 -0
  49. package/dist/analyzer/typeCacheUtils.js.map +1 -1
  50. package/dist/analyzer/typeEvaluator/boundMethodSpecialization.d.ts +15 -0
  51. package/dist/analyzer/typeEvaluator/boundMethodSpecialization.js +98 -0
  52. package/dist/analyzer/typeEvaluator/boundMethodSpecialization.js.map +1 -0
  53. package/dist/analyzer/typeEvaluator/classConstruction.d.ts +25 -0
  54. package/dist/analyzer/typeEvaluator/classConstruction.js +251 -0
  55. package/dist/analyzer/typeEvaluator/classConstruction.js.map +1 -0
  56. package/dist/analyzer/typeEvaluator/collectionInference.d.ts +41 -0
  57. package/dist/analyzer/typeEvaluator/collectionInference.js +695 -0
  58. package/dist/analyzer/typeEvaluator/collectionInference.js.map +1 -0
  59. package/dist/analyzer/typeEvaluator/diagnostics.d.ts +33 -0
  60. package/dist/analyzer/typeEvaluator/diagnostics.js +198 -0
  61. package/dist/analyzer/typeEvaluator/diagnostics.js.map +1 -0
  62. package/dist/analyzer/typeEvaluator/evaluatorCore.d.ts +80 -0
  63. package/dist/analyzer/typeEvaluator/evaluatorCore.js +1126 -0
  64. package/dist/analyzer/typeEvaluator/evaluatorCore.js.map +1 -0
  65. package/dist/analyzer/typeEvaluator/evaluatorNarrowing.d.ts +17 -0
  66. package/dist/analyzer/typeEvaluator/evaluatorNarrowing.js +370 -0
  67. package/dist/analyzer/typeEvaluator/evaluatorNarrowing.js.map +1 -0
  68. package/dist/analyzer/typeEvaluator/expressionEvaluation.d.ts +81 -0
  69. package/dist/analyzer/typeEvaluator/expressionEvaluation.js +1802 -0
  70. package/dist/analyzer/typeEvaluator/expressionEvaluation.js.map +1 -0
  71. package/dist/analyzer/typeEvaluator/flowAnalysis.d.ts +33 -0
  72. package/dist/analyzer/typeEvaluator/flowAnalysis.js +217 -0
  73. package/dist/analyzer/typeEvaluator/flowAnalysis.js.map +1 -0
  74. package/dist/analyzer/typeEvaluator/internals.d.ts +137 -0
  75. package/dist/analyzer/typeEvaluator/internals.js +10 -0
  76. package/dist/analyzer/typeEvaluator/internals.js.map +1 -0
  77. package/dist/analyzer/typeEvaluator/literalTypes.d.ts +3 -0
  78. package/dist/analyzer/typeEvaluator/literalTypes.js +52 -0
  79. package/dist/analyzer/typeEvaluator/literalTypes.js.map +1 -0
  80. package/dist/analyzer/typeEvaluator/memberResolution.d.ts +79 -0
  81. package/dist/analyzer/typeEvaluator/memberResolution.js +1007 -0
  82. package/dist/analyzer/typeEvaluator/memberResolution.js.map +1 -0
  83. package/dist/analyzer/typeEvaluator/overrideValidation.d.ts +15 -0
  84. package/dist/analyzer/typeEvaluator/overrideValidation.js +422 -0
  85. package/dist/analyzer/typeEvaluator/overrideValidation.js.map +1 -0
  86. package/dist/analyzer/typeEvaluator/returnTypeInference.d.ts +33 -0
  87. package/dist/analyzer/typeEvaluator/returnTypeInference.js +226 -0
  88. package/dist/analyzer/typeEvaluator/returnTypeInference.js.map +1 -0
  89. package/dist/analyzer/typeEvaluator/specialFormCreation.d.ts +39 -0
  90. package/dist/analyzer/typeEvaluator/specialFormCreation.js +1728 -0
  91. package/dist/analyzer/typeEvaluator/specialFormCreation.js.map +1 -0
  92. package/dist/analyzer/typeEvaluator/tupleUnpacking.d.ts +2 -0
  93. package/dist/analyzer/typeEvaluator/tupleUnpacking.js +36 -0
  94. package/dist/analyzer/typeEvaluator/tupleUnpacking.js.map +1 -0
  95. package/dist/analyzer/typeEvaluator/typeCompatibility.d.ts +36 -0
  96. package/dist/analyzer/typeEvaluator/typeCompatibility.js +1320 -0
  97. package/dist/analyzer/typeEvaluator/typeCompatibility.js.map +1 -0
  98. package/dist/analyzer/typeEvaluator/typeGuardNarrowing.d.ts +186 -0
  99. package/dist/analyzer/typeEvaluator/typeGuardNarrowing.js +1683 -0
  100. package/dist/analyzer/typeEvaluator/typeGuardNarrowing.js.map +1 -0
  101. package/dist/analyzer/typeEvaluator/typeVarHandling.d.ts +48 -0
  102. package/dist/analyzer/typeEvaluator/typeVarHandling.js +756 -0
  103. package/dist/analyzer/typeEvaluator/typeVarHandling.js.map +1 -0
  104. package/dist/analyzer/typeEvaluator.d.ts +3 -31
  105. package/dist/analyzer/typeEvaluator.js +5140 -13656
  106. package/dist/analyzer/typeEvaluator.js.map +1 -1
  107. package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -1
  108. package/dist/analyzer/typeEvaluatorTypes.js +2 -3
  109. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  110. package/dist/analyzer/typeGuards.d.ts +3 -2
  111. package/dist/analyzer/typeGuards.js +236 -1375
  112. package/dist/analyzer/typeGuards.js.map +1 -1
  113. package/dist/analyzer/typeUtils.js +9 -2
  114. package/dist/analyzer/typeUtils.js.map +1 -1
  115. package/dist/analyzer/typedDicts.js +111 -0
  116. package/dist/analyzer/typedDicts.js.map +1 -1
  117. package/dist/analyzer/types.d.ts +14 -0
  118. package/dist/analyzer/types.js +215 -10
  119. package/dist/analyzer/types.js.map +1 -1
  120. package/dist/browser/browserConnection.d.ts +12 -0
  121. package/dist/browser/browserConnection.js +23 -0
  122. package/dist/browser/browserConnection.js.map +1 -0
  123. package/dist/browser/browserFileSystem.d.ts +73 -0
  124. package/dist/browser/browserFileSystem.js +578 -0
  125. package/dist/browser/browserFileSystem.js.map +1 -0
  126. package/dist/browser/browserHost.d.ts +4 -0
  127. package/dist/browser/browserHost.js +10 -0
  128. package/dist/browser/browserHost.js.map +1 -0
  129. package/dist/browser/browserProcess.d.ts +1 -0
  130. package/dist/browser/browserProcess.js +17 -0
  131. package/dist/browser/browserProcess.js.map +1 -0
  132. package/dist/browser/browserServer.d.ts +8 -0
  133. package/dist/browser/browserServer.js +32 -0
  134. package/dist/browser/browserServer.js.map +1 -0
  135. package/dist/browser/cancellation/common.d.ts +10 -0
  136. package/dist/browser/cancellation/common.js +114 -0
  137. package/dist/browser/cancellation/common.js.map +1 -0
  138. package/dist/browser/cancellation/objectURLReceiverStrategy.d.ts +5 -0
  139. package/dist/browser/cancellation/objectURLReceiverStrategy.js +37 -0
  140. package/dist/browser/cancellation/objectURLReceiverStrategy.js.map +1 -0
  141. package/dist/browser/cancellation/objectURLSenderStrategy.d.ts +7 -0
  142. package/dist/browser/cancellation/objectURLSenderStrategy.js +32 -0
  143. package/dist/browser/cancellation/objectURLSenderStrategy.js.map +1 -0
  144. package/dist/browser/worker.d.ts +1 -0
  145. package/dist/browser/worker.js +33 -0
  146. package/dist/browser/worker.js.map +1 -0
  147. package/dist/common/processUtils.d.ts +6 -0
  148. package/dist/common/processUtils.js +56 -1
  149. package/dist/common/processUtils.js.map +1 -1
  150. package/dist/common/textEditTracker.js +1 -1
  151. package/dist/common/textEditTracker.js.map +1 -1
  152. package/dist/common/windowsProcessTree.d.ts +2 -0
  153. package/dist/common/windowsProcessTree.js +23 -0
  154. package/dist/common/windowsProcessTree.js.map +1 -1
  155. package/dist/common/windowsProcessTree.json +23 -3
  156. package/dist/languageServerBase.d.ts +3 -0
  157. package/dist/languageServerBase.js +44 -12
  158. package/dist/languageServerBase.js.map +1 -1
  159. package/dist/languageService/callHierarchyProvider.js +6 -6
  160. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  161. package/dist/languageService/referencesProvider.js +3 -3
  162. package/dist/languageService/referencesProvider.js.map +1 -1
  163. package/dist/languageService/renameProvider.js +1 -1
  164. package/dist/languageService/renameProvider.js.map +1 -1
  165. package/dist/languageService/symbolIndexer.js +2 -2
  166. package/dist/languageService/symbolIndexer.js.map +1 -1
  167. package/dist/localization/localize.d.ts +2 -0
  168. package/dist/localization/localize.js +2 -0
  169. package/dist/localization/localize.js.map +1 -1
  170. package/dist/localization/package.nls.en-us.json +8 -0
  171. package/dist/parser/parseTreeTokenReuse.d.ts +34 -0
  172. package/dist/parser/parseTreeTokenReuse.js +897 -0
  173. package/dist/parser/parseTreeTokenReuse.js.map +1 -0
  174. package/dist/parser/tokenizer.d.ts +10 -1
  175. package/dist/parser/tokenizer.js +184 -130
  176. package/dist/parser/tokenizer.js.map +1 -1
  177. package/dist/pyrightServer.d.ts +34 -0
  178. package/dist/pyrightServer.js +239 -0
  179. package/dist/pyrightServer.js.map +1 -0
  180. package/dist/server.d.ts +3 -23
  181. package/dist/server.js +12 -232
  182. package/dist/server.js.map +1 -1
  183. package/dist/tests/benchmarks/typeInferenceComparison.d.ts +1 -0
  184. package/dist/tests/benchmarks/typeInferenceComparison.js +1235 -0
  185. package/dist/tests/benchmarks/typeInferenceComparison.js.map +1 -0
  186. package/dist/tests/benchmarks/typeInferencePyrightEntry.d.ts +1 -0
  187. package/dist/tests/benchmarks/typeInferencePyrightEntry.js +53 -0
  188. package/dist/tests/benchmarks/typeInferencePyrightEntry.js.map +1 -0
  189. package/dist/tests/browserCancellation.test.d.ts +1 -0
  190. package/dist/tests/browserCancellation.test.js +63 -0
  191. package/dist/tests/browserCancellation.test.js.map +1 -0
  192. package/dist/tests/browserServer.test.d.ts +1 -0
  193. package/dist/tests/browserServer.test.js +177 -0
  194. package/dist/tests/browserServer.test.js.map +1 -0
  195. package/dist/tests/checker.test.js +8 -0
  196. package/dist/tests/checker.test.js.map +1 -1
  197. package/dist/tests/constraintSolver.test.js +45 -0
  198. package/dist/tests/constraintSolver.test.js.map +1 -1
  199. package/dist/tests/fourSlashParser.test.js +35 -0
  200. package/dist/tests/fourSlashParser.test.js.map +1 -1
  201. package/dist/tests/harness/fourslash/fourSlashParser.js +14 -4
  202. package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
  203. package/dist/tests/languageServer.test.js +15 -0
  204. package/dist/tests/languageServer.test.js.map +1 -1
  205. package/dist/tests/lsp/languageServer.js +6 -6
  206. package/dist/tests/lsp/languageServer.js.map +1 -1
  207. package/dist/tests/mypyPrimerAnalysis.test.js +148 -1
  208. package/dist/tests/mypyPrimerAnalysis.test.js.map +1 -1
  209. package/dist/tests/typeCacheUtils.test.js +46 -0
  210. package/dist/tests/typeCacheUtils.test.js.map +1 -1
  211. package/dist/tests/typeEvaluator1.test.js +78 -1
  212. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  213. package/dist/tests/typeEvaluator2.test.js +54 -1
  214. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  215. package/dist/tests/typeEvaluator3.test.js +4 -0
  216. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  217. package/dist/tests/typeEvaluator4.test.js +42 -3
  218. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  219. package/dist/tests/typeEvaluator6.test.js +35 -0
  220. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  221. package/dist/tests/typeEvaluator7.test.js +414 -0
  222. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  223. package/dist/tests/typeEvaluator8.test.js +1291 -1
  224. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  225. package/dist/tests/typeUtils.test.js +28 -0
  226. package/dist/tests/typeUtils.test.js.map +1 -1
  227. package/dist/tests/types.test.js +55 -0
  228. package/dist/tests/types.test.js.map +1 -1
  229. package/dist/typeServer/programWrapper.js +8 -2
  230. package/dist/typeServer/programWrapper.js.map +1 -1
  231. package/dist/typeServer/server.d.ts +12 -2
  232. package/dist/typeServer/server.js +97 -0
  233. package/dist/typeServer/server.js.map +1 -1
  234. package/dist/typeServer/stubGenerator.js +136 -3
  235. package/dist/typeServer/stubGenerator.js.map +1 -1
  236. package/dist/typeServer/typeServerConversionUtils.js +13 -0
  237. package/dist/typeServer/typeServerConversionUtils.js.map +1 -1
  238. package/package.json +3 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseTreeTokenReuse.js","sourceRoot":"","sources":["../../../../../src/parser/parseTreeTokenReuse.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { TextRange } from '../common/textRange';
2
2
  import { TextRangeCollection } from '../common/textRangeCollection';
3
+ import { ModuleNode } from './parseNodes';
3
4
  import { OperatorFlags, OperatorType, Token } from './tokenizerTypes';
4
5
  export interface TokenizerOutput {
5
6
  tokens: TextRangeCollection<Token>;
@@ -34,6 +35,7 @@ export declare class Tokenizer {
34
35
  private _comments;
35
36
  private _fStringStack;
36
37
  private _activeFString;
38
+ private _retainedTokenCursor;
37
39
  private _crCount;
38
40
  private _crLfCount;
39
41
  private _lfCount;
@@ -46,7 +48,7 @@ export declare class Tokenizer {
46
48
  private static readonly _identifierCacheSize;
47
49
  private static readonly _identifierCacheMask;
48
50
  private _identifierCache;
49
- tokenize(text: string, start?: number, length?: number, initialParenDepth?: number, useNotebookMode?: boolean): TokenizerOutput;
51
+ tokenize(text: string, start?: number, length?: number, initialParenDepth?: number, useNotebookMode?: boolean, retainedTree?: ModuleNode): TokenizerOutput;
50
52
  static getOperatorInfo(operatorType: OperatorType): OperatorFlags;
51
53
  static isWhitespace(token: Token): boolean;
52
54
  static isPythonKeyword(name: string, includeSoftKeywords?: boolean): boolean;
@@ -66,6 +68,13 @@ export declare class Tokenizer {
66
68
  private _tryNumber;
67
69
  private _tryOperator;
68
70
  private _handleInvalid;
71
+ private _addToken;
72
+ private _addOperatorToken;
73
+ private _addNewLineToken;
74
+ private _addIndentToken;
75
+ private _addNumberToken;
76
+ private _addFStringEndToken;
77
+ private _reuseToken;
69
78
  private _getComments;
70
79
  private _getIPythonMagicsKind;
71
80
  private _handleIPythonMagics;
@@ -16,6 +16,7 @@ const core_1 = require("../common/core");
16
16
  const textRangeCollection_1 = require("../common/textRangeCollection");
17
17
  const characters_1 = require("./characters");
18
18
  const characterStream_1 = require("./characterStream");
19
+ const parseTreeTokenReuse_1 = require("./parseTreeTokenReuse");
19
20
  const tokenizerTypes_1 = require("./tokenizerTypes");
20
21
  // This must be a Map, as operations like {}["constructor"] succeed.
21
22
  const _keywords = new Map([
@@ -519,109 +520,123 @@ class Tokenizer {
519
520
  this._useNotebookMode = false;
520
521
  this._identifierCache = new Array(Tokenizer._identifierCacheSize);
521
522
  }
522
- tokenize(text, start, length, initialParenDepth = 0, useNotebookMode = false) {
523
- if (start === undefined) {
524
- start = 0;
525
- }
526
- else if (start < 0 || start > text.length) {
527
- throw new Error(`Invalid range start (start=${start}, text.length=${text.length})`);
528
- }
529
- if (length === undefined) {
530
- length = text.length;
531
- }
532
- else if (length < 0 || start + length > text.length) {
533
- throw new Error(`Invalid range length (start=${start}, length=${length}, text.length=${text.length})`);
534
- }
535
- else if (start + length < text.length) {
536
- text = text.slice(0, start + length);
537
- }
538
- this._cs = new characterStream_1.CharacterStream(text);
539
- this._cs.position = start;
540
- this._tokens = [];
541
- this._prevLineStart = 0;
542
- this._parenDepth = initialParenDepth;
543
- this._lineRanges = [];
544
- this._indentAmounts = [];
545
- this._useNotebookMode = useNotebookMode;
546
- // Clear per-source identifier intern cache.
547
- this._identifierCache.fill(undefined);
548
- const end = start + length;
549
- if (start === 0) {
550
- this._readIndentationAfterNewLine();
551
- }
552
- while (!this._cs.isEndOfStream()) {
553
- this._addNextToken();
554
- if (this._cs.position >= end) {
555
- break;
556
- }
557
- }
558
- // Insert any implied FStringEnd tokens.
559
- while (this._activeFString) {
560
- this._tokens.push(tokenizerTypes_1.FStringEndToken.create(this._cs.position, 0, this._activeFString.startToken.flags | 65536 /* StringTokenFlags.Unterminated */));
561
- this._activeFString = this._fStringStack.pop();
562
- }
563
- // Insert an implied new line to make parsing easier.
564
- if (this._tokens.length === 0 || this._tokens[this._tokens.length - 1].type !== 2 /* TokenType.NewLine */) {
565
- if (this._parenDepth === 0) {
566
- this._tokens.push(tokenizerTypes_1.NewLineToken.create(this._cs.position, 0, 3 /* NewLineType.Implied */, this._getComments()));
523
+ // A retained tree must correspond to the same text and lexical options. Omit it for initial lexing.
524
+ // Each recovery walks the tree to preserve its token identities without retaining a recovery index.
525
+ tokenize(text, start, length, initialParenDepth = 0, useNotebookMode = false, retainedTree) {
526
+ if (retainedTree &&
527
+ ((start !== undefined && start !== 0) ||
528
+ (length !== undefined && length !== text.length) ||
529
+ initialParenDepth !== 0)) {
530
+ throw new Error('Token recovery requires complete-file tokenization');
531
+ }
532
+ this._retainedTokenCursor = retainedTree ? new parseTreeTokenReuse_1.ParseTreeTokenCursor(retainedTree) : undefined;
533
+ try {
534
+ if (start === undefined) {
535
+ start = 0;
536
+ }
537
+ else if (start < 0 || start > text.length) {
538
+ throw new Error(`Invalid range start (start=${start}, text.length=${text.length})`);
539
+ }
540
+ if (length === undefined) {
541
+ length = text.length;
542
+ }
543
+ else if (length < 0 || start + length > text.length) {
544
+ throw new Error(`Invalid range length (start=${start}, length=${length}, text.length=${text.length})`);
545
+ }
546
+ else if (start + length < text.length) {
547
+ text = text.slice(0, start + length);
548
+ }
549
+ this._cs = new characterStream_1.CharacterStream(text);
550
+ this._cs.position = start;
551
+ this._tokens = [];
552
+ this._prevLineStart = 0;
553
+ this._parenDepth = initialParenDepth;
554
+ this._lineRanges = [];
555
+ this._indentAmounts = [];
556
+ this._useNotebookMode = useNotebookMode;
557
+ // Clear per-source identifier intern cache.
558
+ this._identifierCache.fill(undefined);
559
+ const end = start + length;
560
+ if (start === 0) {
561
+ this._readIndentationAfterNewLine();
562
+ }
563
+ while (!this._cs.isEndOfStream()) {
564
+ this._addNextToken();
565
+ if (this._cs.position >= end) {
566
+ break;
567
+ }
567
568
  }
568
- }
569
- // Insert any implied dedent tokens.
570
- this._setIndent(this._cs.position, 0, 0, /* isSpacePresent */ false, /* isTabPresent */ false);
571
- // Add a final end-of-stream token to make parsing easier.
572
- this._tokens.push(tokenizerTypes_1.Token.create(1 /* TokenType.EndOfStream */, this._cs.position, 0, this._getComments()));
573
- // Add the final line range.
574
- this._addLineRange();
575
- // If the last line ended in a line-end character, add an empty line.
576
- if (this._lineRanges.length > 0) {
577
- const lastLine = this._lineRanges[this._lineRanges.length - 1];
578
- const lastCharOfLastLine = text.charCodeAt(lastLine.start + lastLine.length - 1);
579
- if (lastCharOfLastLine === 13 /* Char.CarriageReturn */ || lastCharOfLastLine === 10 /* Char.LineFeed */) {
580
- this._lineRanges.push({ start: this._cs.position, length: 0 });
569
+ // Insert any implied FStringEnd tokens.
570
+ while (this._activeFString) {
571
+ this._addFStringEndToken(this._cs.position, 0, this._activeFString.startToken.flags | 65536 /* StringTokenFlags.Unterminated */);
572
+ this._activeFString = this._fStringStack.pop();
581
573
  }
582
- }
583
- let predominantEndOfLineSequence = '\n';
584
- if (this._crCount > this._crLfCount && this._crCount > this._lfCount) {
585
- predominantEndOfLineSequence = '\r';
586
- }
587
- else if (this._crLfCount > this._crCount && this._crLfCount > this._lfCount) {
588
- predominantEndOfLineSequence = '\r\n';
589
- }
590
- let predominantTabSequence = ' ';
591
- let hasPredominantTabSequence = false;
592
- // If more than half of the indents use tab sequences,
593
- // assume we're using tabs rather than spaces.
594
- if (this._indentTabCount > this._indentCount / 2) {
595
- hasPredominantTabSequence = true;
596
- predominantTabSequence = '\t';
597
- }
598
- else if (this._indentCount > 0) {
599
- hasPredominantTabSequence = true;
600
- // Compute the average number of spaces per indent
601
- // to estimate the predominant tab value.
602
- let averageSpacePerIndent = Math.round(this._indentSpacesTotal / this._indentCount);
603
- if (averageSpacePerIndent < 1) {
604
- averageSpacePerIndent = 1;
574
+ // Insert an implied new line to make parsing easier.
575
+ if (this._tokens.length === 0 || this._tokens[this._tokens.length - 1].type !== 2 /* TokenType.NewLine */) {
576
+ if (this._parenDepth === 0) {
577
+ this._addNewLineToken(this._cs.position, 0, 3 /* NewLineType.Implied */);
578
+ }
605
579
  }
606
- else if (averageSpacePerIndent > defaultTabSize) {
607
- averageSpacePerIndent = defaultTabSize;
580
+ // Insert any implied dedent tokens.
581
+ this._setIndent(this._cs.position, 0, 0, /* isSpacePresent */ false, /* isTabPresent */ false);
582
+ // Add a final end-of-stream token to make parsing easier.
583
+ this._addToken(1 /* TokenType.EndOfStream */, this._cs.position, 0);
584
+ // Add the final line range.
585
+ this._addLineRange();
586
+ // If the last line ended in a line-end character, add an empty line.
587
+ if (this._lineRanges.length > 0) {
588
+ const lastLine = this._lineRanges[this._lineRanges.length - 1];
589
+ const lastCharOfLastLine = text.charCodeAt(lastLine.start + lastLine.length - 1);
590
+ if (lastCharOfLastLine === 13 /* Char.CarriageReturn */ || lastCharOfLastLine === 10 /* Char.LineFeed */) {
591
+ this._lineRanges.push({ start: this._cs.position, length: 0 });
592
+ }
608
593
  }
609
- predominantTabSequence = '';
610
- for (let i = 0; i < averageSpacePerIndent; i++) {
611
- predominantTabSequence += ' ';
594
+ let predominantEndOfLineSequence = '\n';
595
+ if (this._crCount > this._crLfCount && this._crCount > this._lfCount) {
596
+ predominantEndOfLineSequence = '\r';
597
+ }
598
+ else if (this._crLfCount > this._crCount && this._crLfCount > this._lfCount) {
599
+ predominantEndOfLineSequence = '\r\n';
600
+ }
601
+ let predominantTabSequence = ' ';
602
+ let hasPredominantTabSequence = false;
603
+ // If more than half of the indents use tab sequences,
604
+ // assume we're using tabs rather than spaces.
605
+ if (this._indentTabCount > this._indentCount / 2) {
606
+ hasPredominantTabSequence = true;
607
+ predominantTabSequence = '\t';
608
+ }
609
+ else if (this._indentCount > 0) {
610
+ hasPredominantTabSequence = true;
611
+ // Compute the average number of spaces per indent
612
+ // to estimate the predominant tab value.
613
+ let averageSpacePerIndent = Math.round(this._indentSpacesTotal / this._indentCount);
614
+ if (averageSpacePerIndent < 1) {
615
+ averageSpacePerIndent = 1;
616
+ }
617
+ else if (averageSpacePerIndent > defaultTabSize) {
618
+ averageSpacePerIndent = defaultTabSize;
619
+ }
620
+ predominantTabSequence = '';
621
+ for (let i = 0; i < averageSpacePerIndent; i++) {
622
+ predominantTabSequence += ' ';
623
+ }
612
624
  }
625
+ return {
626
+ tokens: new textRangeCollection_1.TextRangeCollection(this._tokens),
627
+ lines: new textRangeCollection_1.TextRangeCollection(this._lineRanges),
628
+ typeIgnoreLines: this._typeIgnoreLines,
629
+ typeIgnoreAll: this._typeIgnoreAll,
630
+ pyrightIgnoreLines: this._pyrightIgnoreLines,
631
+ predominantEndOfLineSequence,
632
+ hasPredominantTabSequence,
633
+ predominantTabSequence,
634
+ predominantSingleQuoteCharacter: this._singleQuoteCount >= this._doubleQuoteCount ? "'" : '"',
635
+ };
636
+ }
637
+ finally {
638
+ this._retainedTokenCursor = undefined;
613
639
  }
614
- return {
615
- tokens: new textRangeCollection_1.TextRangeCollection(this._tokens),
616
- lines: new textRangeCollection_1.TextRangeCollection(this._lineRanges),
617
- typeIgnoreLines: this._typeIgnoreLines,
618
- typeIgnoreAll: this._typeIgnoreAll,
619
- pyrightIgnoreLines: this._pyrightIgnoreLines,
620
- predominantEndOfLineSequence,
621
- hasPredominantTabSequence,
622
- predominantTabSequence,
623
- predominantSingleQuoteCharacter: this._singleQuoteCount >= this._doubleQuoteCount ? "'" : '"',
624
- };
625
640
  }
626
641
  static getOperatorInfo(operatorType) {
627
642
  return _operatorInfo[operatorType];
@@ -764,31 +779,31 @@ class Tokenizer {
764
779
  }
765
780
  case 40 /* Char.OpenParenthesis */: {
766
781
  this._parenDepth++;
767
- this._tokens.push(tokenizerTypes_1.Token.create(13 /* TokenType.OpenParenthesis */, this._cs.position, 1, this._getComments()));
782
+ this._addToken(13 /* TokenType.OpenParenthesis */, this._cs.position, 1);
768
783
  break;
769
784
  }
770
785
  case 41 /* Char.CloseParenthesis */: {
771
786
  if (this._parenDepth > 0) {
772
787
  this._parenDepth--;
773
788
  }
774
- this._tokens.push(tokenizerTypes_1.Token.create(14 /* TokenType.CloseParenthesis */, this._cs.position, 1, this._getComments()));
789
+ this._addToken(14 /* TokenType.CloseParenthesis */, this._cs.position, 1);
775
790
  break;
776
791
  }
777
792
  case 91 /* Char.OpenBracket */: {
778
793
  this._parenDepth++;
779
- this._tokens.push(tokenizerTypes_1.Token.create(15 /* TokenType.OpenBracket */, this._cs.position, 1, this._getComments()));
794
+ this._addToken(15 /* TokenType.OpenBracket */, this._cs.position, 1);
780
795
  break;
781
796
  }
782
797
  case 93 /* Char.CloseBracket */: {
783
798
  if (this._parenDepth > 0) {
784
799
  this._parenDepth--;
785
800
  }
786
- this._tokens.push(tokenizerTypes_1.Token.create(16 /* TokenType.CloseBracket */, this._cs.position, 1, this._getComments()));
801
+ this._addToken(16 /* TokenType.CloseBracket */, this._cs.position, 1);
787
802
  break;
788
803
  }
789
804
  case 123 /* Char.OpenBrace */: {
790
805
  this._parenDepth++;
791
- this._tokens.push(tokenizerTypes_1.Token.create(17 /* TokenType.OpenCurlyBrace */, this._cs.position, 1, this._getComments()));
806
+ this._addToken(17 /* TokenType.OpenCurlyBrace */, this._cs.position, 1);
792
807
  if (this._activeFString) {
793
808
  // Are we starting a new replacement field?
794
809
  if (!this._activeFString.activeReplacementField ||
@@ -815,19 +830,19 @@ class Tokenizer {
815
830
  if (this._parenDepth > 0) {
816
831
  this._parenDepth--;
817
832
  }
818
- this._tokens.push(tokenizerTypes_1.Token.create(18 /* TokenType.CloseCurlyBrace */, this._cs.position, 1, this._getComments()));
833
+ this._addToken(18 /* TokenType.CloseCurlyBrace */, this._cs.position, 1);
819
834
  break;
820
835
  }
821
836
  case 44 /* Char.Comma */: {
822
- this._tokens.push(tokenizerTypes_1.Token.create(12 /* TokenType.Comma */, this._cs.position, 1, this._getComments()));
837
+ this._addToken(12 /* TokenType.Comma */, this._cs.position, 1);
823
838
  break;
824
839
  }
825
840
  case 96 /* Char.Backtick */: {
826
- this._tokens.push(tokenizerTypes_1.Token.create(22 /* TokenType.Backtick */, this._cs.position, 1, this._getComments()));
841
+ this._addToken(22 /* TokenType.Backtick */, this._cs.position, 1);
827
842
  break;
828
843
  }
829
844
  case 59 /* Char.Semicolon */: {
830
- this._tokens.push(tokenizerTypes_1.Token.create(11 /* TokenType.Semicolon */, this._cs.position, 1, this._getComments()));
845
+ this._addToken(11 /* TokenType.Semicolon */, this._cs.position, 1);
831
846
  break;
832
847
  }
833
848
  case 58 /* Char.Colon */: {
@@ -835,12 +850,12 @@ class Tokenizer {
835
850
  if (!this._activeFString ||
836
851
  !this._activeFString.activeReplacementField ||
837
852
  this._activeFString.activeReplacementField.parenDepth !== this._parenDepth) {
838
- this._tokens.push(tokenizerTypes_1.OperatorToken.create(this._cs.position, 2, 35 /* OperatorType.Walrus */, this._getComments()));
853
+ this._addOperatorToken(this._cs.position, 2, 35 /* OperatorType.Walrus */);
839
854
  this._cs.advance(1);
840
855
  break;
841
856
  }
842
857
  }
843
- this._tokens.push(tokenizerTypes_1.Token.create(10 /* TokenType.Colon */, this._cs.position, 1, this._getComments()));
858
+ this._addToken(10 /* TokenType.Colon */, this._cs.position, 1);
844
859
  if (this._activeFString?.activeReplacementField &&
845
860
  this._parenDepth === this._activeFString.activeReplacementField.parenDepth) {
846
861
  this._activeFString.activeReplacementField.inFormatSpecifier = true;
@@ -855,11 +870,11 @@ class Tokenizer {
855
870
  }
856
871
  if (this._cs.currentChar === 46 /* Char.Period */) {
857
872
  if (this._cs.nextChar === 46 /* Char.Period */ && this._cs.lookAhead(2) === 46 /* Char.Period */) {
858
- this._tokens.push(tokenizerTypes_1.Token.create(19 /* TokenType.Ellipsis */, this._cs.position, 3, this._getComments()));
873
+ this._addToken(19 /* TokenType.Ellipsis */, this._cs.position, 3);
859
874
  this._cs.advance(3);
860
875
  return true;
861
876
  }
862
- this._tokens.push(tokenizerTypes_1.Token.create(20 /* TokenType.Dot */, this._cs.position, 1, this._getComments()));
877
+ this._addToken(20 /* TokenType.Dot */, this._cs.position, 1);
863
878
  break;
864
879
  }
865
880
  if (!this._tryIdentifier()) {
@@ -884,7 +899,7 @@ class Tokenizer {
884
899
  // New lines are ignored within parentheses.
885
900
  // We'll also avoid adding multiple newlines in a row to simplify parsing.
886
901
  if (this._tokens.length === 0 || this._tokens[this._tokens.length - 1].type !== 2 /* TokenType.NewLine */) {
887
- this._tokens.push(tokenizerTypes_1.NewLineToken.create(this._cs.position, length, newLineType, this._getComments()));
902
+ this._addNewLineToken(this._cs.position, length, newLineType);
888
903
  }
889
904
  }
890
905
  if (newLineType === 0 /* NewLineType.CarriageReturn */) {
@@ -963,7 +978,7 @@ class Tokenizer {
963
978
  isSpacePresent,
964
979
  isTabPresent,
965
980
  });
966
- this._tokens.push(tokenizerTypes_1.IndentToken.create(startOffset, tab1Spaces, tab8Spaces, false, this._getComments()));
981
+ this._addIndentToken(startOffset, tab1Spaces, tab8Spaces, false);
967
982
  }
968
983
  }
969
984
  else {
@@ -986,7 +1001,7 @@ class Tokenizer {
986
1001
  isSpacePresent,
987
1002
  isTabPresent,
988
1003
  });
989
- this._tokens.push(tokenizerTypes_1.IndentToken.create(startOffset, tab1Spaces, tab8Spaces, isIndentAmbiguous, this._getComments()));
1004
+ this._addIndentToken(startOffset, tab1Spaces, tab8Spaces, isIndentAmbiguous);
990
1005
  }
991
1006
  else if (prevTabInfo.tab8Spaces === tab8Spaces) {
992
1007
  // The Python spec says that if there is ambiguity about how tabs should
@@ -994,7 +1009,7 @@ class Tokenizer {
994
1009
  // spaces, it should be an error. We'll record this condition in the token
995
1010
  // so the parser can later report it.
996
1011
  if ((prevTabInfo.isSpacePresent && isTabPresent) || (prevTabInfo.isTabPresent && isSpacePresent)) {
997
- this._tokens.push(tokenizerTypes_1.IndentToken.create(startOffset, tab1Spaces, tab8Spaces, true, this._getComments()));
1012
+ this._addIndentToken(startOffset, tab1Spaces, tab8Spaces, true);
998
1013
  }
999
1014
  }
1000
1015
  else {
@@ -1018,7 +1033,8 @@ class Tokenizer {
1018
1033
  dedentPoints.forEach((dedentAmount, index) => {
1019
1034
  const matchesIndent = index < dedentPoints.length - 1 || dedentAmount === tab8Spaces;
1020
1035
  const actualDedentAmount = index < dedentPoints.length - 1 ? dedentAmount : tab8Spaces;
1021
- this._tokens.push(tokenizerTypes_1.DedentToken.create(this._cs.position, 0, actualDedentAmount, matchesIndent, isDedentAmbiguous, this._getComments()));
1036
+ this._tokens.push((this._retainedTokenCursor && this._reuseToken(4 /* TokenType.Dedent */, this._cs.position, 0)) ??
1037
+ tokenizerTypes_1.DedentToken.create(this._cs.position, 0, actualDedentAmount, matchesIndent, isDedentAmbiguous, this._getComments()));
1022
1038
  isDedentAmbiguous = false;
1023
1039
  });
1024
1040
  }
@@ -1081,11 +1097,13 @@ class Tokenizer {
1081
1097
  const length = end - start;
1082
1098
  const keywordType = getKeywordTypeFromTextSlice(text, start, length);
1083
1099
  if (keywordType !== undefined) {
1084
- this._tokens.push(tokenizerTypes_1.KeywordToken.create(start, length, keywordType, this._getComments()));
1100
+ this._tokens.push((this._retainedTokenCursor && this._reuseToken(8 /* TokenType.Keyword */, start, length)) ??
1101
+ tokenizerTypes_1.KeywordToken.create(start, length, keywordType, this._getComments()));
1085
1102
  }
1086
1103
  else {
1087
1104
  const value = this._internIdentifier(text, start, end, length);
1088
- this._tokens.push(tokenizerTypes_1.IdentifierToken.create(start, length, value, this._getComments()));
1105
+ this._tokens.push((this._retainedTokenCursor && this._reuseToken(7 /* TokenType.Identifier */, start, length)) ??
1106
+ tokenizerTypes_1.IdentifierToken.create(start, length, value, this._getComments()));
1089
1107
  }
1090
1108
  return true;
1091
1109
  }
@@ -1179,7 +1197,7 @@ class Tokenizer {
1179
1197
  intValue > Number.MAX_SAFE_INTEGER) {
1180
1198
  intValue = bigIntValue;
1181
1199
  }
1182
- this._tokens.push(tokenizerTypes_1.NumberToken.create(start, end - start, intValue, true, false, this._getComments()));
1200
+ this._addNumberToken(start, end - start, intValue, true, false);
1183
1201
  return true;
1184
1202
  }
1185
1203
  }
@@ -1231,7 +1249,7 @@ class Tokenizer {
1231
1249
  this._cs.moveNext();
1232
1250
  tokenLength += 1;
1233
1251
  }
1234
- this._tokens.push(tokenizerTypes_1.NumberToken.create(start, tokenLength, intValue, true, isImaginary, this._getComments()));
1252
+ this._addNumberToken(start, tokenLength, intValue, true, isImaginary);
1235
1253
  return true;
1236
1254
  }
1237
1255
  }
@@ -1251,7 +1269,7 @@ class Tokenizer {
1251
1269
  this._cs.moveNext();
1252
1270
  tokenLength += 1;
1253
1271
  }
1254
- this._tokens.push(tokenizerTypes_1.NumberToken.create(start, tokenLength, value, false, isImaginary, this._getComments()));
1272
+ this._addNumberToken(start, tokenLength, value, false, isImaginary);
1255
1273
  return true;
1256
1274
  }
1257
1275
  }
@@ -1268,13 +1286,13 @@ class Tokenizer {
1268
1286
  const twoCharKey = (currentChar << 8) | nextChar;
1269
1287
  const specialTokenType = _twoCharSpecialTokenTypeMap.get(twoCharKey);
1270
1288
  if (specialTokenType !== undefined) {
1271
- this._tokens.push(tokenizerTypes_1.Token.create(specialTokenType, this._cs.position, 2, this._getComments()));
1289
+ this._addToken(specialTokenType, this._cs.position, 2);
1272
1290
  this._cs.advance(2);
1273
1291
  return true;
1274
1292
  }
1275
1293
  const twoCharOperatorType = _twoCharOperatorTypeMap.get(twoCharKey);
1276
1294
  if (twoCharOperatorType !== undefined) {
1277
- this._tokens.push(tokenizerTypes_1.OperatorToken.create(this._cs.position, 2, twoCharOperatorType, this._getComments()));
1295
+ this._addOperatorToken(this._cs.position, 2, twoCharOperatorType);
1278
1296
  this._cs.advance(2);
1279
1297
  return true;
1280
1298
  }
@@ -1286,7 +1304,7 @@ class Tokenizer {
1286
1304
  const operatorType = hasTrailingEqual
1287
1305
  ? _repeatedCharEqualOperatorTypeTable[currentChar]
1288
1306
  : repeatedOperatorType;
1289
- this._tokens.push(tokenizerTypes_1.OperatorToken.create(this._cs.position, repeatedLength, operatorType, this._getComments()));
1307
+ this._addOperatorToken(this._cs.position, repeatedLength, operatorType);
1290
1308
  this._cs.advance(repeatedLength);
1291
1309
  return true;
1292
1310
  }
@@ -1304,7 +1322,7 @@ class Tokenizer {
1304
1322
  length = 1;
1305
1323
  operatorType = singleCharOperatorType;
1306
1324
  }
1307
- this._tokens.push(tokenizerTypes_1.OperatorToken.create(this._cs.position, length, operatorType, this._getComments()));
1325
+ this._addOperatorToken(this._cs.position, length, operatorType);
1308
1326
  this._cs.advance(length);
1309
1327
  return true;
1310
1328
  }
@@ -1312,7 +1330,7 @@ class Tokenizer {
1312
1330
  // `!=` is handled by the 2-char fast path above.
1313
1331
  if (currentChar === 33 /* Char.ExclamationMark */ && this._activeFString) {
1314
1332
  // Handle the conversion separator (!) within an f-string.
1315
- this._tokens.push(tokenizerTypes_1.Token.create(23 /* TokenType.ExclamationMark */, this._cs.position, 1, this._getComments()));
1333
+ this._addToken(23 /* TokenType.ExclamationMark */, this._cs.position, 1);
1316
1334
  this._cs.advance(1);
1317
1335
  return true;
1318
1336
  }
@@ -1337,11 +1355,43 @@ class Tokenizer {
1337
1355
  }
1338
1356
  const length = this._cs.position - start;
1339
1357
  if (length > 0) {
1340
- this._tokens.push(tokenizerTypes_1.Token.create(0 /* TokenType.Invalid */, start, length, this._getComments()));
1358
+ this._addToken(0 /* TokenType.Invalid */, start, length);
1341
1359
  return true;
1342
1360
  }
1343
1361
  return false;
1344
1362
  }
1363
+ _addToken(type, start, length) {
1364
+ this._tokens.push((this._retainedTokenCursor && this._reuseToken(type, start, length)) ??
1365
+ tokenizerTypes_1.Token.create(type, start, length, this._getComments()));
1366
+ }
1367
+ _addOperatorToken(start, length, operatorType) {
1368
+ this._tokens.push((this._retainedTokenCursor && this._reuseToken(9 /* TokenType.Operator */, start, length)) ??
1369
+ tokenizerTypes_1.OperatorToken.create(start, length, operatorType, this._getComments()));
1370
+ }
1371
+ _addNewLineToken(start, length, newLineType) {
1372
+ this._tokens.push((this._retainedTokenCursor && this._reuseToken(2 /* TokenType.NewLine */, start, length)) ??
1373
+ tokenizerTypes_1.NewLineToken.create(start, length, newLineType, this._getComments()));
1374
+ }
1375
+ _addIndentToken(start, length, indentAmount, isIndentAmbiguous) {
1376
+ this._tokens.push((this._retainedTokenCursor && this._reuseToken(3 /* TokenType.Indent */, start, length)) ??
1377
+ tokenizerTypes_1.IndentToken.create(start, length, indentAmount, isIndentAmbiguous, this._getComments()));
1378
+ }
1379
+ _addNumberToken(start, length, value, isInteger, isImaginary) {
1380
+ this._tokens.push((this._retainedTokenCursor && this._reuseToken(6 /* TokenType.Number */, start, length)) ??
1381
+ tokenizerTypes_1.NumberToken.create(start, length, value, isInteger, isImaginary, this._getComments()));
1382
+ }
1383
+ _addFStringEndToken(start, length, flags) {
1384
+ this._tokens.push((this._retainedTokenCursor &&
1385
+ this._reuseToken(26 /* TokenType.FStringEnd */, start, length, /* consumeComments */ false)) ??
1386
+ tokenizerTypes_1.FStringEndToken.create(start, length, flags));
1387
+ }
1388
+ _reuseToken(type, start, length, consumeComments = true) {
1389
+ const token = this._retainedTokenCursor.next(start, length, type);
1390
+ if (token && consumeComments) {
1391
+ this._getComments();
1392
+ }
1393
+ return token;
1394
+ }
1345
1395
  _getComments() {
1346
1396
  const prevComments = this._comments;
1347
1397
  this._comments = undefined;
@@ -1560,7 +1610,8 @@ class Tokenizer {
1560
1610
  this._cs.moveNext();
1561
1611
  }
1562
1612
  const end = this._cs.position;
1563
- const fStringStartToken = tokenizerTypes_1.FStringStartToken.create(start, end - start, flags, stringPrefixLength, this._getComments());
1613
+ const fStringStartToken = (this._retainedTokenCursor && this._reuseToken(24 /* TokenType.FStringStart */, start, end - start)) ??
1614
+ tokenizerTypes_1.FStringStartToken.create(start, end - start, flags, stringPrefixLength, this._getComments());
1564
1615
  // Create a new f-string context and push it on the stack.
1565
1616
  const fStringContext = {
1566
1617
  startToken: fStringStartToken,
@@ -1616,7 +1667,8 @@ class Tokenizer {
1616
1667
  }
1617
1668
  }
1618
1669
  }
1619
- this._tokens.push(tokenizerTypes_1.StringToken.create(start, end - start, stringLiteralInfo.flags, stringLiteralInfo.escapedValue, stringPrefixLength, this._getComments()));
1670
+ this._tokens.push((this._retainedTokenCursor && this._reuseToken(5 /* TokenType.String */, start, end - start)) ??
1671
+ tokenizerTypes_1.StringToken.create(start, end - start, stringLiteralInfo.flags, stringLiteralInfo.escapedValue, stringPrefixLength, this._getComments()));
1620
1672
  }
1621
1673
  }
1622
1674
  // Scans for either the FString end token or a replacement field.
@@ -1636,10 +1688,12 @@ class Tokenizer {
1636
1688
  middleTokenLength -= activeFString.startToken.quoteMarkLength;
1637
1689
  }
1638
1690
  if (middleTokenLength > 0 || isUnterminated) {
1639
- this._tokens.push(tokenizerTypes_1.FStringMiddleToken.create(start, middleTokenLength, stringLiteralInfo.flags, stringLiteralInfo.escapedValue));
1691
+ this._tokens.push((this._retainedTokenCursor &&
1692
+ this._reuseToken(25 /* TokenType.FStringMiddle */, start, middleTokenLength, /* consumeComments */ false)) ??
1693
+ tokenizerTypes_1.FStringMiddleToken.create(start, middleTokenLength, stringLiteralInfo.flags, stringLiteralInfo.escapedValue));
1640
1694
  }
1641
1695
  if (sawEndQuote) {
1642
- this._tokens.push(tokenizerTypes_1.FStringEndToken.create(start + middleTokenLength, activeFString.startToken.quoteMarkLength, stringLiteralInfo.flags));
1696
+ this._addFStringEndToken(start + middleTokenLength, activeFString.startToken.quoteMarkLength, stringLiteralInfo.flags);
1643
1697
  this._activeFString = this._fStringStack.pop();
1644
1698
  }
1645
1699
  else if (isUnterminated) {