Class: Packwerk::Parsers::Erb

Inherits:
Object
  • Object
show all
Includes:
ParserInterface
Defined in:
lib/packwerk/parsers/erb.rb

Instance Method Summary collapse

Constructor Details

#initialize(parser_class: BetterHtml::Parser, ruby_parser: Ruby.new) ⇒ Erb

: (?parser_class: untyped, ?ruby_parser: Ruby) -> void



15
16
17
18
# File 'lib/packwerk/parsers/erb.rb', line 15

def initialize(parser_class: BetterHtml::Parser, ruby_parser: Ruby.new)
  @parser_class = parser_class #: singleton(BetterHtml::Parser)
  @ruby_parser = ruby_parser
end

Instance Method Details

#call(io:, file_path: "<unknown>") ⇒ Object

: (io: (IO | StringIO), ?file_path: String) -> untyped



22
23
24
25
26
# File 'lib/packwerk/parsers/erb.rb', line 22

def call(io:, file_path: "<unknown>")
  buffer = Parser::Source::Buffer.new(file_path)
  buffer.source = io.read
  parse_buffer(buffer, file_path: file_path)
end

#parse_buffer(buffer, file_path:) ⇒ Object

: (Parser::Source::Buffer buffer, file_path: String) -> AST::Node?



29
30
31
32
33
34
35
36
37
38
# File 'lib/packwerk/parsers/erb.rb', line 29

def parse_buffer(buffer, file_path:)
  parser = @parser_class.new(buffer, template_language: :html)
  to_ruby_ast(parser.ast, file_path)
rescue EncodingError => e
  result = ParseResult.new(file: file_path, message: e.message)
  raise Parsers::ParseError, result
rescue Parser::SyntaxError => e
  result = ParseResult.new(file: file_path, message: "Syntax error: #{e}")
  raise Parsers::ParseError, result
end