From dffaf2b78f9d993cb78ec44f915415b8ee0e8fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20Lef=C3=A8vre?= Date: Fri, 30 Jun 2023 13:43:31 +0000 Subject: [PATCH] [REF] spreadsheet: find odoo functions with iterator helper Part-of: odoo/odoo#127279 --- .../src/helpers/odoo_functions_helpers.js | 25 +++---------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/addons/spreadsheet/static/src/helpers/odoo_functions_helpers.js b/addons/spreadsheet/static/src/helpers/odoo_functions_helpers.js index 124501945a3..d22885e6f35 100644 --- a/addons/spreadsheet/static/src/helpers/odoo_functions_helpers.js +++ b/addons/spreadsheet/static/src/helpers/odoo_functions_helpers.js @@ -2,7 +2,7 @@ import * as spreadsheet from "@odoo/o-spreadsheet"; -const { parse } = spreadsheet; +const { parse, iterateAstNodes } = spreadsheet; /** * @typedef {Object} OdooFunctionDescription @@ -47,24 +47,7 @@ export function getOdooFunctions(formula, functionNames) { * @returns {Array} */ function _getOdooFunctionsFromAST(ast, functionNames) { - switch (ast.type) { - case "UNARY_OPERATION": - return _getOdooFunctionsFromAST(ast.operand, functionNames); - case "BIN_OPERATION": { - return _getOdooFunctionsFromAST(ast.left, functionNames).concat( - _getOdooFunctionsFromAST(ast.right, functionNames) - ); - } - case "FUNCALL": { - const functionName = ast.value.toUpperCase(); - - if (functionNames.includes(functionName)) { - return [{ functionName, args: ast.args, isMatched: true }]; - } else { - return ast.args.map((arg) => _getOdooFunctionsFromAST(arg, functionNames)).flat(); - } - } - default: - return []; - } + return iterateAstNodes(ast) + .filter((ast) => ast.type === "FUNCALL" && functionNames.includes(ast.value.toUpperCase())) + .map((ast) => ({ functionName: ast.value.toUpperCase(), args: ast.args, isMatched: true })); }