Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

stylelint-scss

Package Overview
Dependencies
Maintainers
2
Versions
112
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

stylelint-scss - npm Package Compare versions

Comparing version 3.12.1 to 3.13.0

5

CHANGELOG.md

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

# 3.13.0
- Added: support for stylelint version 12.
- Fixed: duplicate warnings in `at-rule-no-unknown` rule.
# 3.12.1

@@ -2,0 +7,0 @@

6

dist/rules/at-else-closing-brace-newline-after/index.js

@@ -13,6 +13,8 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isboolean"));
var _atIfClosingBraceNewlineAfter = require("../at-if-closing-brace-newline-after");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var ruleName = (0, _utils.namespace)("at-else-closing-brace-newline-after");

@@ -36,3 +38,3 @@ exports.ruleName = ruleName;

possible: {
disableFix: _lodash.isBoolean
disableFix: _lodash["default"]
},

@@ -39,0 +41,0 @@ optional: true

@@ -9,3 +9,3 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isstring"));

@@ -40,3 +40,3 @@ var _postcssValueParser = _interopRequireDefault(require("postcss-value-parser"));

ignore: ["single-argument"],
ignoreFunctions: [_lodash.isString]
ignoreFunctions: [_lodash["default"]]
},

@@ -43,0 +43,0 @@ optional: true

@@ -9,4 +9,6 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isregexp"));
var _lodash2 = _interopRequireDefault(require("lodash.isstring"));
var _stylelint = require("stylelint");

@@ -16,2 +18,4 @@

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var ruleName = (0, _utils.namespace)("at-function-pattern");

@@ -30,3 +34,3 @@ exports.ruleName = ruleName;

actual: pattern,
possible: [_lodash.isRegExp, _lodash.isString]
possible: [_lodash["default"], _lodash2["default"]]
});

@@ -38,3 +42,3 @@

var regexpPattern = (0, _lodash.isString)(pattern) ? new RegExp(pattern) : pattern;
var regexpPattern = (0, _lodash2["default"])(pattern) ? new RegExp(pattern) : pattern;
root.walkAtRules(function (decl) {

@@ -41,0 +45,0 @@ if (decl.name !== "function") {

@@ -14,4 +14,6 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isboolean"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var ruleName = (0, _utils.namespace)("at-if-closing-brace-newline-after");

@@ -35,3 +37,3 @@ exports.ruleName = ruleName;

possible: {
disableFix: _lodash.isBoolean
disableFix: _lodash["default"]
},

@@ -38,0 +40,0 @@ optional: true

@@ -9,4 +9,6 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isregexp"));
var _lodash2 = _interopRequireDefault(require("lodash.isstring"));
var _stylelint = require("stylelint");

@@ -36,3 +38,3 @@

actual: blacklistOption,
possible: [_lodash.isString, _lodash.isRegExp]
possible: [_lodash2["default"], _lodash["default"]]
});

@@ -63,3 +65,3 @@

blacklist.forEach(function (ext) {
if ((0, _lodash.isString)(ext) && extensionNormalized === ext || (0, _lodash.isRegExp)(ext) && extensionNormalized.search(ext) !== -1) {
if ((0, _lodash2["default"])(ext) && extensionNormalized === ext || (0, _lodash["default"])(ext) && extensionNormalized.search(ext) !== -1) {
_stylelint.utils.report({

@@ -66,0 +68,0 @@ message: messages.rejected(extension),

@@ -9,4 +9,6 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isregexp"));
var _lodash2 = _interopRequireDefault(require("lodash.isstring"));
var _stylelint = require("stylelint");

@@ -36,3 +38,3 @@

actual: whitelistOption,
possible: [_lodash.isString, _lodash.isRegExp]
possible: [_lodash2["default"], _lodash["default"]]
});

@@ -63,3 +65,3 @@

if (whitelist.some(function (ext) {
return (0, _lodash.isString)(ext) && extensionNormalized === ext || (0, _lodash.isRegExp)(ext) && extensionNormalized.search(ext) !== -1;
return (0, _lodash2["default"])(ext) && extensionNormalized === ext || (0, _lodash["default"])(ext) && extensionNormalized.search(ext) !== -1;
})) {

@@ -66,0 +68,0 @@ return;

@@ -9,4 +9,6 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isregexp"));
var _lodash2 = _interopRequireDefault(require("lodash.isstring"));
var _stylelint = require("stylelint");

@@ -16,2 +18,4 @@

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var ruleName = (0, _utils.namespace)("at-mixin-pattern");

@@ -30,3 +34,3 @@ exports.ruleName = ruleName;

actual: pattern,
possible: [_lodash.isRegExp, _lodash.isString]
possible: [_lodash["default"], _lodash2["default"]]
});

@@ -38,3 +42,3 @@

var regexpPattern = (0, _lodash.isString)(pattern) ? new RegExp(pattern) : pattern;
var regexpPattern = (0, _lodash2["default"])(pattern) ? new RegExp(pattern) : pattern;
root.walkAtRules(function (decl) {

@@ -41,0 +45,0 @@ if (decl.name !== "mixin") {

@@ -9,4 +9,2 @@ "use strict";

var _lodash = _interopRequireDefault(require("lodash"));
var _stylelint = require("stylelint");

@@ -16,4 +14,10 @@

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
var ruleName = (0, _utils.namespace)("at-rule-conditional-no-parentheses");

@@ -43,3 +47,3 @@ exports.ruleName = ruleName;

var groups = atrule.params.match(regex).slice(1);
atrule.params = _lodash["default"].uniq(groups).join(" ");
atrule.params = _toConsumableArray(new Set(groups)).join(" ");
}

@@ -59,3 +63,3 @@

// Check if this is a conditional rule.
if (!_lodash["default"].includes(conditional_rules, atrule.name)) {
if (!conditional_rules.includes(atrule.name)) {
return;

@@ -62,0 +66,0 @@ } // Else uses a different regex

@@ -9,4 +9,6 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isregexp"));
var _lodash2 = _interopRequireDefault(require("lodash.isstring"));
var _stylelint = require("stylelint");

@@ -16,2 +18,4 @@

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var sassAtRules = ["at-root", "content", "debug", "each", "else", "else if", "error", "extend", "for", "forward", "function", "if", "import", "include", "media", "mixin", "return", "use", "warn", "while"];

@@ -35,3 +39,3 @@ var ruleToCheckAgainst = "at-rule-no-unknown";

possible: {
ignoreAtRules: [_lodash.isRegExp, _lodash.isString]
ignoreAtRules: [_lodash["default"], _lodash2["default"]]
},

@@ -56,18 +60,16 @@ optional: true

}, function (warning) {
root.walkAtRules(function (atRule) {
var name = atRule.name;
var name = warning.node.name;
if (ignoreAtRules.indexOf(name) < 0) {
_stylelint.utils.report({
message: messages.rejected("@".concat(name)),
ruleName: ruleName,
result: result,
node: warning.node,
line: warning.line,
column: warning.column
});
}
});
if (ignoreAtRules.indexOf(name) < 0) {
_stylelint.utils.report({
message: messages.rejected("@".concat(name)),
ruleName: ruleName,
result: result,
node: warning.node,
line: warning.line,
column: warning.column
});
}
});
};
}

@@ -9,3 +9,3 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isboolean"));

@@ -16,2 +16,4 @@ var _stylelint = require("stylelint");

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var ruleName = (0, _utils.namespace)("dollar-variable-colon-newline-after");

@@ -40,3 +42,3 @@ exports.ruleName = ruleName;

possible: {
disableFix: _lodash.isBoolean
disableFix: _lodash["default"]
},

@@ -43,0 +45,0 @@ optional: true

@@ -13,4 +13,6 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isboolean"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var ruleName = (0, _utils.namespace)("dollar-variable-empty-line-before");

@@ -36,3 +38,3 @@ exports.ruleName = ruleName;

ignore: ["after-comment", "inside-single-line-block"],
disableFix: _lodash.isBoolean
disableFix: _lodash["default"]
},

@@ -39,0 +41,0 @@ optional: true

@@ -9,4 +9,2 @@ "use strict";

var _lodash = require("lodash");
var _stylelint = require("stylelint");

@@ -40,7 +38,7 @@

function isCustomIdentAtRule(node) {
return isAtRule(node.type) && (0, _lodash.includes)(customIdentAtRules, node.name);
return isAtRule(node.type) && customIdentAtRules.includes(node.name);
}
function isCustomIdentProp(node) {
return (0, _lodash.includes)(customIdentProps, node.prop);
return customIdentProps.includes(node.prop);
}

@@ -82,3 +80,3 @@

if (!isSassVar(prop) || (0, _lodash.includes)(vars, prop)) {
if (!isSassVar(prop) || vars.includes(prop)) {
return;

@@ -104,7 +102,7 @@ }

if (isAtSupports(node) || isCustomIdentProp(node)) {
return (0, _lodash.includes)(stringVars, value);
return stringVars.includes(value);
}
if (isCustomIdentAtRule(node)) {
return (0, _lodash.includes)(vars, value);
return vars.includes(value);
}

@@ -111,0 +109,0 @@

@@ -9,4 +9,6 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isregexp"));
var _lodash2 = _interopRequireDefault(require("lodash.isstring"));
var _stylelint = require("stylelint");

@@ -16,2 +18,4 @@

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var ruleName = (0, _utils.namespace)("dollar-variable-pattern");

@@ -30,3 +34,3 @@ exports.ruleName = ruleName;

actual: pattern,
possible: [_lodash.isRegExp, _lodash.isString]
possible: [_lodash["default"], _lodash2["default"]]
}, {

@@ -44,3 +48,3 @@ actual: options,

var regexpPattern = (0, _lodash.isString)(pattern) ? new RegExp(pattern) : pattern;
var regexpPattern = (0, _lodash2["default"])(pattern) ? new RegExp(pattern) : pattern;
root.walkDecls(function (decl) {

@@ -47,0 +51,0 @@ var prop = decl.prop;

@@ -11,6 +11,8 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isstring"));
var _utils = require("../../utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var ruleName = (0, _utils.namespace)("no-duplicate-dollar-variables");

@@ -35,3 +37,3 @@ exports.ruleName = ruleName;

ignoreInside: ["at-rule", "nested-at-rule"],
ignoreInsideAtRules: [_lodash.isString]
ignoreInsideAtRules: [_lodash["default"]]
},

@@ -38,0 +40,0 @@ optional: true

@@ -9,4 +9,6 @@ "use strict";

var _lodash = require("lodash");
var _lodash = _interopRequireDefault(require("lodash.isregexp"));
var _lodash2 = _interopRequireDefault(require("lodash.isstring"));
var _postcssResolveNestedSelector = _interopRequireDefault(require("postcss-resolve-nested-selector"));

@@ -35,3 +37,3 @@

actual: pattern,
possible: [_lodash.isRegExp, _lodash.isString]
possible: [_lodash["default"], _lodash2["default"]]
});

@@ -43,3 +45,3 @@

var placeholderPattern = (0, _lodash.isString)(pattern) ? new RegExp(pattern) : pattern; // Checking placeholder definitions (looking among regular rules)
var placeholderPattern = (0, _lodash2["default"])(pattern) ? new RegExp(pattern) : pattern; // Checking placeholder definitions (looking among regular rules)

@@ -46,0 +48,0 @@ root.walkRules(function (rule) {

@@ -8,4 +8,2 @@ "use strict";

var _lodash = require("lodash");
// Add an empty line before a node. Mutates the node.

@@ -20,3 +18,3 @@ function addEmptyLineBefore(node

if (!/\r?\n/.test(node.raws.before)) {
node.raws.before = (0, _lodash.repeat)(newline, 2) + node.raws.before;
node.raws.before = newline.repeat(2) + node.raws.before;
} else {

@@ -23,0 +21,0 @@ node.raws.before = node.raws.before.replace(/(\r?\n)/, "".concat(newline, "$1"));

@@ -8,6 +8,2 @@ "use strict";

var _lodash = _interopRequireDefault(require("lodash"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
/**

@@ -189,3 +185,3 @@ * Finds comments, both CSS comments and double slash ones, in a CSS string

comment.inlineBefore = rawString.substring(i + 2).search(/^\s*?\S+\s*?\n/) !== -1;
result.push(_lodash["default"].assign({}, comment));
result.push(Object.assign({}, comment));
comment = {}; // Skip the next loop as the / in */ is already checked

@@ -220,3 +216,3 @@

comment.inlineBefore = false;
result.push(_lodash["default"].assign({}, comment));
result.push(Object.assign({}, comment));
comment = {}; // Compensate for the `*/` added by postcss-scss

@@ -223,0 +219,0 @@

@@ -8,6 +8,2 @@ "use strict";

var _lodash = _interopRequireDefault(require("lodash"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
/**

@@ -28,7 +24,7 @@ * Check whether a selector has an interpolating ampersand

if (!_lodash["default"].isUndefined(selector[i - 1]) && !isCombinator(selector[i - 1])) {
if (selector[i - 1] !== undefined && !isCombinator(selector[i - 1])) {
return true;
}
if (!_lodash["default"].isUndefined(selector[i + 1]) && !isCombinator(selector[i + 1])) {
if (selector[i + 1] !== undefined && !isCombinator(selector[i + 1])) {
return true;

@@ -35,0 +31,0 @@ }

@@ -10,4 +10,2 @@ "use strict";

var _lodash = require("lodash");
var _postcssValueParser = _interopRequireDefault(require("postcss-value-parser"));

@@ -67,3 +65,3 @@

}, []);
return (0, _lodash.head)(keyVal);
return keyVal[0];
}

@@ -78,5 +76,5 @@

return (0, _lodash.head)(parsed.nodes.map(function (node) {
return parsed.nodes.map(function (node) {
return groupByKeyValue(node.nodes).map(mapToKeyValue);
}));
})[0];
}

@@ -160,3 +160,3 @@ "use strict";

} // ---- Processing / character
// http://sass-lang.com/documentation/file.SASS_REFERENCE.html#division-and-slash
// https://sass-lang.com/documentation/operators/numeric#slash-separated-values

@@ -861,3 +861,3 @@

var matches = after.match(/^\s*(-\s+|[+/*%]\s*)*[a-zA_Z_-][a-zA-Z_0-9-]*\(/);
var matches = after.match(/^\s*(-\s+|[+/*%]\s*)*[a-zA-Z_-][a-zA-Z_0-9-]*\(/);

@@ -894,3 +894,3 @@ if (matches) {

function isHexColorBefore(before) {
if (before.search(/(?:[/(){},+/*%-\s]|^)#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/) !== -1) {
if (before.search(/(?:[/(){},+*%-\s]|^)#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/) !== -1) {
return true;

@@ -897,0 +897,0 @@ }

@@ -8,4 +8,2 @@ "use strict";

var _lodash = require("lodash");
var _isWhitespace = _interopRequireDefault(require("./isWhitespace"));

@@ -217,3 +215,3 @@

function beforeAllowingIndentation(obj) {
before((0, _lodash.assign)({}, obj, {
before(Object.assign({}, obj, {
allowIndentation: true

@@ -309,3 +307,3 @@ }));

function afterOneOnly(obj) {
after((0, _lodash.assign)({}, obj, {
after(Object.assign({}, obj, {
onlyOneChar: true

@@ -312,0 +310,0 @@ }));

{
"name": "stylelint-scss",
"description": "A collection of SCSS specific rules for stylelint",
"version": "3.12.1",
"version": "3.13.0",
"author": "Krister Kari",

@@ -15,3 +15,5 @@ "babel": {

"dependencies": {
"lodash": "^4.17.15",
"lodash.isboolean": "^3.0.3",
"lodash.isregexp": "^4.0.1",
"lodash.isstring": "^4.0.1",
"postcss-media-query-parser": "^0.2.3",

@@ -23,9 +25,8 @@ "postcss-resolve-nested-selector": "^0.1.1",

"devDependencies": {
"@babel/cli": "^7.5.5",
"@babel/core": "^7.5.5",
"@babel/preset-env": "^7.5.5",
"@babel/cli": "^7.7.0",
"@babel/core": "^7.7.2",
"@babel/preset-env": "^7.7.1",
"babel-plugin-istanbul": "^5.2.0",
"babel-preset-jest": "^24.6.0",
"coveralls": "^3.0.6",
"eslint": "^6.1.0",
"babel-preset-jest": "^24.9.0",
"eslint": "^6.6.0",
"eslint-config-stylelint": "^11.1.0",

@@ -35,17 +36,16 @@ "eslint-plugin-lodash": "^6.0.0",

"github-contributors-list": "^1.2.3",
"husky": "^3.0.3",
"jest": "^24.8.0",
"jest-cli": "^24.8.0",
"lint-staged": "^9.2.1",
"husky": "^3.1.0",
"jest": "^24.9.0",
"jest-cli": "^24.9.0",
"lint-staged": "^9.4.3",
"lodash.get": "^4.4.2",
"npmpub": "^5.0.0",
"postcss": "^7.0.17",
"postcss": "^7.0.23",
"postcss-scss": "^2.0.0",
"prettier": "^1.18.2",
"request": "^2.88.0",
"prettier": "^1.19.1",
"rimraf": "^3.0.0",
"semver": "^6.3.0",
"stylelint": "^11.0.0"
"stylelint": "^12.0.0"
},
"peerDependencies": {
"stylelint": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0"
"stylelint": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0"
},

@@ -165,16 +165,14 @@ "engines": {

"scripts": {
"precommit": "lint-staged",
"coveralls": "nyc report --reporter=text-lcov | coveralls",
"prebuild": "rimraf dist",
"build": "babel src --out-dir dist",
"lint": "eslint . --ignore-path .gitignore",
"prettify": "prettier --write 'src/**/*.js'",
"prepublish": "npm run build",
"prettify": "prettier --write \"src/**/*.js\"",
"prepublishOnly": "npm run build",
"pretest": "npm run lint",
"release": "npmpub",
"jest": "jest",
"test": "jest --coverage",
"watch": "jest --watch",
"test-rule": "jest",
"test-util": "jest"
"test": "npm run jest -- --coverage",
"watch": "npm run jest -- --watch",
"test-rule": "npm run jest",
"test-util": "npm run jest"
},

@@ -186,3 +184,8 @@ "lint-staged": {

]
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
}
}
# stylelint-scss
[![NPM version](https://img.shields.io/npm/v/stylelint-scss.svg)](https://www.npmjs.com/package/stylelint-scss)
[![Build Status](https://travis-ci.org/kristerkari/stylelint-scss.svg?branch=master)](https://travis-ci.org/kristerkari/stylelint-scss)
[![Build status](https://ci.appveyor.com/api/projects/status/xa12kju6qmvmqs1n/branch/master?svg=true)](https://ci.appveyor.com/project/kristerkari/stylelint-scss/branch/master)
[![Coverage Status](https://coveralls.io/repos/github/kristerkari/stylelint-scss/badge.svg?branch=master)](https://coveralls.io/github/kristerkari/stylelint-scss?branch=master)
[![Build Status](https://github.com/kristerkari/stylelint-scss/workflows/Tests/badge.svg)](https://github.com/kristerkari/stylelint-scss/actions?workflow=Tests)
[![Coverage Status](https://img.shields.io/coveralls/github/kristerkari/stylelint-scss/master.svg)](https://coveralls.io/github/kristerkari/stylelint-scss?branch=master)
[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github)
[![Downloads per month](https://img.shields.io/npm/dm/stylelint-scss.svg)](http://npmcharts.com/compare/stylelint-scss)
[![Greenkeeper badge](https://badges.greenkeeper.io/kristerkari/stylelint-scss.svg)](https://greenkeeper.io/)
[![Downloads per month](https://img.shields.io/npm/dm/stylelint-scss.svg)](https://npmcharts.com/compare/stylelint-scss)

@@ -15,11 +13,11 @@ A collection of SCSS specific linting rules for [stylelint](https://github.com/stylelint/stylelint) (in a form of a plugin).

stylelint by itself supports [SCSS syntax](http://stylelint.io/user-guide/css-processors/#parsing-non-standard-syntax) very well (as well as other preprocessors' syntaxes). Moreover, it introduces some specific rules that can be used to lint SCSS, e.g. to limit [`nesting`](http://stylelint.io/user-guide/rules/max-nesting-depth/), control the way [`@-rules`](http://stylelint.io/user-guide/rules/#at-rule) are written. Yet stylelint is in general focused on standard CSS.
stylelint by itself supports [SCSS syntax](https://stylelint.io/user-guide/css-processors#parsing-non-standard-syntax) very well (as well as other preprocessors' syntaxes). Moreover, it introduces some specific rules that can be used to lint SCSS, e.g. to limit [`nesting`](https://stylelint.io/user-guide/rules/max-nesting-depth), control the way [`@-rules`](https://stylelint.io/user-guide/rules#at-rule) are written. Yet stylelint is in general focused on standard CSS.
stylelint-scss introduces rules specific to SCSS syntax. That said, the rules from this plugin can be used with other syntaxes, like Less or some PostCSS syntaxes. That's why the rules' names are not tied to SCSS only (`at-function-pattern` instead of `scss-function-pattern`).
The plugin follows stylelint's guidelines (about [rule names](http://stylelint.io/user-guide/about-rules/), testing and [so on](https://github.com/stylelint/stylelint/tree/master/docs/developer-guide)).
The plugin follows stylelint's guidelines (about [rule names](https://stylelint.io/user-guide/about-rules), testing and [so on](https://github.com/stylelint/stylelint/tree/master/docs/developer-guide)).
## Installation and usage
stylelint-scss is a plugin for [stylelint](http://stylelint.io/user-guide/), so it's meant to be used with it.
stylelint-scss is a plugin for [stylelint](https://stylelint.io/user-guide), so it's meant to be used with it.

@@ -49,7 +47,7 @@ **Node.js v6 or newer** is required. That's because stylelint itself [doesn't support Node.js versions below 6](https://github.com/stylelint/stylelint/issues/2996#issuecomment-352663375).

Please refer to [stylelint docs](http://stylelint.io/user-guide/) for the detailed info on using this linter.
Please refer to [stylelint docs](https://stylelint.io/user-guide) for the detailed info on using this linter.
## List of rules
Here are stylelint-scss' rules, grouped by the [_thing_](http://apps.workflower.fi/vocabs/css/en) they apply to (just like in [stylelint](http://stylelint.io/user-guide/about-rules/)).
Here are stylelint-scss' rules, grouped by the [_thing_](http://apps.workflower.fi/vocabs/css/en) they apply to (just like in [stylelint](https://stylelint.io/user-guide/about-rules)).

@@ -102,3 +100,3 @@ Please also see the [example configs](./docs/examples/) for special cases.

- [`at-rule-conditional-no-parentheses`](./src/rules/at-rule-conditional-no-parentheses/README.md): Disallow parentheses in conditional @ rules (if, elsif, while).
- [`at-rule-no-unknown`](./src/rules/at-rule-no-unknown/README.md): Disallow unknown at-rules. Should be used **instead of** stylelint's [at-rule-no-unknown](http://stylelint.io/user-guide/rules/at-rule-no-unknown/).
- [`at-rule-no-unknown`](./src/rules/at-rule-no-unknown/README.md): Disallow unknown at-rules. Should be used **instead of** stylelint's [at-rule-no-unknown](https://stylelint.io/user-guide/rules/at-rule-no-unknown).

@@ -140,5 +138,5 @@ ### `$`-variable

- [`function-color-relative`](./src/rules/function-color-relative/README.md): Encourage the use of the [scale-color](https://sass-lang.com/documentation/functions/color#scale-color) function over regular color functions.
- [`function-quote-no-quoted-strings-inside`](./src/rules/function-quote-no-quoted-strings-inside/README.md): Disallow quoted strings inside the [quote function](https://sass-lang.com/documentation/functions/string#quote) (Autofixable).
- [`function-unquote-no-unquoted-strings-inside`](./src/rules/function-unquote-no-unquoted-strings-inside/README.md): Disallow unquoted strings inside the [unquote function](https://sass-lang.com/documentation/functions/string#unquote) (Autofixable).
- [`function-color-relative`](./src/rules/function-color-relative/README.md): Encourage the use of the [scale-color](https://sass-lang.com/documentation/modules/color#scale-color) function over regular color functions.
- [`function-quote-no-quoted-strings-inside`](./src/rules/function-quote-no-quoted-strings-inside/README.md): Disallow quoted strings inside the [quote function](https://sass-lang.com/documentation/modules/string#quote) (Autofixable).
- [`function-unquote-no-unquoted-strings-inside`](./src/rules/function-unquote-no-unquoted-strings-inside/README.md): Disallow unquoted strings inside the [unquote function](https://sass-lang.com/documentation/modules/string#unquote) (Autofixable).

@@ -190,3 +188,3 @@ ### Map

There is also [stackoverflow](http://stackoverflow.com/questions/tagged/stylelint), which would be the preferred QA forum.
There is also [stackoverflow](https://stackoverflow.com/questions/tagged/stylelint), which would be the preferred QA forum.

@@ -193,0 +191,0 @@ ## Contributors

@@ -16,5 +16,5 @@ # at-else-closing-brace-newline-after

This rule might have conflicts with stylelint's core rule [`block-closing-brace-newline-after`](http://stylelint.io/user-guide/rules/block-closing-brace-newline-after/) if it doesn't have `"ignoreAtRules": ["else"]` in a `.stylelintrc` config file. That's because an `@else { ... }` statement can be successfully parsed as an at-rule with a block. You might also want to set `"ignoreAtRules": ["else"]` for another stylelint's core rule - [`at-rule-empty-line-before`](http://stylelint.io/user-guide/rules/at-rule-empty-line-before/) that could be forcing empty lines before at-rules (including `@else`s that follow `@if`s or other `@else`s).
This rule might have conflicts with stylelint's core rule [`block-closing-brace-newline-after`](https://stylelint.io/user-guide/rules/block-closing-brace-newline-after) if it doesn't have `"ignoreAtRules": ["else"]` in a `.stylelintrc` config file. That's because an `@else { ... }` statement can be successfully parsed as an at-rule with a block. You might also want to set `"ignoreAtRules": ["else"]` for another stylelint's core rule - [`at-rule-empty-line-before`](https://stylelint.io/user-guide/rules/at-rule-empty-line-before) that could be forcing empty lines before at-rules (including `@else`s that follow `@if`s or other `@else`s).
This rule doesn't have usual `"always"` and `"never"` main option values, because if you don't need special behavior for `@if` and `@else` you could just use [`block-closing-brace-newline-after`](http://stylelint.io/user-guide/rules/block-closing-brace-newline-after/) set to `"always"` or any other value.
This rule doesn't have usual `"always"` and `"never"` main option values, because if you don't need special behavior for `@if` and `@else` you could just use [`block-closing-brace-newline-after`](https://stylelint.io/user-guide/rules/block-closing-brace-newline-after) set to `"always"` or any other value.

@@ -21,0 +21,0 @@ ## Options

@@ -15,3 +15,3 @@ # at-else-closing-brace-space-after

This rule might have conflicts with stylelint's core [`block-closing-brace-space-after`](http://stylelint.io/user-guide/rules/block-closing-brace-space-after/) rule if the latter is set up in your `.stylelintrc` config file.
This rule might have conflicts with stylelint's core [`block-closing-brace-space-after`](https://stylelint.io/user-guide/rules/block-closing-brace-space-after) rule if the latter is set up in your `.stylelintrc` config file.

@@ -18,0 +18,0 @@ ## Options

@@ -16,3 +16,3 @@ # at-else-empty-line-before

`@if` and `@else` statements might need to have different behavior than all the other at-rules. For that you might need to set `"ignoreAtRules": ["else"]` for stylelint's core rule [`at-rule-empty-line-before`](http://stylelint.io/user-guide/rules/at-rule-empty-line-before/). But that would make you unable to disallow empty lines before `@else` while forcing it to be on a new line. This rule is designed to solve exactly that.
`@if` and `@else` statements might need to have different behavior than all the other at-rules. For that you might need to set `"ignoreAtRules": ["else"]` for stylelint's core rule [`at-rule-empty-line-before`](https://stylelint.io/user-guide/rules/at-rule-empty-line-before). But that would make you unable to disallow empty lines before `@else` while forcing it to be on a new line. This rule is designed to solve exactly that.

@@ -19,0 +19,0 @@ ## Options

@@ -14,5 +14,5 @@ # at-if-closing-brace-newline-after

This rule might have conflicts with stylelint's core rule [`block-closing-brace-newline-after`](http://stylelint.io/user-guide/rules/block-closing-brace-newline-after/) if it doesn't have `"ignoreAtRules": ["if"]` in a `.stylelintrc` config file. That's because an `@if { ... }` statement can be successfully parsed as an at-rule with a block. You might also want to set `"ignoreAtRules": ["else"]` for another stylelint's core rule - [`at-rule-empty-line-before`](http://stylelint.io/user-guide/rules/at-rule-empty-line-before/) that could be forcing empty lines before at-rules (including `@else`s that follow `@if`s or other `@else`s).
This rule might have conflicts with stylelint's core rule [`block-closing-brace-newline-after`](https://stylelint.io/user-guide/rules/block-closing-brace-newline-after) if it doesn't have `"ignoreAtRules": ["if"]` in a `.stylelintrc` config file. That's because an `@if { ... }` statement can be successfully parsed as an at-rule with a block. You might also want to set `"ignoreAtRules": ["else"]` for another stylelint's core rule - [`at-rule-empty-line-before`](https://stylelint.io/user-guide/rules/at-rule-empty-line-before) that could be forcing empty lines before at-rules (including `@else`s that follow `@if`s or other `@else`s).
This rule doesn't have usual `"always"` and `"never"` main option values, because if you don't need special behavior for `@if` and `@else` you could just use [`block-closing-brace-newline-after`](http://stylelint.io/user-guide/rules/block-closing-brace-newline-after/) set to `"always"` or any other value.
This rule doesn't have usual `"always"` and `"never"` main option values, because if you don't need special behavior for `@if` and `@else` you could just use [`block-closing-brace-newline-after`](https://stylelint.io/user-guide/rules/block-closing-brace-newline-after) set to `"always"` or any other value.

@@ -19,0 +19,0 @@ ## Options

@@ -14,3 +14,3 @@ # at-if-closing-brace-space-after

This rule might have conflicts with stylelint's core [`block-closing-brace-space-after`](http://stylelint.io/user-guide/rules/block-closing-brace-space-after/) rule if the latter is set up in your `.stylelintrc` config file.
This rule might have conflicts with stylelint's core [`block-closing-brace-space-after`](https://stylelint.io/user-guide/rules/block-closing-brace-space-after) rule if the latter is set up in your `.stylelintrc` config file.

@@ -17,0 +17,0 @@ ## Options

@@ -11,3 +11,3 @@ # at-import-no-partial-leading-underscore

The rule ignores [cases](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#import) when Sass considers an `@import` command just a plain CSS import:
The rule ignores [cases](https://sass-lang.com/documentation/at-rules/import) when Sass considers an `@import` command just a plain CSS import:

@@ -14,0 +14,0 @@ * If the file’s extension is `.css`.

@@ -11,3 +11,3 @@ # at-import-partial-extension-blacklist

The rule ignores [cases](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#import) when Sass considers an `@import` command just a plain CSS import:
The rule ignores [cases](https://sass-lang.com/documentation/at-rules/import) when Sass considers an `@import` command just a plain CSS import:

@@ -14,0 +14,0 @@ * If the file’s extension is `.css`.

@@ -11,3 +11,3 @@ # at-import-partial-extension-whitelist

The rule ignores [cases](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#import) when Sass considers an `@import` command just a plain CSS import:
The rule ignores [cases](https://sass-lang.com/documentation/at-rules/import) when Sass considers an `@import` command just a plain CSS import:

@@ -14,0 +14,0 @@ * If the file’s extension is `.css`.

@@ -11,3 +11,3 @@ # at-import-partial-extension

The rule ignores [cases](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#import) when Sass considers an `@import` command just a plain CSS import:
The rule ignores [cases](https://sass-lang.com/documentation/at-rules/import) when Sass considers an `@import` command just a plain CSS import:

@@ -14,0 +14,0 @@ - If the file’s extension is `.css`.

# at-rule-no-unknown
Disallow unknown at-rules. Should be used **instead of** stylelint's [at-rule-no-unknown](http://stylelint.io/user-guide/rules/at-rule-no-unknown/).
Disallow unknown at-rules. Should be used **instead of** stylelint's [at-rule-no-unknown](https://stylelint.io/user-guide/rules/at-rule-no-unknown).

@@ -5,0 +5,0 @@ ```css

@@ -15,3 +15,3 @@ # declaration-nested-properties-no-divided-groups

[Sass official docs on nested properties](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#nested_properties).
[Sass official docs on nested properties](https://sass-lang.com/documentation/style-rules/declarations#nesting).

@@ -18,0 +18,0 @@ The following patterns are considered warnings:

@@ -13,3 +13,3 @@ # declaration-nested-properties

[Sass official docs on nested properties](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#nested_properties).
[Sass official docs on nested properties](https://sass-lang.com/documentation/style-rules/declarations#nesting).

@@ -16,0 +16,0 @@ ## Options

@@ -15,3 +15,3 @@ # double-slash-comment-empty-line-before

This rule only works with SCSS-like [single-line comments](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#comments) and ignores:
This rule only works with SCSS-like [single-line comments](https://sass-lang.com/documentation/syntax/comments) and ignores:
* comments that are the very first nodes in a file;

@@ -18,0 +18,0 @@ * CSS comments (`/* */`);

@@ -14,3 +14,3 @@ # double-slash-comment-inline

This rule only works with SCSS-like [single-line comments](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#comments) and ignores CSS comments (`/* */`).
This rule only works with SCSS-like [single-line comments](https://sass-lang.com/documentation/syntax/comments) and ignores CSS comments (`/* */`).

@@ -17,0 +17,0 @@ ## Options

@@ -12,3 +12,3 @@ # double-slash-comment-whitespace-inside

This rule only works with SCSS-like [single-line comments](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#comments) and ignores CSS comments (`/* */`).
This rule only works with SCSS-like [single-line comments](https://sass-lang.com/documentation/syntax/comments) and ignores CSS comments (`/* */`).

@@ -15,0 +15,0 @@ Any number of slases are allowed at the beginning of the comment. So `/// comment` is treated the same way as `// comment`.

# function-color-relative
Encourage the use of the [scale-color](https://sass-lang.com/documentation/functions/color#scale-color) over:
Encourage the use of the [scale-color](https://sass-lang.com/documentation/modules/color#scale-color) over:
* [darken](https://sass-lang.com/documentation/functions/color#darken)
* [desaturate](https://sass-lang.com/documentation/functions/color#desaturate)
* [fade-in](https://sass-lang.com/documentation/functions/color#fade-in)
* [fade-out](https://sass-lang.com/documentation/functions/color#fade-out)
* [lighten](https://sass-lang.com/documentation/functions/color#lighten)
* [opacify](https://sass-lang.com/documentation/functions/color#opacify)
* [saturate](https://sass-lang.com/documentation/functions/color#saturate)
* [transparentize](https://sass-lang.com/documentation/functions/color#transparentize)
* [darken](https://sass-lang.com/documentation/modules/color#darken)
* [desaturate](https://sass-lang.com/documentation/modules/color#desaturate)
* [fade-in](https://sass-lang.com/documentation/modules/color#fade-in)
* [fade-out](https://sass-lang.com/documentation/modules/color#fade-out)
* [lighten](https://sass-lang.com/documentation/modules/color#lighten)
* [opacify](https://sass-lang.com/documentation/modules/color#opacify)
* [saturate](https://sass-lang.com/documentation/modules/color#saturate)
* [transparentize](https://sass-lang.com/documentation/modules/color#transparentize)

@@ -14,0 +14,0 @@ ```scss

# function-quote-no-quoted-strings-inside
Disallow quoted strings inside the [quote function](https://sass-lang.com/documentation/functions/string#quote)
Disallow quoted strings inside the [quote function](https://sass-lang.com/documentation/modules/string#quote)

@@ -5,0 +5,0 @@ ```scss

# function-unquote-no-unquoted-strings-inside
Disallow unquoted strings inside the [unquote function](https://sass-lang.com/documentation/functions/string#unquote)
Disallow unquoted strings inside the [unquote function](https://sass-lang.com/documentation/modules/string#unquote)

@@ -5,0 +5,0 @@ ```scss

@@ -16,7 +16,7 @@ # operator-no-newline-after

* `+` and `-` as signs before values;
* `+` and `-` as signs in [space-delimited lists](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#string_operations);
* `-` as part of [a string](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#string_operations) or [a Sass identifier](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#subtraction), e.g. a variable;
* `/` as a CSS delimiter in property values like `font: 10px/1.2 Arial;` ([read more](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#division-and-slash)).
* `+` and `-` as signs in [space-delimited lists](https://sass-lang.com/documentation/operators/string);
* `-` as part of [a string](https://sass-lang.com/documentation/operators/string) or [a Sass identifier](https://sass-lang.com/documentation/operators/numeric#unary-operators), e.g. a variable;
* `/` as a CSS delimiter in property values like `font: 10px/1.2 Arial;` ([read more](https://sass-lang.com/documentation/operators/numeric#slash-separated-values)).
For more details refer to [Sass official documentation](http://sass-lang.com/documentation/file.SASS_REFERENCE.html). An online Sass compiler - [Sassmeister](http://www.sassmeister.com/) - could also come in handy.
For more details refer to [Sass official documentation](https://sass-lang.com/documentation). An online Sass compiler - [Sassmeister](https://www.sassmeister.com/) - could also come in handy.

@@ -23,0 +23,0 @@ The following patterns are considered warnings:

@@ -17,7 +17,7 @@ # operator-no-newline-before

* `+` and `-` as signs before values;
* `+` and `-` as signs in [space-delimited lists](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#string_operations);
* `-` as part of [a string](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#string_operations) or [a Sass identifier](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#subtraction), e.g. a variable;
* `/` as a CSS delimiter in property values like `font: 10px/1.2 Arial;` ([read more](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#division-and-slash)).
* `+` and `-` as signs in [space-delimited lists](https://sass-lang.com/documentation/operators/string);
* `-` as part of [a string](https://sass-lang.com/documentation/operators/string) or [a Sass identifier](https://sass-lang.com/documentation/operators/numeric#unary-operators), e.g. a variable;
* `/` as a CSS delimiter in property values like `font: 10px/1.2 Arial;` ([read more](https://sass-lang.com/documentation/operators/numeric#slash-separated-values)).
For more details refer to [Sass official documentation](http://sass-lang.com/documentation/file.SASS_REFERENCE.html). An online Sass compiler - [Sassmeister](http://www.sassmeister.com/) - could also come in handy.
For more details refer to [Sass official documentation](https://sass-lang.com/documentation). An online Sass compiler - [Sassmeister](https://www.sassmeister.com/) - could also come in handy.

@@ -24,0 +24,0 @@ The following patterns are considered warnings:

@@ -16,7 +16,7 @@ # operator-no-unspaced

* `+` and `-` as signs before values;
* `+` and `-` as signs in [space-delimited lists](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#string_operations);
* `-` as part of [a string](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#string_operations) or [a Sass identifier](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#subtraction), e.g. a variable;
* `/` as a CSS delimiter in property values like `font: 10px/1.2 Arial;` ([read more](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#division-and-slash)).
* `+` and `-` as signs in [space-delimited lists](https://sass-lang.com/documentation/operators/string);
* `-` as part of [a string](https://sass-lang.com/documentation/operators/string) or [a Sass identifier](https://sass-lang.com/documentation/operators/numeric#unary-operators), e.g. a variable;
* `/` as a CSS delimiter in property values like `font: 10px/1.2 Arial;` ([read more](https://sass-lang.com/documentation/operators/numeric#slash-separated-values)).
For more details refer to [Sass official documentation](http://sass-lang.com/documentation/file.SASS_REFERENCE.html). An online Sass compiler - [Sassmeister](http://www.sassmeister.com/) - could also come in handy.
For more details refer to [Sass official documentation](https://sass-lang.com/documentation/file.SASS_REFERENCE.html). An online Sass compiler - [Sassmeister](https://www.sassmeister.com/) - could also come in handy.

@@ -23,0 +23,0 @@ The following patterns are considered warnings:

@@ -15,3 +15,3 @@ # partial-no-import

The rule also ignores [cases](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#import) when Sass considers an `@import` command just a plain CSS import:
The rule also ignores [cases](https://sass-lang.com/documentation/at-rules/import) when Sass considers an `@import` command just a plain CSS import:

@@ -18,0 +18,0 @@ * If the file’s extension is `.css`.

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