diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index e57a3fa98f390..884a5b36e38c1 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -8579,7 +8579,8 @@ namespace ts { if (!comment) { comment = parseTrailingTagComments(start, getNodePos(), indent, indentText); } - return finishNode(factory.createJSDocCallbackTag(tagName, typeExpression, fullName, comment), start); + const end = comment !== undefined ? getNodePos() : typeExpression.end; + return finishNode(factory.createJSDocCallbackTag(tagName, typeExpression, fullName, comment), start, end); } function escapedTextsEqual(a: EntityName, b: EntityName): boolean { diff --git a/tests/cases/fourslash/jsTagAfterCallback1.ts b/tests/cases/fourslash/jsTagAfterCallback1.ts new file mode 100644 index 0000000000000..cc270afcf399e --- /dev/null +++ b/tests/cases/fourslash/jsTagAfterCallback1.ts @@ -0,0 +1,19 @@ +/// +// @Filename: foo.js +// @allowJs: true +// @checkJs: true +//// /** @callback Listener @yeturn {ListenerBlock} */ +//// /** +//// * The function used +//// * /*1*/ settings +//// */ +//// class /*2*/ListenerBlock { +//// } + +// Force a syntax tree to be created. +verify.noMatchingBracePositionInCurrentFile(0); + +goTo.marker('1'); +edit.insert('fenster'); + +verify.quickInfoAt('2', 'class ListenerBlock', 'The function used\nfenster settings') diff --git a/tests/cases/fourslash/jsTagAfterCallback2.ts b/tests/cases/fourslash/jsTagAfterCallback2.ts new file mode 100644 index 0000000000000..3cfa493f32abf --- /dev/null +++ b/tests/cases/fourslash/jsTagAfterCallback2.ts @@ -0,0 +1,19 @@ +/// +// @Filename: foo.js +// @allowJs: true +// @checkJs: true +//// /** @callback Listener @param x @yeturn {ListenerBlock} */ +//// /** +//// * The function used +//// * /*1*/ settings +//// */ +//// class /*2*/ListenerBlock { +//// } + +// Force a syntax tree to be created. +verify.noMatchingBracePositionInCurrentFile(0); + +goTo.marker('1'); +edit.insert('fenster'); + +verify.quickInfoAt('2', 'class ListenerBlock', 'The function used\nfenster settings') diff --git a/tests/cases/fourslash/jsTagAfterTypedef1.ts b/tests/cases/fourslash/jsTagAfterTypedef1.ts new file mode 100644 index 0000000000000..d0cf99e6f1804 --- /dev/null +++ b/tests/cases/fourslash/jsTagAfterTypedef1.ts @@ -0,0 +1,19 @@ +/// +// @Filename: foo.js +// @allowJs: true +// @checkJs: true +//// /** @typedef Lister @property p @yeturn {ListenerBlock} */ +//// /** +//// * The function used +//// * /*1*/ settings +//// */ +//// class /*2*/ListenerBlock { +//// } + +// Force a syntax tree to be created. +verify.noMatchingBracePositionInCurrentFile(0); + +goTo.marker('1'); +edit.insert('fenster'); + +verify.quickInfoAt('2', 'class ListenerBlock', 'The function used\nfenster settings')