Skip to content

Commit

Permalink
Support at-rules in no-global-function-names
Browse files Browse the repository at this point in the history
  • Loading branch information
FloEdelmann committed Apr 19, 2024
1 parent 26c105c commit b7a30d8
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 3 deletions.
55 changes: 55 additions & 0 deletions src/rules/no-global-function-names/__tests__/index.js
Expand Up @@ -290,6 +290,26 @@ testRule({
@debug string.unique-id()
`,
description: "string.unique-id"
},
{
code: `
@use "sass:meta"
@function is-number($value) {
@return meta.type-of($value) == 'number'
}
`,
description: "Allowed non-global function in @return"
},
{
code: `
@use "sass:meta"
@mixin foo($name) {
@if meta.type-of($name) != 'string' {
@error 'name must be a string, but was ' + meta.type-of($name)
}
}
`,
description: "Allowed non-global function in @if and @error"
}
],

Expand Down Expand Up @@ -491,6 +511,41 @@ testRule({
"Expected color.adjust($color, $lightness: $amount) instead of lighten($color, $amount)"
),
description: "lighten"
},
{
code: `
@function is-number($value) {
@return type-of($value) == 'number'
}
`,
line: 3,
column: 17,
message: messages.rejected("type-of"),
description: "Global function in @return"
},
{
code: `
@mixin foo($name) {
@if type-of($name) != 'string' {
@error 'name must be a test(string), but was' + type-of($name)
}
}
`,
warnings: [
{
line: 3,
column: 13,
message: messages.rejected("type-of"),
description: "Global function in @if"
},
{
line: 4,
column: 59,
message: messages.rejected("type-of"),
description: "Global function in @error"
}
],
description: "Global function in @if and @error"
}
]
});
15 changes: 12 additions & 3 deletions src/rules/no-global-function-names/index.js
Expand Up @@ -2,6 +2,7 @@

const valueParser = require("postcss-value-parser");
const { utils } = require("stylelint");
const getAtRuleParams = require("stylelint/lib/utils/getAtRuleParams.cjs");
const namespace = require("../../utils/namespace");
const ruleUrl = require("../../utils/ruleUrl");

Expand Down Expand Up @@ -173,7 +174,15 @@ function rule(value) {
}

root.walkDecls(decl => {
valueParser(decl.value).walk(node => {
checkValue(decl, decl.value);
});
root.walkAtRules(atRule => {
const params = getAtRuleParams(atRule);
checkValue(atRule, params);
});

function checkValue(parentNode, value) {
valueParser(value).walk(node => {
const cleanValue = node.value.replace(interpolationPrefix, "");

// Verify that we're only looking at functions.
Expand All @@ -184,14 +193,14 @@ function rule(value) {
if (rules[cleanValue]) {
utils.report({
message: messages.rejected(cleanValue),
node: decl,
node: parentNode,
word: cleanValue,
result,
ruleName
});
}
});
});
}
};
}

Expand Down

0 comments on commit b7a30d8

Please sign in to comment.