Module: Asciidoctor::TemplatesCompiler::RubyBeautify

Extended by:
RubyBeautify
Includes:
RubyBeautify
Included in:
RubyBeautify
Defined in:
lib/asciidoctor/templates_compiler/ruby_beautify.rb

Instance Method Summary collapse

Instance Method Details

#pretty_string(code, indent_count: 2) ⇒ Object Also known as: call



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/asciidoctor/templates_compiler/ruby_beautify.rb', line 13

def pretty_string(code, indent_count: 2)
  new_lines_old = NEW_LINES
  NEW_LINES.push(:on_semicolon)  # XXX: sandbox somehow?

  s = +"module M_\n#{code}\nend\n"
  s.gsub!(/^[ \t]*;/, '')      # remove leading semicolons
  s.gsub!(/;\s*$/, '')         # remove trailing semicolons
  s.replace(pretty_string_orig(s, indent_token: "\1", indent_count: indent_count))
  s.gsub!(";\1", "\n\1")       # remove trailing semicolons after formatting
  s.gsub!(/^#{"\1" * indent_count}/, '')  # remove redundant indentation level
  s.tr!("\1", ' ')             # replace placeholder indent char with space
  s.sub!(/\Amodule M_\n/, '')  # remove wrapper module
  s.sub!(/\nend\n\z/, '')      # remove wrapper module

  NEW_LINES.replace(new_lines_old)  # XXX: not thread-safe
  s
end

#syntax_ok?(string) ⇒ Boolean

XXX: Remove after github.com/erniebrodeur/ruby-beautify/pull/43 is merged. Overwrite this method from ::RubyBeautify with implementation that does not execute ruby subprocess.

Returns:

  • (Boolean)


36
37
38
39
40
41
42
43
# File 'lib/asciidoctor/templates_compiler/ruby_beautify.rb', line 36

def syntax_ok?(string)
  catch :good do
    eval "BEGIN { throw :good }; #{string}"  # rubocop:disable Security/Eval
  end
  true
rescue SyntaxError
  false
end