blob: 6ed078cfa65526ea1ef71aa2fe91f2c44220f41d [file] [log] [blame]
'use strict';
const balancedMatch = require('balanced-match');
const styleSearch = require('style-search');
/**
* Search a CSS string for functions by name.
* For every match, invoke the callback, passing the function's
* "argument(s) string" (whatever is inside the parentheses)
* as an argument.
*
* Callback will be called once for every matching function found,
* with the function's "argument(s) string" and its starting index
* as the arguments.
*
* @param {string} source
* @param {string} functionName
* @param {(expression: string, expressionIndex: number) => void} callback
*/
module.exports = function functionArgumentsSearch(source, functionName, callback) {
styleSearch(
{
source,
target: functionName,
functionNames: 'check',
},
(match) => {
if (source[match.endIndex] !== '(') {
return;
}
const parensMatch = balancedMatch('(', ')', source.substr(match.startIndex));
if (!parensMatch) {
throw new Error(`No parens match: "${source}"`);
}
callback(parensMatch.body, match.endIndex + 1);
},
);
};