Sha256: 4106ce05780ace47c7015597d2c1ffa21a1ada7de4dcf0e8af72264ac9cee236

Contents?: true

Size: 1.28 KB

Versions: 6

Compression:

Stored size: 1.28 KB

Contents

require "rubocop"

def ast_from(string)
  RuboCop::ProcessedSource.new(string, RUBY_VERSION.to_f).ast
end

def is_def?(arr)
  if Array === arr
    if arr[0] == :def
      $defs << arr
    else
      arr.each do |e|
        is_def?(e)
      end
    end
  end
end

path = "lib/coradoc/parser/asciidoc/"
class_files = Dir.entries(path).select{|x| File.file?(path+x)}

$all_defs = {}

class_files.each do |cf|
  a = ast_from(File.open(path+cf).read)
  next if a.nil?
  sexp = a.to_sexp_array
  $defs = []
  is_def?(sexp)
  $all_defs[cf] = $defs
end;

relevant_names = $all_defs.map{|fn, defs| defs.map{|d| d[1]}}.flatten;

require 'graphviz'

g = GraphViz.new( :G, :type => :digraph );

g[:fontsize] = 8
g[:rankdir] = "LR"
g[:overlap] = false
g[:splines] = false

nodes = {}

$all_defs.each do |file_name, defs|

  defs.each do |ast_def|
    calls = ast_def[2..-1].flatten & relevant_names
    node_name = ast_def[1]
    nodes[node_name] = g.add_nodes( "#{node_name}\n#{file_name}" )
  end
end;

$all_defs.each do |file_name, defs|
  defs.each do |ast_def|
    calls = ast_def[2..-1].flatten & relevant_names
    node_name = ast_def[1]
    calls.each do |cl|
      w = g.add_edges(nodes[node_name], nodes[cl])
      w[:weight] = 1.5
    end
  end
end;

g.output( :png => "utils/parser_graph.png_#{Time.now.to_i}" );

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
coradoc-1.1.6 utils/parser_analyzer.rb
coradoc-1.1.5 utils/parser_analyzer.rb
coradoc-1.1.4 utils/parser_analyzer.rb
coradoc-1.1.3 utils/parser_analyzer.rb
coradoc-1.1.2 utils/parser_analyzer.rb
coradoc-1.1.1 utils/parser_analyzer.rb