degem 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4ca5d0f8ec44263d688f664f508c95477f5740aba98449817d1aee6728516c6c
4
- data.tar.gz: 7dd84507228188120a8ee904e648fedc0116c639f83ba6c57f445a2d5267c69a
3
+ metadata.gz: 683ca7f47acea423692062935b4ccd5285e5aa764a12883a4f34237af7be248a
4
+ data.tar.gz: 1a9a8e898b9f4afcd1668b65a0ebc2b7928a84efa6c31e263c237114fa0a2069
5
5
  SHA512:
6
- metadata.gz: bee7cac14068642532355b2b88e205b1ebadc35ee8e8f6f31fea257079295e0cae4733d0f59cba95ddea9bc0404bf62cfc641790a98d0ae203630633cfdbeb2b
7
- data.tar.gz: de01fdf89638fcb8bbbbc267a731e55197442fdaeb26d3b80567811b9f79accfac9a78fe07056b7ea0b993afe025acbbb2a8a80948ee0b78cc51dd89cdd3ed4c
6
+ metadata.gz: b8e874de8d90b2a2e833b1685938ce9302426c3af5acf8e60bcf26cb0dab994a1520173269a366969018e69fb1abba74f1c4900235a0f7051739073a3962f70d
7
+ data.tar.gz: 6c19cd8a7e75ef66396e4dc209a14b77765e323804952769cd30a0d9267abb15bf9388ab58ee3f22002320585bb211f80d9d0e86163c7ac0a6b50e992b046cb6
@@ -11,7 +11,7 @@ module Degem
11
11
 
12
12
  def call
13
13
  rubygems = gemfile.rubygems.reject { _1.name == "degem" }
14
- rubygems = reject_railties(rubygems) if rails?
14
+ rubygems = reject_railties(rubygems) if gemfile.rails?
15
15
  reject_used(rubygems)
16
16
  end
17
17
 
@@ -20,9 +20,7 @@ module Degem
20
20
  attr_reader :gemfile_path
21
21
 
22
22
  def reject_railties(rubygems)
23
- rubygems
24
- .reject { _1.name == "rails" }
25
- .reject { _1.consts.grep(/Rails::Railtie|Rails::Engine/).any? }
23
+ rubygems.reject(&:rails?).reject(&:railtie?)
26
24
  end
27
25
 
28
26
  def reject_used(rubygems)
@@ -53,9 +51,5 @@ module Degem
53
51
  def gemfile
54
52
  @gemfile ||= ParseGemfile.new(@gem_specification).call(gemfile_path)
55
53
  end
56
-
57
- def rails?
58
- @rails ||= gemfile.rails?
59
- end
60
54
  end
61
55
  end
data/lib/degem/gemfile.rb CHANGED
@@ -15,7 +15,7 @@ module Degem
15
15
  end
16
16
 
17
17
  def rails?
18
- @rails ||= rubygems.map(&:name).include?("rails")
18
+ !!rubygems.find(&:rails?)
19
19
  end
20
20
 
21
21
  private
@@ -22,14 +22,19 @@ module Degem
22
22
  class Visitor < Prism::Visitor
23
23
  def initialize
24
24
  @requires = Set.new
25
- @consts = Set.new
25
+ @paths = Set.new
26
+ @classes = Set.new
27
+ @modules = Set.new
26
28
  @path = nil
27
29
  @stack = []
28
30
  super
29
31
  end
30
32
 
31
33
  def requires = @requires.to_a
32
- def consts = @consts.to_a
34
+ def consts = (@paths.union(@classes).union(@modules)).to_a
35
+ def paths = @paths.to_a
36
+ def classes = @classes.to_a
37
+ def modules = @modules.to_a
33
38
  attr_writer :path
34
39
 
35
40
  def visit_call_node(node)
@@ -40,24 +45,26 @@ module Degem
40
45
  def visit_module_node(node)
41
46
  @stack.push(node)
42
47
  super
43
- @consts.add(@stack.map(&:name).join("::"))
48
+ @modules.add(@stack.map(&:name).join("::"))
44
49
  @stack.pop
45
50
  end
46
51
 
47
52
  def visit_class_node(node)
48
53
  @stack.push(node)
49
54
  super
50
- @consts.add(@stack.map(&:name).join("::"))
51
55
  @stack.pop
56
+ *modules, klass = node.constant_path.full_name_parts rescue [[], node.name]
57
+ @modules.add((@stack.map(&:name) + modules).join("::")) if modules.any?
58
+ @classes.add((@stack.map(&:name) + modules + [klass]).join("::"))
52
59
  end
53
60
 
54
61
  def visit_constant_path_node(node)
55
- consts_from(node).each { @consts.add(_1) }
62
+ paths_from(node).each { @paths.add(_1) }
56
63
  super
57
64
  end
58
65
 
59
66
  def visit_constant_read_node(node)
60
- @consts.add(node.name.to_s) unless @stack.find { _1.constant_path == node }
67
+ @paths.add(node.name.to_s) unless @stack.find { _1.constant_path == node }
61
68
  super
62
69
  end
63
70
 
@@ -83,7 +90,7 @@ module Degem
83
90
  acc
84
91
  end
85
92
 
86
- def consts_from(node)
93
+ def paths_from(node)
87
94
  from_ancestor_to(node)
88
95
  .filter_map { _1.respond_to?(:name) ? _1.name.to_s : nil }
89
96
  .tap { _1.singleton_class.include(Scan) }
data/lib/degem/rubygem.rb CHANGED
@@ -9,8 +9,12 @@ module Degem
9
9
  super(rubygem)
10
10
  end
11
11
 
12
- def consts
13
- parsed.consts
12
+ def rails?
13
+ name == "rails"
14
+ end
15
+
16
+ def railtie?
17
+ parsed.consts.grep(/Rails::Railtie|Rails::Engine/).any?
14
18
  end
15
19
 
16
20
  def own_consts
@@ -25,7 +29,9 @@ module Degem
25
29
  *name.split("-").each_cons(2).to_a.map(&:join)
26
30
  ]
27
31
 
28
- consts.filter { |const| variations.any? { |variation| const.downcase == variation.downcase } }
32
+ parsed.classes + (parsed.modules + parsed.paths).filter do |const|
33
+ variations.any? { |variation| const.downcase == variation.downcase }
34
+ end
29
35
  end
30
36
 
31
37
  private
@@ -34,7 +40,7 @@ module Degem
34
40
  @parsed ||=
35
41
  begin
36
42
  gem_path = @gem_specification.find_by_name(name).full_gem_path
37
- paths = Dir.glob(File.join(gem_path, "**/*.rb"))
43
+ paths = Dir.glob(File.join(gem_path, "**", "lib", "**/*.rb"))
38
44
  ParseRuby.new.call(paths)
39
45
  end
40
46
  end
data/lib/degem/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Degem
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: degem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 3v0k4
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-12-18 00:00:00.000000000 Z
11
+ date: 2024-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prism