From c1c7d4a9987f42988b740c451ad6fd152ee3d1c6 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Fri, 23 Apr 2021 13:51:44 -0700 Subject: [PATCH 1/2] Omit spaces after https in jsdoc comments for tags with names. Fxes #42581 --- src/services/jsDoc.ts | 18 +- .../quickInfoForJSDocWithHttpLinks.baseline | 360 ++++++++++++++++++ .../quickInfoForJSDocWithHttpLinks.ts | 24 ++ 3 files changed, 398 insertions(+), 4 deletions(-) create mode 100644 tests/baselines/reference/quickInfoForJSDocWithHttpLinks.baseline create mode 100644 tests/cases/fourslash/quickInfoForJSDocWithHttpLinks.ts diff --git a/src/services/jsDoc.ts b/src/services/jsDoc.ts index 9fa4de222d0de..c72ba68dddd7d 100644 --- a/src/services/jsDoc.ts +++ b/src/services/jsDoc.ts @@ -159,7 +159,9 @@ namespace ts.JsDoc { case SyntaxKind.JSDocParameterTag: case SyntaxKind.JSDocSeeTag: const { name } = tag as JSDocTypedefTag | JSDocCallbackTag | JSDocPropertyTag | JSDocParameterTag | JSDocSeeTag; - return name ? withNode(name) : comment === undefined ? undefined : getDisplayPartsFromComment(comment, checker); + return name ? withNode(name) + : comment === undefined ? undefined + : getDisplayPartsFromComment(comment, checker); default: return comment === undefined ? undefined : getDisplayPartsFromComment(comment, checker); } @@ -169,9 +171,17 @@ namespace ts.JsDoc { } function addComment(s: string) { - return comment - ? [namePart(s), spacePart(), ...getDisplayPartsFromComment(comment, checker)] - : [textPart(s)]; + if (comment) { + if (s.match(/^https?$/)) { + return [textPart(s), ...getDisplayPartsFromComment(comment, checker)] + } + else { + return [namePart(s), spacePart(), ...getDisplayPartsFromComment(comment, checker)] + } + } + else { + return [textPart(s)]; + } } } diff --git a/tests/baselines/reference/quickInfoForJSDocWithHttpLinks.baseline b/tests/baselines/reference/quickInfoForJSDocWithHttpLinks.baseline new file mode 100644 index 0000000000000..763f108bb0319 --- /dev/null +++ b/tests/baselines/reference/quickInfoForJSDocWithHttpLinks.baseline @@ -0,0 +1,360 @@ +[ + { + "marker": { + "fileName": "/tests/cases/fourslash/quickInfoForJSDocWithHttpLinks.js", + "position": 22, + "name": "1" + }, + "quickInfo": { + "kind": "type", + "kindModifiers": "", + "textSpan": { + "start": 22, + "length": 5 + }, + "displayParts": [ + { + "text": "type", + "kind": "keyword" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "https", + "kind": "aliasName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "=", + "kind": "operator" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "number", + "kind": "keyword" + } + ], + "documentation": [ + { + "text": "://wat", + "kind": "text" + } + ] + } + }, + { + "marker": { + "fileName": "/tests/cases/fourslash/quickInfoForJSDocWithHttpLinks.js", + "position": 88, + "name": "2" + }, + "quickInfo": { + "kind": "property", + "kindModifiers": "", + "textSpan": { + "start": 88, + "length": 5 + }, + "displayParts": [ + { + "text": "(", + "kind": "punctuation" + }, + { + "text": "property", + "kind": "text" + }, + { + "text": ")", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "https", + "kind": "propertyName" + }, + { + "text": ":", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "number", + "kind": "keyword" + } + ], + "documentation": [ + { + "text": "://wass", + "kind": "text" + } + ] + } + }, + { + "marker": { + "fileName": "/tests/cases/fourslash/quickInfoForJSDocWithHttpLinks.js", + "position": 120, + "name": "3" + }, + "quickInfo": { + "kind": "type", + "kindModifiers": "", + "textSpan": { + "start": 120, + "length": 4 + }, + "displayParts": [ + { + "text": "type", + "kind": "keyword" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "http", + "kind": "aliasName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "=", + "kind": "operator" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "(", + "kind": "punctuation" + }, + { + "text": ")", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "=>", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "any", + "kind": "keyword" + } + ], + "documentation": [ + { + "text": "://vad", + "kind": "text" + } + ] + } + }, + { + "marker": { + "fileName": "/tests/cases/fourslash/quickInfoForJSDocWithHttpLinks.js", + "position": 164, + "name": "4" + }, + "quickInfo": { + "kind": "var", + "kindModifiers": "", + "textSpan": { + "start": 164, + "length": 4 + }, + "displayParts": [ + { + "text": "var", + "kind": "keyword" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "see1", + "kind": "localName" + }, + { + "text": ":", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "boolean", + "kind": "keyword" + } + ], + "documentation": [], + "tags": [ + { + "name": "see", + "text": [ + { + "text": "https", + "kind": "text" + }, + { + "text": "://hvad", + "kind": "text" + } + ] + } + ] + } + }, + { + "marker": { + "fileName": "/tests/cases/fourslash/quickInfoForJSDocWithHttpLinks.js", + "position": 213, + "name": "5" + }, + "quickInfo": { + "kind": "var", + "kindModifiers": "", + "textSpan": { + "start": 213, + "length": 4 + }, + "displayParts": [ + { + "text": "var", + "kind": "keyword" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "see2", + "kind": "localName" + }, + { + "text": ":", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "boolean", + "kind": "keyword" + } + ], + "documentation": [], + "tags": [ + { + "name": "see", + "text": [ + { + "text": "", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "https://hva", + "kind": "linkText" + }, + { + "text": "}", + "kind": "link" + } + ] + } + ] + } + }, + { + "marker": { + "fileName": "/tests/cases/fourslash/quickInfoForJSDocWithHttpLinks.js", + "position": 258, + "name": "6" + }, + "quickInfo": { + "kind": "var", + "kindModifiers": "", + "textSpan": { + "start": 258, + "length": 4 + }, + "displayParts": [ + { + "text": "var", + "kind": "keyword" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "see3", + "kind": "localName" + }, + { + "text": ":", + "kind": "punctuation" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "boolean", + "kind": "keyword" + } + ], + "documentation": [ + { + "text": "", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "https://hvaD", + "kind": "linkText" + }, + { + "text": "}", + "kind": "link" + } + ] + } + } +] \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoForJSDocWithHttpLinks.ts b/tests/cases/fourslash/quickInfoForJSDocWithHttpLinks.ts new file mode 100644 index 0000000000000..fba471c645928 --- /dev/null +++ b/tests/cases/fourslash/quickInfoForJSDocWithHttpLinks.ts @@ -0,0 +1,24 @@ +/// +// @checkJs: true +// @filename: quickInfoForJSDocWithHttpLinks.js + +//// /** @typedef {number} /*1*/https://wat */ +//// +//// /** +//// * @typedef {Object} Oops +//// * @property {number} /*2*/https://wass +//// */ +//// +//// +//// /** @callback /*3*/http://vad */ +//// +//// /** @see https://hvad */ +//// var /*4*/see1 = true +//// +//// /** @see {@link https://hva} */ +//// var /*5*/see2 = true +//// +//// /** {@link https://hvaD} */ +//// var /*6*/see3 = true + +verify.baselineQuickInfo(); From 56288e20c4dc87ba6facaf06379f24c844b1d3e5 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Fri, 23 Apr 2021 14:14:15 -0700 Subject: [PATCH 2/2] fix semicolon lint --- src/services/jsDoc.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/jsDoc.ts b/src/services/jsDoc.ts index c72ba68dddd7d..5670ce5897695 100644 --- a/src/services/jsDoc.ts +++ b/src/services/jsDoc.ts @@ -173,10 +173,10 @@ namespace ts.JsDoc { function addComment(s: string) { if (comment) { if (s.match(/^https?$/)) { - return [textPart(s), ...getDisplayPartsFromComment(comment, checker)] + return [textPart(s), ...getDisplayPartsFromComment(comment, checker)]; } else { - return [namePart(s), spacePart(), ...getDisplayPartsFromComment(comment, checker)] + return [namePart(s), spacePart(), ...getDisplayPartsFromComment(comment, checker)]; } } else {