Class: Sourcify::Method::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/sourcify/lib/sourcify/method/parser.rb,
lib/sourcify/lib/sourcify/method/parser/scanner.rb,
lib/sourcify/lib/sourcify/method/parser/converter.rb,
lib/sourcify/lib/sourcify/method/parser/raw_scanner.rb,
lib/sourcify/lib/sourcify/method/parser/source_code.rb,
lib/sourcify/lib/sourcify/method/parser/raw_scanner_extensions.rb

Overview

:nodoc:all

Defined Under Namespace

Modules: RawScanner Classes: ProbablyDefinedByProc, Scanner

Constant Summary collapse

Converter =
Common::Parser::Converter
SourceCode =
Common::Parser::SourceCode

Instance Method Summary collapse

Constructor Details

#initialize(_meth) ⇒ Parser

Returns a new instance of Parser.



11
12
13
14
15
16
# File 'lib/sourcify/lib/sourcify/method/parser.rb', line 11

def initialize(_meth)
  @parameters, @name = _meth.parameters, _meth.name
  @source_code = SourceCode.new(*_meth.source_location)
  raise CannotFindSourceLocationError unless @source_code.file
  raise CannotParseEvalCodeError if @source_code.file == '(eval)'
end

Instance Method Details

#raw_source(opts) ⇒ Object



18
19
20
21
# File 'lib/sourcify/lib/sourcify/method/parser.rb', line 18

def raw_source(opts)
  raw_source = extracted_source(opts)[0].strip
  opts[:strip_enclosure] ? strip_raw_enclosure(raw_source) : raw_source
end

#sexp(opts) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/sourcify/lib/sourcify/method/parser.rb', line 27

def sexp(opts)
  (@sexps ||= {})[opts.hash] ||= (
    extracted = extracted_source(opts)[1]
    raw_code = (("\n" * @source_code.line) + extracted).same_encoding_as(extracted)

    sexp = Converter.to_sexp(raw_code, @source_code.file)
    opts[:strip_enclosure] ? Sexp.from_array(sexp.to_a[-1]) : sexp
  )
end

#source(opts) ⇒ Object



23
24
25
# File 'lib/sourcify/lib/sourcify/method/parser.rb', line 23

def source(opts)
  (@sources ||= {})[opts.hash] ||= Converter.to_code(sexp(opts))
end