index.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports["default"] = rule;
  6. exports.ruleName = exports.meta = exports.messages = void 0;
  7. var _postcssValueParser = _interopRequireDefault(require("postcss-value-parser"));
  8. var _stylelint = require("stylelint");
  9. var _utils = require("../../utils");
  10. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
  11. var ruleName = (0, _utils.namespace)("function-unquote-no-unquoted-strings-inside");
  12. exports.ruleName = ruleName;
  13. var messages = _stylelint.utils.ruleMessages(ruleName, {
  14. rejected: "Unquote function used with an already-unquoted string"
  15. });
  16. exports.messages = messages;
  17. var meta = {
  18. url: (0, _utils.ruleUrl)(ruleName)
  19. };
  20. exports.meta = meta;
  21. function rule(primary, _, context) {
  22. return function (root, result) {
  23. var validOptions = _stylelint.utils.validateOptions(result, ruleName, {
  24. actual: primary
  25. });
  26. if (!validOptions) {
  27. return;
  28. }
  29. // Setup variable naming.
  30. var vars = {};
  31. root.walkDecls(function (decl) {
  32. if (decl.prop[0] !== "$") {
  33. return;
  34. }
  35. (0, _postcssValueParser["default"])(decl.value).walk(function (node) {
  36. vars[decl.prop] = node.type;
  37. });
  38. });
  39. root.walkDecls(function (decl) {
  40. (0, _postcssValueParser["default"])(decl.value).walk(function (node) {
  41. // Verify that we're only looking at functions.
  42. if (node.type !== "function" || (0, _utils.isNativeCssFunction)(node.value) || node.value === "") {
  43. return;
  44. }
  45. // Verify we're only looking at quote() calls.
  46. if (node.value !== "unquote") {
  47. return;
  48. }
  49. // Report error if first character is a quote.
  50. // postcss-value-parser represents quoted strings as type 'string' (as opposed to word)
  51. if (!node.nodes[0].quote && node.nodes[0].value[0] !== "$" || vars[node.nodes[0].value] === "word") {
  52. if (context.fix) {
  53. var contents = /unquote\((.*)\)/.exec(decl.value);
  54. decl.value = contents[1];
  55. } else {
  56. _stylelint.utils.report({
  57. message: messages.rejected,
  58. node: decl,
  59. index: (0, _utils.declarationValueIndex)(decl) + node.sourceIndex,
  60. result: result,
  61. ruleName: ruleName
  62. });
  63. }
  64. }
  65. });
  66. });
  67. };
  68. }
  69. rule.ruleName = ruleName;
  70. rule.messages = messages;
  71. rule.meta = meta;