Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/matchDescription.js')
-rw-r--r--tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/matchDescription.js208
1 files changed, 208 insertions, 0 deletions
diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/matchDescription.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/matchDescription.js
new file mode 100644
index 00000000000..d0bb233b09b
--- /dev/null
+++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/matchDescription.js
@@ -0,0 +1,208 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// If supporting Node >= 10, we could loosen the default to this for the
+// initial letter: \\p{Upper}
+const matchDescriptionDefault = '^[A-Z`\\d_][\\s\\S]*[.?!`]$';
+
+const stringOrDefault = (value, userDefault) => {
+ return typeof value === 'string' ? value : userDefault || matchDescriptionDefault;
+};
+
+var _default = (0, _iterateJsdoc.default)(({
+ jsdoc,
+ report,
+ context,
+ utils
+}) => {
+ const {
+ mainDescription,
+ matchDescription,
+ message,
+ tags
+ } = context.options[0] || {};
+
+ const validateDescription = (description, tag) => {
+ let mainDescriptionMatch = mainDescription;
+ let errorMessage = message;
+
+ if (typeof mainDescription === 'object') {
+ mainDescriptionMatch = mainDescription.match;
+ errorMessage = mainDescription.message;
+ }
+
+ if (!tag && mainDescriptionMatch === false) {
+ return;
+ }
+
+ let tagValue = mainDescriptionMatch;
+
+ if (tag) {
+ const tagName = tag.tag;
+
+ if (typeof tags[tagName] === 'object') {
+ tagValue = tags[tagName].match;
+ errorMessage = tags[tagName].message;
+ } else {
+ tagValue = tags[tagName];
+ }
+ }
+
+ const regex = utils.getRegexFromString(stringOrDefault(tagValue, matchDescription));
+
+ if (!regex.test(description)) {
+ report(errorMessage || 'JSDoc description does not satisfy the regex pattern.', null, tag || {
+ // Add one as description would typically be into block
+ line: jsdoc.source[0].number + 1
+ });
+ }
+ };
+
+ if (jsdoc.description) {
+ const {
+ description
+ } = utils.getDescription();
+ validateDescription(description.replace(/\s+$/u, ''));
+ }
+
+ if (!tags || !Object.keys(tags).length) {
+ return;
+ }
+
+ const hasOptionTag = tagName => {
+ return Boolean(tags[tagName]);
+ };
+
+ utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {
+ const description = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();
+
+ if (hasOptionTag(targetTagName)) {
+ validateDescription(description, matchingJsdocTag);
+ }
+ }, true);
+ const whitelistedTags = utils.filterTags(({
+ tag: tagName
+ }) => {
+ return hasOptionTag(tagName);
+ });
+ const {
+ tagsWithNames,
+ tagsWithoutNames
+ } = utils.getTagsByType(whitelistedTags);
+ tagsWithNames.some(tag => {
+ const description = utils.getTagDescription(tag).replace(/^[- ]*/u, '').trim();
+ return validateDescription(description, tag);
+ });
+ tagsWithoutNames.some(tag => {
+ const description = (tag.name + ' ' + utils.getTagDescription(tag)).trim();
+ return validateDescription(description, tag);
+ });
+}, {
+ contextDefaults: true,
+ meta: {
+ docs: {
+ description: 'Enforces a regular expression pattern on descriptions.',
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-description'
+ },
+ schema: [{
+ additionalProperties: false,
+ properties: {
+ contexts: {
+ items: {
+ anyOf: [{
+ type: 'string'
+ }, {
+ additionalProperties: false,
+ properties: {
+ comment: {
+ type: 'string'
+ },
+ context: {
+ type: 'string'
+ }
+ },
+ type: 'object'
+ }]
+ },
+ type: 'array'
+ },
+ mainDescription: {
+ oneOf: [{
+ format: 'regex',
+ type: 'string'
+ }, {
+ type: 'boolean'
+ }, {
+ additionalProperties: false,
+ properties: {
+ match: {
+ oneOf: [{
+ format: 'regex',
+ type: 'string'
+ }, {
+ type: 'boolean'
+ }]
+ },
+ message: {
+ type: 'string'
+ }
+ },
+ type: 'object'
+ }]
+ },
+ matchDescription: {
+ format: 'regex',
+ type: 'string'
+ },
+ message: {
+ type: 'string'
+ },
+ tags: {
+ patternProperties: {
+ '.*': {
+ oneOf: [{
+ format: 'regex',
+ type: 'string'
+ }, {
+ enum: [true],
+ type: 'boolean'
+ }, {
+ additionalProperties: false,
+ properties: {
+ match: {
+ oneOf: [{
+ format: 'regex',
+ type: 'string'
+ }, {
+ enum: [true],
+ type: 'boolean'
+ }]
+ },
+ message: {
+ type: 'string'
+ }
+ },
+ type: 'object'
+ }]
+ }
+ },
+ type: 'object'
+ }
+ },
+ type: 'object'
+ }],
+ type: 'suggestion'
+ }
+});
+
+exports.default = _default;
+module.exports = exports.default;
+//# sourceMappingURL=matchDescription.js.map \ No newline at end of file