@rightcapital/phpdoc-parser 0.3.2 → 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 (157) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +3 -2
  3. package/dist/phpdoc-parser/ast/abstract-node-visitor.js +0 -1
  4. package/dist/phpdoc-parser/ast/base-node.js +0 -1
  5. package/dist/phpdoc-parser/ast/const-expr/const-expr-array-item-node.js +1 -2
  6. package/dist/phpdoc-parser/ast/const-expr/const-expr-array-node.js +0 -1
  7. package/dist/phpdoc-parser/ast/const-expr/const-expr-false-node.js +0 -1
  8. package/dist/phpdoc-parser/ast/const-expr/const-expr-float-node.js +0 -1
  9. package/dist/phpdoc-parser/ast/const-expr/const-expr-integer-node.js +0 -1
  10. package/dist/phpdoc-parser/ast/const-expr/const-expr-node.js +0 -1
  11. package/dist/phpdoc-parser/ast/const-expr/const-expr-null-node.js +0 -1
  12. package/dist/phpdoc-parser/ast/const-expr/const-expr-string-node.js +0 -1
  13. package/dist/phpdoc-parser/ast/const-expr/const-expr-true-node.js +0 -1
  14. package/dist/phpdoc-parser/ast/const-expr/const-fetch-node.js +0 -1
  15. package/dist/phpdoc-parser/ast/const-expr/quote-aware-const-expr-string-node.js +0 -1
  16. package/dist/phpdoc-parser/ast/node-traverser.js +18 -2
  17. package/dist/phpdoc-parser/ast/node-visitor/cloning-visitor.js +0 -1
  18. package/dist/phpdoc-parser/ast/node-visitor.js +0 -1
  19. package/dist/phpdoc-parser/ast/node.js +0 -1
  20. package/dist/phpdoc-parser/ast/php-doc/assert-tag-method-value-node.js +1 -2
  21. package/dist/phpdoc-parser/ast/php-doc/assert-tag-property-value-node.js +1 -2
  22. package/dist/phpdoc-parser/ast/php-doc/assert-tag-value-node.js +1 -2
  23. package/dist/phpdoc-parser/ast/php-doc/deprecated-tag-value-node.js +0 -1
  24. package/dist/phpdoc-parser/ast/php-doc/extends-tag-value-node.js +1 -2
  25. package/dist/phpdoc-parser/ast/php-doc/generic-tag-value-node.js +0 -1
  26. package/dist/phpdoc-parser/ast/php-doc/implements-tag-value-node.js +1 -2
  27. package/dist/phpdoc-parser/ast/php-doc/invalid-tag-value-node.js +0 -1
  28. package/dist/phpdoc-parser/ast/php-doc/method-tag-value-node.js +1 -2
  29. package/dist/phpdoc-parser/ast/php-doc/method-tag-value-parameter-node.js +4 -3
  30. package/dist/phpdoc-parser/ast/php-doc/mixin-tag-value-node.js +1 -2
  31. package/dist/phpdoc-parser/ast/php-doc/param-out-tag-value-node.js +1 -2
  32. package/dist/phpdoc-parser/ast/php-doc/param-tag-value-node.js +0 -1
  33. package/dist/phpdoc-parser/ast/php-doc/php-doc-child-node.js +0 -1
  34. package/dist/phpdoc-parser/ast/php-doc/php-doc-node.js +0 -1
  35. package/dist/phpdoc-parser/ast/php-doc/php-doc-tag-node.js +1 -2
  36. package/dist/phpdoc-parser/ast/php-doc/php-doc-tag-value-node.js +0 -1
  37. package/dist/phpdoc-parser/ast/php-doc/php-doc-text-node.js +0 -1
  38. package/dist/phpdoc-parser/ast/php-doc/property-tag-value-node.js +1 -2
  39. package/dist/phpdoc-parser/ast/php-doc/return-tag-value-node.js +1 -2
  40. package/dist/phpdoc-parser/ast/php-doc/self-out-tag-value-node.js +1 -2
  41. package/dist/phpdoc-parser/ast/php-doc/template-tag-value-node.js +4 -3
  42. package/dist/phpdoc-parser/ast/php-doc/throws-tag-value-node.js +1 -2
  43. package/dist/phpdoc-parser/ast/php-doc/type-alias-import-tag-value-node.js +2 -2
  44. package/dist/phpdoc-parser/ast/php-doc/type-alias-tag-value-node.js +1 -2
  45. package/dist/phpdoc-parser/ast/php-doc/typeless-param-tag-value-node.js +0 -1
  46. package/dist/phpdoc-parser/ast/php-doc/uses-tag-value-node.js +1 -2
  47. package/dist/phpdoc-parser/ast/php-doc/var-tag-value-node.js +1 -2
  48. package/dist/phpdoc-parser/ast/type/array-shape-item-node.js +0 -1
  49. package/dist/phpdoc-parser/ast/type/array-shape-node.js +0 -1
  50. package/dist/phpdoc-parser/ast/type/array-type-node.js +0 -1
  51. package/dist/phpdoc-parser/ast/type/callable-type-node.js +2 -3
  52. package/dist/phpdoc-parser/ast/type/callable-type-parameter-node.js +1 -2
  53. package/dist/phpdoc-parser/ast/type/conditional-type-for-parameter-node.js +1 -2
  54. package/dist/phpdoc-parser/ast/type/conditional-type-node.js +1 -2
  55. package/dist/phpdoc-parser/ast/type/const-type-node.js +0 -1
  56. package/dist/phpdoc-parser/ast/type/generic-type-node.js +2 -3
  57. package/dist/phpdoc-parser/ast/type/identifier-type-node.js +0 -1
  58. package/dist/phpdoc-parser/ast/type/intersection-type-node.js +0 -1
  59. package/dist/phpdoc-parser/ast/type/invalid-type-node.js +0 -1
  60. package/dist/phpdoc-parser/ast/type/nullable-type-node.js +1 -2
  61. package/dist/phpdoc-parser/ast/type/object-shape-item-node.js +1 -2
  62. package/dist/phpdoc-parser/ast/type/object-shape-node.js +0 -1
  63. package/dist/phpdoc-parser/ast/type/offset-access-type-node.js +2 -3
  64. package/dist/phpdoc-parser/ast/type/this-type-node.js +0 -1
  65. package/dist/phpdoc-parser/ast/type/type-node.js +0 -1
  66. package/dist/phpdoc-parser/ast/type/union-type-node.js +0 -1
  67. package/dist/phpdoc-parser/ast/types.js +0 -1
  68. package/dist/phpdoc-parser/lexer/lexer.js +0 -1
  69. package/dist/phpdoc-parser/parser/const-expr-parser.js +0 -1
  70. package/dist/phpdoc-parser/parser/node-collecting-visitor.js +0 -1
  71. package/dist/phpdoc-parser/parser/parser-exception.js +0 -1
  72. package/dist/phpdoc-parser/parser/php-doc-parser.d.ts +3 -1
  73. package/dist/phpdoc-parser/parser/php-doc-parser.js +72 -37
  74. package/dist/phpdoc-parser/parser/string-unescaper.js +0 -1
  75. package/dist/phpdoc-parser/parser/token-iterator.js +0 -1
  76. package/dist/phpdoc-parser/parser/type-parser.js +4 -5
  77. package/dist/phpdoc-parser/printer/diff-elem.d.ts +12 -0
  78. package/dist/phpdoc-parser/printer/diff-elem.js +19 -0
  79. package/dist/phpdoc-parser/printer/differ.d.ts +10 -0
  80. package/dist/phpdoc-parser/printer/differ.js +111 -0
  81. package/dist/phpdoc-parser/printer/printer.d.ts +20 -0
  82. package/dist/phpdoc-parser/printer/printer.js +612 -0
  83. package/package.json +11 -11
  84. package/dist/index.js.map +0 -1
  85. package/dist/phpdoc-parser/ast/abstract-node-visitor.js.map +0 -1
  86. package/dist/phpdoc-parser/ast/base-node.js.map +0 -1
  87. package/dist/phpdoc-parser/ast/const-expr/const-expr-array-item-node.js.map +0 -1
  88. package/dist/phpdoc-parser/ast/const-expr/const-expr-array-node.js.map +0 -1
  89. package/dist/phpdoc-parser/ast/const-expr/const-expr-false-node.js.map +0 -1
  90. package/dist/phpdoc-parser/ast/const-expr/const-expr-float-node.js.map +0 -1
  91. package/dist/phpdoc-parser/ast/const-expr/const-expr-integer-node.js.map +0 -1
  92. package/dist/phpdoc-parser/ast/const-expr/const-expr-node.js.map +0 -1
  93. package/dist/phpdoc-parser/ast/const-expr/const-expr-null-node.js.map +0 -1
  94. package/dist/phpdoc-parser/ast/const-expr/const-expr-string-node.js.map +0 -1
  95. package/dist/phpdoc-parser/ast/const-expr/const-expr-true-node.js.map +0 -1
  96. package/dist/phpdoc-parser/ast/const-expr/const-fetch-node.js.map +0 -1
  97. package/dist/phpdoc-parser/ast/const-expr/quote-aware-const-expr-string-node.js.map +0 -1
  98. package/dist/phpdoc-parser/ast/node-traverser.js.map +0 -1
  99. package/dist/phpdoc-parser/ast/node-visitor/cloning-visitor.js.map +0 -1
  100. package/dist/phpdoc-parser/ast/node-visitor.js.map +0 -1
  101. package/dist/phpdoc-parser/ast/node.js.map +0 -1
  102. package/dist/phpdoc-parser/ast/php-doc/assert-tag-method-value-node.js.map +0 -1
  103. package/dist/phpdoc-parser/ast/php-doc/assert-tag-property-value-node.js.map +0 -1
  104. package/dist/phpdoc-parser/ast/php-doc/assert-tag-value-node.js.map +0 -1
  105. package/dist/phpdoc-parser/ast/php-doc/deprecated-tag-value-node.js.map +0 -1
  106. package/dist/phpdoc-parser/ast/php-doc/extends-tag-value-node.js.map +0 -1
  107. package/dist/phpdoc-parser/ast/php-doc/generic-tag-value-node.js.map +0 -1
  108. package/dist/phpdoc-parser/ast/php-doc/implements-tag-value-node.js.map +0 -1
  109. package/dist/phpdoc-parser/ast/php-doc/invalid-tag-value-node.js.map +0 -1
  110. package/dist/phpdoc-parser/ast/php-doc/method-tag-value-node.js.map +0 -1
  111. package/dist/phpdoc-parser/ast/php-doc/method-tag-value-parameter-node.js.map +0 -1
  112. package/dist/phpdoc-parser/ast/php-doc/mixin-tag-value-node.js.map +0 -1
  113. package/dist/phpdoc-parser/ast/php-doc/param-out-tag-value-node.js.map +0 -1
  114. package/dist/phpdoc-parser/ast/php-doc/param-tag-value-node.js.map +0 -1
  115. package/dist/phpdoc-parser/ast/php-doc/php-doc-child-node.js.map +0 -1
  116. package/dist/phpdoc-parser/ast/php-doc/php-doc-node.js.map +0 -1
  117. package/dist/phpdoc-parser/ast/php-doc/php-doc-tag-node.js.map +0 -1
  118. package/dist/phpdoc-parser/ast/php-doc/php-doc-tag-value-node.js.map +0 -1
  119. package/dist/phpdoc-parser/ast/php-doc/php-doc-text-node.js.map +0 -1
  120. package/dist/phpdoc-parser/ast/php-doc/property-tag-value-node.js.map +0 -1
  121. package/dist/phpdoc-parser/ast/php-doc/return-tag-value-node.js.map +0 -1
  122. package/dist/phpdoc-parser/ast/php-doc/self-out-tag-value-node.js.map +0 -1
  123. package/dist/phpdoc-parser/ast/php-doc/template-tag-value-node.js.map +0 -1
  124. package/dist/phpdoc-parser/ast/php-doc/throws-tag-value-node.js.map +0 -1
  125. package/dist/phpdoc-parser/ast/php-doc/type-alias-import-tag-value-node.js.map +0 -1
  126. package/dist/phpdoc-parser/ast/php-doc/type-alias-tag-value-node.js.map +0 -1
  127. package/dist/phpdoc-parser/ast/php-doc/typeless-param-tag-value-node.js.map +0 -1
  128. package/dist/phpdoc-parser/ast/php-doc/uses-tag-value-node.js.map +0 -1
  129. package/dist/phpdoc-parser/ast/php-doc/var-tag-value-node.js.map +0 -1
  130. package/dist/phpdoc-parser/ast/type/array-shape-item-node.js.map +0 -1
  131. package/dist/phpdoc-parser/ast/type/array-shape-node.js.map +0 -1
  132. package/dist/phpdoc-parser/ast/type/array-type-node.js.map +0 -1
  133. package/dist/phpdoc-parser/ast/type/callable-type-node.js.map +0 -1
  134. package/dist/phpdoc-parser/ast/type/callable-type-parameter-node.js.map +0 -1
  135. package/dist/phpdoc-parser/ast/type/conditional-type-for-parameter-node.js.map +0 -1
  136. package/dist/phpdoc-parser/ast/type/conditional-type-node.js.map +0 -1
  137. package/dist/phpdoc-parser/ast/type/const-type-node.js.map +0 -1
  138. package/dist/phpdoc-parser/ast/type/generic-type-node.js.map +0 -1
  139. package/dist/phpdoc-parser/ast/type/identifier-type-node.js.map +0 -1
  140. package/dist/phpdoc-parser/ast/type/intersection-type-node.js.map +0 -1
  141. package/dist/phpdoc-parser/ast/type/invalid-type-node.js.map +0 -1
  142. package/dist/phpdoc-parser/ast/type/nullable-type-node.js.map +0 -1
  143. package/dist/phpdoc-parser/ast/type/object-shape-item-node.js.map +0 -1
  144. package/dist/phpdoc-parser/ast/type/object-shape-node.js.map +0 -1
  145. package/dist/phpdoc-parser/ast/type/offset-access-type-node.js.map +0 -1
  146. package/dist/phpdoc-parser/ast/type/this-type-node.js.map +0 -1
  147. package/dist/phpdoc-parser/ast/type/type-node.js.map +0 -1
  148. package/dist/phpdoc-parser/ast/type/union-type-node.js.map +0 -1
  149. package/dist/phpdoc-parser/ast/types.js.map +0 -1
  150. package/dist/phpdoc-parser/lexer/lexer.js.map +0 -1
  151. package/dist/phpdoc-parser/parser/const-expr-parser.js.map +0 -1
  152. package/dist/phpdoc-parser/parser/node-collecting-visitor.js.map +0 -1
  153. package/dist/phpdoc-parser/parser/parser-exception.js.map +0 -1
  154. package/dist/phpdoc-parser/parser/php-doc-parser.js.map +0 -1
  155. package/dist/phpdoc-parser/parser/string-unescaper.js.map +0 -1
  156. package/dist/phpdoc-parser/parser/token-iterator.js.map +0 -1
  157. package/dist/phpdoc-parser/parser/type-parser.js.map +0 -1
@@ -27,4 +27,3 @@ class InvalidTypeNode extends type_node_1.TypeNode {
27
27
  }
28
28
  }
29
29
  exports.InvalidTypeNode = InvalidTypeNode;
30
- //# sourceMappingURL=invalid-type-node.js.map
@@ -8,11 +8,10 @@ class NullableTypeNode extends type_node_1.TypeNode {
8
8
  this.type = type;
9
9
  }
10
10
  toString() {
11
- return `?${this.type}`;
11
+ return `?${this.type.toString()}`;
12
12
  }
13
13
  getNodeType() {
14
14
  return 'NullableTypeNode';
15
15
  }
16
16
  }
17
17
  exports.NullableTypeNode = NullableTypeNode;
18
- //# sourceMappingURL=nullable-type-node.js.map
@@ -11,7 +11,7 @@ class ObjectShapeItemNode extends type_node_1.TypeNode {
11
11
  }
12
12
  toString() {
13
13
  if (this.keyName !== null) {
14
- return `${this.keyName}${this.optional ? '?' : ''}: ${this.valueType}`;
14
+ return `${this.keyName.toString()}${this.optional ? '?' : ''}: ${this.valueType.toString()}`;
15
15
  }
16
16
  return this.valueType.toString();
17
17
  }
@@ -20,4 +20,3 @@ class ObjectShapeItemNode extends type_node_1.TypeNode {
20
20
  }
21
21
  }
22
22
  exports.ObjectShapeItemNode = ObjectShapeItemNode;
23
- //# sourceMappingURL=object-shape-item-node.js.map
@@ -15,4 +15,3 @@ class ObjectShapeNode extends type_node_1.TypeNode {
15
15
  }
16
16
  }
17
17
  exports.ObjectShapeNode = ObjectShapeNode;
18
- //# sourceMappingURL=object-shape-node.js.map
@@ -15,13 +15,12 @@ class OffsetAccessTypeNode extends type_node_1.TypeNode {
15
15
  if (this.type instanceof callable_type_node_1.CallableTypeNode ||
16
16
  this.type instanceof const_type_node_1.ConstTypeNode ||
17
17
  this.type instanceof nullable_type_node_1.NullableTypeNode) {
18
- return `(${this.type})[${this.offset}]`;
18
+ return `(${this.type.toString()})[${this.offset.toString()}]`;
19
19
  }
20
- return `${this.type}[${this.offset}]`;
20
+ return `${this.type.toString()}[${this.offset.toString()}]`;
21
21
  }
22
22
  getNodeType() {
23
23
  return 'OffsetAccessTypeNode';
24
24
  }
25
25
  }
26
26
  exports.OffsetAccessTypeNode = OffsetAccessTypeNode;
27
- //# sourceMappingURL=offset-access-type-node.js.map
@@ -11,4 +11,3 @@ class ThisTypeNode extends type_node_1.TypeNode {
11
11
  }
12
12
  }
13
13
  exports.ThisTypeNode = ThisTypeNode;
14
- //# sourceMappingURL=this-type-node.js.map
@@ -62,4 +62,3 @@ class TypeNode extends base_node_1.BaseNode {
62
62
  }
63
63
  }
64
64
  exports.TypeNode = TypeNode;
65
- //# sourceMappingURL=type-node.js.map
@@ -23,4 +23,3 @@ class UnionTypeNode extends type_node_1.TypeNode {
23
23
  }
24
24
  }
25
25
  exports.UnionTypeNode = UnionTypeNode;
26
- //# sourceMappingURL=union-type-node.js.map
@@ -16,4 +16,3 @@ var Attribute;
16
16
  Attribute["END_INDEX"] = "endIndex";
17
17
  Attribute["ORIGINAL_NODE"] = "originalNode";
18
18
  })(Attribute || (exports.Attribute = Attribute = {}));
19
- //# sourceMappingURL=types.js.map
@@ -141,4 +141,3 @@ Lexer.TOKEN_LABELS = {
141
141
  Lexer.VALUE_OFFSET = 0;
142
142
  Lexer.TYPE_OFFSET = 1;
143
143
  Lexer.LINE_OFFSET = 2;
144
- //# sourceMappingURL=lexer.js.map
@@ -144,4 +144,3 @@ class ConstExprParser {
144
144
  }
145
145
  }
146
146
  exports.ConstExprParser = ConstExprParser;
147
- //# sourceMappingURL=const-expr-parser.js.map
@@ -13,4 +13,3 @@ class NodeCollectingVisitor extends abstract_node_visitor_1.AbstractNodeVisitor
13
13
  }
14
14
  }
15
15
  exports.NodeCollectingVisitor = NodeCollectingVisitor;
16
- //# sourceMappingURL=node-collecting-visitor.js.map
@@ -42,4 +42,3 @@ class ParserException extends Error {
42
42
  }
43
43
  }
44
44
  exports.ParserException = ParserException;
45
- //# sourceMappingURL=parser-exception.js.map
@@ -10,12 +10,14 @@ export declare class PhpDocParser {
10
10
  requireWhitespaceBeforeDescription: boolean;
11
11
  preserveTypeAliasesWithInvalidTypes: boolean;
12
12
  parseDoctrineAnnotations: boolean;
13
+ private textBetweenTagsBelongsToDescription;
13
14
  private useLinesAttributes;
14
15
  private useIndexAttributes;
16
+ private static readonly DISALLOWED_DESCRIPTION_START_TOKENS;
15
17
  constructor(typeParser: TypeParser, constantExprParser: ConstExprParser, requireWhitespaceBeforeDescription?: boolean, preserveTypeAliasesWithInvalidTypes?: boolean, usedAttributes?: {
16
18
  lines: boolean;
17
19
  indexes: boolean;
18
- }, parseDoctrineAnnotations?: boolean);
20
+ }, parseDoctrineAnnotations?: boolean, textBetweenTagsBelongsToDescription?: boolean);
19
21
  parse(tokens: TokenIterator): PhpDocNode;
20
22
  private parseChild;
21
23
  private enrichWithAttributes;
@@ -39,13 +39,14 @@ class PhpDocParser {
39
39
  constructor(typeParser, constantExprParser, requireWhitespaceBeforeDescription = false, preserveTypeAliasesWithInvalidTypes = false, usedAttributes = {
40
40
  lines: false,
41
41
  indexes: false,
42
- }, parseDoctrineAnnotations = false) {
42
+ }, parseDoctrineAnnotations = false, textBetweenTagsBelongsToDescription = false) {
43
43
  var _a, _b;
44
44
  this.typeParser = typeParser;
45
45
  this.constantExprParser = constantExprParser;
46
46
  this.requireWhitespaceBeforeDescription = requireWhitespaceBeforeDescription;
47
47
  this.preserveTypeAliasesWithInvalidTypes = preserveTypeAliasesWithInvalidTypes;
48
48
  this.parseDoctrineAnnotations = parseDoctrineAnnotations;
49
+ this.textBetweenTagsBelongsToDescription = textBetweenTagsBelongsToDescription;
49
50
  this.useLinesAttributes = (_a = usedAttributes.lines) !== null && _a !== void 0 ? _a : false;
50
51
  this.useIndexAttributes = (_b = usedAttributes.indexes) !== null && _b !== void 0 ? _b : false;
51
52
  }
@@ -54,38 +55,45 @@ class PhpDocParser {
54
55
  tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL);
55
56
  const children = [];
56
57
  if (!tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_CLOSE_PHPDOC)) {
57
- let lastChild = this.parseChild(tokens);
58
- children.push(lastChild);
59
- while (!tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_CLOSE_PHPDOC)) {
60
- if (lastChild instanceof php_doc_tag_node_1.PhpDocTagNode &&
61
- lastChild.value instanceof generic_tag_value_node_1.GenericTagValueNode) {
62
- tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL);
63
- if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_CLOSE_PHPDOC)) {
64
- break;
65
- }
66
- lastChild = this.parseChild(tokens);
67
- children.push(lastChild);
68
- continue;
69
- }
70
- if (!tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL)) {
71
- break;
72
- }
73
- if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_CLOSE_PHPDOC)) {
74
- break;
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();
75
77
  }
76
- lastChild = this.parseChild(tokens);
77
- children.push(lastChild);
78
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);
79
84
  }
80
- tokens.consumeTokenType(lexer_1.Lexer.TOKEN_CLOSE_PHPDOC);
81
- return new php_doc_node_1.PhpDocNode(children);
85
+ return this.enrichWithAttributes(tokens, new php_doc_node_1.PhpDocNode(children), 1, 0);
82
86
  }
83
87
  parseChild(tokens) {
84
88
  if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_PHPDOC_TAG)) {
85
- return this.parseTag(tokens);
89
+ const startLine = tokens.currentTokenLine();
90
+ const startIndex = tokens.currentTokenIndex();
91
+ return this.enrichWithAttributes(tokens, this.parseTag(tokens), startLine, startIndex);
86
92
  }
93
+ const startLine = tokens.currentTokenLine();
94
+ const startIndex = tokens.currentTokenIndex();
87
95
  const text = this.parseText(tokens);
88
- return text;
96
+ return this.enrichWithAttributes(tokens, text, startLine, startIndex);
89
97
  }
90
98
  enrichWithAttributes(tokens, node, startLine, startIndex) {
91
99
  if (this.useLinesAttributes) {
@@ -99,23 +107,48 @@ class PhpDocParser {
99
107
  return node;
100
108
  }
101
109
  parseText(tokens) {
102
- var _a;
110
+ var _a, _b;
103
111
  let text = '';
104
- while (!tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL)) {
105
- text += tokens.getSkippedHorizontalWhiteSpaceIfAny();
106
- text += tokens.joinUntil(lexer_1.Lexer.TOKEN_PHPDOC_EOL, lexer_1.Lexer.TOKEN_CLOSE_PHPDOC, lexer_1.Lexer.TOKEN_END);
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;
107
126
  if (!tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL)) {
108
127
  break;
109
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
+ }
110
139
  tokens.pushSavePoint();
111
140
  tokens.next();
112
- if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_PHPDOC_TAG, lexer_1.Lexer.TOKEN_PHPDOC_EOL, lexer_1.Lexer.TOKEN_CLOSE_PHPDOC, lexer_1.Lexer.TOKEN_END)) {
141
+ if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_PHPDOC_TAG, ...endTokens)) {
113
142
  tokens.rollback();
114
143
  break;
115
144
  }
116
145
  tokens.dropSavePoint();
117
146
  text += (_a = tokens.getDetectedNewline()) !== null && _a !== void 0 ? _a : '\n';
118
147
  }
148
+ if (savepoint) {
149
+ tokens.rollback();
150
+ text = text.replace(new RegExp(`[${(_b = tokens.getDetectedNewline()) !== null && _b !== void 0 ? _b : '\n'}]+$`, 'g'), '');
151
+ }
119
152
  return new php_doc_text_node_1.PhpDocTextNode(text.trim());
120
153
  }
121
154
  parseTag(tokens) {
@@ -284,8 +317,8 @@ class PhpDocParser {
284
317
  }
285
318
  parseMethodTagValue(tokens) {
286
319
  let isStatic = tokens.tryConsumeTokenValue('static');
287
- const startLine = tokens.currentTokenLine();
288
- const startIndex = tokens.currentTokenIndex();
320
+ let startLine = tokens.currentTokenLine();
321
+ let startIndex = tokens.currentTokenIndex();
289
322
  const returnTypeOrName = this.typeParser.parse(tokens);
290
323
  let returnType;
291
324
  let name;
@@ -307,8 +340,8 @@ class PhpDocParser {
307
340
  const templateTypes = [];
308
341
  if (tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_OPEN_ANGLE_BRACKET)) {
309
342
  do {
310
- const startLine = tokens.currentTokenLine();
311
- const startIndex = tokens.currentTokenIndex();
343
+ startLine = tokens.currentTokenLine();
344
+ startIndex = tokens.currentTokenIndex();
312
345
  const templateType = this.parseTemplateTagValue(tokens, false);
313
346
  templateTypes.push(this.enrichWithAttributes(tokens, templateType, startLine, startIndex));
314
347
  } while (tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_COMMA));
@@ -320,8 +353,7 @@ class PhpDocParser {
320
353
  const parameter = this.parseMethodTagValueParameter(tokens);
321
354
  parameters.push(parameter);
322
355
  while (tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_COMMA)) {
323
- const parameter = this.parseMethodTagValueParameter(tokens);
324
- parameters.push(parameter);
356
+ parameters.push(this.parseMethodTagValueParameter(tokens));
325
357
  }
326
358
  }
327
359
  tokens.consumeTokenType(lexer_1.Lexer.TOKEN_CLOSE_PARENTHESES);
@@ -520,4 +552,7 @@ class PhpDocParser {
520
552
  }
521
553
  }
522
554
  exports.PhpDocParser = PhpDocParser;
523
- //# sourceMappingURL=php-doc-parser.js.map
555
+ PhpDocParser.DISALLOWED_DESCRIPTION_START_TOKENS = [
556
+ lexer_1.Lexer.TOKEN_UNION,
557
+ lexer_1.Lexer.TOKEN_INTERSECTION,
558
+ ];
@@ -39,4 +39,3 @@ StringUnescaper.REPLACEMENTS = {
39
39
  v: '\v',
40
40
  e: '\x1B',
41
41
  };
42
- //# sourceMappingURL=string-unescaper.js.map
@@ -213,4 +213,3 @@ class TokenIterator {
213
213
  }
214
214
  }
215
215
  exports.TokenIterator = TokenIterator;
216
- //# sourceMappingURL=token-iterator.js.map
@@ -262,9 +262,9 @@ class TypeParser {
262
262
  if (tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_CLOSE_ANGLE_BRACKET)) {
263
263
  break;
264
264
  }
265
- const [genericType, variance] = this.parseGenericTypeArgument(tokens);
266
- genericTypes.push(genericType);
267
- variances.push(variance);
265
+ const [genericTypeToAddInWhileLoop, varianceToAddInWhileLoop] = this.parseGenericTypeArgument(tokens);
266
+ genericTypes.push(genericTypeToAddInWhileLoop);
267
+ variances.push(varianceToAddInWhileLoop);
268
268
  tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL);
269
269
  }
270
270
  tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_PHPDOC_EOL);
@@ -350,7 +350,7 @@ class TypeParser {
350
350
  return type;
351
351
  }
352
352
  if (tokens.tryConsumeTokenType(lexer_1.Lexer.TOKEN_THIS_VARIABLE)) {
353
- let type = new this_type_node_1.ThisTypeNode();
353
+ type = new this_type_node_1.ThisTypeNode();
354
354
  if (tokens.isCurrentTokenType(lexer_1.Lexer.TOKEN_OPEN_SQUARE_BRACKET)) {
355
355
  type = this.tryParseArrayOrOffsetAccess(tokens, this.enrichWithAttributes(tokens, type, startLine, startIndex));
356
356
  }
@@ -574,4 +574,3 @@ class TypeParser {
574
574
  }
575
575
  }
576
576
  exports.TypeParser = TypeParser;
577
- //# sourceMappingURL=type-parser.js.map
@@ -0,0 +1,12 @@
1
+ export declare class DiffElem<EleType> {
2
+ type: DiffElemType;
3
+ old: EleType;
4
+ new: EleType;
5
+ constructor(type: DiffElemType, oldEle: EleType, newEle: EleType);
6
+ }
7
+ export declare enum DiffElemType {
8
+ KEEP = 1,
9
+ REMOVE = 2,
10
+ ADD = 3,
11
+ REPLACE = 4
12
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DiffElemType = exports.DiffElem = void 0;
4
+ class DiffElem {
5
+ constructor(type, oldEle, newEle) {
6
+ this.type = type;
7
+ this.type = type;
8
+ this.old = oldEle;
9
+ this.new = newEle;
10
+ }
11
+ }
12
+ exports.DiffElem = DiffElem;
13
+ var DiffElemType;
14
+ (function (DiffElemType) {
15
+ DiffElemType[DiffElemType["KEEP"] = 1] = "KEEP";
16
+ DiffElemType[DiffElemType["REMOVE"] = 2] = "REMOVE";
17
+ DiffElemType[DiffElemType["ADD"] = 3] = "ADD";
18
+ DiffElemType[DiffElemType["REPLACE"] = 4] = "REPLACE";
19
+ })(DiffElemType || (exports.DiffElemType = DiffElemType = {}));
@@ -0,0 +1,10 @@
1
+ import { DiffElem } from './diff-elem';
2
+ export declare class Differ<T> {
3
+ private isEqual;
4
+ constructor(isEqual: (a: T, b: T) => boolean);
5
+ diff(old: T[], newElements: T[]): DiffElem<T>[];
6
+ diffWithReplacements(old: T[], newElements: T[]): DiffElem<T>[];
7
+ private calculateTrace;
8
+ private extractDiff;
9
+ private coalesceReplacements;
10
+ }
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Differ = void 0;
4
+ const diff_elem_1 = require("./diff-elem");
5
+ class Differ {
6
+ constructor(isEqual) {
7
+ this.isEqual = isEqual;
8
+ }
9
+ diff(old, newElements) {
10
+ const [trace, x, y] = this.calculateTrace(old, newElements);
11
+ return this.extractDiff(trace, x, y, old, newElements);
12
+ }
13
+ diffWithReplacements(old, newElements) {
14
+ return this.coalesceReplacements(this.diff(old, newElements));
15
+ }
16
+ calculateTrace(old, newElements) {
17
+ const n = old.length;
18
+ const m = newElements.length;
19
+ const max = n + m;
20
+ const v = { 1: 0 };
21
+ const trace = [];
22
+ for (let d = 0; d <= max; d++) {
23
+ trace.push(Object.assign({}, v));
24
+ for (let k = -d; k <= d; k += 2) {
25
+ let x;
26
+ if (k === -d || (k !== d && v[k - 1] < v[k + 1])) {
27
+ x = v[k + 1];
28
+ }
29
+ else {
30
+ x = v[k - 1] + 1;
31
+ }
32
+ let y = x - k;
33
+ while (x < n && y < m && this.isEqual(old[x], newElements[y])) {
34
+ x++;
35
+ y++;
36
+ }
37
+ v[k] = x;
38
+ if (x >= n && y >= m) {
39
+ return [trace, x, y];
40
+ }
41
+ }
42
+ }
43
+ throw new Error('Should not happen');
44
+ }
45
+ extractDiff(trace, x, y, old, newElements) {
46
+ const result = [];
47
+ for (let d = trace.length - 1; d >= 0; d--) {
48
+ const v = trace[d];
49
+ const k = x - y;
50
+ let prevK;
51
+ if (k === -d || (k !== d && v[k - 1] < v[k + 1])) {
52
+ prevK = k + 1;
53
+ }
54
+ else {
55
+ prevK = k - 1;
56
+ }
57
+ const prevX = v[prevK];
58
+ const prevY = prevX - prevK;
59
+ while (x > prevX && y > prevY) {
60
+ result.push(new diff_elem_1.DiffElem(diff_elem_1.DiffElemType.KEEP, old[x - 1], newElements[y - 1]));
61
+ x--;
62
+ y--;
63
+ }
64
+ if (d === 0) {
65
+ break;
66
+ }
67
+ while (x > prevX) {
68
+ result.push(new diff_elem_1.DiffElem(diff_elem_1.DiffElemType.REMOVE, old[x - 1], null));
69
+ x--;
70
+ }
71
+ while (y > prevY) {
72
+ result.push(new diff_elem_1.DiffElem(diff_elem_1.DiffElemType.ADD, null, newElements[y - 1]));
73
+ y--;
74
+ }
75
+ }
76
+ return result.reverse();
77
+ }
78
+ coalesceReplacements(diff) {
79
+ const newDiff = [];
80
+ const c = diff.length;
81
+ for (let i = 0; i < c; i++) {
82
+ const diffType = diff[i].type;
83
+ if (diffType !== diff_elem_1.DiffElemType.REMOVE) {
84
+ newDiff.push(diff[i]);
85
+ continue;
86
+ }
87
+ let j = i;
88
+ while (j < c && diff[j].type === diff_elem_1.DiffElemType.REMOVE) {
89
+ j++;
90
+ }
91
+ let k = j;
92
+ while (k < c && diff[k].type === diff_elem_1.DiffElemType.ADD) {
93
+ k++;
94
+ }
95
+ if (j - i === k - j) {
96
+ const len = j - i;
97
+ for (let n = 0; n < len; n++) {
98
+ newDiff.push(new diff_elem_1.DiffElem(diff_elem_1.DiffElemType.REPLACE, diff[i + n].old, diff[j + n].new));
99
+ }
100
+ }
101
+ else {
102
+ for (; i < k; i++) {
103
+ newDiff.push(diff[i]);
104
+ }
105
+ }
106
+ i = k - 1;
107
+ }
108
+ return newDiff;
109
+ }
110
+ }
111
+ exports.Differ = Differ;
@@ -0,0 +1,20 @@
1
+ import { BaseNode } from '../ast/base-node';
2
+ import { PhpDocNode } from '../ast/php-doc/php-doc-node';
3
+ import { TokenIterator } from '../parser/token-iterator';
4
+ export declare class Printer {
5
+ private differ;
6
+ private listInsertionMap;
7
+ private emptyListInsertionMap;
8
+ private parenthesesMap;
9
+ private parenthesesListMap;
10
+ printFormatPreserving(node: PhpDocNode, originalNode: PhpDocNode, originalTokens: TokenIterator): string;
11
+ print(node: BaseNode): string;
12
+ private printTagValue;
13
+ private printType;
14
+ private wrapInParentheses;
15
+ private printOffsetAccessType;
16
+ private printConstExpr;
17
+ private printArrayFormatPreserving;
18
+ private isMultiline;
19
+ private printNodeFormatPreserving;
20
+ }