@zzzen/pyright-internal 1.2.0-dev.20261011 → 1.2.0-dev.20261101

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 (144) hide show
  1. package/dist/analyzer/binder.js +28 -9
  2. package/dist/analyzer/binder.js.map +1 -1
  3. package/dist/analyzer/checker.js +8 -3
  4. package/dist/analyzer/checker.js.map +1 -1
  5. package/dist/analyzer/codeFlowEngine.js +76 -30
  6. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  7. package/dist/analyzer/dataClasses.js +14 -5
  8. package/dist/analyzer/dataClasses.js.map +1 -1
  9. package/dist/analyzer/decorators.d.ts +1 -1
  10. package/dist/analyzer/decorators.js +22 -2
  11. package/dist/analyzer/decorators.js.map +1 -1
  12. package/dist/analyzer/namedTuples.d.ts +2 -1
  13. package/dist/analyzer/namedTuples.js +63 -35
  14. package/dist/analyzer/namedTuples.js.map +1 -1
  15. package/dist/analyzer/operations.js +45 -1
  16. package/dist/analyzer/operations.js.map +1 -1
  17. package/dist/analyzer/overloadResultAdmission.js +115 -3
  18. package/dist/analyzer/overloadResultAdmission.js.map +1 -1
  19. package/dist/analyzer/overloadResultController.js +36 -10
  20. package/dist/analyzer/overloadResultController.js.map +1 -1
  21. package/dist/analyzer/overloadResultSelector.js +32 -12
  22. package/dist/analyzer/overloadResultSelector.js.map +1 -1
  23. package/dist/analyzer/parseTreeUtils.d.ts +3 -0
  24. package/dist/analyzer/parseTreeUtils.js +56 -0
  25. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  26. package/dist/analyzer/patternMatching.js +67 -27
  27. package/dist/analyzer/patternMatching.js.map +1 -1
  28. package/dist/analyzer/program.d.ts +3 -0
  29. package/dist/analyzer/program.js +34 -9
  30. package/dist/analyzer/program.js.map +1 -1
  31. package/dist/analyzer/sentinel.js +7 -1
  32. package/dist/analyzer/sentinel.js.map +1 -1
  33. package/dist/analyzer/service.js +6 -2
  34. package/dist/analyzer/service.js.map +1 -1
  35. package/dist/analyzer/sourceEnumerator.d.ts +3 -1
  36. package/dist/analyzer/sourceEnumerator.js +30 -11
  37. package/dist/analyzer/sourceEnumerator.js.map +1 -1
  38. package/dist/analyzer/sourceFile.js +13 -6
  39. package/dist/analyzer/sourceFile.js.map +1 -1
  40. package/dist/analyzer/sourceMapper.d.ts +1 -0
  41. package/dist/analyzer/sourceMapper.js +10 -4
  42. package/dist/analyzer/sourceMapper.js.map +1 -1
  43. package/dist/analyzer/tupleComparison.d.ts +6 -0
  44. package/dist/analyzer/tupleComparison.js +731 -0
  45. package/dist/analyzer/tupleComparison.js.map +1 -0
  46. package/dist/analyzer/tuples.js +52 -10
  47. package/dist/analyzer/tuples.js.map +1 -1
  48. package/dist/analyzer/typeEvaluator.js +508 -63
  49. package/dist/analyzer/typeEvaluator.js.map +1 -1
  50. package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -1
  51. package/dist/analyzer/typeEvaluatorTypes.js +2 -3
  52. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  53. package/dist/analyzer/typeGuards.d.ts +6 -1
  54. package/dist/analyzer/typeGuards.js +373 -72
  55. package/dist/analyzer/typeGuards.js.map +1 -1
  56. package/dist/analyzer/typeStubRenderer.d.ts +6 -1
  57. package/dist/analyzer/typeStubRenderer.js +19 -12
  58. package/dist/analyzer/typeStubRenderer.js.map +1 -1
  59. package/dist/analyzer/typeUtils.js +3 -0
  60. package/dist/analyzer/typeUtils.js.map +1 -1
  61. package/dist/analyzer/typedDicts.d.ts +2 -1
  62. package/dist/analyzer/typedDicts.js +49 -10
  63. package/dist/analyzer/typedDicts.js.map +1 -1
  64. package/dist/analyzer/types.d.ts +14 -0
  65. package/dist/analyzer/types.js +215 -10
  66. package/dist/analyzer/types.js.map +1 -1
  67. package/dist/common/configOptions.d.ts +1 -0
  68. package/dist/common/configOptions.js +9 -0
  69. package/dist/common/configOptions.js.map +1 -1
  70. package/dist/common/processUtils.d.ts +6 -0
  71. package/dist/common/processUtils.js +56 -1
  72. package/dist/common/processUtils.js.map +1 -1
  73. package/dist/common/textEditTracker.js +1 -1
  74. package/dist/common/textEditTracker.js.map +1 -1
  75. package/dist/common/windowsProcessTree.d.ts +2 -0
  76. package/dist/common/windowsProcessTree.js +23 -0
  77. package/dist/common/windowsProcessTree.js.map +1 -1
  78. package/dist/common/windowsProcessTree.json +273 -34
  79. package/dist/languageServerBase.d.ts +3 -0
  80. package/dist/languageServerBase.js +44 -12
  81. package/dist/languageServerBase.js.map +1 -1
  82. package/dist/languageService/callHierarchyProvider.js +6 -6
  83. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  84. package/dist/languageService/referencesProvider.js +3 -3
  85. package/dist/languageService/referencesProvider.js.map +1 -1
  86. package/dist/languageService/renameProvider.js +1 -1
  87. package/dist/languageService/renameProvider.js.map +1 -1
  88. package/dist/languageService/symbolIndexer.js +2 -2
  89. package/dist/languageService/symbolIndexer.js.map +1 -1
  90. package/dist/localization/localize.d.ts +2 -0
  91. package/dist/localization/localize.js +2 -0
  92. package/dist/localization/localize.js.map +1 -1
  93. package/dist/localization/package.nls.en-us.json +8 -0
  94. package/dist/parser/parseTreeTokenReuse.d.ts +34 -0
  95. package/dist/parser/parseTreeTokenReuse.js +897 -0
  96. package/dist/parser/parseTreeTokenReuse.js.map +1 -0
  97. package/dist/parser/tokenizer.d.ts +10 -1
  98. package/dist/parser/tokenizer.js +184 -130
  99. package/dist/parser/tokenizer.js.map +1 -1
  100. package/dist/tests/checker.test.js +58 -0
  101. package/dist/tests/checker.test.js.map +1 -1
  102. package/dist/tests/config.test.js +126 -0
  103. package/dist/tests/config.test.js.map +1 -1
  104. package/dist/tests/fourSlashParser.test.js +35 -0
  105. package/dist/tests/fourSlashParser.test.js.map +1 -1
  106. package/dist/tests/fourslash/hover.typedDict.get.fourslash.js +11 -0
  107. package/dist/tests/fourslash/hover.typedDict.get.fourslash.js.map +1 -1
  108. package/dist/tests/harness/fourslash/fourSlashParser.js +14 -4
  109. package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
  110. package/dist/tests/languageServer.test.js +15 -0
  111. package/dist/tests/languageServer.test.js.map +1 -1
  112. package/dist/tests/lsp/languageServer.js +6 -6
  113. package/dist/tests/lsp/languageServer.js.map +1 -1
  114. package/dist/tests/mypyPrimerAnalysis.test.js +133 -0
  115. package/dist/tests/mypyPrimerAnalysis.test.js.map +1 -1
  116. package/dist/tests/overloadResultController.test.js +379 -1
  117. package/dist/tests/overloadResultController.test.js.map +1 -1
  118. package/dist/tests/signatureHelp.test.js +34 -0
  119. package/dist/tests/signatureHelp.test.js.map +1 -1
  120. package/dist/tests/sourceEnumeratorSymlink.test.js +98 -13
  121. package/dist/tests/sourceEnumeratorSymlink.test.js.map +1 -1
  122. package/dist/tests/sourceMapperUtils.test.js +143 -0
  123. package/dist/tests/sourceMapperUtils.test.js.map +1 -1
  124. package/dist/tests/typeEvaluator1.test.js +22 -3
  125. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  126. package/dist/tests/typeEvaluator2.test.js +54 -1
  127. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  128. package/dist/tests/typeEvaluator4.test.js +10 -3
  129. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  130. package/dist/tests/typeEvaluator5.test.js +1 -1
  131. package/dist/tests/typeEvaluator6.test.js +55 -0
  132. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  133. package/dist/tests/typeEvaluator7.test.js +30 -0
  134. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  135. package/dist/tests/typeEvaluator8.test.js +1293 -2
  136. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  137. package/dist/tests/types.test.js +55 -0
  138. package/dist/tests/types.test.js.map +1 -1
  139. package/dist/typeServer/programWrapper.js +8 -2
  140. package/dist/typeServer/programWrapper.js.map +1 -1
  141. package/dist/typeServer/server.d.ts +12 -2
  142. package/dist/typeServer/server.js +97 -0
  143. package/dist/typeServer/server.js.map +1 -1
  144. package/package.json +3 -3
@@ -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) {