Merge pull request #29352 from Microsoft/qualified-name-param-tag-error
Qualified name param tag error
This commit is contained in:
commit
e5708e1903
|
@ -24785,9 +24785,17 @@ namespace ts {
|
|||
return;
|
||||
}
|
||||
if (!containsArgumentsReference(decl)) {
|
||||
error(node.name,
|
||||
Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name,
|
||||
idText(node.name.kind === SyntaxKind.QualifiedName ? node.name.right : node.name));
|
||||
if (isQualifiedName(node.name)) {
|
||||
error(node.name,
|
||||
Diagnostics.Qualified_name_0_is_not_allowed_without_a_leading_param_object_1,
|
||||
entityNameToString(node.name),
|
||||
entityNameToString(node.name.left));
|
||||
}
|
||||
else {
|
||||
error(node.name,
|
||||
Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name,
|
||||
idText(node.name));
|
||||
}
|
||||
}
|
||||
else if (findLast(getJSDocTags(decl), isJSDocParameterTag) === node &&
|
||||
node.typeExpression && node.typeExpression.type &&
|
||||
|
|
|
@ -4266,6 +4266,10 @@
|
|||
"category": "Error",
|
||||
"code": 8031
|
||||
},
|
||||
"Qualified name '{0}' is not allowed without a leading '@param {object} {1}'.": {
|
||||
"category": "Error",
|
||||
"code": 8032
|
||||
},
|
||||
"Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clause.": {
|
||||
"category": "Error",
|
||||
"code": 9002
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject.js(2,20): error TS8032: Qualified name 'xyz.p' is not allowed without a leading '@param {object} xyz'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject.js (1 errors) ====
|
||||
/**
|
||||
* @param {number} xyz.p
|
||||
~~~~~
|
||||
!!! error TS8032: Qualified name 'xyz.p' is not allowed without a leading '@param {object} xyz'.
|
||||
*/
|
||||
function g(xyz) {
|
||||
return xyz.p;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
=== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject.js ===
|
||||
/**
|
||||
* @param {number} xyz.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
>g : Symbol(g, Decl(paramTagNestedWithoutTopLevelObject.js, 0, 0))
|
||||
>xyz : Symbol(xyz, Decl(paramTagNestedWithoutTopLevelObject.js, 3, 11))
|
||||
|
||||
return xyz.p;
|
||||
>xyz : Symbol(xyz, Decl(paramTagNestedWithoutTopLevelObject.js, 3, 11))
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
=== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject.js ===
|
||||
/**
|
||||
* @param {number} xyz.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
>g : (xyz: any) => any
|
||||
>xyz : any
|
||||
|
||||
return xyz.p;
|
||||
>xyz.p : any
|
||||
>xyz : any
|
||||
>p : any
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject2.js(2,20): error TS8032: Qualified name 'xyz.bar' is not allowed without a leading '@param {object} xyz'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject2.js (1 errors) ====
|
||||
/**
|
||||
* @param {object} xyz.bar
|
||||
~~~~~~~
|
||||
!!! error TS8032: Qualified name 'xyz.bar' is not allowed without a leading '@param {object} xyz'.
|
||||
* @param {number} xyz.bar.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
return xyz.bar.p;
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
=== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject2.js ===
|
||||
/**
|
||||
* @param {object} xyz.bar
|
||||
* @param {number} xyz.bar.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
>g : Symbol(g, Decl(paramTagNestedWithoutTopLevelObject2.js, 0, 0))
|
||||
>xyz : Symbol(xyz, Decl(paramTagNestedWithoutTopLevelObject2.js, 4, 11))
|
||||
|
||||
return xyz.bar.p;
|
||||
>xyz : Symbol(xyz, Decl(paramTagNestedWithoutTopLevelObject2.js, 4, 11))
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
=== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject2.js ===
|
||||
/**
|
||||
* @param {object} xyz.bar
|
||||
* @param {number} xyz.bar.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
>g : (xyz: any) => any
|
||||
>xyz : any
|
||||
|
||||
return xyz.bar.p;
|
||||
>xyz.bar.p : any
|
||||
>xyz.bar : any
|
||||
>xyz : any
|
||||
>bar : any
|
||||
>p : any
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject3.js(3,20): error TS8032: Qualified name 'xyz.bar.p' is not allowed without a leading '@param {object} xyz.bar'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject3.js (1 errors) ====
|
||||
/**
|
||||
* @param {object} xyz
|
||||
* @param {number} xyz.bar.p
|
||||
~~~~~~~~~
|
||||
!!! error TS8032: Qualified name 'xyz.bar.p' is not allowed without a leading '@param {object} xyz.bar'.
|
||||
*/
|
||||
function g(xyz) {
|
||||
return xyz.bar.p;
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
=== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject3.js ===
|
||||
/**
|
||||
* @param {object} xyz
|
||||
* @param {number} xyz.bar.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
>g : Symbol(g, Decl(paramTagNestedWithoutTopLevelObject3.js, 0, 0))
|
||||
>xyz : Symbol(xyz, Decl(paramTagNestedWithoutTopLevelObject3.js, 4, 11))
|
||||
|
||||
return xyz.bar.p;
|
||||
>xyz : Symbol(xyz, Decl(paramTagNestedWithoutTopLevelObject3.js, 4, 11))
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
=== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject3.js ===
|
||||
/**
|
||||
* @param {object} xyz
|
||||
* @param {number} xyz.bar.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
>g : (xyz: any) => any
|
||||
>xyz : any
|
||||
|
||||
return xyz.bar.p;
|
||||
>xyz.bar.p : any
|
||||
>xyz.bar : any
|
||||
>xyz : any
|
||||
>bar : any
|
||||
>p : any
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject4.js(2,20): error TS8032: Qualified name 'xyz.bar.p' is not allowed without a leading '@param {object} xyz.bar'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject4.js (1 errors) ====
|
||||
/**
|
||||
* @param {number} xyz.bar.p
|
||||
~~~~~~~~~
|
||||
!!! error TS8032: Qualified name 'xyz.bar.p' is not allowed without a leading '@param {object} xyz.bar'.
|
||||
*/
|
||||
function g(xyz) {
|
||||
return xyz.bar.p;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
=== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject4.js ===
|
||||
/**
|
||||
* @param {number} xyz.bar.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
>g : Symbol(g, Decl(paramTagNestedWithoutTopLevelObject4.js, 0, 0))
|
||||
>xyz : Symbol(xyz, Decl(paramTagNestedWithoutTopLevelObject4.js, 3, 11))
|
||||
|
||||
return xyz.bar.p;
|
||||
>xyz : Symbol(xyz, Decl(paramTagNestedWithoutTopLevelObject4.js, 3, 11))
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
=== tests/cases/conformance/jsdoc/paramTagNestedWithoutTopLevelObject4.js ===
|
||||
/**
|
||||
* @param {number} xyz.bar.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
>g : (xyz: any) => any
|
||||
>xyz : any
|
||||
|
||||
return xyz.bar.p;
|
||||
>xyz.bar.p : any
|
||||
>xyz.bar : any
|
||||
>xyz : any
|
||||
>bar : any
|
||||
>p : any
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
// @noEmit: true
|
||||
// @allowJs: true
|
||||
// @checkJs: true
|
||||
// @Filename: paramTagNestedWithoutTopLevelObject.js
|
||||
|
||||
/**
|
||||
* @param {number} xyz.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
return xyz.p;
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
// @noEmit: true
|
||||
// @allowJs: true
|
||||
// @checkJs: true
|
||||
// @Filename: paramTagNestedWithoutTopLevelObject2.js
|
||||
|
||||
/**
|
||||
* @param {object} xyz.bar
|
||||
* @param {number} xyz.bar.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
return xyz.bar.p;
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
// @noEmit: true
|
||||
// @allowJs: true
|
||||
// @checkJs: true
|
||||
// @Filename: paramTagNestedWithoutTopLevelObject3.js
|
||||
|
||||
/**
|
||||
* @param {object} xyz
|
||||
* @param {number} xyz.bar.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
return xyz.bar.p;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
// @noEmit: true
|
||||
// @allowJs: true
|
||||
// @checkJs: true
|
||||
// @Filename: paramTagNestedWithoutTopLevelObject4.js
|
||||
|
||||
/**
|
||||
* @param {number} xyz.bar.p
|
||||
*/
|
||||
function g(xyz) {
|
||||
return xyz.bar.p;
|
||||
}
|
Loading…
Reference in a new issue