Skip to content

Commit 3c32478

Browse files
committed
Support other (new) literal types in jsdoc
1 parent 4c35296 commit 3c32478

File tree

9 files changed

+63
-47
lines changed

9 files changed

+63
-47
lines changed

src/compiler/checker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5529,8 +5529,8 @@ namespace ts {
55295529
return getTypeFromThisTypeNode(node);
55305530
case SyntaxKind.LiteralType:
55315531
return getTypeFromLiteralTypeNode(<LiteralTypeNode>node);
5532-
case SyntaxKind.JSDocStringLiteralType:
5533-
return getTypeFromStringLiteralTypeNode((<JSDocStringLiteralType>node).stringLiteral);
5532+
case SyntaxKind.JSDocLiteralType:
5533+
return getTypeFromLiteralTypeNode((<JSDocLiteralType>node).literal);
55345534
case SyntaxKind.TypeReference:
55355535
case SyntaxKind.JSDocTypeReference:
55365536
return getTypeFromTypeReference(<TypeReferenceNode>node);

src/compiler/parser.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,8 @@ namespace ts {
417417
case SyntaxKind.JSDocPropertyTag:
418418
return visitNode(cbNode, (<JSDocPropertyTag>node).typeExpression) ||
419419
visitNode(cbNode, (<JSDocPropertyTag>node).name);
420+
case SyntaxKind.JSDocLiteralType:
421+
return visitNode(cbNode, (<JSDocLiteralType>node).literal);
420422
}
421423
}
422424

@@ -5890,7 +5892,10 @@ namespace ts {
58905892
case SyntaxKind.VoidKeyword:
58915893
return parseTokenNode<JSDocType>();
58925894
case SyntaxKind.StringLiteral:
5893-
return parseJSDocStringLiteralType();
5895+
case SyntaxKind.NumericLiteral:
5896+
case SyntaxKind.TrueKeyword:
5897+
case SyntaxKind.FalseKeyword:
5898+
return parseJSDocLiteralType();
58945899
}
58955900

58965901
return parseJSDocTypeReference();
@@ -6071,9 +6076,9 @@ namespace ts {
60716076
return finishNode(result);
60726077
}
60736078

6074-
function parseJSDocStringLiteralType(): JSDocStringLiteralType {
6075-
const result = <JSDocStringLiteralType>createNode(SyntaxKind.JSDocStringLiteralType);
6076-
result.stringLiteral = parseStringLiteralTypeNode();
6079+
function parseJSDocLiteralType(): JSDocLiteralType {
6080+
const result = <JSDocLiteralType>createNode(SyntaxKind.JSDocLiteralType);
6081+
result.literal = parseLiteralTypeNode();
60776082
return finishNode(result);
60786083
}
60796084

src/compiler/types.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ namespace ts {
346346
JSDocTypedefTag,
347347
JSDocPropertyTag,
348348
JSDocTypeLiteral,
349-
JSDocStringLiteralType,
349+
JSDocLiteralType,
350350

351351
// Synthesized list
352352
SyntaxList,
@@ -377,9 +377,9 @@ namespace ts {
377377
LastBinaryOperator = CaretEqualsToken,
378378
FirstNode = QualifiedName,
379379
FirstJSDocNode = JSDocTypeExpression,
380-
LastJSDocNode = JSDocStringLiteralType,
380+
LastJSDocNode = JSDocLiteralType,
381381
FirstJSDocTagNode = JSDocComment,
382-
LastJSDocTagNode = JSDocStringLiteralType
382+
LastJSDocTagNode = JSDocLiteralType
383383
}
384384

385385
export const enum NodeFlags {
@@ -1493,8 +1493,8 @@ namespace ts {
14931493
type: JSDocType;
14941494
}
14951495

1496-
export interface JSDocStringLiteralType extends JSDocType {
1497-
stringLiteral: StringLiteralTypeNode;
1496+
export interface JSDocLiteralType extends JSDocType {
1497+
literal: LiteralTypeNode;
14981498
}
14991499

15001500
export type JSDocTypeReferencingNode = JSDocThisType | JSDocConstructorType | JSDocVariadicType | JSDocOptionalType | JSDocNullableType | JSDocNonNullableType;

tests/baselines/reference/jsdocStringLiteral.js renamed to tests/baselines/reference/jsdocLiteral.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
* @param {"literal"} p2
55
* @param {'literal' | 'other'} p3
66
* @param {'literal' | number} p4
7+
* @param {12 | true | 'str'} p5
78
*/
8-
function f(p1, p2, p3, p4) {
9-
return p1 + p2 + p3 + p4 + '.';
9+
function f(p1, p2, p3, p4, p5) {
10+
return p1 + p2 + p3 + p4 + p5 + '.';
1011
}
1112

1213

@@ -16,7 +17,8 @@ function f(p1, p2, p3, p4) {
1617
* @param {"literal"} p2
1718
* @param {'literal' | 'other'} p3
1819
* @param {'literal' | number} p4
20+
* @param {12 | true | 'str'} p5
1921
*/
20-
function f(p1, p2, p3, p4) {
21-
return p1 + p2 + p3 + p4 + '.';
22+
function f(p1, p2, p3, p4, p5) {
23+
return p1 + p2 + p3 + p4 + p5 + '.';
2224
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
=== tests/cases/conformance/jsdoc/in.js ===
2+
/**
3+
* @param {'literal'} p1
4+
* @param {"literal"} p2
5+
* @param {'literal' | 'other'} p3
6+
* @param {'literal' | number} p4
7+
* @param {12 | true | 'str'} p5
8+
*/
9+
function f(p1, p2, p3, p4, p5) {
10+
>f : Symbol(f, Decl(in.js, 0, 0))
11+
>p1 : Symbol(p1, Decl(in.js, 7, 11))
12+
>p2 : Symbol(p2, Decl(in.js, 7, 14))
13+
>p3 : Symbol(p3, Decl(in.js, 7, 18))
14+
>p4 : Symbol(p4, Decl(in.js, 7, 22))
15+
>p5 : Symbol(p5, Decl(in.js, 7, 26))
16+
17+
return p1 + p2 + p3 + p4 + p5 + '.';
18+
>p1 : Symbol(p1, Decl(in.js, 7, 11))
19+
>p2 : Symbol(p2, Decl(in.js, 7, 14))
20+
>p3 : Symbol(p3, Decl(in.js, 7, 18))
21+
>p4 : Symbol(p4, Decl(in.js, 7, 22))
22+
>p5 : Symbol(p5, Decl(in.js, 7, 26))
23+
}
24+

tests/baselines/reference/jsdocStringLiteral.types renamed to tests/baselines/reference/jsdocLiteral.types

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,27 @@
44
* @param {"literal"} p2
55
* @param {'literal' | 'other'} p3
66
* @param {'literal' | number} p4
7+
* @param {12 | true | 'str'} p5
78
*/
8-
function f(p1, p2, p3, p4) {
9-
>f : (p1: "literal", p2: "literal", p3: "literal" | "other", p4: "literal" | number) => string
9+
function f(p1, p2, p3, p4, p5) {
10+
>f : (p1: "literal", p2: "literal", p3: "literal" | "other", p4: number | "literal", p5: true | 12 | "str") => string
1011
>p1 : "literal"
1112
>p2 : "literal"
1213
>p3 : "literal" | "other"
13-
>p4 : "literal" | number
14+
>p4 : number | "literal"
15+
>p5 : true | 12 | "str"
1416

15-
return p1 + p2 + p3 + p4 + '.';
16-
>p1 + p2 + p3 + p4 + '.' : string
17+
return p1 + p2 + p3 + p4 + p5 + '.';
18+
>p1 + p2 + p3 + p4 + p5 + '.' : string
19+
>p1 + p2 + p3 + p4 + p5 : string
1720
>p1 + p2 + p3 + p4 : string
1821
>p1 + p2 + p3 : string
1922
>p1 + p2 : string
2023
>p1 : "literal"
2124
>p2 : "literal"
2225
>p3 : "literal" | "other"
23-
>p4 : "literal" | number
26+
>p4 : number | "literal"
27+
>p5 : true | 12 | "str"
2428
>'.' : string
2529
}
2630

tests/baselines/reference/jsdocStringLiteral.symbols

Lines changed: 0 additions & 21 deletions
This file was deleted.

tests/cases/conformance/jsdoc/jsdocStringLiteral.ts renamed to tests/cases/conformance/jsdoc/jsdocLiteral.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
* @param {"literal"} p2
77
* @param {'literal' | 'other'} p3
88
* @param {'literal' | number} p4
9+
* @param {12 | true | 'str'} p5
910
*/
10-
function f(p1, p2, p3, p4) {
11-
return p1 + p2 + p3 + p4 + '.';
11+
function f(p1, p2, p3, p4, p5) {
12+
return p1 + p2 + p3 + p4 + p5 + '.';
1213
}

tests/cases/fourslash/completionForStringLiteral4.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@
66
//// * @param {"literal"} p2
77
//// * @param {'other1' | 'other2'} p3
88
//// * @param {'literal' | number} p4
9+
//// * @param {12 | true} p5
910
//// */
10-
////function f(p1, p2, p3, p4) {
11-
//// return p1 + p2 + p3 + p4 + '.';
11+
////function f(p1, p2, p3, p4, p5) {
12+
//// return p1 + p2 + p3 + p4 + p5 + '.';
1213
////}
1314
////f/*1*/('literal', 'literal', "o/*2*/ther1", 12);
1415

1516
goTo.marker('1');
1617
verify.quickInfoExists();
17-
verify.quickInfoIs('function f(p1: "literal", p2: "literal", p3: "other1" | "other2", p4: "literal" | number): string', 'I am documentation');
18+
verify.quickInfoIs('function f(p1: "literal", p2: "literal", p3: "other1" | "other2", p4: number | "literal", p5: true | 12): string', 'I am documentation');
1819

1920
goTo.marker('2');
2021
verify.completionListContains("other1");

0 commit comments

Comments
 (0)