# File lib/rake.rb, line 292
292:     def enhance_with_matching_rule(task_name, level=0)
293:       fail Rake::RuleRecursionOverflowError,
294:         "Rule Recursion Too Deep" if level >= 16
295:       RULES.each do |pattern, extensions, block|
296:         if md = pattern.match(task_name)
297:           ext = extensions.first
298:           case ext
299:           when String
300:             source = task_name.sub(/\.[^.]*$/, ext)
301:           when Proc
302:             source = ext.call(task_name)
303:           else
304:             fail "Don't know how to handle rule dependent: #{ext.inspect}"
305:           end
306:           if File.exist?(source) || Task.task_defined?(source)
307:             task = FileTask.define_task({task_name => [source]}, &block)
308:             task.source = source
309:             return task
310:           elsif parent = enhance_with_matching_rule(source, level+1)
311:             task = FileTask.define_task({task_name => [parent.name]}, &block)
312:             task.source = parent.name
313:             return task
314:           end
315:         end
316:       end
317:       nil
318:     rescue Rake::RuleRecursionOverflowError => ex
319:       ex.add_target(task_name)
320:       fail ex
321:     end