Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit eb051e7

Browse files
committed
fix(type): union in generics
#342 #356
1 parent 09452b6 commit eb051e7

5 files changed

Lines changed: 32 additions & 5 deletions

File tree

src/Parser/ParamParser.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,13 @@ export default class ParamParser {
102102
typeText = typeText.replace(/^[(]/, '').replace(/[)]$/, '');
103103
result.types = typeText.split('|');
104104
} else if (typeText.includes('|')) {
105-
result.types = typeText.split('|');
105+
if (typeText.match(/<.*?\|.*?>/)) {
106+
// union in generics. e.g. `Array<string|number>`
107+
// hack: in this case, process this type in DocBuilder#_buildTypeDocLinkHTML
108+
result.types = [typeText];
109+
} else {
110+
result.types = typeText.split('|');
111+
}
106112
} else {
107113
result.types = [typeText];
108114
}

src/Publisher/Builder/DocBuilder.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -777,8 +777,10 @@ export default class DocBuilder {
777777
.replace(/<.*?>/g, (a)=> a.replace(/,/g, '\\Z'))
778778
.replace(/{.*?}/g, (a)=> a.replace(/,/g, '\\Z').replace(/:/g, '\\Y'));
779779
const innerTypes = inner.split(',').map((v) => {
780-
v = v.trim().replace(/\\Z/g, ',').replace(/\\Y/g, ':');
781-
return this._buildTypeDocLinkHTML(v);
780+
return v.split('|').map((vv) => {
781+
vv = vv.trim().replace(/\\Z/g, ',').replace(/\\Y/g, ':');
782+
return this._buildTypeDocLinkHTML(vv);
783+
}).join('|');
782784
});
783785

784786
const html = `${this._buildDocLinkHTML(mainType, mainType)}<${innerTypes.join(', ')}>`;

test/fixture/package/src/Type/Complex.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,11 @@ export default class TestTypeComplex {
2727
* @param {!(number|string)} p2 - this is p2.
2828
*/
2929
method4(p1, p2){}
30+
31+
// union in generics
32+
/**
33+
* this is method5.
34+
* @param {Promise<string|number, Error>} p1 - this is p1.
35+
*/
36+
method5(p1){}
3037
}

test/src/HTMLTest/CoverageTest/CoverageTest.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ describe('test coverage', ()=> {
99
it('has coverage summary', ()=> {
1010
assert(badge.includes('79%'));
1111
assert.includes(doc, '[data-ice="coverageBadge"]', './badge.svg', 'src');
12-
assert.includes(doc, '[data-ice="totalCoverageCount"]', '277/347');
12+
assert.includes(doc, '[data-ice="totalCoverageCount"]', '278/348');
1313
assert.equal(doc.find('[data-ice="file"] [data-ice="coverage"]').length, 119);
1414
});
1515

@@ -120,7 +120,7 @@ describe('test coverage', ()=> {
120120
test('file/src/TrailingComma/Definition.js.html', '100 %3/3');
121121
test('file/src/Type/Array.js.html', '100 %2/2');
122122
test('file/src/Type/Class.js.html#errorLines=1,9', '33 %1/3');
123-
test('file/src/Type/Complex.js.html#errorLines=1', '80 %4/5');
123+
test('file/src/Type/Complex.js.html#errorLines=1', '83 %5/6');
124124
test('file/src/Type/Default.js.html', '100 %2/2');
125125
test('file/src/Type/External.js.html', '100 %2/2');
126126
test('file/src/Type/Function.js.html', '100 %2/2');

test/src/HTMLTest/DocumentTest/TypeTest/ComplexTest.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,16 @@ describe('TestTypeComplex', ()=> {
5757
], 'href');
5858
});
5959
});
60+
61+
it('has complex union type in generics.', ()=>{
62+
findParent(doc, '[data-ice="summary"] [href$="#instance-method-method5"]', '[data-ice="target"]', (doc)=> {
63+
assert.includes(doc, null, 'method5(p1: Promise<string|number, Error>)');
64+
assert.multiIncludes(doc, '[data-ice="signature"] a', [
65+
'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise',
66+
'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String',
67+
'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number',
68+
'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error'
69+
], 'href');
70+
});
71+
});
6072
});

0 commit comments

Comments
 (0)