Module: Maccro::Impl
- Defined in:
- lib/maccro/impl.rb
Class Method Summary collapse
-
.update_by_rules(ast, source, rules) ⇒ Object
for internal use.
Class Method Details
.update_by_rules(ast, source, rules) ⇒ Object
for internal use
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/maccro/impl.rb', line 4 def self.update_by_rules(ast, source, rules) CodeUtil.extend_tree_with_wrapper(ast) rewrite_happens = false first_time = true while rewrite_happens || first_time rewrite_happens = false first_time = false try_once = ->(rule) { matched = rule.match(ast) next unless matched source = matched.rewrite(source) ast = yield source, ast.first_lineno, ast.first_column CodeUtil.extend_tree_with_wrapper(ast) rewrite_happens = true try_once.call(rule) } rules.each_pair do |_name, this_rule| try_once.call(this_rule) break if rewrite_happens # to retry all rules end end return ast, source end |