From 1dc9a8f48283f794b2d0b07ba57c737b3a3f2ceb Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 18 Feb 2022 23:56:29 +0000 Subject: [PATCH] Cherry-pick PR #47959 into release-4.6 Component commits: 465042e278 Only issue @param suggestions with codefixes in TS Previously, there were 2 JS errors that were issued as suggestions in TS files. But there was no codefix for these errors, and the errors were incorrect in TS. This PR only issues the JS-specific errors on JS files. 4056b38860 Minimise test 4fb10f170a Merge branch 'main' into only-suggest-param-codefixes-in-ts 72499acabf Merge branch 'main' into only-suggest-param-codefixes-in-ts --- src/compiler/checker.ts | 8 +++++--- .../cases/fourslash/jsdocParam_suggestion1.ts | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 tests/cases/fourslash/jsdocParam_suggestion1.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 47ea66ff9af92..73cbbd7e83054 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -38536,9 +38536,9 @@ namespace ts { const containsArguments = containsArgumentsReference(node); if (containsArguments) { const lastJSDocParam = lastOrUndefined(jsdocParameters); - if (lastJSDocParam && isIdentifier(lastJSDocParam.name) && lastJSDocParam.typeExpression && + if (isJs && lastJSDocParam && isIdentifier(lastJSDocParam.name) && lastJSDocParam.typeExpression && lastJSDocParam.typeExpression.type && !parameters.has(lastJSDocParam.name.escapedText) && !isArrayType(getTypeFromTypeNode(lastJSDocParam.typeExpression.type))) { - errorOrSuggestion(isJs, lastJSDocParam.name, Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, idText(lastJSDocParam.name)); + error(lastJSDocParam.name, Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, idText(lastJSDocParam.name)); } } else { @@ -38547,7 +38547,9 @@ namespace ts { return; } if (isQualifiedName(name)) { - errorOrSuggestion(isJs, name, Diagnostics.Qualified_name_0_is_not_allowed_without_a_leading_param_object_1, entityNameToString(name), entityNameToString(name.left)); + if (isJs) { + error(name, Diagnostics.Qualified_name_0_is_not_allowed_without_a_leading_param_object_1, entityNameToString(name), entityNameToString(name.left)); + } } else { errorOrSuggestion(isJs, name, Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name, idText(name)); diff --git a/tests/cases/fourslash/jsdocParam_suggestion1.ts b/tests/cases/fourslash/jsdocParam_suggestion1.ts new file mode 100644 index 0000000000000..f3c5fca656682 --- /dev/null +++ b/tests/cases/fourslash/jsdocParam_suggestion1.ts @@ -0,0 +1,18 @@ +/// +// @Filename: a.ts +//// /** +//// * @param options - whatever +//// * @param options.zone - equally bad +//// */ +//// declare function bad(options: any): void +//// +//// /** +//// * @param {number} obtuse +//// */ +//// function worse(): void { +//// arguments +//// } + +goTo.file('a.ts') +verify.getSuggestionDiagnostics([]); +