Class: Hamlit::StaticAnalyzer
- Defined in:
- lib/hamlit/static_analyzer.rb
Constant Summary collapse
- STATIC_TOKENS =
%i[ on_tstring_beg on_tstring_end on_tstring_content on_embexpr_beg on_embexpr_end on_lbracket on_rbracket on_qwords_beg on_words_sep on_qwords_sep on_lparen on_rparen on_lbrace on_rbrace on_label on_int on_float on_imaginary on_comma on_sp ].freeze
- DYNAMIC_TOKENS =
%i[ on_ident on_period ].freeze
- STATIC_KEYWORDS =
%w[ true false nil ].freeze
- STATIC_OPERATORS =
%w[ => ].freeze
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.static?(code) ⇒ Boolean
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/hamlit/static_analyzer.rb', line 29 def self.static?(code) return false if code.nil? || code.strip.empty? return false if RubyExpression.syntax_error?(code) Ripper.lex(code).each do |(_, col), token, str| case token when *STATIC_TOKENS # noop when :on_kw return false unless STATIC_KEYWORDS.include?(str) when :on_op return false unless STATIC_OPERATORS.include?(str) when *DYNAMIC_TOKENS return false else return false end end true end |
Instance Method Details
#on_dynamic(code) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/hamlit/static_analyzer.rb', line 50 def on_dynamic(code) if StaticAnalyzer.static?(code) [:static, eval(code).to_s] else [:dynamic, code] end end |