From cc52bb036940ee75c4b42cc6e280f5bd641e8de7 Mon Sep 17 00:00:00 2001 From: Ben Lewis Date: Sat, 30 Jun 2018 16:11:10 +0300 Subject: [PATCH 1/3] Implement 'With crystal foo.cr --flag, when --flag isn't found, mention did you mean crystal foo.cr -- --flag' from PR #5291 --- spec/std/option_parser_spec.cr | 3 ++- src/option_parser.cr | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/spec/std/option_parser_spec.cr b/spec/std/option_parser_spec.cr index f5fc6c7e4467..80808f03ad37 100644 --- a/spec/std/option_parser_spec.cr +++ b/spec/std/option_parser_spec.cr @@ -215,7 +215,8 @@ describe "OptionParser" do end it "raises on invalid option" do - expect_raises OptionParser::InvalidOption, "Invalid option: -j" do + suggestion = "(did you mean 'crystal foo.cr -- -j'?)".colorize.yellow.bold.to_s + expect_raises OptionParser::InvalidOption, "Invalid option: -j #{suggestion}" do OptionParser.parse(["-f", "-j"]) do |opts| opts.on("-f", "some flag") { } end diff --git a/src/option_parser.cr b/src/option_parser.cr index c5e27b89ab4e..71a42db2adf5 100644 --- a/src/option_parser.cr +++ b/src/option_parser.cr @@ -35,7 +35,11 @@ class OptionParser class InvalidOption < Exception def initialize(option) - super("Invalid option: #{option}") + super("Invalid option: #{option} #{ + type.program.colorize( + "(did you mean 'crystal foo.cr -- #{option}')" + ).yellow.bold + }") end end From baa24716cdbc1461cd3f3b6965bc9bb986f45e12 Mon Sep 17 00:00:00 2001 From: Ben Lewis Date: Sat, 30 Jun 2018 18:00:16 +0300 Subject: [PATCH 2/3] Fix bug --- src/option_parser.cr | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/option_parser.cr b/src/option_parser.cr index 71a42db2adf5..82d6253cd7cb 100644 --- a/src/option_parser.cr +++ b/src/option_parser.cr @@ -29,17 +29,17 @@ # destination = destination.upcase if upcase # puts "Hello #{destination}!" # ``` + +require "colorize" + class OptionParser class Exception < ::Exception end class InvalidOption < Exception def initialize(option) - super("Invalid option: #{option} #{ - type.program.colorize( - "(did you mean 'crystal foo.cr -- #{option}')" - ).yellow.bold - }") + suggestion = "(did you mean 'crystal foo.cr -- #{option}')".colorize.yellow.bold + super("Invalid option: #{option} #{suggestion}") end end From 44ba5d954551c64e3536ce6d3d7942118995b6ec Mon Sep 17 00:00:00 2001 From: Ben Lewis Date: Mon, 2 Jul 2018 19:53:53 +0300 Subject: [PATCH 3/3] Fix test bug --- spec/std/option_parser_spec.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/std/option_parser_spec.cr b/spec/std/option_parser_spec.cr index 80808f03ad37..8d8981d76665 100644 --- a/spec/std/option_parser_spec.cr +++ b/spec/std/option_parser_spec.cr @@ -215,7 +215,7 @@ describe "OptionParser" do end it "raises on invalid option" do - suggestion = "(did you mean 'crystal foo.cr -- -j'?)".colorize.yellow.bold.to_s + suggestion = "(did you mean 'crystal foo.cr -- -j'?)".colorize.yellow.bold expect_raises OptionParser::InvalidOption, "Invalid option: -j #{suggestion}" do OptionParser.parse(["-f", "-j"]) do |opts| opts.on("-f", "some flag") { }