(node: ts.Node)
| 138 | } |
| 139 | |
| 140 | export function getNodeComments(node: ts.Node): NodeComments | undefined { |
| 141 | const leadingTriviaWidth = node.getLeadingTriviaWidth(); |
| 142 | if (leadingTriviaWidth === 0) { |
| 143 | return undefined; |
| 144 | } |
| 145 | const nodeStart = node.getFullStart(); |
| 146 | const sourceFileText = node.getSourceFile().text; |
| 147 | |
| 148 | const leadingTriva = sourceFileText.substring(nodeStart, nodeStart + leadingTriviaWidth); |
| 149 | const trimmedLeft = leadingTriva.trimStart(); |
| 150 | |
| 151 | const trimLeftShrunkSize = leadingTriva.length - trimmedLeft.length; |
| 152 | |
| 153 | let resolvedStart = nodeStart + trimLeftShrunkSize; |
| 154 | let resolvedWidth = leadingTriviaWidth - trimLeftShrunkSize; |
| 155 | |
| 156 | const trimmedRight = trimmedLeft.trimEnd(); |
| 157 | |
| 158 | const trimRightShrunkSize = trimmedLeft.length - trimmedRight.length; |
| 159 | resolvedWidth -= trimRightShrunkSize; |
| 160 | |
| 161 | if (!trimmedRight) { |
| 162 | return undefined; |
| 163 | } |
| 164 | |
| 165 | return { |
| 166 | text: trimmedRight, |
| 167 | start: resolvedStart, |
| 168 | end: resolvedStart + resolvedWidth, |
| 169 | }; |
| 170 | } |
| 171 | |
| 172 | export interface NodeToDump { |
| 173 | node: ts.Node; |
no test coverage detected