@rightcapital/phpdoc-parser 0.3.3-feature-add-basic-ci.7.0 → 0.3.3-feature-add-basic-ci.8.0

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 (155) hide show
  1. package/dist/index.d.ts +73 -0
  2. package/dist/index.js +0 -1
  3. package/dist/phpdoc-parser/ast/abstract-node-visitor.d.ts +8 -0
  4. package/dist/phpdoc-parser/ast/abstract-node-visitor.js +18 -0
  5. package/dist/phpdoc-parser/ast/base-node.d.ts +10 -0
  6. package/dist/phpdoc-parser/ast/base-node.js +27 -0
  7. package/dist/phpdoc-parser/ast/const-expr/const-expr-array-item-node.d.ts +8 -0
  8. package/dist/phpdoc-parser/ast/const-expr/const-expr-array-item-node.js +21 -0
  9. package/dist/phpdoc-parser/ast/const-expr/const-expr-array-node.d.ts +8 -0
  10. package/dist/phpdoc-parser/ast/const-expr/const-expr-array-node.js +17 -0
  11. package/dist/phpdoc-parser/ast/const-expr/const-expr-false-node.d.ts +5 -0
  12. package/dist/phpdoc-parser/ast/const-expr/const-expr-false-node.js +13 -0
  13. package/dist/phpdoc-parser/ast/const-expr/const-expr-float-node.d.ts +7 -0
  14. package/dist/phpdoc-parser/ast/const-expr/const-expr-float-node.js +17 -0
  15. package/dist/phpdoc-parser/ast/const-expr/const-expr-integer-node.d.ts +7 -0
  16. package/dist/phpdoc-parser/ast/const-expr/const-expr-integer-node.js +17 -0
  17. package/dist/phpdoc-parser/ast/const-expr/const-expr-node.d.ts +25 -0
  18. package/dist/phpdoc-parser/ast/const-expr/const-expr-node.js +43 -0
  19. package/dist/phpdoc-parser/ast/const-expr/const-expr-null-node.d.ts +5 -0
  20. package/dist/phpdoc-parser/ast/const-expr/const-expr-null-node.js +13 -0
  21. package/dist/phpdoc-parser/ast/const-expr/const-expr-string-node.d.ts +7 -0
  22. package/dist/phpdoc-parser/ast/const-expr/const-expr-string-node.js +17 -0
  23. package/dist/phpdoc-parser/ast/const-expr/const-expr-true-node.d.ts +5 -0
  24. package/dist/phpdoc-parser/ast/const-expr/const-expr-true-node.js +13 -0
  25. package/dist/phpdoc-parser/ast/const-expr/const-fetch-node.d.ts +8 -0
  26. package/dist/phpdoc-parser/ast/const-expr/const-fetch-node.js +21 -0
  27. package/dist/phpdoc-parser/ast/const-expr/quote-aware-const-expr-string-node.d.ts +10 -0
  28. package/dist/phpdoc-parser/ast/const-expr/quote-aware-const-expr-string-node.js +47 -0
  29. package/dist/phpdoc-parser/ast/node-traverser.d.ts +11 -0
  30. package/dist/phpdoc-parser/ast/node-traverser.js +216 -0
  31. package/dist/phpdoc-parser/ast/node-visitor/cloning-visitor.d.ts +5 -0
  32. package/dist/phpdoc-parser/ast/node-visitor/cloning-visitor.js +14 -0
  33. package/dist/phpdoc-parser/ast/node-visitor.d.ts +11 -0
  34. package/dist/phpdoc-parser/ast/node-visitor.js +2 -0
  35. package/dist/phpdoc-parser/ast/node.d.ts +6 -0
  36. package/dist/phpdoc-parser/ast/node.js +2 -0
  37. package/dist/phpdoc-parser/ast/php-doc/assert-tag-method-value-node.d.ts +13 -0
  38. package/dist/phpdoc-parser/ast/php-doc/assert-tag-method-value-node.js +24 -0
  39. package/dist/phpdoc-parser/ast/php-doc/assert-tag-property-value-node.d.ts +13 -0
  40. package/dist/phpdoc-parser/ast/php-doc/assert-tag-property-value-node.js +24 -0
  41. package/dist/phpdoc-parser/ast/php-doc/assert-tag-value-node.d.ts +12 -0
  42. package/dist/phpdoc-parser/ast/php-doc/assert-tag-value-node.js +23 -0
  43. package/dist/phpdoc-parser/ast/php-doc/deprecated-tag-value-node.d.ts +7 -0
  44. package/dist/phpdoc-parser/ast/php-doc/deprecated-tag-value-node.js +17 -0
  45. package/dist/phpdoc-parser/ast/php-doc/extends-tag-value-node.d.ts +9 -0
  46. package/dist/phpdoc-parser/ast/php-doc/extends-tag-value-node.js +18 -0
  47. package/dist/phpdoc-parser/ast/php-doc/generic-tag-value-node.d.ts +7 -0
  48. package/dist/phpdoc-parser/ast/php-doc/generic-tag-value-node.js +17 -0
  49. package/dist/phpdoc-parser/ast/php-doc/implements-tag-value-node.d.ts +9 -0
  50. package/dist/phpdoc-parser/ast/php-doc/implements-tag-value-node.js +18 -0
  51. package/dist/phpdoc-parser/ast/php-doc/invalid-tag-value-node.d.ts +10 -0
  52. package/dist/phpdoc-parser/ast/php-doc/invalid-tag-value-node.js +33 -0
  53. package/dist/phpdoc-parser/ast/php-doc/method-tag-value-node.d.ts +15 -0
  54. package/dist/phpdoc-parser/ast/php-doc/method-tag-value-node.js +27 -0
  55. package/dist/phpdoc-parser/ast/php-doc/method-tag-value-parameter-node.d.ts +13 -0
  56. package/dist/phpdoc-parser/ast/php-doc/method-tag-value-parameter-node.js +27 -0
  57. package/dist/phpdoc-parser/ast/php-doc/mixin-tag-value-node.d.ts +9 -0
  58. package/dist/phpdoc-parser/ast/php-doc/mixin-tag-value-node.js +18 -0
  59. package/dist/phpdoc-parser/ast/php-doc/param-out-tag-value-node.d.ts +10 -0
  60. package/dist/phpdoc-parser/ast/php-doc/param-out-tag-value-node.js +19 -0
  61. package/dist/phpdoc-parser/ast/php-doc/param-tag-value-node.d.ts +12 -0
  62. package/dist/phpdoc-parser/ast/php-doc/param-tag-value-node.js +28 -0
  63. package/dist/phpdoc-parser/ast/php-doc/php-doc-child-node.d.ts +4 -0
  64. package/dist/phpdoc-parser/ast/php-doc/php-doc-child-node.js +10 -0
  65. package/dist/phpdoc-parser/ast/php-doc/php-doc-node.d.ts +32 -0
  66. package/dist/phpdoc-parser/ast/php-doc/php-doc-node.js +97 -0
  67. package/dist/phpdoc-parser/ast/php-doc/php-doc-tag-node.d.ts +56 -0
  68. package/dist/phpdoc-parser/ast/php-doc/php-doc-tag-node.js +90 -0
  69. package/dist/phpdoc-parser/ast/php-doc/php-doc-tag-value-node.d.ts +4 -0
  70. package/dist/phpdoc-parser/ast/php-doc/php-doc-tag-value-node.js +10 -0
  71. package/dist/phpdoc-parser/ast/php-doc/php-doc-text-node.d.ts +7 -0
  72. package/dist/phpdoc-parser/ast/php-doc/php-doc-text-node.js +17 -0
  73. package/dist/phpdoc-parser/ast/php-doc/property-tag-value-node.d.ts +10 -0
  74. package/dist/phpdoc-parser/ast/php-doc/property-tag-value-node.js +19 -0
  75. package/dist/phpdoc-parser/ast/php-doc/return-tag-value-node.d.ts +9 -0
  76. package/dist/phpdoc-parser/ast/php-doc/return-tag-value-node.js +18 -0
  77. package/dist/phpdoc-parser/ast/php-doc/self-out-tag-value-node.d.ts +9 -0
  78. package/dist/phpdoc-parser/ast/php-doc/self-out-tag-value-node.js +18 -0
  79. package/dist/phpdoc-parser/ast/php-doc/template-tag-value-node.d.ts +11 -0
  80. package/dist/phpdoc-parser/ast/php-doc/template-tag-value-node.js +24 -0
  81. package/dist/phpdoc-parser/ast/php-doc/throws-tag-value-node.d.ts +9 -0
  82. package/dist/phpdoc-parser/ast/php-doc/throws-tag-value-node.js +18 -0
  83. package/dist/phpdoc-parser/ast/php-doc/type-alias-import-tag-value-node.d.ts +10 -0
  84. package/dist/phpdoc-parser/ast/php-doc/type-alias-import-tag-value-node.js +22 -0
  85. package/dist/phpdoc-parser/ast/php-doc/type-alias-tag-value-node.d.ts +9 -0
  86. package/dist/phpdoc-parser/ast/php-doc/type-alias-tag-value-node.js +18 -0
  87. package/dist/phpdoc-parser/ast/php-doc/typeless-param-tag-value-node.d.ts +10 -0
  88. package/dist/phpdoc-parser/ast/php-doc/typeless-param-tag-value-node.js +22 -0
  89. package/dist/phpdoc-parser/ast/php-doc/uses-tag-value-node.d.ts +9 -0
  90. package/dist/phpdoc-parser/ast/php-doc/uses-tag-value-node.js +18 -0
  91. package/dist/phpdoc-parser/ast/php-doc/var-tag-value-node.d.ts +10 -0
  92. package/dist/phpdoc-parser/ast/php-doc/var-tag-value-node.js +19 -0
  93. package/dist/phpdoc-parser/ast/type/array-shape-item-node.d.ts +12 -0
  94. package/dist/phpdoc-parser/ast/type/array-shape-item-node.js +22 -0
  95. package/dist/phpdoc-parser/ast/type/array-shape-node.d.ts +14 -0
  96. package/dist/phpdoc-parser/ast/type/array-shape-node.js +31 -0
  97. package/dist/phpdoc-parser/ast/type/array-type-node.d.ts +7 -0
  98. package/dist/phpdoc-parser/ast/type/array-type-node.js +25 -0
  99. package/dist/phpdoc-parser/ast/type/callable-type-node.d.ts +11 -0
  100. package/dist/phpdoc-parser/ast/type/callable-type-node.js +24 -0
  101. package/dist/phpdoc-parser/ast/type/callable-type-parameter-node.d.ts +11 -0
  102. package/dist/phpdoc-parser/ast/type/callable-type-parameter-node.js +26 -0
  103. package/dist/phpdoc-parser/ast/type/conditional-type-for-parameter-node.d.ts +11 -0
  104. package/dist/phpdoc-parser/ast/type/conditional-type-for-parameter-node.js +21 -0
  105. package/dist/phpdoc-parser/ast/type/conditional-type-node.d.ts +11 -0
  106. package/dist/phpdoc-parser/ast/type/conditional-type-node.js +21 -0
  107. package/dist/phpdoc-parser/ast/type/const-type-node.d.ts +8 -0
  108. package/dist/phpdoc-parser/ast/type/const-type-node.js +17 -0
  109. package/dist/phpdoc-parser/ast/type/generic-type-node.d.ts +15 -0
  110. package/dist/phpdoc-parser/ast/type/generic-type-node.js +37 -0
  111. package/dist/phpdoc-parser/ast/type/identifier-type-node.d.ts +7 -0
  112. package/dist/phpdoc-parser/ast/type/identifier-type-node.js +17 -0
  113. package/dist/phpdoc-parser/ast/type/intersection-type-node.d.ts +7 -0
  114. package/dist/phpdoc-parser/ast/type/intersection-type-node.js +25 -0
  115. package/dist/phpdoc-parser/ast/type/invalid-type-node.d.ts +10 -0
  116. package/dist/phpdoc-parser/ast/type/invalid-type-node.js +29 -0
  117. package/dist/phpdoc-parser/ast/type/nullable-type-node.d.ts +7 -0
  118. package/dist/phpdoc-parser/ast/type/nullable-type-node.js +17 -0
  119. package/dist/phpdoc-parser/ast/type/object-shape-item-node.d.ts +11 -0
  120. package/dist/phpdoc-parser/ast/type/object-shape-item-node.js +22 -0
  121. package/dist/phpdoc-parser/ast/type/object-shape-node.d.ts +8 -0
  122. package/dist/phpdoc-parser/ast/type/object-shape-node.js +17 -0
  123. package/dist/phpdoc-parser/ast/type/offset-access-type-node.d.ts +8 -0
  124. package/dist/phpdoc-parser/ast/type/offset-access-type-node.js +26 -0
  125. package/dist/phpdoc-parser/ast/type/this-type-node.d.ts +5 -0
  126. package/dist/phpdoc-parser/ast/type/this-type-node.js +13 -0
  127. package/dist/phpdoc-parser/ast/type/type-node.d.ts +40 -0
  128. package/dist/phpdoc-parser/ast/type/type-node.js +64 -0
  129. package/dist/phpdoc-parser/ast/type/union-type-node.d.ts +7 -0
  130. package/dist/phpdoc-parser/ast/type/union-type-node.js +25 -0
  131. package/dist/phpdoc-parser/ast/types.d.ts +13 -0
  132. package/dist/phpdoc-parser/ast/types.js +18 -0
  133. package/dist/phpdoc-parser/lexer/lexer.d.ts +46 -0
  134. package/dist/phpdoc-parser/lexer/lexer.js +143 -0
  135. package/dist/phpdoc-parser/parser/const-expr-parser.d.ts +16 -0
  136. package/dist/phpdoc-parser/parser/const-expr-parser.js +146 -0
  137. package/dist/phpdoc-parser/parser/node-collecting-visitor.d.ts +7 -0
  138. package/dist/phpdoc-parser/parser/node-collecting-visitor.js +15 -0
  139. package/dist/phpdoc-parser/parser/parser-exception.d.ts +16 -0
  140. package/dist/phpdoc-parser/parser/parser-exception.js +44 -0
  141. package/dist/phpdoc-parser/parser/php-doc-parser.d.ts +47 -0
  142. package/dist/phpdoc-parser/parser/php-doc-parser.js +558 -0
  143. package/dist/phpdoc-parser/parser/string-unescaper.d.ts +6 -0
  144. package/dist/phpdoc-parser/parser/string-unescaper.js +41 -0
  145. package/dist/phpdoc-parser/parser/token-iterator.d.ts +40 -0
  146. package/dist/phpdoc-parser/parser/token-iterator.js +215 -0
  147. package/dist/phpdoc-parser/parser/type-parser.d.ts +41 -0
  148. package/dist/phpdoc-parser/parser/type-parser.js +576 -0
  149. package/dist/phpdoc-parser/printer/diff-elem.d.ts +12 -0
  150. package/dist/phpdoc-parser/printer/diff-elem.js +19 -0
  151. package/dist/phpdoc-parser/printer/differ.d.ts +10 -0
  152. package/dist/phpdoc-parser/printer/differ.js +111 -0
  153. package/dist/phpdoc-parser/printer/printer.d.ts +20 -0
  154. package/dist/phpdoc-parser/printer/printer.js +612 -0
  155. package/package.json +2 -2
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ParserException = void 0;
4
+ const lexer_1 = require("../lexer/lexer");
5
+ class ParserException extends Error {
6
+ constructor(currentTokenValue, currentTokenType, currentOffset, expectedTokenType, expectedTokenValue = null, currentTokenLine = null) {
7
+ super();
8
+ this.currentTokenValue = currentTokenValue;
9
+ this.currentTokenType = currentTokenType;
10
+ this.currentOffset = currentOffset;
11
+ this.expectedTokenType = expectedTokenType;
12
+ this.expectedTokenValue = expectedTokenValue;
13
+ this.currentTokenLine = currentTokenLine;
14
+ this.message = `Unexpected token ${this.formatValue(currentTokenValue)}, expected ${lexer_1.Lexer.TOKEN_LABELS[expectedTokenType]}${expectedTokenValue !== null
15
+ ? ` (${this.formatValue(expectedTokenValue)})`
16
+ : ''} at offset ${currentOffset}${currentTokenLine === null ? '' : ` on line ${currentTokenLine}`}`;
17
+ }
18
+ getCurrentTokenValue() {
19
+ return this.currentTokenValue;
20
+ }
21
+ getCurrentTokenType() {
22
+ return this.currentTokenType;
23
+ }
24
+ getCurrentOffset() {
25
+ return this.currentOffset;
26
+ }
27
+ getExpectedTokenType() {
28
+ return this.expectedTokenType;
29
+ }
30
+ getExpectedTokenValue() {
31
+ return this.expectedTokenValue;
32
+ }
33
+ getCurrentTokenLine() {
34
+ return this.currentTokenLine;
35
+ }
36
+ formatValue(value) {
37
+ const json = JSON.stringify(value);
38
+ if (!json) {
39
+ throw new Error('JSON encoding error');
40
+ }
41
+ return json;
42
+ }
43
+ }
44
+ exports.ParserException = ParserException;
@@ -0,0 +1,47 @@
1
+ import { ConstExprParser } from './const-expr-parser';
2
+ import { TokenIterator } from './token-iterator';
3
+ import { TypeParser } from './type-parser';
4
+ import { PhpDocNode } from '../ast/php-doc/php-doc-node';
5
+ import { PhpDocTagNode } from '../ast/php-doc/php-doc-tag-node';
6
+ import { PhpDocTagValueNode } from '../ast/php-doc/php-doc-tag-value-node';
7
+ export declare class PhpDocParser {
8
+ typeParser: TypeParser;
9
+ constantExprParser: ConstExprParser;
10
+ requireWhitespaceBeforeDescription: boolean;
11
+ preserveTypeAliasesWithInvalidTypes: boolean;
12
+ parseDoctrineAnnotations: boolean;
13
+ private textBetweenTagsBelongsToDescription;
14
+ private useLinesAttributes;
15
+ private useIndexAttributes;
16
+ private static readonly DISALLOWED_DESCRIPTION_START_TOKENS;
17
+ constructor(typeParser: TypeParser, constantExprParser: ConstExprParser, requireWhitespaceBeforeDescription?: boolean, preserveTypeAliasesWithInvalidTypes?: boolean, usedAttributes?: {
18
+ lines: boolean;
19
+ indexes: boolean;
20
+ }, parseDoctrineAnnotations?: boolean, textBetweenTagsBelongsToDescription?: boolean);
21
+ parse(tokens: TokenIterator): PhpDocNode;
22
+ private parseChild;
23
+ private enrichWithAttributes;
24
+ private parseText;
25
+ parseTag(tokens: TokenIterator): PhpDocTagNode;
26
+ parseTagValue(tokens: TokenIterator, tag: string): PhpDocTagValueNode;
27
+ private parseParamTagValue;
28
+ private parseVarTagValue;
29
+ private parseReturnTagValue;
30
+ private parseThrowsTagValue;
31
+ private parseMixinTagValue;
32
+ private parseDeprecatedTagValue;
33
+ private parsePropertyTagValue;
34
+ private parseMethodTagValue;
35
+ private parseMethodTagValueParameter;
36
+ private parseTemplateTagValue;
37
+ private parseExtendsTagValue;
38
+ private parseTypeAliasTagValue;
39
+ private parseTypeAliasImportTagValue;
40
+ private parseAssertTagValue;
41
+ private parseAssertParameter;
42
+ private parseSelfOutTagValue;
43
+ private parseParamOutTagValue;
44
+ private parseOptionalVariableName;
45
+ private parseRequiredVariableName;
46
+ private parseOptionalDescription;
47
+ }
@@ -0,0 +1,558 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PhpDocParser = void 0;
4
+ const assert_tag_method_value_node_1 = require("../ast/php-doc/assert-tag-method-value-node");
5
+ const assert_tag_property_value_node_1 = require("../ast/php-doc/assert-tag-property-value-node");
6
+ const assert_tag_value_node_1 = require("../ast/php-doc/assert-tag-value-node");
7
+ const deprecated_tag_value_node_1 = require("../ast/php-doc/deprecated-tag-value-node");
8
+ const extends_tag_value_node_1 = require("../ast/php-doc/extends-tag-value-node");
9
+ const generic_tag_value_node_1 = require("../ast/php-doc/generic-tag-value-node");
10
+ const implements_tag_value_node_1 = require("../ast/php-doc/implements-tag-value-node");
11
+ const invalid_tag_value_node_1 = require("../ast/php-doc/invalid-tag-value-node");
12
+ const method_tag_value_node_1 = require("../ast/php-doc/method-tag-value-node");
13
+ const method_tag_value_parameter_node_1 = require("../ast/php-doc/method-tag-value-parameter-node");
14
+ const mixin_tag_value_node_1 = require("../ast/php-doc/mixin-tag-value-node");
15
+ const param_out_tag_value_node_1 = require("../ast/php-doc/param-out-tag-value-node");
16
+ const param_tag_value_node_1 = require("../ast/php-doc/param-tag-value-node");
17
+ const php_doc_node_1 = require("../ast/php-doc/php-doc-node");
18
+ const php_doc_tag_node_1 = require("../ast/php-doc/php-doc-tag-node");
19
+ const php_doc_text_node_1 = require("../ast/php-doc/php-doc-text-node");
20
+ const property_tag_value_node_1 = require("../ast/php-doc/property-tag-value-node");
21
+ const return_tag_value_node_1 = require("../ast/php-doc/return-tag-value-node");
22
+ const self_out_tag_value_node_1 = require("../ast/php-doc/self-out-tag-value-node");
23
+ const template_tag_value_node_1 = require("../ast/php-doc/template-tag-value-node");
24
+ const throws_tag_value_node_1 = require("../ast/php-doc/throws-tag-value-node");
25
+ const type_alias_import_tag_value_node_1 = require("../ast/php-doc/type-alias-import-tag-value-node");
26
+ const type_alias_tag_value_node_1 = require("../ast/php-doc/type-alias-tag-value-node");
27
+ const typeless_param_tag_value_node_1 = require("../ast/php-doc/typeless-param-tag-value-node");
28
+ const uses_tag_value_node_1 = require("../ast/php-doc/uses-tag-value-node");
29
+ const var_tag_value_node_1 = require("../ast/php-doc/var-tag-value-node");
30
+ const identifier_type_node_1 = require("../ast/type/identifier-type-node");
31
+ const invalid_type_node_1 = require("../ast/type/invalid-type-node");
32
+ const types_1 = require("../ast/types");
33
+ const lexer_1 = require("../lexer/lexer");
34
+ const DISALLOWED_DESCRIPTION_START_TOKENS = [
35
+ lexer_1.Lexer.TOKEN_UNION,
36
+ lexer_1.Lexer.TOKEN_INTERSECTION,
37
+ ];
38
+ class PhpDocParser {
39
+ constructor(typeParser, constantExprParser, requireWhitespaceBeforeDescription = false, preserveTypeAliasesWithInvalidTypes = false, usedAttributes = {
40
+ lines: false,
41
+ indexes: false,
42
+ }, parseDoctrineAnnotations = false, textBetweenTagsBelongsToDescription = false) {
43
+ var _a, _b;
44
+ this.typeParser = typeParser;
45
+ this.constantExprParser = constantExprParser;
46
+ this.requireWhitespaceBeforeDescription = requireWhitespaceBeforeDescription;
47
+ this.preserveTypeAliasesWithInvalidTypes = preserveTypeAliasesWithInvalidTypes;
48
+ this.parseDoctrineAnnotations = parseDoctrineAnnotations;
49
+ this.textBetweenTagsBelongsToDescription = textBetweenTagsBelongsToDescription;
50
+ this.useLinesAttributes = (_a = usedAttributes.lines) !== null && _a !== void 0 ? _a : false;
51
+ this.useIndexAttributes = (_b = usedAttributes.indexes) !== null && _b !== void 0 ? _b : false;
52
+ }
53
+ parse(tokens) {
54
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_OPEN_PHPDOC);
55
+ tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL);
56
+ const children = [];
57
+ if (!tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_CLOSE_PHPDOC)) {
58
+ children.push(this.parseChild(tokens));
59
+ while (tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL) &&
60
+ !tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_CLOSE_PHPDOC)) {
61
+ children.push(this.parseChild(tokens));
62
+ }
63
+ }
64
+ try {
65
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_CLOSE_PHPDOC);
66
+ }
67
+ catch (error) {
68
+ let name = '';
69
+ let startLine = tokens.currentTokenLine();
70
+ let startIndex = tokens.currentTokenIndex();
71
+ if (children.length > 0) {
72
+ const lastChild = children[children.length - 1];
73
+ if (lastChild instanceof php_doc_tag_node_1.PhpDocTagNode) {
74
+ name = lastChild.name;
75
+ startLine = tokens.currentTokenLine();
76
+ startIndex = tokens.currentTokenIndex();
77
+ }
78
+ }
79
+ const tag = new php_doc_tag_node_1.PhpDocTagNode(name, this.enrichWithAttributes(tokens, new invalid_tag_value_node_1.InvalidTagValueNode(`${error === null || error === void 0 ? void 0 : error.message}`, error), startLine, startIndex));
80
+ tokens.forwardToTheEnd();
81
+ return this.enrichWithAttributes(tokens, new php_doc_node_1.PhpDocNode([
82
+ this.enrichWithAttributes(tokens, tag, startLine, startIndex),
83
+ ]), 1, 0);
84
+ }
85
+ return this.enrichWithAttributes(tokens, new php_doc_node_1.PhpDocNode(children), 1, 0);
86
+ }
87
+ parseChild(tokens) {
88
+ if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_PHPDOC_TAG)) {
89
+ const startLine = tokens.currentTokenLine();
90
+ const startIndex = tokens.currentTokenIndex();
91
+ return this.enrichWithAttributes(tokens, this.parseTag(tokens), startLine, startIndex);
92
+ }
93
+ const startLine = tokens.currentTokenLine();
94
+ const startIndex = tokens.currentTokenIndex();
95
+ const text = this.parseText(tokens);
96
+ return this.enrichWithAttributes(tokens, text, startLine, startIndex);
97
+ }
98
+ enrichWithAttributes(tokens, node, startLine, startIndex) {
99
+ if (this.useLinesAttributes) {
100
+ node.setAttribute(types_1.Attribute.START_LINE, startLine);
101
+ node.setAttribute(types_1.Attribute.END_LINE, tokens.currentTokenLine());
102
+ }
103
+ if (this.useIndexAttributes) {
104
+ node.setAttribute(types_1.Attribute.START_INDEX, startIndex);
105
+ node.setAttribute(types_1.Attribute.END_INDEX, tokens.endIndexOfLastRelevantToken());
106
+ }
107
+ return node;
108
+ }
109
+ parseText(tokens) {
110
+ var _a, _b;
111
+ let text = '';
112
+ let endTokens = [
113
+ lexer_1.Lexer.TOKEN_PHPDOC_EOL,
114
+ lexer_1.Lexer.TOKEN_CLOSE_PHPDOC,
115
+ lexer_1.Lexer.TOKEN_END,
116
+ ];
117
+ if (this.textBetweenTagsBelongsToDescription) {
118
+ endTokens = [lexer_1.Lexer.TOKEN_CLOSE_PHPDOC, lexer_1.Lexer.TOKEN_END];
119
+ }
120
+ let savepoint = false;
121
+ while (this.textBetweenTagsBelongsToDescription ||
122
+ !tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL)) {
123
+ const tmpText = tokens.getSkippedHorizontalWhiteSpaceIfAny() +
124
+ tokens.joinUntil(lexer_1.Lexer.TOKEN_PHPDOC_EOL, ...endTokens);
125
+ text += tmpText;
126
+ if (!tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL)) {
127
+ break;
128
+ }
129
+ if (this.textBetweenTagsBelongsToDescription) {
130
+ if (!savepoint) {
131
+ tokens.pushSavePoint();
132
+ savepoint = true;
133
+ }
134
+ else if (tmpText !== '') {
135
+ tokens.dropSavePoint();
136
+ tokens.pushSavePoint();
137
+ }
138
+ }
139
+ tokens.pushSavePoint();
140
+ tokens.next();
141
+ if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_PHPDOC_TAG, ...endTokens)) {
142
+ tokens.rollback();
143
+ break;
144
+ }
145
+ tokens.dropSavePoint();
146
+ text += (_a = tokens.getDetectedNewline()) !== null && _a !== void 0 ? _a : '\n';
147
+ }
148
+ if (savepoint) {
149
+ tokens.rollback();
150
+ text = text.replace(new RegExp(`[${(_b = tokens.getDetectedNewline()) !== null && _b !== void 0 ? _b : '\n'}]+$`, 'g'), '');
151
+ }
152
+ return new php_doc_text_node_1.PhpDocTextNode(text.trim());
153
+ }
154
+ parseTag(tokens) {
155
+ const tag = tokens.currentTokenValue();
156
+ tokens.next();
157
+ const value = this.parseTagValue(tokens, tag);
158
+ return new php_doc_tag_node_1.PhpDocTagNode(tag, value);
159
+ }
160
+ parseTagValue(tokens, tag) {
161
+ const startLine = tokens.currentTokenLine();
162
+ const startIndex = tokens.currentTokenIndex();
163
+ let tagValue;
164
+ try {
165
+ tokens.pushSavePoint();
166
+ switch (tag) {
167
+ case '@param':
168
+ case '@phpstan-param':
169
+ case '@psalm-param':
170
+ tagValue = this.parseParamTagValue(tokens);
171
+ break;
172
+ case '@var':
173
+ case '@phpstan-var':
174
+ case '@psalm-var':
175
+ tagValue = this.parseVarTagValue(tokens);
176
+ break;
177
+ case '@return':
178
+ case '@phpstan-return':
179
+ case '@psalm-return':
180
+ tagValue = this.parseReturnTagValue(tokens);
181
+ break;
182
+ case '@throws':
183
+ case '@phpstan-throws':
184
+ tagValue = this.parseThrowsTagValue(tokens);
185
+ break;
186
+ case '@mixin':
187
+ tagValue = this.parseMixinTagValue(tokens);
188
+ break;
189
+ case '@deprecated':
190
+ tagValue = this.parseDeprecatedTagValue(tokens);
191
+ break;
192
+ case '@property':
193
+ case '@property-read':
194
+ case '@property-write':
195
+ case '@phpstan-property':
196
+ case '@phpstan-property-read':
197
+ case '@phpstan-property-write':
198
+ case '@psalm-property':
199
+ case '@psalm-property-read':
200
+ case '@psalm-property-write':
201
+ tagValue = this.parsePropertyTagValue(tokens);
202
+ break;
203
+ case '@method':
204
+ case '@phpstan-method':
205
+ case '@psalm-method':
206
+ tagValue = this.parseMethodTagValue(tokens);
207
+ break;
208
+ case '@template':
209
+ case '@phpstan-template':
210
+ case '@psalm-template':
211
+ case '@template-covariant':
212
+ case '@phpstan-template-covariant':
213
+ case '@psalm-template-covariant':
214
+ case '@template-contravariant':
215
+ case '@phpstan-template-contravariant':
216
+ case '@psalm-template-contravariant':
217
+ tagValue = this.parseTemplateTagValue(tokens, true);
218
+ break;
219
+ case '@extends':
220
+ case '@phpstan-extends':
221
+ case '@template-extends':
222
+ tagValue = this.parseExtendsTagValue('@extends', tokens);
223
+ break;
224
+ case '@implements':
225
+ case '@phpstan-implements':
226
+ case '@template-implements':
227
+ tagValue = this.parseExtendsTagValue('@implements', tokens);
228
+ break;
229
+ case '@use':
230
+ case '@phpstan-use':
231
+ case '@template-use':
232
+ tagValue = this.parseExtendsTagValue('@use', tokens);
233
+ break;
234
+ case '@phpstan-type':
235
+ case '@psalm-type':
236
+ tagValue = this.parseTypeAliasTagValue(tokens);
237
+ break;
238
+ case '@phpstan-import-type':
239
+ case '@psalm-import-type':
240
+ tagValue = this.parseTypeAliasImportTagValue(tokens);
241
+ break;
242
+ case '@phpstan-assert':
243
+ case '@phpstan-assert-if-true':
244
+ case '@phpstan-assert-if-false':
245
+ case '@psalm-assert':
246
+ case '@psalm-assert-if-true':
247
+ case '@psalm-assert-if-false':
248
+ tagValue = this.parseAssertTagValue(tokens);
249
+ break;
250
+ case '@phpstan-this-out':
251
+ case '@phpstan-self-out':
252
+ case '@psalm-this-out':
253
+ case '@psalm-self-out':
254
+ tagValue = this.parseSelfOutTagValue(tokens);
255
+ break;
256
+ case '@param-out':
257
+ case '@phpstan-param-out':
258
+ case '@psalm-param-out':
259
+ tagValue = this.parseParamOutTagValue(tokens);
260
+ break;
261
+ default:
262
+ tagValue = new generic_tag_value_node_1.GenericTagValueNode(this.parseOptionalDescription(tokens));
263
+ break;
264
+ }
265
+ tokens.dropSavePoint();
266
+ }
267
+ catch (e) {
268
+ tokens.rollback();
269
+ return new invalid_tag_value_node_1.InvalidTagValueNode(this.parseOptionalDescription(tokens), e);
270
+ }
271
+ return this.enrichWithAttributes(tokens, tagValue, startLine, startIndex);
272
+ }
273
+ parseParamTagValue(tokens) {
274
+ let type = null;
275
+ if (!tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_REFERENCE, lexer_1.Lexer.TOKEN_VARIADIC, lexer_1.Lexer.TOKEN_VARIABLE)) {
276
+ type = this.typeParser.parse(tokens);
277
+ }
278
+ const isReference = tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_REFERENCE);
279
+ const isVariadic = tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_VARIADIC);
280
+ const name = this.parseRequiredVariableName(tokens);
281
+ const description = this.parseOptionalDescription(tokens);
282
+ if (type !== null) {
283
+ return new param_tag_value_node_1.ParamTagValueNode(type, isVariadic, name, description, isReference);
284
+ }
285
+ return new typeless_param_tag_value_node_1.TypelessParamTagValueNode(isVariadic, name, description, isReference);
286
+ }
287
+ parseVarTagValue(tokens) {
288
+ const type = this.typeParser.parse(tokens);
289
+ const name = this.parseOptionalVariableName(tokens);
290
+ const description = this.parseOptionalDescription(tokens, name === '');
291
+ return new var_tag_value_node_1.VarTagValueNode(type, name, description);
292
+ }
293
+ parseReturnTagValue(tokens) {
294
+ const type = this.typeParser.parse(tokens);
295
+ const description = this.parseOptionalDescription(tokens, true);
296
+ return new return_tag_value_node_1.ReturnTagValueNode(type, description);
297
+ }
298
+ parseThrowsTagValue(tokens) {
299
+ const type = this.typeParser.parse(tokens);
300
+ const description = this.parseOptionalDescription(tokens, true);
301
+ return new throws_tag_value_node_1.ThrowsTagValueNode(type, description);
302
+ }
303
+ parseMixinTagValue(tokens) {
304
+ const type = this.typeParser.parse(tokens);
305
+ const description = this.parseOptionalDescription(tokens, true);
306
+ return new mixin_tag_value_node_1.MixinTagValueNode(type, description);
307
+ }
308
+ parseDeprecatedTagValue(tokens) {
309
+ const description = this.parseOptionalDescription(tokens);
310
+ return new deprecated_tag_value_node_1.DeprecatedTagValueNode(description);
311
+ }
312
+ parsePropertyTagValue(tokens) {
313
+ const type = this.typeParser.parse(tokens);
314
+ const name = this.parseRequiredVariableName(tokens);
315
+ const description = this.parseOptionalDescription(tokens);
316
+ return new property_tag_value_node_1.PropertyTagValueNode(type, name, description);
317
+ }
318
+ parseMethodTagValue(tokens) {
319
+ let isStatic = tokens.tryConsumeTokenValue('static');
320
+ let startLine = tokens.currentTokenLine();
321
+ let startIndex = tokens.currentTokenIndex();
322
+ const returnTypeOrName = this.typeParser.parse(tokens);
323
+ let returnType;
324
+ let name;
325
+ if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_IDENTIFIER)) {
326
+ returnType = returnTypeOrName;
327
+ name = tokens.currentTokenValue();
328
+ tokens.next();
329
+ }
330
+ else if (returnTypeOrName instanceof identifier_type_node_1.IdentifierTypeNode) {
331
+ returnType = isStatic
332
+ ? this.typeParser.enrichWithAttributes(tokens, new identifier_type_node_1.IdentifierTypeNode('static'), startLine, startIndex)
333
+ : null;
334
+ name = returnTypeOrName.name;
335
+ isStatic = false;
336
+ }
337
+ else {
338
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_IDENTIFIER);
339
+ }
340
+ const templateTypes = [];
341
+ if (tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_OPEN_ANGLE_BRACKET)) {
342
+ do {
343
+ startLine = tokens.currentTokenLine();
344
+ startIndex = tokens.currentTokenIndex();
345
+ const templateType = this.parseTemplateTagValue(tokens, false);
346
+ templateTypes.push(this.enrichWithAttributes(tokens, templateType, startLine, startIndex));
347
+ } while (tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_COMMA));
348
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_CLOSE_ANGLE_BRACKET);
349
+ }
350
+ const parameters = [];
351
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_OPEN_PARENTHESES);
352
+ if (!tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_CLOSE_PARENTHESES)) {
353
+ const parameter = this.parseMethodTagValueParameter(tokens);
354
+ parameters.push(parameter);
355
+ while (tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_COMMA)) {
356
+ parameters.push(this.parseMethodTagValueParameter(tokens));
357
+ }
358
+ }
359
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_CLOSE_PARENTHESES);
360
+ const description = this.parseOptionalDescription(tokens);
361
+ return new method_tag_value_node_1.MethodTagValueNode(isStatic, returnType, name, parameters, description, templateTypes);
362
+ }
363
+ parseMethodTagValueParameter(tokens) {
364
+ const startLine = tokens.currentTokenLine();
365
+ const startIndex = tokens.currentTokenIndex();
366
+ let type = null;
367
+ switch (tokens.currentTokenType()) {
368
+ case lexer_1.Lexer.TOKEN_IDENTIFIER:
369
+ case lexer_1.Lexer.TOKEN_OPEN_PARENTHESES:
370
+ case lexer_1.Lexer.TOKEN_NULLABLE:
371
+ type = this.typeParser.parse(tokens);
372
+ break;
373
+ default:
374
+ type = null;
375
+ }
376
+ const isReference = tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_REFERENCE);
377
+ const isVariadic = tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_VARIADIC);
378
+ const name = tokens.currentTokenValue();
379
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_VARIABLE);
380
+ let defaultValue = null;
381
+ if (tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_EQUAL)) {
382
+ defaultValue = this.constantExprParser.parse(tokens);
383
+ }
384
+ return this.enrichWithAttributes(tokens, new method_tag_value_parameter_node_1.MethodTagValueParameterNode(type, isReference, isVariadic, name, defaultValue), startLine, startIndex);
385
+ }
386
+ parseTemplateTagValue(tokens, parseDescription) {
387
+ const name = tokens.currentTokenValue();
388
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_IDENTIFIER);
389
+ let bound = null;
390
+ if (tokens.tryConsumeTokenValue('of') ||
391
+ tokens.tryConsumeTokenValue('as')) {
392
+ bound = this.typeParser.parse(tokens);
393
+ }
394
+ let defaultValue = null;
395
+ if (tokens.tryConsumeTokenValue('=')) {
396
+ defaultValue = this.typeParser.parse(tokens);
397
+ }
398
+ let description = '';
399
+ if (parseDescription) {
400
+ description = this.parseOptionalDescription(tokens);
401
+ }
402
+ return new template_tag_value_node_1.TemplateTagValueNode(name, bound, description, defaultValue);
403
+ }
404
+ parseExtendsTagValue(tagName, tokens) {
405
+ const startLine = tokens.currentTokenLine();
406
+ const startIndex = tokens.currentTokenIndex();
407
+ const baseType = new identifier_type_node_1.IdentifierTypeNode(tokens.currentTokenValue());
408
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_IDENTIFIER);
409
+ const type = this.typeParser.parseGeneric(tokens, this.enrichWithAttributes(tokens, baseType, startLine, startIndex));
410
+ const description = this.parseOptionalDescription(tokens);
411
+ switch (tagName) {
412
+ case '@extends':
413
+ return new extends_tag_value_node_1.ExtendsTagValueNode(type, description);
414
+ case '@implements':
415
+ return new implements_tag_value_node_1.ImplementsTagValueNode(type, description);
416
+ case '@use':
417
+ return new uses_tag_value_node_1.UsesTagValueNode(type, description);
418
+ default:
419
+ throw new Error('Should not happen');
420
+ }
421
+ }
422
+ parseTypeAliasTagValue(tokens) {
423
+ const alias = tokens.currentTokenValue();
424
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_IDENTIFIER);
425
+ tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_EQUAL);
426
+ if (this.preserveTypeAliasesWithInvalidTypes) {
427
+ const startLine = tokens.currentTokenLine();
428
+ const startIndex = tokens.currentTokenIndex();
429
+ try {
430
+ const type = this.typeParser.parse(tokens);
431
+ if (!tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_CLOSE_PHPDOC)) {
432
+ if (!tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL)) {
433
+ throw new Error('Expected end of line');
434
+ }
435
+ }
436
+ return new type_alias_tag_value_node_1.TypeAliasTagValueNode(alias, type);
437
+ }
438
+ catch (e) {
439
+ this.parseOptionalDescription(tokens);
440
+ return new type_alias_tag_value_node_1.TypeAliasTagValueNode(alias, this.enrichWithAttributes(tokens, new invalid_type_node_1.InvalidTypeNode(e), startLine, startIndex));
441
+ }
442
+ }
443
+ const type = this.typeParser.parse(tokens);
444
+ return new type_alias_tag_value_node_1.TypeAliasTagValueNode(alias, type);
445
+ }
446
+ parseTypeAliasImportTagValue(tokens) {
447
+ const importedAlias = tokens.currentTokenValue();
448
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_IDENTIFIER);
449
+ tokens.consumeTokenValue(lexer_1.Lexer.TOKEN_IDENTIFIER, 'from');
450
+ const identifierStartLine = tokens.currentTokenLine();
451
+ const identifierStartIndex = tokens.currentTokenIndex();
452
+ const importedFrom = tokens.currentTokenValue();
453
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_IDENTIFIER);
454
+ const importedFromType = this.enrichWithAttributes(tokens, new identifier_type_node_1.IdentifierTypeNode(importedFrom), identifierStartLine, identifierStartIndex);
455
+ let importedAs = null;
456
+ if (tokens.tryConsumeTokenValue('as')) {
457
+ importedAs = tokens.currentTokenValue();
458
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_IDENTIFIER);
459
+ }
460
+ return new type_alias_import_tag_value_node_1.TypeAliasImportTagValueNode(importedAlias, importedFromType, importedAs);
461
+ }
462
+ parseAssertTagValue(tokens) {
463
+ const isNegated = tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_NEGATED);
464
+ const isEquality = tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_EQUAL);
465
+ const type = this.typeParser.parse(tokens);
466
+ const parameter = this.parseAssertParameter(tokens);
467
+ const description = this.parseOptionalDescription(tokens);
468
+ if (parameter.method) {
469
+ return new assert_tag_method_value_node_1.AssertTagMethodValueNode(type, parameter.parameter, parameter.method, isNegated, description, isEquality);
470
+ }
471
+ if (parameter.property) {
472
+ return new assert_tag_property_value_node_1.AssertTagPropertyValueNode(type, parameter.parameter, parameter.property, isNegated, description, isEquality);
473
+ }
474
+ return new assert_tag_value_node_1.AssertTagValueNode(type, parameter.parameter, isNegated, description, isEquality);
475
+ }
476
+ parseAssertParameter(tokens) {
477
+ let parameter;
478
+ let requirePropertyOrMethod;
479
+ if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_THIS_VARIABLE)) {
480
+ parameter = '$this';
481
+ requirePropertyOrMethod = true;
482
+ tokens.next();
483
+ }
484
+ else {
485
+ parameter = tokens.currentTokenValue();
486
+ requirePropertyOrMethod = false;
487
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_VARIABLE);
488
+ }
489
+ if (requirePropertyOrMethod ||
490
+ tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_ARROW)) {
491
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_ARROW);
492
+ const name = tokens.currentTokenValue();
493
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_IDENTIFIER);
494
+ if (tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_OPEN_PARENTHESES)) {
495
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_CLOSE_PARENTHESES);
496
+ return {
497
+ parameter,
498
+ method: name,
499
+ };
500
+ }
501
+ return {
502
+ parameter,
503
+ property: name,
504
+ };
505
+ }
506
+ return { parameter };
507
+ }
508
+ parseSelfOutTagValue(tokens) {
509
+ const type = this.typeParser.parse(tokens);
510
+ const description = this.parseOptionalDescription(tokens);
511
+ return new self_out_tag_value_node_1.SelfOutTagValueNode(type, description);
512
+ }
513
+ parseParamOutTagValue(tokens) {
514
+ const type = this.typeParser.parse(tokens);
515
+ const name = this.parseRequiredVariableName(tokens);
516
+ const description = this.parseOptionalDescription(tokens);
517
+ return new param_out_tag_value_node_1.ParamOutTagValueNode(type, name, description);
518
+ }
519
+ parseOptionalVariableName(tokens) {
520
+ if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_VARIABLE)) {
521
+ const name = tokens.currentTokenValue();
522
+ tokens.next();
523
+ return name;
524
+ }
525
+ if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_THIS_VARIABLE)) {
526
+ const name = '$this';
527
+ tokens.next();
528
+ return name;
529
+ }
530
+ return '';
531
+ }
532
+ parseRequiredVariableName(tokens) {
533
+ const name = tokens.currentTokenValue();
534
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_VARIABLE);
535
+ return name;
536
+ }
537
+ parseOptionalDescription(tokens, limitStartToken = false) {
538
+ if (limitStartToken) {
539
+ for (const token of DISALLOWED_DESCRIPTION_START_TOKENS) {
540
+ if (!tokens.isCurrentTokenType(token)) {
541
+ continue;
542
+ }
543
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_OTHER);
544
+ }
545
+ if (this.requireWhitespaceBeforeDescription &&
546
+ !tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL, lexer_1.Lexer.TOKEN_CLOSE_PHPDOC, lexer_1.Lexer.TOKEN_END) &&
547
+ !tokens.isPrecededByHorizontalWhitespace()) {
548
+ tokens.consumeTokenType(lexer_1.Lexer.TOKEN_HORIZONTAL_WS);
549
+ }
550
+ }
551
+ return this.parseText(tokens).text;
552
+ }
553
+ }
554
+ exports.PhpDocParser = PhpDocParser;
555
+ PhpDocParser.DISALLOWED_DESCRIPTION_START_TOKENS = [
556
+ lexer_1.Lexer.TOKEN_UNION,
557
+ lexer_1.Lexer.TOKEN_INTERSECTION,
558
+ ];
@@ -0,0 +1,6 @@
1
+ export declare class StringUnescaper {
2
+ private static readonly REPLACEMENTS;
3
+ static unescapeString(input: string): string;
4
+ private static parseEscapeSequences;
5
+ getType(): string;
6
+ }