diff options
Diffstat (limited to 'assets/node_modules/stylelint/lib/rules/comment-whitespace-inside/index.js')
-rwxr-xr-x | assets/node_modules/stylelint/lib/rules/comment-whitespace-inside/index.js | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/assets/node_modules/stylelint/lib/rules/comment-whitespace-inside/index.js b/assets/node_modules/stylelint/lib/rules/comment-whitespace-inside/index.js new file mode 100755 index 0000000..d4aadfc --- /dev/null +++ b/assets/node_modules/stylelint/lib/rules/comment-whitespace-inside/index.js @@ -0,0 +1,115 @@ +'use strict'; + +const _ = require('lodash'); + +const isWhitespace = require('../../utils/isWhitespace'); +const report = require('../../utils/report'); +const ruleMessages = require('../../utils/ruleMessages'); +const validateOptions = require('../../utils/validateOptions'); + +const ruleName = 'comment-whitespace-inside'; + +const messages = ruleMessages(ruleName, { + expectedOpening: 'Expected whitespace after "/*"', + rejectedOpening: 'Unexpected whitespace after "/*"', + expectedClosing: 'Expected whitespace before "*/"', + rejectedClosing: 'Unexpected whitespace before "*/"', +}); + +function rule(expectation, options, context) { + return function(root, result) { + const validOptions = validateOptions(result, ruleName, { + actual: expectation, + possible: ['always', 'never'], + }); + + if (!validOptions) { + return; + } + + root.walkComments(function(comment) { + if (comment.raws.inline || comment.inline) { + return; + } + + const rawComment = comment.toString(); + const firstFourChars = rawComment.substr(0, 4); + + // Return early if sourcemap or copyright comment + if (/^\/\*[#!]\s/.test(firstFourChars)) { + return; + } + + const leftMatches = rawComment.match(/(^\/\*+)(\s)?/); + const rightMatches = rawComment.match(/(\s)?(\*+\/)$/); + const opener = leftMatches[1]; + const leftSpace = leftMatches[2] || ''; + const rightSpace = rightMatches[1] || ''; + const closer = rightMatches[2]; + + if (expectation === 'never' && leftSpace !== '') { + complain(messages.rejectedOpening, opener.length); + } + + if (expectation === 'always' && !isWhitespace(leftSpace)) { + complain(messages.expectedOpening, opener.length); + } + + if (expectation === 'never' && rightSpace !== '') { + complain(messages.rejectedClosing, comment.toString().length - closer.length - 1); + } + + if (expectation === 'always' && !isWhitespace(rightSpace)) { + complain(messages.expectedClosing, comment.toString().length - closer.length - 1); + } + + function addWhitespaceBefore(comment) { + if (comment.text.startsWith('*')) { + comment.text = comment.text.replace(/^(\*+)/, `$1 `); + } else { + comment.raws.left = ' '; + } + } + + function addWhitespaceAfter(comment) { + if (_.last(comment.text) === '*') { + comment.text = comment.text.replace(/(\*+)$/, ` $1`); + } else { + comment.raws.right = ' '; + } + } + + function complain(message, index) { + if (context.fix) { + if (expectation === 'never') { + comment.raws.left = ''; + comment.raws.right = ''; + comment.text = comment.text.replace(/^(\*+)(\s+)?/, '$1').replace(/(\s+)?(\*+)$/, '$2'); + } else { + if (!leftSpace) { + addWhitespaceBefore(comment); + } + + if (!rightSpace) { + addWhitespaceAfter(comment); + } + } + + return; + } + + report({ + message, + index, + result, + ruleName, + node: comment, + }); + } + }); + }; +} + +rule.ruleName = ruleName; +rule.messages = messages; +module.exports = rule; |