Socket
Socket
Sign inDemoInstall

eslint-plugin-jsdoc

Package Overview
Dependencies
Maintainers
1
Versions
656
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eslint-plugin-jsdoc - npm Package Compare versions

Comparing version 3.2.0 to 3.3.0

14

dist/iterateJsdoc.js

@@ -78,3 +78,13 @@ 'use strict';

var report = function report(message) {
context.report(jsdocNode, message);
var fixer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
if (fixer === null) {
context.report(jsdocNode, message);
} else {
context.report({
fix: fixer,
message,
node: jsdocNode
});
}
};

@@ -87,5 +97,7 @@

functionNode,
indent,
jsdoc,
jsdocNode,
report,
sourceCode,
utils

@@ -92,0 +104,0 @@ });

@@ -27,2 +27,4 @@ 'use strict';

var jsdoc = _ref.jsdoc,
jsdocNode = _ref.jsdocNode,
sourceCode = _ref.sourceCode,
report = _ref.report;

@@ -37,4 +39,8 @@

if (strictNativeType.toLowerCase() === jsdocTag.type.toLowerCase() && strictNativeType !== jsdocTag.type) {
report('Invalid JSDoc @' + jsdocTag.tag + ' "' + jsdocTag.name + '" type "' + jsdocTag.type + '".');
var fix = function fix(fixer) {
return fixer.replaceText(jsdocNode, sourceCode.getText(jsdocNode).replace('{' + jsdocTag.type + '}', '{' + strictNativeType + '}'));
};
report('Invalid JSDoc @' + jsdocTag.tag + ' "' + jsdocTag.name + '" type "' + jsdocTag.type + '".', fix);
return true;

@@ -41,0 +47,0 @@ }

@@ -20,3 +20,6 @@ 'use strict';

report = _ref.report,
context = _ref.context;
context = _ref.context,
jsdocNode = _ref.jsdocNode,
sourceCode = _ref.sourceCode,
indent = _ref.indent;

@@ -42,6 +45,26 @@ var always = void 0;

if (!descriptionEndsWithANewline) {
report('There must be a newline after the description of the JSDoc block.');
report('There must be a newline after the description of the JSDoc block.', function (fixer) {
var sourceLines = sourceCode.getText(jsdocNode).split('\n');
var lastDescriptionLine = _lodash2.default.findLastIndex(sourceLines, function (line) {
return _lodash2.default.includes(line, _lodash2.default.last(jsdoc.description.split('\n')));
});
// Add the new line
sourceLines.splice(lastDescriptionLine + 1, 0, indent + ' * ');
return fixer.replaceText(jsdocNode, sourceLines.join('\n'));
});
}
} else if (descriptionEndsWithANewline) {
report('There must be no newline after the description of the JSDoc block.');
report('There must be no newline after the description of the JSDoc block.', function (fixer) {
var sourceLines = sourceCode.getText(jsdocNode).split('\n');
var lastDescriptionLine = _lodash2.default.findLastIndex(sourceLines, function (line) {
return _lodash2.default.includes(line, _lodash2.default.last(jsdoc.description.split('\n')));
});
// Remove the extra line
sourceLines.splice(lastDescriptionLine + 1, 1);
return fixer.replaceText(jsdocNode, sourceLines.join('\n'));
});
}

@@ -48,0 +71,0 @@ });

@@ -21,2 +21,12 @@ 'use strict';

var extractSentences = function extractSentences(text) {
return text.split(/\.\s*/).filter(function (sentence) {
// Ignore sentences with only whitespaces.
return !/^\s*$/.test(sentence);
}).map(function (sentence) {
// Re-add the dot.
return sentence + '.';
});
};
var isNewLinePrecededByAPeriod = function isNewLinePrecededByAPeriod(text) {

@@ -42,3 +52,7 @@ var lastLineEndsSentence = void 0;

var validateDescription = function validateDescription(description, report) {
var capitalize = function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
};
var validateDescription = function validateDescription(description, report, jsdocNode, sourceCode) {
if (!description) {

@@ -50,16 +64,52 @@ return false;

return _lodash2.default.some(paragraphs, function (paragraph, index) {
if (!isCapitalized(paragraph)) {
if (index === 0) {
report('Description must start with an uppercase character.');
} else {
report('Paragraph must start with an uppercase character.');
}
return _lodash2.default.some(paragraphs, function (paragraph) {
var sentences = extractSentences(paragraph);
return true;
if (_lodash2.default.some(sentences, function (sentence) {
return !isCapitalized(sentence);
})) {
report('Sentence should start with an uppercase character.', function (fixer) {
var text = sourceCode.getText(jsdocNode);
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = sentences.filter(function (sentence_) {
return !isCapitalized(sentence_);
})[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var sentence = _step.value;
var beginning = sentence.split(/\n/)[0];
text = text.replace(beginning, capitalize(beginning));
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return fixer.replaceText(jsdocNode, text);
});
}
if (!/\.$/.test(paragraph)) {
report('Sentence must end with a period.');
report('Sentence must end with a period.', function (fixer) {
var line = _lodash2.default.last(paragraph.split('\n'));
var replacement = sourceCode.getText(jsdocNode).replace(line, line + '.');
return fixer.replaceText(jsdocNode, replacement);
});
return true;

@@ -79,6 +129,8 @@ }

exports.default = (0, _iterateJsdoc2.default)(function (_ref) {
var jsdoc = _ref.jsdoc,
report = _ref.report;
var sourceCode = _ref.sourceCode,
jsdoc = _ref.jsdoc,
report = _ref.report,
jsdocNode = _ref.jsdocNode;
if (validateDescription(jsdoc.description, report)) {
if (validateDescription(jsdoc.description, report, jsdocNode, sourceCode)) {
return;

@@ -94,3 +146,3 @@ }

return validateDescription(description, report);
return validateDescription(description, report, jsdocNode, sourceCode);
});

@@ -97,0 +149,0 @@ });

12

dist/rules/requireHyphenBeforeParamDescription.js

@@ -18,4 +18,6 @@ 'use strict';

exports.default = (0, _iterateJsdoc2.default)(function (_ref) {
var jsdoc = _ref.jsdoc,
report = _ref.report;
var sourceCode = _ref.sourceCode,
jsdoc = _ref.jsdoc,
report = _ref.report,
jsdocNode = _ref.jsdocNode;

@@ -28,3 +30,7 @@ var jsdocTags = _lodash2.default.filter(jsdoc.tags, {

if (jsdocTag.description && !_lodash2.default.startsWith(jsdocTag.description, '-')) {
report('There must be a hyphen before @param description.');
report('There must be a hyphen before @param description.', function (fixer) {
var replacement = sourceCode.getText(jsdocNode).replace(jsdocTag.description, '- ' + jsdocTag.description);
return fixer.replaceText(jsdocNode, replacement);
});
}

@@ -31,0 +37,0 @@ });

@@ -1,1 +0,1 @@

{"author":{"email":"gajus@gajus.com","name":"Gajus Kuizinas","url":"http://gajus.com"},"dependencies":{"comment-parser":"^0.4.2","lodash":"^4.17.4"},"description":"JSDoc linting rules for ESLint.","devDependencies":{"babel-cli":"^6.26.0","babel-plugin-add-module-exports":"^0.2.1","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1","babel-register":"^6.26.0","chai":"^4.1.2","eslint":"^4.7.2","eslint-config-canonical":"^9.3.1","gitdown":"^2.5.1","globby":"^6.1.0","mocha":"^3.5.3","semantic-release":"^8.0.3"},"engines":{"node":">=4"},"keywords":["eslint","plugin","jsdoc"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-jsdoc","peerDependencies":{"eslint":">=0.8.0"},"repository":{"type":"git","url":"https://github.com/gajus/eslint-plugin-jsdoc"},"scripts":{"add-assertions":"babel-node --presets es2015 ./bin/readme-assertions","build":"NODE_ENV=production babel ./src --out-dir ./dist --copy-files --source-maps","generate-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run add-assertions","lint":"eslint ./src ./test","test":"mocha --recursive --compilers js:babel-register"},"version":"3.2.0"}
{"author":{"email":"gajus@gajus.com","name":"Gajus Kuizinas","url":"http://gajus.com"},"dependencies":{"comment-parser":"^0.4.2","lodash":"^4.17.4"},"description":"JSDoc linting rules for ESLint.","devDependencies":{"babel-cli":"^6.26.0","babel-plugin-add-module-exports":"^0.2.1","babel-plugin-transform-flow-strip-types":"^6.22.0","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1","babel-register":"^6.26.0","chai":"^4.1.2","eslint":"^4.7.2","eslint-config-canonical":"^9.3.1","gitdown":"^2.5.1","globby":"^6.1.0","mocha":"^3.5.3","semantic-release":"^8.0.3"},"engines":{"node":">=4"},"keywords":["eslint","plugin","jsdoc"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-jsdoc","peerDependencies":{"eslint":">=0.8.0"},"repository":{"type":"git","url":"https://github.com/gajus/eslint-plugin-jsdoc"},"scripts":{"add-assertions":"babel-node --presets es2015 ./bin/readme-assertions","build":"NODE_ENV=production babel ./src --out-dir ./dist --copy-files --source-maps","generate-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run add-assertions","lint":"eslint ./src ./test","test":"mocha --recursive --compilers js:babel-register"},"version":"3.3.0"}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc