Merge pull request #29352 from Microsoft/qualified-name-param-tag-error

Qualified name param tag error
This commit is contained in:
Gabriela Britto 2019-01-14 10:28:08 -08:00 committed by GitHub
commit e5708e1903
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 217 additions and 3 deletions

View file

@ -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 &&

View file

@ -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

View file

@ -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;
}

View file

@ -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))
}

View file

@ -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
}

View file

@ -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;
}

View file

@ -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))
}

View file

@ -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
}

View file

@ -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;
}

View file

@ -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))
}

View file

@ -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
}

View file

@ -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;
}

View file

@ -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))
}

View file

@ -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
}

View file

@ -0,0 +1,11 @@
// @noEmit: true
// @allowJs: true
// @checkJs: true
// @Filename: paramTagNestedWithoutTopLevelObject.js
/**
* @param {number} xyz.p
*/
function g(xyz) {
return xyz.p;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}