29 lines
824 B
JavaScript
29 lines
824 B
JavaScript
|
const parser = require("@babel/parser");
|
||
|
const generate = require("@babel/generator").default
|
||
|
const traverse = require("@babel/traverse").default
|
||
|
const types = require("@babel/types")
|
||
|
|
||
|
const code = `
|
||
|
const a = !![]+!![]+!![];
|
||
|
const b = Math.floor(12.34 * 2.12)
|
||
|
const c = 10 >> 3 << 1
|
||
|
const d = String(21.3 + 14 * 1.32)
|
||
|
const e = parseInt("1.893" + "45.9088")
|
||
|
const f = parseFloat("23.2334" + "21.89112")
|
||
|
const g = 20 < 18 ? '未成年' : '成年'
|
||
|
`
|
||
|
const ast = parser.parse(code)
|
||
|
|
||
|
const visitor = {
|
||
|
"BinaryExpression|CallExpression|ConditionalExpression"(path) {
|
||
|
const {confident, value} = path.evaluate()
|
||
|
console.log(value)
|
||
|
if (confident){
|
||
|
path.replaceInline(types.valueToNode(value))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
traverse(ast, visitor)
|
||
|
const result = generate(ast)
|
||
|
// console.log(result.code)
|