Module: Byebug::Helpers::ParseHelper

Overview

Utilities to assist command parsing

Instance Method Summary collapse

Instance Method Details

#get_int(str, cmd, min = nil, max = nil) ⇒ Object

TODO:

Remove the ‘cmd` parameter. It has nothing to do with the method’s

Parses str of command cmd as an integer between min and max.

If either min or max is nil, that value has no bound.

purpose.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/byebug/helpers/parse.rb', line 15

def get_int(str, cmd, min = nil, max = nil)
  if str !~ /\A-?[0-9]+\z/
    return nil, pr('parse.errors.int.not_number', cmd: cmd, str: str)
  end

  int = str.to_i
  if min && int < min
    err = pr('parse.errors.int.too_low', cmd: cmd, str: str, min: min)
    return nil, err
  elsif max && int > max
    err = pr('parse.errors.int.too_high', cmd: cmd, str: str, max: max)
    return nil, err
  end

  int
end

#parse_steps(str, cmd) ⇒ Object

Returns str as an integer or 1 if str is empty.

Returns:

  • str as an integer or 1 if str is empty.



51
52
53
54
55
56
57
58
# File 'lib/byebug/helpers/parse.rb', line 51

def parse_steps(str, cmd)
  return 1 unless str

  steps, err = get_int(str, cmd, 1)
  return nil, err unless steps

  steps
end

#syntax_valid?(code) ⇒ Boolean

Returns true if code is syntactically correct for Ruby, false otherwise.

Returns:

  • (Boolean)

    true if code is syntactically correct for Ruby, false otherwise



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/byebug/helpers/parse.rb', line 35

def syntax_valid?(code)
  return true unless code

  without_stderr do
    begin
      RubyVM::InstructionSequence.compile(code)
      true
    rescue SyntaxError
      false
    end
  end
end