Remove Console Example
Remove all console.log() calls from your JavaScript code.
Code
reluxscript
plugin RemoveConsole {
fn visit_call_expression(node: &mut CallExpression, ctx: &Context) {
// Check if this is a console.log call
if let Callee::MemberExpression(ref member) = node.callee {
if let Expression::Identifier(ref obj) = *member.object {
if obj.name == "console" {
if let Expression::Identifier(ref prop) = *member.property {
if prop.name == "log" {
ctx.remove();
}
}
}
}
}
}
}Input
javascript
console.log("Starting...");
doWork();
console.log("Done!");Output
javascript
doWork();How It Works
visit_call_expressionis called for every function call- Use nested
if letto check if callee is a member expression - Check if the object is an identifier named "console"
- Check if the property is an identifier named "log"
- If all conditions match, call
ctx.remove()to remove the statement
Variations
Remove All Console Methods
reluxscript
fn visit_call_expression(node: &mut CallExpression, ctx: &Context) {
if let Callee::MemberExpression(ref member) = node.callee {
if let Expression::Identifier(ref obj) = *member.object {
if obj.name == "console" {
// Remove any console.* call
ctx.remove();
}
}
}
}Remove Specific Methods
reluxscript
fn visit_call_expression(node: &mut CallExpression, ctx: &Context) {
if let Callee::MemberExpression(ref member) = node.callee {
if let Expression::Identifier(ref obj) = *member.object {
if obj.name == "console" {
if let Expression::Identifier(ref prop) = *member.property {
if prop.name == "log" || prop.name == "debug" {
ctx.remove();
}
}
}
}
}
}