Defer adding additional info until getting the message of an error

This commit is contained in:
Nobuyoshi Nakada 2019-10-18 17:39:16 +09:00
parent e29e49abf0
commit b4d308b419
No known key found for this signature in database
GPG Key ID: 4BC7D6DF58D8DF60

View File

@ -1770,21 +1770,25 @@ XXX
end
raise AmbiguousOption, catch(:ambiguous) {
visit(:complete, typ, opt, icase, *pat) {|o, *sw| return sw}
if defined? DidYouMean::SpellChecker
all_candidates = []
visit(:get_candidates, typ) do |candidates|
all_candidates.concat(candidates)
end
all_candidates.select! {|cand| cand.is_a?(String) }
suggestions = DidYouMean::SpellChecker.new(dictionary: all_candidates).correct(opt)
raise InvalidOption.new(opt, DidYouMean.formatter.message_for(suggestions))
else
raise InvalidOption, opt
end
raise InvalidOption.new(opt, additional: self.:additional_message.curry[typ])
}
end
private :complete
#
# Returns additional info.
#
def additional_message(typ, opt)
return unless typ and opt and defined?(DidYouMean::SpellChecker)
all_candidates = []
visit(:get_candidates, typ) do |candidates|
all_candidates.concat(candidates)
end
all_candidates.select! {|cand| cand.is_a?(String) }
checker = DidYouMean::SpellChecker.new(dictionary: all_candidates)
DidYouMean.formatter.message_for(checker.correct(opt))
end
def candidate(word)
list = []
case word
@ -2011,13 +2015,16 @@ XXX
# Reason which caused the error.
Reason = 'parse error'
def initialize(*args)
def initialize(*args, additional: nil)
@additional = additional
@arg0, = args
@args = args
@reason = nil
end
attr_reader :args
attr_writer :reason
attr_accessor :additional
#
# Pushes back erred argument(s) to +argv+.
@ -2062,7 +2069,7 @@ XXX
# Default stringizing method to emit standard error message.
#
def message
reason + ': ' + args.join(" ").gsub(/\s+$/, "")
"#{reason}: #{args.join(' ')}#{additional[@arg0] if additional}"
end
alias to_s message