{"version":3,"sources":["../../src/rules/newlineAfterDescription.js"],"names":["jsdoc","report","context","jsdocNode","sourceCode","indent","always","description","tags","length","_","has","options","descriptionEndsWithANewline","startsWith","source","slice","fixer","sourceLines","getText","split","lastDescriptionLine","findLastIndex","line","includes","last","splice","replaceText","join"],"mappings":";;;;;;;AAAA;;AACA;;;;eAEe,2BAAa,gBAOtB;AAAA,MANJA,KAMI,QANJA,KAMI;AAAA,MALJC,MAKI,QALJA,MAKI;AAAA,MAJJC,OAII,QAJJA,OAII;AAAA,MAHJC,SAGI,QAHJA,SAGI;AAAA,MAFJC,UAEI,QAFJA,UAEI;AAAA,MADJC,MACI,QADJA,MACI;AACJ,MAAIC,MAAJ;;AAEA,MAAI,CAACN,KAAK,CAACO,WAAP,IAAsB,CAACP,KAAK,CAACQ,IAAN,CAAWC,MAAtC,EAA8C;AAC5C;AACD;;AAED,MAAIC,gBAAEC,GAAF,CAAMT,OAAO,CAACU,OAAd,EAAuB,CAAvB,CAAJ,EAA+B;AAC7BN,IAAAA,MAAM,GAAGJ,OAAO,CAACU,OAAR,CAAgB,CAAhB,MAAuB,QAAhC;AACD,GAFD,MAEO;AACLN,IAAAA,MAAM,GAAG,IAAT;AACD,GAXG,CAaJ;AACA;AACA;;;AACA,MAAMO,2BAA2B,GAAGH,gBAAEI,UAAF,CAAad,KAAK,CAACe,MAAN,CAAaC,KAAb,CAAmBhB,KAAK,CAACO,WAAN,CAAkBE,MAArC,CAAb,EAA2D,MAA3D,CAApC;;AAEA,MAAIH,MAAJ,EAAY;AACV,QAAI,CAACO,2BAAL,EAAkC;AAChCZ,MAAAA,MAAM,CAAC,mEAAD,EAAsE,UAACgB,KAAD,EAAW;AACrF,YAAMC,WAAW,GAAGd,UAAU,CAACe,OAAX,CAAmBhB,SAAnB,EAA8BiB,KAA9B,CAAoC,IAApC,CAApB;;AACA,YAAMC,mBAAmB,GAAGX,gBAAEY,aAAF,CAAgBJ,WAAhB,EAA6B,UAACK,IAAD,EAAU;AACjE,iBAAOb,gBAAEc,QAAF,CAAWD,IAAX,EAAiBb,gBAAEe,IAAF,CAAOzB,KAAK,CAACO,WAAN,CAAkBa,KAAlB,CAAwB,IAAxB,CAAP,CAAjB,CAAP;AACD,SAF2B,CAA5B,CAFqF,CAMrF;;;AACAF,QAAAA,WAAW,CAACQ,MAAZ,CAAmBL,mBAAmB,GAAG,CAAzC,EAA4C,CAA5C,EAA+ChB,MAAM,GAAG,IAAxD;AAEA,eAAOY,KAAK,CAACU,WAAN,CAAkBxB,SAAlB,EAA6Be,WAAW,CAACU,IAAZ,CAAiB,IAAjB,CAA7B,CAAP;AACD,OAVK,CAAN;AAWD;AACF,GAdD,MAcO,IAAIf,2BAAJ,EAAiC;AACtCZ,IAAAA,MAAM,CAAC,oEAAD,EAAuE,UAACgB,KAAD,EAAW;AACtF,UAAMC,WAAW,GAAGd,UAAU,CAACe,OAAX,CAAmBhB,SAAnB,EAA8BiB,KAA9B,CAAoC,IAApC,CAApB;;AACA,UAAMC,mBAAmB,GAAGX,gBAAEY,aAAF,CAAgBJ,WAAhB,EAA6B,UAACK,IAAD,EAAU;AACjE,eAAOb,gBAAEc,QAAF,CAAWD,IAAX,EAAiBb,gBAAEe,IAAF,CAAOzB,KAAK,CAACO,WAAN,CAAkBa,KAAlB,CAAwB,IAAxB,CAAP,CAAjB,CAAP;AACD,OAF2B,CAA5B,CAFsF,CAMtF;;;AACAF,MAAAA,WAAW,CAACQ,MAAZ,CAAmBL,mBAAmB,GAAG,CAAzC,EAA4C,CAA5C;AAEA,aAAOJ,KAAK,CAACU,WAAN,CAAkBxB,SAAlB,EAA6Be,WAAW,CAACU,IAAZ,CAAiB,IAAjB,CAA7B,CAAP;AACD,KAVK,CAAN;AAWD;AACF,CApDc,C","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n jsdocNode,\n sourceCode,\n indent\n}) => {\n let always;\n\n if (!jsdoc.description || !jsdoc.tags.length) {\n return;\n }\n\n if (_.has(context.options, 0)) {\n always = context.options[0] === 'always';\n } else {\n always = true;\n }\n\n // The contents of the jsdoc.source and of jsdoc.description is left trimmed.\n // The contents of the jsdoc.description is right trimmed.\n // This gets the text following the description.\n const descriptionEndsWithANewline = _.startsWith(jsdoc.source.slice(jsdoc.description.length), '\\n\\n');\n\n if (always) {\n if (!descriptionEndsWithANewline) {\n report('There must be a newline after the description of the JSDoc block.', (fixer) => {\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n');\n const lastDescriptionLine = _.findLastIndex(sourceLines, (line) => {\n return _.includes(line, _.last(jsdoc.description.split('\\n')));\n });\n\n // Add the new line\n sourceLines.splice(lastDescriptionLine + 1, 0, indent + ' *');\n\n return fixer.replaceText(jsdocNode, sourceLines.join('\\n'));\n });\n }\n } else if (descriptionEndsWithANewline) {\n report('There must be no newline after the description of the JSDoc block.', (fixer) => {\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n');\n const lastDescriptionLine = _.findLastIndex(sourceLines, (line) => {\n return _.includes(line, _.last(jsdoc.description.split('\\n')));\n });\n\n // Remove the extra line\n sourceLines.splice(lastDescriptionLine + 1, 1);\n\n return fixer.replaceText(jsdocNode, sourceLines.join('\\n'));\n });\n }\n});\n"],"file":"newlineAfterDescription.js"}