deps_grapher 1.0.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 31d04a84f91bd795f6c19d70a9de853963cd02d298cadb8cceaf68fae288e10e
4
- data.tar.gz: 284e8006b5cd05e76e8446ca6732048267ee7e234d13d3320589c7e2bb79b38c
3
+ metadata.gz: 7a737245f2c63696cd2a7f5c492ddb9c049e8f8e9a3e51ee9ce897dc4fb8e593
4
+ data.tar.gz: dbb1e28028e37ef1d5127ce8e576012057b11518c7253c0dce047097aea8ad2d
5
5
  SHA512:
6
- metadata.gz: 261f74611a3ac886afd45c7ec1487dcd4db6bb83ede88f6aadf70b1f338725b989bf546b6f0476cffb35251791ebc426c57ab5e887e2b129a82fe8511b625566
7
- data.tar.gz: 752589ecdbc90718919f0fcdeefe18e75aa0cced56532aa7ed01f2bf220e4cfc26f0f79d0b3051d6d4016f9f5893a049518b3fe955eb77157c4acbffaa22aa7f
6
+ metadata.gz: 1e8d778b87a6c3e3ce815f2911c47fe7c636c31dc42d7000094e4c2415ab3628377eb235007641386099c07d126489d630bba7785c56318913d613706a0f58b8
7
+ data.tar.gz: f6f93769c92aaeb8111defca8a6ea1e4781ce711678c2d1e728be33c8fefbb4d6ceec8534078db6937add8942c954225da4867859357d4bc8f65cc7c81042856
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
- ## [1.0.0] - 2024-03-22
1
+ ## [1.0.2] - 2024-04-03
2
+ - Use `prism` gem instead of `parser` gem (parsing process is approximately 30% faster)
3
+
4
+ ## [1.0.1] - 2024-03-26
5
+ - Fixed a cache issue
6
+ - Fixed an issue that `__FILE__` or `__dir__` is nil in the configuration file
7
+
8
+ ## [1.0.0] - 2024-03-25
2
9
 
3
10
  - Initial release
data/README.md CHANGED
@@ -5,7 +5,7 @@ A Tool to visualize Ruby class dependencies
5
5
 
6
6
  ## Description
7
7
 
8
- Deps Grapher is intended for a general understanding of class dependencies through static analysis. It uses `parser` gem.
8
+ Deps Grapher is intended for a general understanding of class dependencies through static analysis. It uses `prism` gem.
9
9
 
10
10
  Please note the following:
11
11
 
data/deps_grapher.gemspec CHANGED
@@ -31,4 +31,5 @@ Gem::Specification.new do |spec|
31
31
 
32
32
  spec.add_dependency "activesupport"
33
33
  spec.add_dependency "parser"
34
+ spec.add_dependency "prism"
34
35
  end
@@ -40,7 +40,7 @@ module DepsGrapher
40
40
 
41
41
  log do
42
42
  source_buffer = Parser::Source::Buffer.new(@file_path)
43
- parser = Parser::CurrentRuby.new
43
+ parser = Prism::Translation::Parser.new
44
44
  process parser.parse(source_buffer.read)
45
45
  end
46
46
  end
@@ -12,6 +12,7 @@ module DepsGrapher
12
12
  class_attribute :target_path # target class name on graph
13
13
  class_attribute :clean, default: false
14
14
  class_attribute :logger
15
+ class_attribute :cache_key
15
16
  class_attribute :cache_dir, default: File.expand_path(File.join("..", "..", "tmp", "deps_grapher", "cache"), __dir__)
16
17
  class_attribute :cache_ttl, default: 60 * 5 # 5 minutes
17
18
  class_attribute :output_dir, default: File.expand_path(File.join("..", "..", "tmp", "deps_grapher", "graph"), __dir__)
@@ -75,11 +76,9 @@ module DepsGrapher
75
76
 
76
77
  content = File.read file
77
78
 
78
- cache_key = Digest::MD5.hexdigest(content)
79
+ self.cache_key = Digest::MD5.hexdigest content
79
80
 
80
- SourceCache::Registry.with_cache cache_key do
81
- DSL.new(self).instance_eval content
82
- end
81
+ DSL.new(self).instance_eval content, file
83
82
 
84
83
  return unless dump
85
84
 
@@ -38,14 +38,14 @@ module DepsGrapher
38
38
  private
39
39
 
40
40
  def dfs(current, target_path_matcher, visited, path, paths)
41
- return if visited[current]
42
-
43
41
  visited[current] = true
44
42
 
45
43
  if target_path_matcher.match?(current.class_name)
46
44
  paths << path
47
45
  else
48
46
  @graph[current]&.each do |node|
47
+ next if visited[node]
48
+
49
49
  dfs node, target_path_matcher, visited, path + [node], paths
50
50
  end
51
51
  end
@@ -9,32 +9,34 @@ module DepsGrapher
9
9
  def files
10
10
  FileUtils.rm_rf File.dirname(config.cache_dir) if config.clean
11
11
 
12
- set_layers_visibility!
13
- extract_files_from_layers
14
- end
12
+ layer_visibilities = config.visualizer_options[:layers]
15
13
 
16
- private
14
+ files = []
17
15
 
18
- attr_reader :config
16
+ SourceCache::Registry.with_cache config.cache_key do |restored|
17
+ config.layers.each_value do |layer|
18
+ name = layer.name
19
+ source = layer.source
19
20
 
20
- def set_layers_visibility!
21
- layer_visibility = config.visualizer_options[:layers]
21
+ layer.visible = layer_visibilities.include? name
22
22
 
23
- config.layers.each_value do |layer|
24
- layer.visible = layer_visibility.include? layer.name
25
- end
26
- end
23
+ SourceCache.register! name, source unless restored
27
24
 
28
- def extract_files_from_layers
29
- config.layers.values.select(&:visible).each_with_object([]) do |layer, files|
30
- source = layer.source
25
+ next unless layer.visible
31
26
 
32
- source.files.each do |file|
33
- next if file == config.path
27
+ source.files.each do |file|
28
+ next if file == config.path
34
29
 
35
- files << file
30
+ files << file
31
+ end
36
32
  end
37
33
  end
34
+
35
+ files
38
36
  end
37
+
38
+ private
39
+
40
+ attr_reader :config
39
41
  end
40
42
  end
@@ -36,8 +36,6 @@ module DepsGrapher
36
36
  source.files.each do |file|
37
37
  Registry.register file, self
38
38
  end
39
-
40
- SourceCache.register! name, source
41
39
  end
42
40
 
43
41
  def source(&block)
@@ -16,7 +16,7 @@ module DepsGrapher
16
16
 
17
17
  def extract!(file_path)
18
18
  source_buffer = Parser::Source::Buffer.new(file_path)
19
- parser = Parser::CurrentRuby.new
19
+ parser = Prism::Translation::Parser.new
20
20
  process parser.parse(source_buffer.read)
21
21
  end
22
22
 
@@ -26,35 +26,30 @@ module DepsGrapher
26
26
  end
27
27
 
28
28
  def with_cache(key)
29
- restore_cache! key
30
- yield
31
- persist_cache! key
32
- end
33
-
34
- def persist_cache!(key)
35
29
  cache_file = DepsGrapher.cache_file key
36
- cache_file.write @registry
30
+ restore_cache! cache_file
31
+ yield @cache_restoration
32
+ persist_cache! cache_file
37
33
  end
38
34
 
39
- def restore_cache!(key)
40
- cache_file = DepsGrapher.cache_file key
35
+ private
36
+
37
+ def restore_cache!(cache_file)
41
38
  loaded = cache_file.read
42
39
 
43
40
  unless loaded
44
- @restored_cache = false
41
+ @cache_restoration = false
45
42
  return
46
43
  end
47
44
 
48
45
  @registry = loaded
49
- @restored_cache = true
46
+ @cache_restoration = true
50
47
  end
51
48
 
52
- def restored_cache?
53
- @restored_cache
49
+ def persist_cache!(cache_file)
50
+ cache_file.write @registry
54
51
  end
55
52
 
56
- private
57
-
58
53
  def registry
59
54
  @registry ||= {}
60
55
  end
@@ -21,8 +21,6 @@ module DepsGrapher
21
21
  end
22
22
 
23
23
  def register!
24
- return if Registry.restored_cache?
25
-
26
24
  class_name_extractor = ClassNameExtractor.new do |class_name, location|
27
25
  @cache_by_const_name[class_name] = location
28
26
  @cache_by_location[location] ||= class_name
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DepsGrapher
4
- VERSION = "1.0.0"
4
+ VERSION = "1.0.2"
5
5
  end
data/lib/deps_grapher.rb CHANGED
@@ -5,7 +5,7 @@ require "active_support"
5
5
  require "active_support/core_ext"
6
6
  require "json"
7
7
  require "fileutils"
8
- require "parser/current"
8
+ require "prism"
9
9
  require "net/https"
10
10
  require "logger"
11
11
  require "erb"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deps_grapher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - jk-es335
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-25 00:00:00.000000000 Z
11
+ date: 2024-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: prism
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description:
42
56
  email:
43
57
  - dev@hacomono.co.jp