1<?php declare(strict_types=1); 2 3namespace PhpParser; 4 5interface Node { 6 /** 7 * Gets the type of the node. 8 * 9 * @psalm-return non-empty-string 10 * @return string Type of the node 11 */ 12 public function getType(): string; 13 14 /** 15 * Gets the names of the sub nodes. 16 * 17 * @return string[] Names of sub nodes 18 */ 19 public function getSubNodeNames(): array; 20 21 /** 22 * Gets line the node started in (alias of getStartLine). 23 * 24 * @return int Start line (or -1 if not available) 25 * @phpstan-return -1|positive-int 26 * 27 * @deprecated Use getStartLine() instead 28 */ 29 public function getLine(): int; 30 31 /** 32 * Gets line the node started in. 33 * 34 * Requires the 'startLine' attribute to be enabled in the lexer (enabled by default). 35 * 36 * @return int Start line (or -1 if not available) 37 * @phpstan-return -1|positive-int 38 */ 39 public function getStartLine(): int; 40 41 /** 42 * Gets the line the node ended in. 43 * 44 * Requires the 'endLine' attribute to be enabled in the lexer (enabled by default). 45 * 46 * @return int End line (or -1 if not available) 47 * @phpstan-return -1|positive-int 48 */ 49 public function getEndLine(): int; 50 51 /** 52 * Gets the token offset of the first token that is part of this node. 53 * 54 * The offset is an index into the array returned by Lexer::getTokens(). 55 * 56 * Requires the 'startTokenPos' attribute to be enabled in the lexer (DISABLED by default). 57 * 58 * @return int Token start position (or -1 if not available) 59 */ 60 public function getStartTokenPos(): int; 61 62 /** 63 * Gets the token offset of the last token that is part of this node. 64 * 65 * The offset is an index into the array returned by Lexer::getTokens(). 66 * 67 * Requires the 'endTokenPos' attribute to be enabled in the lexer (DISABLED by default). 68 * 69 * @return int Token end position (or -1 if not available) 70 */ 71 public function getEndTokenPos(): int; 72 73 /** 74 * Gets the file offset of the first character that is part of this node. 75 * 76 * Requires the 'startFilePos' attribute to be enabled in the lexer (DISABLED by default). 77 * 78 * @return int File start position (or -1 if not available) 79 */ 80 public function getStartFilePos(): int; 81 82 /** 83 * Gets the file offset of the last character that is part of this node. 84 * 85 * Requires the 'endFilePos' attribute to be enabled in the lexer (DISABLED by default). 86 * 87 * @return int File end position (or -1 if not available) 88 */ 89 public function getEndFilePos(): int; 90 91 /** 92 * Gets all comments directly preceding this node. 93 * 94 * The comments are also available through the "comments" attribute. 95 * 96 * @return Comment[] 97 */ 98 public function getComments(): array; 99 100 /** 101 * Gets the doc comment of the node. 102 * 103 * @return null|Comment\Doc Doc comment object or null 104 */ 105 public function getDocComment(): ?Comment\Doc; 106 107 /** 108 * Sets the doc comment of the node. 109 * 110 * This will either replace an existing doc comment or add it to the comments array. 111 * 112 * @param Comment\Doc $docComment Doc comment to set 113 */ 114 public function setDocComment(Comment\Doc $docComment): void; 115 116 /** 117 * Sets an attribute on a node. 118 * 119 * @param mixed $value 120 */ 121 public function setAttribute(string $key, $value): void; 122 123 /** 124 * Returns whether an attribute exists. 125 */ 126 public function hasAttribute(string $key): bool; 127 128 /** 129 * Returns the value of an attribute. 130 * 131 * @param mixed $default 132 * 133 * @return mixed 134 */ 135 public function getAttribute(string $key, $default = null); 136 137 /** 138 * Returns all the attributes of this node. 139 * 140 * @return array<string, mixed> 141 */ 142 public function getAttributes(): array; 143 144 /** 145 * Replaces all the attributes of this node. 146 * 147 * @param array<string, mixed> $attributes 148 */ 149 public function setAttributes(array $attributes): void; 150} 151