8000 Merge pull request #3317 from mrshllstock/excerpt-tokens · psy-repos-typescript/rushstack@ccb4470 · GitHub
[go: up one dir, main page]

Skip to content

Commit ccb4470

Browse files
authored
Merge pull request microsoft#3317 from mrshllstock/excerpt-tokens
[API-Extractor] Potential fix for off-by-one separator index bug.
2 parents da9d490 + ec6fe03 commit ccb4470

File tree

6 files changed

+39
-12
lines changed

6 files changed

+39
-12
lines changed

apps/api-extractor/src/generators/ExcerptBuilder.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ interface IBuildSpanState {
5454
* setting this flag. After the new token is added, this flag is cleared.
5555
*/
5656
disableMergingForNextToken: boolean;
57+
58+
/**
59+
* Tracks whether the last appended token was a separator. If so, and we're in the middle of
60+
* capturing a token range, then omit the separator from the range.
61+
*/
62+
lastAppendedTokenIsSeparator: boolean;
5763
}
5864

5965
export class ExcerptBuilder {
@@ -113,7 +119,8 @@ export class ExcerptBuilder {
113119
startingNode: span.node,
114120
stopBeforeChildKind,
115121
tokenRangesByNode,
116-
disableMergingForNextToken: false
122+
disableMergingForNextToken: false,
123+
lastAppendedTokenIsSeparator: false
117124
});
118125
}
119126

@@ -158,12 +165,13 @@ export class ExcerptBuilder {
158165
} else {
159166
ExcerptBuilder._appendToken(excerptTokens, ExcerptTokenKind.Content, span.prefix, state);
160167
}
168+
state.lastAppendedTokenIsSeparator = false;
161169
}
162170

163171
for (const child of span.children) {
164172
if (span.node === state.startingNode) {
165173
if (state.stopBeforeChildKind && child.kind === state.stopBeforeChildKind) {
166-
// We reached the a child whose kind is stopBeforeChildKind, so stop traversing
174+
// We reached a child whose kind is stopBeforeChildKind, so stop traversing
167175
return false;
168176
}
169177
}
@@ -175,17 +183,26 @@ export class ExcerptBuilder {
175183

176184
if (span.suffix) {
177185
ExcerptBuilder._appendToken(excerptTokens, ExcerptTokenKind.Content, span.suffix, state);
186+
state.lastAppendedTokenIsSeparator = false;
178187
}
179188
if (span.separator) {
180189
ExcerptBuilder._appendToken(excerptTokens, ExcerptTokenKind.Content, span.separator, state);
190+
state.lastAppendedTokenIsSeparator = true;
181191
}
182192

183193
// Are we building a excerpt? If so, set its range
184194
if (capturedTokenRange) {
185195
capturedTokenRange.startIndex = excerptStartIndex;
186196

187-
// We will assign capturedTokenRange.startIndex to be the index after the last token that was appended so far
188-
capturedTokenRange.endIndex = excerptTokens.length;
197+
// We will assign capturedTokenRange.startIndex to be the index after the last token
198+
// that was appended so far. However, if the last appended token was a separator,
199+
// then omit it from the range.
200+
let excerptEndIndex: number = excerptTokens.length;
201+
if (state.lastAppendedTokenIsSeparator) {
202+
excerptEndIndex--;
203+
}
204+
205+
capturedTokenRange.endIndex = excerptEndIndex;
189206

190207
state.disableMergingForNextToken = true;
191208
}

build-tests/api-documenter-test/etc/api-documenter-test.api.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,7 @@
797797
],
798798
"extendsTokenRange": {
799799
"startIndex": 1,
800-
"endIndex": 3
800+
"endIndex": 2
801801
},
802802
"implementsTokenRanges": [
803803
{
@@ -806,7 +806,7 @@
806806
},
807807
{
808808
"startIndex": 6,
809-
"endIndex": 8
809+
"endIndex": 7
810810
}
811811
]
812812
},
@@ -1378,7 +1378,7 @@
13781378
"extendsTokenRanges": [
13791379
{
13801380
"startIndex": 1,
1381-
"endIndex": 3
1381+
"endIndex": 2
13821382
}
13831383
]
13841384
},

build-tests/api-extractor-scenarios/etc/test-outputs/bundledPackages/api-extractor-scenarios.api.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@
310310
],
311311
"extendsTokenRange": {
312312
"startIndex": 1,
313-
"endIndex": 3
313+
"endIndex": 2
314314
},
315315
"implementsTokenRanges": []
316316
}

build-tests/api-extractor-scenarios/etc/test-outputs/exportImportedExternalDefault/api-extractor-scenarios.api.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@
193193
"members": [],
194194
"extendsTokenRange": {
195195
"startIndex": 1,
196-
"endIndex": 3
196+
"endIndex": 2
197197
},
198198
"implementsTokenRanges": []
199199
}

build-tests/api-extractor-scenarios/etc/test-outputs/importType/api-extractor-scenarios.api.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@
194194
"extendsTokenRanges": [
195195
{
196196
"startIndex": 1,
197-
"endIndex": 3
197+
"endIndex": 2
198198
}
199199
]
200200
},
@@ -223,7 +223,7 @@
223223
"extendsTokenRanges": [
224224
{
225225
"startIndex": 1,
226-
"endIndex": 3
226+
"endIndex": 2
227227
}
228228
]
229229
},
@@ -252,7 +252,7 @@
252252
"extendsTokenRanges": [
253253
{
254254
"startIndex": 1,
255-
"endIndex": 3
255+
"endIndex": 2
256256
}
257257
]
258258
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@microsoft/api-extractor",
5+
"comment": "Fix an issue where .api.json excerpt text included extra whitespace (GitHub #3316)",
6+
"type": "patch"
7+
}
8+
],
9+
"packageName": "@microsoft/api-extractor"
10+
}

0 commit comments

Comments
 (0)
0