From 36f500d66a4c30ed6a0e2b621d457e0082181131 Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Mon, 1 Feb 2021 18:11:51 +0100 Subject: [PATCH] feat(parser): do not remove default values --- src/parser.ts | 11 ++++++++++- tests/__snapshots__/main.test.js.snap | 26 ++++++++++++++++++++++++-- tests/main.test.js | 15 +++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index 3356921..25bebd7 100755 --- a/src/parser.ts +++ b/src/parser.ts @@ -139,10 +139,19 @@ export const getParser = (parser: Parser["parse"]) => // Optional tag name if (optional) { // Figure out if tag type have default value + _default = _default?.trim(); if (_default) { + description = description + .trim() + .replace(/[ \t]*Default is `.*`\.?$/, ""); + if (description && !/[.\r\n]$/.test(description)) { + description += "."; + } description += ` Default is \`${_default}\``; + name = `[${name}=${_default}]`; + } else { + name = `[${name}]`; } - name = `[${name}]`; } if (isVerticallyAlignAbleTags) diff --git a/tests/__snapshots__/main.test.js.snap b/tests/__snapshots__/main.test.js.snap index 1566ac2..b89eb8e 100644 --- a/tests/__snapshots__/main.test.js.snap +++ b/tests/__snapshots__/main.test.js.snap @@ -135,6 +135,28 @@ exports[`Should convert to single line if necessary 3`] = ` " `; +exports[`Should format jsDoc default values 1`] = ` +"/** + * @param {String} [arg1=\\"defaultTest\\"] Foo. Default is \`\\"defaultTest\\"\` + * @param {number} [arg2=123] The width of the rectangle. Default is \`123\` + * @param {number} [arg3=123] Default is \`123\` + * @param {number} [arg4=Foo.bar.baz] Default is \`Foo.bar.baz\` + * @param {number | string} [arg5=123] Something. Default is \`123\` + */ +" +`; + +exports[`Should format jsDoc default values 2`] = ` +"/** + * @param {String} [arg1=\\"defaultTest\\"] Foo. Default is \`\\"defaultTest\\"\` + * @param {number} [arg2=123] The width of the rectangle. Default is \`123\` + * @param {number} [arg3=123] Default is \`123\` + * @param {number} [arg4=Foo.bar.baz] Default is \`Foo.bar.baz\` + * @param {number | string} [arg5=123] Something. Default is \`123\` + */ +" +`; + exports[`Should format regular jsDoc 1`] = ` "/** * Function example description that was wrapped by hand so it have more then @@ -155,7 +177,7 @@ exports[`Should format regular jsDoc 1`] = ` * * @param {String | Number} text - Some text description that is very long and * needs to be wrapped - * @param {String} [defaultValue] TODO Default is \`\\"defaultTest\\"\` + * @param {String} [defaultValue=\\"defaultTest\\"] TODO. Default is \`\\"defaultTest\\"\` * @param {Number | Null} [optionalNumber] * @undefiendTag * @undefiendTag {number} name des @@ -185,7 +207,7 @@ exports[`Should format regular jsDoc 2`] = ` * * @param {String | Number} text - Some text description that is very long and * needs to be wrapped - * @param {String} [defaultValue] TODO Default is \`\\"defaultTest\\"\` + * @param {String} [defaultValue=\\"defaultTest\\"] TODO. Default is \`\\"defaultTest\\"\` * @param {Number | Null} [optionalNumber] * @undefiendTag * @undefiendTag {number} name des diff --git a/tests/main.test.js b/tests/main.test.js index d6fdcc7..e220eb9 100755 --- a/tests/main.test.js +++ b/tests/main.test.js @@ -51,6 +51,21 @@ const testFunction = (text, defaultValue, optionalNumber) => true expect(subject(result)).toMatchSnapshot(); }); +test("Should format jsDoc default values", () => { + const result = subject(` +/** +* @param {String} [arg1="defaultTest"] foo +* @param {number} [arg2=123] the width of the rectangle +* @param {number} [arg3= 123 ] +* @param {number} [arg4= Foo.bar.baz ] +* @param {number|string} [arg5=123] Something. Default is \`"wrong"\` +*/ +`); + + expect(result).toMatchSnapshot(); + expect(subject(result)).toMatchSnapshot(); +}); + test("Should convert to single line if necessary", () => { const Result1 = subject(`/** single line description*/`); const Result2 = subject(`/**