Module: Temple::StaticAnalyzer
- Defined in:
- lib/temple/static_analyzer.rb
Defined Under Namespace
Classes: SyntaxChecker
Constant Summary collapse
- STATIC_TOKENS =
[ :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, :on_ignored_nl, ].freeze
- DYNAMIC_TOKENS =
[ :on_ident, :on_period, ].freeze
- STATIC_KEYWORDS =
[ 'true', 'false', 'nil', ].freeze
- STATIC_OPERATORS =
[ '=>', ].freeze
Class Method Summary collapse
Class Method Details
.available? ⇒ Boolean
33 34 35 |
# File 'lib/temple/static_analyzer.rb', line 33 def available? defined?(Ripper) && Ripper.respond_to?(:lex) end |
.static?(code) ⇒ Boolean
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/temple/static_analyzer.rb', line 37 def static?(code) return false if code.nil? || code.strip.empty? return false if syntax_error?(code) Ripper.lex(code).each do |_, 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 |
.syntax_error?(code) ⇒ Boolean
58 59 60 61 62 63 |
# File 'lib/temple/static_analyzer.rb', line 58 def syntax_error?(code) SyntaxChecker.new(code).parse false rescue SyntaxChecker::ParseError true end |