'use strict'; const util = require("util"); const reorderOperatorExpressions = require("./index"); let operators = [{ associativity: "right", operators: ["++"] }, { associativity: "left", operators: ["*", "/"] }, { associativity: "left", operators: ["+", "-"] }, { associativity: "right", operators: ["//"] }, { associativity: "left", operators: ["<", "<=", ">", ">="] }, { // NOTE: Special case, can only occur once in sequence! associativity: "none", operators: ["==", "!="] }, { associativity: "left", operators: ["&&"] }, { associativity: "left", operators: ["||"] }, { // NOTE: Special case, can only occur once in sequence! associativity: "none", operators: ["->"] }]; // let testData = { // type: "operatorExpression", // operator: "+", // left: { type: "variable", name: "a" }, // right: { // type: "operatorExpression", // operator: "+", // left: { type: "variable", name: "b" }, // right: { // type: "operatorExpression", // operator: "-", // left: { type: "variable", name: "c" }, // right: { // type: "operatorExpression", // operator: "+", // left: { type: "variable", name: "d" }, // right: { // type: "operatorExpression", // operator: "-", // left: { type: "variable", name: "e" }, // right: { // type: "operatorExpression", // operator: "+", // left: { type: "variable", name: "f" }, // right: { type: "variable", name: "g" } // } // } // } // } // } // } let testData = { type: "operatorExpression", operator: "+", left: { type: "variable", name: "a" }, right: { type: "operatorExpression", operator: "*", left: { type: "variable", name: "b" }, right: { type: "operatorExpression", operator: "&&", left: { type: "variable", name: "c" }, right: { type: "operatorExpression", operator: "*", left: { type: "variable", name: "d" }, right: { type: "operatorExpression", operator: "-", left: { type: "variable", name: "e" }, right: { type: "operatorExpression", operator: "+", left: { type: "variable", name: "f" }, right: { type: "variable", name: "g" } } } } } } } console.log(util.inspect(reorderOperatorExpressions(testData, operators), {colors: true, depth: null}));