jruby-parser icon indicating copy to clipboard operation
jruby-parser copied to clipboard

Rewrite code case

Open rainmantsr opened this issue 7 years ago • 3 comments

I am using jruby-parser to rewrite code, but with some code is has some problems: This: require 'jruby-parser'

root = JRubyParser.parse( %q{ def log(severity) case severity when Severity::DEBUG @logging_services.debug(msg.to_s)
when Severity::INFO @logging_services.info(msg.to_s)
when Severity::WARNING @logging_services.warn(msg.to_s)
else @logging_services.error(msg.to_s)
end end } )

root.to_source

produces: def log severity case severity[ when Severity @logging_services.debug(msg.to_s) when Severity @logging_services.info(msg.to_s) when Severity @logging_services.warn(msg.to_s) else @logging_services.error(msg.to_s), when Severity @logging_services.info(msg.to_s) when Severity @logging_services.warn(msg.to_s) else @logging_services.error(msg.to_s), when Severity @logging_services.warn(msg.to_s) else @logging_services.error(msg.to_s)] end end

Can I do something to avoid this behaviour?

rainmantsr avatar Apr 03 '18 09:04 rainmantsr

rewriter definitely is broken in this case. It looks like two bugs in fact. All whens get the same 'else' added and also each case is only calling the first part of the constant (also referred to as Colon2 in this case).

enebo avatar Apr 06 '18 13:04 enebo

src/org/jrubyparser/ast/RootNode.java

chirejaszy avatar May 31 '21 08:05 chirejaszy

require 'jruby-parser'

root = JRubyParser.parse("b = foo(1)") fcall = root.find_node(:fcall) fcall.name = 'bar' fcall.args[0] = true

Write out the new source

root.to_source # b = bar(true)

chirejaszy avatar May 31 '21 08:05 chirejaszy