Skip to content

Commit dd1115c

Browse files
Handle intersection types
1 parent 38ac5ad commit dd1115c

File tree

4 files changed

+102
-24
lines changed

4 files changed

+102
-24
lines changed

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,22 @@ To:
205205
*/
206206
```
207207

208+
### Intersection types
209+
210+
```js
211+
/**
212+
* @type {A & B}
213+
*/
214+
```
215+
216+
To:
217+
218+
```js
219+
/**
220+
* @type {A | B}
221+
*/
222+
```
223+
208224
## Module id resolution
209225

210226
For resolving module ids, this plugin mirrors the method used by JSDoc:

index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,13 @@ exports.defineTags = function (dictionary) {
546546
case '\\':
547547
// Skip escaped character
548548
++i;
549+
break;
550+
case '&':
551+
// Intersection `&` to union `|`
552+
if (!isWithinString && openCurly >= 1) {
553+
replacements.push([i, i + 1, '|']);
554+
}
555+
549556
break;
550557
case '"':
551558
case "'":

test/dest/expected.json

Lines changed: 76 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -742,14 +742,66 @@
742742
"params": []
743743
},
744744
{
745-
"comment": "/**\n * {@link module:test/sub/NumberStore~NumberStore NumberStore}\n */",
745+
"comment": "/** @type {'&' | \"|\" & '?'} */",
746746
"meta": {
747747
"range": [
748748
1424,
749-
1456
749+
1462
750750
],
751751
"filename": "index.js",
752-
"lineno": 67,
752+
"lineno": 65,
753+
"columnno": 0,
754+
"code": {
755+
"name": "exports.unionIntersections",
756+
"type": "VariableDeclaration"
757+
}
758+
},
759+
"type": {
760+
"names": [
761+
"'&'",
762+
"\"|\"",
763+
"'?'"
764+
]
765+
},
766+
"name": "unionIntersections",
767+
"longname": "module:test.unionIntersections",
768+
"kind": "constant",
769+
"memberof": "module:test",
770+
"scope": "static"
771+
},
772+
{
773+
"comment": "",
774+
"meta": {
775+
"range": [
776+
1437,
777+
1461
778+
],
779+
"filename": "index.js",
780+
"lineno": 65,
781+
"columnno": 13,
782+
"code": {
783+
"name": "unionIntersections",
784+
"type": "Literal",
785+
"value": "&"
786+
}
787+
},
788+
"undocumented": true,
789+
"name": "unionIntersections",
790+
"longname": "module:test~unionIntersections",
791+
"kind": "constant",
792+
"scope": "inner",
793+
"memberof": "module:test",
794+
"params": []
795+
},
796+
{
797+
"comment": "/**\n * {@link module:test/sub/NumberStore~NumberStore NumberStore}\n */",
798+
"meta": {
799+
"range": [
800+
1495,
801+
1527
802+
],
803+
"filename": "index.js",
804+
"lineno": 70,
753805
"columnno": 0,
754806
"code": {
755807
"name": "exports.Link",
@@ -767,11 +819,11 @@
767819
"comment": "",
768820
"meta": {
769821
"range": [
770-
1437,
771-
1455
822+
1508,
823+
1526
772824
],
773825
"filename": "index.js",
774-
"lineno": 67,
826+
"lineno": 70,
775827
"columnno": 13,
776828
"code": {
777829
"name": "Link",
@@ -791,11 +843,11 @@
791843
"comment": "/**\n * {@link module:test/sub/NumberStore~NumberStore Num}\n */",
792844
"meta": {
793845
"range": [
794-
1493,
795-
1533
846+
1564,
847+
1604
796848
],
797849
"filename": "index.js",
798-
"lineno": 72,
850+
"lineno": 75,
799851
"columnno": 0,
800852
"code": {
801853
"name": "exports.LinkWithText",
@@ -813,11 +865,11 @@
813865
"comment": "",
814866
"meta": {
815867
"range": [
816-
1506,
817-
1532
868+
1577,
869+
1603
818870
],
819871
"filename": "index.js",
820-
"lineno": 72,
872+
"lineno": 75,
821873
"columnno": 13,
822874
"code": {
823875
"name": "LinkWithText",
@@ -837,11 +889,11 @@
837889
"comment": "/**\n * {@link module:test/sub/NumberStore~NumberStore NumberStore.getNumber}\n */",
838890
"meta": {
839891
"range": [
840-
1576,
841-
1626
892+
1647,
893+
1697
842894
],
843895
"filename": "index.js",
844-
"lineno": 77,
896+
"lineno": 80,
845897
"columnno": 0,
846898
"code": {
847899
"name": "exports.LinkWithMemberAccessor",
@@ -859,11 +911,11 @@
859911
"comment": "",
860912
"meta": {
861913
"range": [
862-
1589,
863-
1625
914+
1660,
915+
1696
864916
],
865917
"filename": "index.js",
866-
"lineno": 77,
918+
"lineno": 80,
867919
"columnno": 13,
868920
"code": {
869921
"name": "LinkWithMemberAccessor",
@@ -883,11 +935,11 @@
883935
"comment": "/**\n * {@link module:test/sub/NumberStore~NumberStore Num}\n */",
884936
"meta": {
885937
"range": [
886-
1673,
887-
1730
938+
1744,
939+
1801
888940
],
889941
"filename": "index.js",
890-
"lineno": 82,
942+
"lineno": 85,
891943
"columnno": 0,
892944
"code": {
893945
"name": "exports.LinkWithMemberAccessorAndText",
@@ -905,11 +957,11 @@
905957
"comment": "",
906958
"meta": {
907959
"range": [
908-
1686,
909-
1729
960+
1757,
961+
1800
910962
],
911963
"filename": "index.js",
912-
"lineno": 82,
964+
"lineno": 85,
913965
"columnno": 13,
914966
"code": {
915967
"name": "LinkWithMemberAccessorAndText",

test/src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ export const bracketNotation = 1;
6161
/** @type {[number, [number, string], "[number, boolean]"]} */
6262
export const nesteedTuples = [1, [1, 'a'], '[number, boolean]'];
6363

64+
/** @type {'&' | "|" & '?'} */
65+
export const unionIntersections = '&';
66+
6467
/**
6568
* {@link NumberStore}
6669
*/

0 commit comments

Comments
 (0)