Skip to content

Commit d54013d

Browse files
Christina Thompsonyuki24
authored andcommitted
Added did you mean to rake
Signed-off-by: Yuki Nishijima <yuki@artsymail.com>
1 parent 60aeb13 commit d54013d

2 files changed

Lines changed: 27 additions & 2 deletions

File tree

lib/rake/task_manager.rb

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,21 @@ def [](task_name, scopes=nil)
5656
self.lookup(task_name, scopes) or
5757
enhance_with_matching_rule(task_name) or
5858
synthesize_file_task(task_name) or
59-
fail "Don't know how to build task '#{task_name}' (see --tasks)"
59+
fail generate_message_for_undefined_task(task_name)
60+
end
61+
62+
def generate_message_for_undefined_task(task_name)
63+
message = "Don't know how to build task '#{task_name}' (see --tasks)"
64+
65+
suggestion_message = \
66+
if defined?(::DidYouMean::SpellChecker) && defined?(::DidYouMean::Formatter)
67+
suggestions = ::DidYouMean::SpellChecker.new(dictionary: @tasks.keys).correct(task_name.to_s)
68+
::DidYouMean::Formatter.new(suggestions).to_s
69+
else
70+
""
71+
end
72+
73+
message + suggestion_message
6074
end
6175

6276
def synthesize_file_task(task_name) # :nodoc:

test/test_rake_task.rb

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,4 +453,15 @@ def test_source_is_first_prerequisite
453453
t = task t: ["preqA", "preqB"]
454454
assert_equal "preqA", t.source
455455
end
456-
end
456+
457+
def test_suggests_valid_rake_task_names
458+
task :test
459+
error = assert_raises(RuntimeError) { Task[:testt] }
460+
461+
assert_match /Don\'t know how to build task \'testt\'/, error.message
462+
463+
if defined?(::DidYouMean::SpellChecker) && defined?(::DidYouMean::Formatter)
464+
assert_match /Did you mean\? test/, error.message
465+
end
466+
end
467+
end

0 commit comments

Comments
 (0)