Defer adding additional info until getting the message of an error
This commit is contained in:
parent
e29e49abf0
commit
b4d308b419
@ -1770,21 +1770,25 @@ XXX
|
|||||||
end
|
end
|
||||||
raise AmbiguousOption, catch(:ambiguous) {
|
raise AmbiguousOption, catch(:ambiguous) {
|
||||||
visit(:complete, typ, opt, icase, *pat) {|o, *sw| return sw}
|
visit(:complete, typ, opt, icase, *pat) {|o, *sw| return sw}
|
||||||
if defined? DidYouMean::SpellChecker
|
raise InvalidOption.new(opt, additional: self.:additional_message.curry[typ])
|
||||||
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
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
private :complete
|
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)
|
def candidate(word)
|
||||||
list = []
|
list = []
|
||||||
case word
|
case word
|
||||||
@ -2011,13 +2015,16 @@ XXX
|
|||||||
# Reason which caused the error.
|
# Reason which caused the error.
|
||||||
Reason = 'parse error'
|
Reason = 'parse error'
|
||||||
|
|
||||||
def initialize(*args)
|
def initialize(*args, additional: nil)
|
||||||
|
@additional = additional
|
||||||
|
@arg0, = args
|
||||||
@args = args
|
@args = args
|
||||||
@reason = nil
|
@reason = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_reader :args
|
attr_reader :args
|
||||||
attr_writer :reason
|
attr_writer :reason
|
||||||
|
attr_accessor :additional
|
||||||
|
|
||||||
#
|
#
|
||||||
# Pushes back erred argument(s) to +argv+.
|
# Pushes back erred argument(s) to +argv+.
|
||||||
@ -2062,7 +2069,7 @@ XXX
|
|||||||
# Default stringizing method to emit standard error message.
|
# Default stringizing method to emit standard error message.
|
||||||
#
|
#
|
||||||
def message
|
def message
|
||||||
reason + ': ' + args.join(" ").gsub(/\s+$/, "")
|
"#{reason}: #{args.join(' ')}#{additional[@arg0] if additional}"
|
||||||
end
|
end
|
||||||
|
|
||||||
alias to_s message
|
alias to_s message
|
||||||
|
Loading…
x
Reference in New Issue
Block a user