module RubyIndentation
Constants
- VERSION
Public Class Methods
[](buffer)
click to toggle source
# File lib/ruby_indentation.rb, line 7 def self.[](buffer) opening_and_modifier_tokens = %w[if unless until while].to_set opening_tokens = %w[begin case class def for module do {].to_set closing_tokens = %w[end }].to_set separator = [';', :operator] indent = 0 # parse each token buffer_tokens = [separator] + CodeRay.scan(buffer, :ruby).each_slice(2).select{|_, kind| kind != :space } buffer_tokens.each_cons(2){ |(*old_pair), (token, kind)| if kind == :keyword || kind == :operator # modifiers cause trouble, so # fix it in 9/10 cases if opening_tokens.include?(token) || opening_and_modifier_tokens.include?(token) && ( old_pair == separator || old_pair == ['=', :operator ] ) indent += 1 elsif closing_tokens.include?(token) indent -= 1 end end } # return a good value indent < 0 ? 0 : indent end