Class: RubyNext::Language::PacoParsers::StringLiterals
- Defined in:
- lib/ruby-next/language/paco_parsers/string_literals.rb
Constant Summary collapse
- PAIRS =
{"[" => "]", "{" => "}", "<" => ">"}.freeze
Instance Method Summary collapse
- #all_strings ⇒ Object
- #default ⇒ Object
- #double_quoted ⇒ Object
- #escapable_string(left, right = nil, interpolate: false) ⇒ Object
- #external_cmd_exec ⇒ Object
- #quoted ⇒ Object
- #quoted_expanded ⇒ Object
- #single_quoted ⇒ Object
Methods inherited from Base
Instance Method Details
#all_strings ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/ruby-next/language/paco_parsers/string_literals.rb', line 15 def all_strings alt( single_quoted, double_quoted, external_cmd_exec, quoted, ) # heredoc, # heredoc_expanded end |
#default ⇒ Object
9 10 11 12 13 |
# File 'lib/ruby-next/language/paco_parsers/string_literals.rb', line 9 def default all_strings.fmap do |result| reduce_tokens(result.flatten) end end |
#double_quoted ⇒ Object
55 56 57 |
# File 'lib/ruby-next/language/paco_parsers/string_literals.rb', line 55 def double_quoted escapable_string(string('"'), interpolate: true) end |
#escapable_string(left, right = nil, interpolate: false) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/ruby-next/language/paco_parsers/string_literals.rb', line 59 def escapable_string(left, right = nil, interpolate: false) right ||= left seq( left, many( alt( *[ seq(string("\\"), right).fmap { [:literal, _1] }, interpolate ? seq( string('#{'), lazy { alt(balanced("{", "}", alt(all_strings, any_char)), many(none_of("}"))) }, string("}") ) : nil, not_followed_by(right).bind { any_char }.fmap { [:literal, _1] } ].compact ) ), right ) end |
#external_cmd_exec ⇒ Object
51 52 53 |
# File 'lib/ruby-next/language/paco_parsers/string_literals.rb', line 51 def external_cmd_exec escapable_string(string("`"), interpolate: true) end |
#quoted ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/ruby-next/language/paco_parsers/string_literals.rb', line 27 def quoted seq( string("%q"), any_char.bind do |char| end_symbol = string(PAIRS[char] || char) escapable_string(succeed(char), end_symbol) end ) end |
#quoted_expanded ⇒ Object
41 42 43 44 45 46 47 48 49 |
# File 'lib/ruby-next/language/paco_parsers/string_literals.rb', line 41 def seq( alt(string("%Q"), string("%")), any_char.bind do |char| end_symbol = string(PAIRS[char] || char) escapable_string(succeed(char), end_symbol, interpolate: true) end ) end |
#single_quoted ⇒ Object
37 38 39 |
# File 'lib/ruby-next/language/paco_parsers/string_literals.rb', line 37 def single_quoted escapable_string(string("'")) end |