Module: MetaCommit::Extension::RubySupport::Helpers::ContextualAstAccessor

Included in:
Diffs::Diff
Defined in:
lib/meta_commit_ruby_support/helpers/contextual_ast_accessor.rb

Instance Method Summary collapse

Instance Method Details

#contextual_ast_has_target_node(ast) ⇒ Object



75
76
77
# File 'lib/meta_commit_ruby_support/helpers/contextual_ast_accessor.rb', line 75

def contextual_ast_has_target_node(ast)
  !ast.target_node.nil? && !ast.target_node.empty_ast?
end

#is_in_context_of_class?(ast) ⇒ Boolean

Parameters:

  • ast (MetaCommit::Model::ContextualAstNode)

Returns:

  • (Boolean)


59
60
61
62
63
64
# File 'lib/meta_commit_ruby_support/helpers/contextual_ast_accessor.rb', line 59

def is_in_context_of_class?(ast)
  ast.context_nodes.each do |parent|
    return true if parent.is_class?
  end
  false
end

#is_in_context_of_method?(ast) ⇒ Boolean

Parameters:

  • ast (MetaCommit::Model::ContextualAstNode)

Returns:

  • (Boolean)


68
69
70
71
72
73
# File 'lib/meta_commit_ruby_support/helpers/contextual_ast_accessor.rb', line 68

def is_in_context_of_method?(ast)
  ast.context_nodes.each do |parent|
    return true if parent.is_method?
  end
  false
end

#is_in_context_of_module?(ast) ⇒ Boolean

Parameters:

  • ast (MetaCommit::Model::ContextualAstNode)

Returns:

  • (Boolean)


50
51
52
53
54
55
# File 'lib/meta_commit_ruby_support/helpers/contextual_ast_accessor.rb', line 50

def is_in_context_of_module?(ast)
  ast.context_nodes.each do |parent|
    return true if parent.is_module?
  end
  false
end

#is_name_of_class?(ast) ⇒ Boolean

on created class only first line goes to diff

Parameters:

  • ast (MetaCommit::Model::ContextualAstNode)

Returns:

  • (Boolean)


17
18
19
# File 'lib/meta_commit_ruby_support/helpers/contextual_ast_accessor.rb', line 17

def is_name_of_class?(ast)
  (ast.target_node.type == :const) and (ast.context_nodes.length > 1) and (ast.context_nodes[ast.context_nodes.length - 1 - 1].type == :class)
end

#is_name_of_module?(ast) ⇒ Boolean

on created module only first line goes to diff

Parameters:

  • ast (MetaCommit::Model::ContextualAstNode)

Returns:

  • (Boolean)


23
24
25
# File 'lib/meta_commit_ruby_support/helpers/contextual_ast_accessor.rb', line 23

def is_name_of_module?(ast)
  (ast.target_node.type == :const) and (ast.context_nodes.length > 1) and (ast.context_nodes[ast.context_nodes.length - 1 - 1].type == :module)
end

#name_of_context_class(ast) ⇒ Object

Parameters:

  • ast (MetaCommit::Model::ContextualAstNode)


35
36
37
38
39
# File 'lib/meta_commit_ruby_support/helpers/contextual_ast_accessor.rb', line 35

def name_of_context_class(ast)
  ast.context_nodes.reverse.each do |parent|
    return parent.class_name if parent.is_class?
  end
end

#name_of_context_method(ast) ⇒ Object

Parameters:

  • ast (MetaCommit::Model::ContextualAstNode)


42
43
44
45
46
# File 'lib/meta_commit_ruby_support/helpers/contextual_ast_accessor.rb', line 42

def name_of_context_method(ast)
  ast.context_nodes.reverse.each do |parent|
    return parent.method_name if parent.is_method?
  end
end

#name_of_context_module(ast) ⇒ Object

Parameters:

  • ast (MetaCommit::Model::ContextualAstNode)


28
29
30
31
32
# File 'lib/meta_commit_ruby_support/helpers/contextual_ast_accessor.rb', line 28

def name_of_context_module(ast)
  ast.context_nodes.reverse.each do |parent|
    return parent.module_name if parent.is_module?
  end
end

#path_to_component(ast, depth = nil) ⇒ String

Parameters:

  • ast (Object)
  • depth (Integer) (defaults to: nil)

Returns:

  • (String)


6
7
8
9
10
11
12
13
# File 'lib/meta_commit_ruby_support/helpers/contextual_ast_accessor.rb', line 6

def path_to_component(ast, depth=nil)
  depth = -1 if depth.nil?
  result = []
  result.concat([name_of_context_module(ast), is_in_context_of_class?(ast) && depth < 1 ? '::' : '']) if is_in_context_of_module?(ast) && depth < 2
  result.concat([name_of_context_class(ast)]) if is_in_context_of_class?(ast) && depth < 1
  result.concat(['#', name_of_context_method(ast)]) if is_in_context_of_method?(ast) && depth < 0
  result.join('')
end