Merge branch 'master' into master-refactorJsDocTest
This commit is contained in:
commit
d7c33713e4
|
@ -6855,6 +6855,7 @@ namespace ts {
|
||||||
case "Object":
|
case "Object":
|
||||||
return anyType;
|
return anyType;
|
||||||
case "Function":
|
case "Function":
|
||||||
|
case "function":
|
||||||
return globalFunctionType;
|
return globalFunctionType;
|
||||||
case "Array":
|
case "Array":
|
||||||
case "array":
|
case "array":
|
||||||
|
|
|
@ -6075,7 +6075,10 @@ namespace ts {
|
||||||
case SyntaxKind.OpenBraceToken:
|
case SyntaxKind.OpenBraceToken:
|
||||||
return parseJSDocRecordType();
|
return parseJSDocRecordType();
|
||||||
case SyntaxKind.FunctionKeyword:
|
case SyntaxKind.FunctionKeyword:
|
||||||
return parseJSDocFunctionType();
|
if (lookAhead(nextTokenIsOpenParen)) {
|
||||||
|
return parseJSDocFunctionType();
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SyntaxKind.DotDotDotToken:
|
case SyntaxKind.DotDotDotToken:
|
||||||
return parseJSDocVariadicType();
|
return parseJSDocVariadicType();
|
||||||
case SyntaxKind.NewKeyword:
|
case SyntaxKind.NewKeyword:
|
||||||
|
@ -6091,7 +6094,6 @@ namespace ts {
|
||||||
case SyntaxKind.NullKeyword:
|
case SyntaxKind.NullKeyword:
|
||||||
case SyntaxKind.UndefinedKeyword:
|
case SyntaxKind.UndefinedKeyword:
|
||||||
case SyntaxKind.NeverKeyword:
|
case SyntaxKind.NeverKeyword:
|
||||||
case SyntaxKind.ObjectKeyword:
|
|
||||||
return parseTokenNode<JSDocType>();
|
return parseTokenNode<JSDocType>();
|
||||||
case SyntaxKind.StringLiteral:
|
case SyntaxKind.StringLiteral:
|
||||||
case SyntaxKind.NumericLiteral:
|
case SyntaxKind.NumericLiteral:
|
||||||
|
@ -6769,7 +6771,7 @@ namespace ts {
|
||||||
const jsDocTypeReference = <JSDocTypeReference>typeExpression.type;
|
const jsDocTypeReference = <JSDocTypeReference>typeExpression.type;
|
||||||
if (jsDocTypeReference.name.kind === SyntaxKind.Identifier) {
|
if (jsDocTypeReference.name.kind === SyntaxKind.Identifier) {
|
||||||
const name = <Identifier>jsDocTypeReference.name;
|
const name = <Identifier>jsDocTypeReference.name;
|
||||||
if (name.text === "Object") {
|
if (name.text === "Object" || name.text === "object") {
|
||||||
typedefTag.jsDocTypeLiteral = scanChildTags();
|
typedefTag.jsDocTypeLiteral = scanChildTags();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,10 @@ anyT1 = "hi";
|
||||||
const x = (a) => a + 1;
|
const x = (a) => a + 1;
|
||||||
x(1);
|
x(1);
|
||||||
|
|
||||||
|
/** @type {function} */
|
||||||
|
const y = (a) => a + 1;
|
||||||
|
x(1);
|
||||||
|
|
||||||
/** @type {function (number)} */
|
/** @type {function (number)} */
|
||||||
const x1 = (a) => a + 1;
|
const x1 = (a) => a + 1;
|
||||||
x1(0);
|
x1(0);
|
||||||
|
@ -41,6 +45,9 @@ anyT1 = "hi";
|
||||||
/** @type {Function} */
|
/** @type {Function} */
|
||||||
var x = function (a) { return a + 1; };
|
var x = function (a) { return a + 1; };
|
||||||
x(1);
|
x(1);
|
||||||
|
/** @type {function} */
|
||||||
|
var y = function (a) { return a + 1; };
|
||||||
|
x(1);
|
||||||
/** @type {function (number)} */
|
/** @type {function (number)} */
|
||||||
var x1 = function (a) { return a + 1; };
|
var x1 = function (a) { return a + 1; };
|
||||||
x1(0);
|
x1(0);
|
||||||
|
|
|
@ -44,6 +44,20 @@ x(1);
|
||||||
>x : Function
|
>x : Function
|
||||||
>1 : 1
|
>1 : 1
|
||||||
|
|
||||||
|
/** @type {function} */
|
||||||
|
const y = (a) => a + 1;
|
||||||
|
>y : Function
|
||||||
|
>(a) => a + 1 : (a: any) => any
|
||||||
|
>a : any
|
||||||
|
>a + 1 : any
|
||||||
|
>a : any
|
||||||
|
>1 : 1
|
||||||
|
|
||||||
|
x(1);
|
||||||
|
>x(1) : any
|
||||||
|
>x : Function
|
||||||
|
>1 : 1
|
||||||
|
|
||||||
/** @type {function (number)} */
|
/** @type {function (number)} */
|
||||||
const x1 = (a) => a + 1;
|
const x1 = (a) => a + 1;
|
||||||
>x1 : (arg0: number) => any
|
>x1 : (arg0: number) => any
|
||||||
|
|
|
@ -6,12 +6,29 @@
|
||||||
* @property {string=} y
|
* @property {string=} y
|
||||||
* @property {string} [z]
|
* @property {string} [z]
|
||||||
* @property {string} [w="hi"]
|
* @property {string} [w="hi"]
|
||||||
*
|
*
|
||||||
* @param {Opts} opts
|
* @param {Opts} opts
|
||||||
*/
|
*/
|
||||||
function foo(opts) {}
|
function foo(opts) {
|
||||||
|
opts.x;
|
||||||
|
}
|
||||||
|
|
||||||
foo({x: 'abc'});
|
foo({x: 'abc'});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {object} Opts1
|
||||||
|
* @property {string} x
|
||||||
|
* @property {string=} y
|
||||||
|
* @property {string} [z]
|
||||||
|
* @property {string} [w="hi"]
|
||||||
|
*
|
||||||
|
* @param {Opts1} opts
|
||||||
|
*/
|
||||||
|
function foo1(opts) {
|
||||||
|
opts.x;
|
||||||
|
}
|
||||||
|
foo1({x: 'abc'});
|
||||||
|
|
||||||
|
|
||||||
//// [0.js]
|
//// [0.js]
|
||||||
// @ts-check
|
// @ts-check
|
||||||
|
@ -24,5 +41,20 @@ foo({x: 'abc'});
|
||||||
*
|
*
|
||||||
* @param {Opts} opts
|
* @param {Opts} opts
|
||||||
*/
|
*/
|
||||||
function foo(opts) { }
|
function foo(opts) {
|
||||||
|
opts.x;
|
||||||
|
}
|
||||||
foo({ x: 'abc' });
|
foo({ x: 'abc' });
|
||||||
|
/**
|
||||||
|
* @typedef {object} Opts1
|
||||||
|
* @property {string} x
|
||||||
|
* @property {string=} y
|
||||||
|
* @property {string} [z]
|
||||||
|
* @property {string} [w="hi"]
|
||||||
|
*
|
||||||
|
* @param {Opts1} opts
|
||||||
|
*/
|
||||||
|
function foo1(opts) {
|
||||||
|
opts.x;
|
||||||
|
}
|
||||||
|
foo1({ x: 'abc' });
|
||||||
|
|
|
@ -6,14 +6,42 @@
|
||||||
* @property {string=} y
|
* @property {string=} y
|
||||||
* @property {string} [z]
|
* @property {string} [z]
|
||||||
* @property {string} [w="hi"]
|
* @property {string} [w="hi"]
|
||||||
*
|
*
|
||||||
* @param {Opts} opts
|
* @param {Opts} opts
|
||||||
*/
|
*/
|
||||||
function foo(opts) {}
|
function foo(opts) {
|
||||||
>foo : Symbol(foo, Decl(0.js, 0, 0))
|
>foo : Symbol(foo, Decl(0.js, 0, 0))
|
||||||
>opts : Symbol(opts, Decl(0.js, 10, 13))
|
>opts : Symbol(opts, Decl(0.js, 10, 13))
|
||||||
|
|
||||||
|
opts.x;
|
||||||
|
>opts.x : Symbol(x, Decl(0.js, 3, 3))
|
||||||
|
>opts : Symbol(opts, Decl(0.js, 10, 13))
|
||||||
|
>x : Symbol(x, Decl(0.js, 3, 3))
|
||||||
|
}
|
||||||
|
|
||||||
foo({x: 'abc'});
|
foo({x: 'abc'});
|
||||||
>foo : Symbol(foo, Decl(0.js, 0, 0))
|
>foo : Symbol(foo, Decl(0.js, 0, 0))
|
||||||
>x : Symbol(x, Decl(0.js, 12, 5))
|
>x : Symbol(x, Decl(0.js, 14, 5))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {object} Opts1
|
||||||
|
* @property {string} x
|
||||||
|
* @property {string=} y
|
||||||
|
* @property {string} [z]
|
||||||
|
* @property {string} [w="hi"]
|
||||||
|
*
|
||||||
|
* @param {Opts1} opts
|
||||||
|
*/
|
||||||
|
function foo1(opts) {
|
||||||
|
>foo1 : Symbol(foo1, Decl(0.js, 14, 16))
|
||||||
|
>opts : Symbol(opts, Decl(0.js, 25, 14))
|
||||||
|
|
||||||
|
opts.x;
|
||||||
|
>opts.x : Symbol(x, Decl(0.js, 18, 3))
|
||||||
|
>opts : Symbol(opts, Decl(0.js, 25, 14))
|
||||||
|
>x : Symbol(x, Decl(0.js, 18, 3))
|
||||||
|
}
|
||||||
|
foo1({x: 'abc'});
|
||||||
|
>foo1 : Symbol(foo1, Decl(0.js, 14, 16))
|
||||||
|
>x : Symbol(x, Decl(0.js, 28, 6))
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,19 @@
|
||||||
* @property {string=} y
|
* @property {string=} y
|
||||||
* @property {string} [z]
|
* @property {string} [z]
|
||||||
* @property {string} [w="hi"]
|
* @property {string} [w="hi"]
|
||||||
*
|
*
|
||||||
* @param {Opts} opts
|
* @param {Opts} opts
|
||||||
*/
|
*/
|
||||||
function foo(opts) {}
|
function foo(opts) {
|
||||||
>foo : (opts: { x: string; y?: string; z?: string; w?: string; }) => void
|
>foo : (opts: { x: string; y?: string; z?: string; w?: string; }) => void
|
||||||
>opts : { x: string; y?: string; z?: string; w?: string; }
|
>opts : { x: string; y?: string; z?: string; w?: string; }
|
||||||
|
|
||||||
|
opts.x;
|
||||||
|
>opts.x : string
|
||||||
|
>opts : { x: string; y?: string; z?: string; w?: string; }
|
||||||
|
>x : string
|
||||||
|
}
|
||||||
|
|
||||||
foo({x: 'abc'});
|
foo({x: 'abc'});
|
||||||
>foo({x: 'abc'}) : void
|
>foo({x: 'abc'}) : void
|
||||||
>foo : (opts: { x: string; y?: string; z?: string; w?: string; }) => void
|
>foo : (opts: { x: string; y?: string; z?: string; w?: string; }) => void
|
||||||
|
@ -20,3 +26,28 @@ foo({x: 'abc'});
|
||||||
>x : string
|
>x : string
|
||||||
>'abc' : "abc"
|
>'abc' : "abc"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {object} Opts1
|
||||||
|
* @property {string} x
|
||||||
|
* @property {string=} y
|
||||||
|
* @property {string} [z]
|
||||||
|
* @property {string} [w="hi"]
|
||||||
|
*
|
||||||
|
* @param {Opts1} opts
|
||||||
|
*/
|
||||||
|
function foo1(opts) {
|
||||||
|
>foo1 : (opts: { x: string; y?: string; z?: string; w?: string; }) => void
|
||||||
|
>opts : { x: string; y?: string; z?: string; w?: string; }
|
||||||
|
|
||||||
|
opts.x;
|
||||||
|
>opts.x : string
|
||||||
|
>opts : { x: string; y?: string; z?: string; w?: string; }
|
||||||
|
>x : string
|
||||||
|
}
|
||||||
|
foo1({x: 'abc'});
|
||||||
|
>foo1({x: 'abc'}) : void
|
||||||
|
>foo1 : (opts: { x: string; y?: string; z?: string; w?: string; }) => void
|
||||||
|
>{x: 'abc'} : { x: string; }
|
||||||
|
>x : string
|
||||||
|
>'abc' : "abc"
|
||||||
|
|
||||||
|
|
|
@ -431,28 +431,8 @@
|
||||||
"kind": "space"
|
"kind": "space"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"text": "(",
|
"text": "Function",
|
||||||
"kind": "punctuation"
|
"kind": "localName"
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": ")",
|
|
||||||
"kind": "punctuation"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": " ",
|
|
||||||
"kind": "space"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "=>",
|
|
||||||
"kind": "punctuation"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": " ",
|
|
||||||
"kind": "space"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "any",
|
|
||||||
"kind": "keyword"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"documentation": [],
|
"documentation": [],
|
||||||
|
|
234
tests/baselines/reference/jsDocTypedef1.js
Normal file
234
tests/baselines/reference/jsDocTypedef1.js
Normal file
|
@ -0,0 +1,234 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"marker": {
|
||||||
|
"fileName": "/tests/cases/fourslash/jsDocTypedef1.js",
|
||||||
|
"position": 189
|
||||||
|
},
|
||||||
|
"quickInfo": {
|
||||||
|
"kind": "parameter",
|
||||||
|
"kindModifiers": "",
|
||||||
|
"textSpan": {
|
||||||
|
"start": 189,
|
||||||
|
"length": 4
|
||||||
|
},
|
||||||
|
"displayParts": [
|
||||||
|
{
|
||||||
|
"text": "(",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "parameter",
|
||||||
|
"kind": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ")",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "opts",
|
||||||
|
"kind": "parameterName"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ":",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "{",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "\n",
|
||||||
|
"kind": "lineBreak"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "x",
|
||||||
|
"kind": "propertyName"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ":",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "string",
|
||||||
|
"kind": "keyword"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ";",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "\n",
|
||||||
|
"kind": "lineBreak"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "y",
|
||||||
|
"kind": "propertyName"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "?",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ":",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "string",
|
||||||
|
"kind": "keyword"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ";",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "\n",
|
||||||
|
"kind": "lineBreak"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "z",
|
||||||
|
"kind": "propertyName"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "?",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ":",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "string",
|
||||||
|
"kind": "keyword"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ";",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "\n",
|
||||||
|
"kind": "lineBreak"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "w",
|
||||||
|
"kind": "propertyName"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "?",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ":",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "string",
|
||||||
|
"kind": "keyword"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ";",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "\n",
|
||||||
|
"kind": "lineBreak"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "}",
|
||||||
|
"kind": "punctuation"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"documentation": [],
|
||||||
|
"tags": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"marker": {
|
||||||
|
"fileName": "/tests/cases/fourslash/jsDocTypedef1.js",
|
||||||
|
"position": 424
|
||||||
|
},
|
||||||
|
"quickInfo": {
|
||||||
|
"kind": "parameter",
|
||||||
|
"kindModifiers": "",
|
||||||
|
"textSpan": {
|
||||||
|
"start": 424,
|
||||||
|
"length": 5
|
||||||
|
},
|
||||||
|
"displayParts": [
|
||||||
|
{
|
||||||
|
"text": "(",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "parameter",
|
||||||
|
"kind": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ")",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "opts1",
|
||||||
|
"kind": "parameterName"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": ":",
|
||||||
|
"kind": "punctuation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": " ",
|
||||||
|
"kind": "space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "any",
|
||||||
|
"kind": "keyword"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"documentation": [],
|
||||||
|
"tags": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
|
@ -21,6 +21,10 @@ anyT1 = "hi";
|
||||||
const x = (a) => a + 1;
|
const x = (a) => a + 1;
|
||||||
x(1);
|
x(1);
|
||||||
|
|
||||||
|
/** @type {function} */
|
||||||
|
const y = (a) => a + 1;
|
||||||
|
x(1);
|
||||||
|
|
||||||
/** @type {function (number)} */
|
/** @type {function (number)} */
|
||||||
const x1 = (a) => a + 1;
|
const x1 = (a) => a + 1;
|
||||||
x1(0);
|
x1(0);
|
||||||
|
|
|
@ -9,9 +9,25 @@
|
||||||
* @property {string=} y
|
* @property {string=} y
|
||||||
* @property {string} [z]
|
* @property {string} [z]
|
||||||
* @property {string} [w="hi"]
|
* @property {string} [w="hi"]
|
||||||
*
|
*
|
||||||
* @param {Opts} opts
|
* @param {Opts} opts
|
||||||
*/
|
*/
|
||||||
function foo(opts) {}
|
function foo(opts) {
|
||||||
|
opts.x;
|
||||||
|
}
|
||||||
|
|
||||||
foo({x: 'abc'});
|
foo({x: 'abc'});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {object} Opts1
|
||||||
|
* @property {string} x
|
||||||
|
* @property {string=} y
|
||||||
|
* @property {string} [z]
|
||||||
|
* @property {string} [w="hi"]
|
||||||
|
*
|
||||||
|
* @param {Opts1} opts
|
||||||
|
*/
|
||||||
|
function foo1(opts) {
|
||||||
|
opts.x;
|
||||||
|
}
|
||||||
|
foo1({x: 'abc'});
|
||||||
|
|
33
tests/cases/fourslash/jsDocTypedefQuickInfo1.ts
Normal file
33
tests/cases/fourslash/jsDocTypedefQuickInfo1.ts
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/// <reference path="fourslash.ts" />
|
||||||
|
// @allowJs: true
|
||||||
|
// @Filename: jsDocTypedef1.js
|
||||||
|
//// /**
|
||||||
|
//// * @typedef {Object} Opts
|
||||||
|
//// * @property {string} x
|
||||||
|
//// * @property {string=} y
|
||||||
|
//// * @property {string} [z]
|
||||||
|
//// * @property {string} [w="hi"]
|
||||||
|
//// *
|
||||||
|
//// * @param {Opts} opts
|
||||||
|
//// */
|
||||||
|
//// function foo(/*1*/opts) {
|
||||||
|
//// opts.x;
|
||||||
|
///// }
|
||||||
|
|
||||||
|
//// foo({x: 'abc'});
|
||||||
|
|
||||||
|
//// /**
|
||||||
|
//// * @typedef {object} Opts1
|
||||||
|
//// * @property {string} x
|
||||||
|
//// * @property {string=} y
|
||||||
|
//// * @property {string} [z]
|
||||||
|
//// * @property {string} [w="hi"]
|
||||||
|
//// *
|
||||||
|
//// * @param {Opts1} opts
|
||||||
|
//// */
|
||||||
|
//// function foo1(/*2*/opts1) {
|
||||||
|
//// opts1.x;
|
||||||
|
//// }
|
||||||
|
//// foo1({x: 'abc'});
|
||||||
|
|
||||||
|
verify.baselineQuickInfo();
|
Loading…
Reference in a new issue