lowkey 0.4.0 → 0.4.2
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 +4 -4
- data/lib/factories/proxy_factory.rb +10 -3
- data/lib/factories/source_factory.rb +13 -6
- data/lib/interfaces/proxy.rb +1 -1
- data/lib/lowkey.rb +2 -2
- data/lib/models/source.rb +16 -4
- data/lib/proxies/class_proxy.rb +5 -34
- data/lib/proxies/file_proxy.rb +7 -3
- data/lib/proxies/module_proxy.rb +44 -0
- data/lib/queries/query.rb +5 -0
- data/lib/version.rb +1 -1
- data/lib/visitors/{method_class_visitor.rb → class_visitor.rb} +3 -12
- data/lib/visitors/method_call_visitor.rb +17 -7
- data/lib/visitors/method_def_visitor.rb +7 -6
- data/lib/visitors/module_visitor.rb +40 -0
- data/lib/visitors/visitor.rb +15 -8
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0c3c9495f9a78f72d1c42103c7feca2dd8bc07aee9621658e20849f9aca22952
|
|
4
|
+
data.tar.gz: 3a9f9940d723fadc08d8f6ac552eb79f2cdfc56b4b01316498b18fd327b5ebed
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d1e42a9e1d4dbdd21dcf869d6c2862724b5e609c1e8f5c8716ae530edaca518f655de6d04aff0b9686746a7cd06e00665a243bd60d3a5f8bdc7a3b57435f8912
|
|
7
|
+
data.tar.gz: d0ccec589e58a7a1f379e683689f52fbc2cd8b1ea71dce3bb809a3f3267ae4427f1f83885d08231fadc56b567ecefb9820a5a1438ca797510a35fd5549d282c6
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative '../factories/source_factory'
|
|
4
|
+
|
|
4
5
|
require_relative '../proxies/body_proxy'
|
|
5
6
|
require_relative '../proxies/class_proxy'
|
|
6
7
|
require_relative '../proxies/file_proxy'
|
|
7
8
|
require_relative '../proxies/method_proxy'
|
|
9
|
+
require_relative '../proxies/module_proxy'
|
|
8
10
|
require_relative '../proxies/param_proxy'
|
|
9
11
|
require_relative '../proxies/return_proxy'
|
|
10
12
|
|
|
@@ -16,10 +18,15 @@ module Lowkey
|
|
|
16
18
|
FileProxy.new(root_node:, source:)
|
|
17
19
|
end
|
|
18
20
|
|
|
19
|
-
def
|
|
20
|
-
source = SourceFactory.
|
|
21
|
+
def module_proxy(node:, namespace:, file_path:, lines:)
|
|
22
|
+
source = SourceFactory.module_source(node:, namespace:, file_path:, lines:)
|
|
21
23
|
name = node.respond_to?(:name) ? node.name : 'Object'
|
|
22
|
-
|
|
24
|
+
ModuleProxy.new(node:, name:, namespace:, source:)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def class_proxy(node:, namespace:, file_path:, lines:)
|
|
28
|
+
source = SourceFactory.class_source(node:, file_path:, lines:)
|
|
29
|
+
ClassProxy.new(node:, name: node.name, namespace:, source:)
|
|
23
30
|
end
|
|
24
31
|
|
|
25
32
|
def method_proxy(method_node:, file_proxy:)
|
|
@@ -6,14 +6,13 @@ module Lowkey
|
|
|
6
6
|
class SourceFactory
|
|
7
7
|
class << self
|
|
8
8
|
def file_source(root_node:, file_path:)
|
|
9
|
-
end_line = root_node.respond_to?(:end_line) ? root_node.end_line : nil
|
|
9
|
+
end_line = root_node.respond_to?(:end_line) ? root_node.end_line : nil # TODO: Get file line count.
|
|
10
10
|
|
|
11
|
-
Source.new(file_path:, scope: 'file', lines: root_node.script_lines, start_line:
|
|
11
|
+
Source.new(file_path:, scope: 'file', lines: root_node.script_lines, start_line: 1, end_line:)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
start_line = node.respond_to?(:class_keyword_loc) ? node.class_keyword_loc.start_line : 0
|
|
14
|
+
def module_source(node:, namespace:, file_path:, lines:)
|
|
15
|
+
start_line = node.respond_to?(:class_keyword_loc) ? node.class_keyword_loc.start_line : 1
|
|
17
16
|
end_line = node.respond_to?(:end_keyword_loc) ? node.end_keyword_loc.end_line : start_line
|
|
18
17
|
end_line = node.end_line if namespace == 'Object'
|
|
19
18
|
scope = node.respond_to?(:name) ? node.name : 'Object'
|
|
@@ -21,11 +20,19 @@ module Lowkey
|
|
|
21
20
|
Source.new(file_path:, scope:, lines:, start_line:, end_line:)
|
|
22
21
|
end
|
|
23
22
|
|
|
23
|
+
def class_source(node:, file_path:, lines:)
|
|
24
|
+
start_line = node.respond_to?(:class_keyword_loc) ? node.class_keyword_loc.start_line : 1
|
|
25
|
+
end_line = node.respond_to?(:end_keyword_loc) ? node.end_keyword_loc.end_line : start_line
|
|
26
|
+
|
|
27
|
+
Source.new(file_path:, scope: node.name, lines:, start_line:, end_line:)
|
|
28
|
+
end
|
|
29
|
+
|
|
24
30
|
def method_source(method_node:, file_path:, lines:)
|
|
25
31
|
scope = method_node.name
|
|
26
32
|
start_line = method_node.start_line
|
|
27
33
|
end_line = method_node.end_line
|
|
28
|
-
|
|
34
|
+
# TODO: Brittle conditional. What we really want to identify is if the method/rest of file was able to be parsed into an AST.
|
|
35
|
+
end_line = end_line_from_indent(method_node:, lines:) if end_line >= lines.count
|
|
29
36
|
|
|
30
37
|
Source.new(file_path:, scope:, lines:, start_line:, end_line:)
|
|
31
38
|
end
|
data/lib/interfaces/proxy.rb
CHANGED
|
@@ -10,7 +10,7 @@ module Lowkey
|
|
|
10
10
|
|
|
11
11
|
attr_reader :name
|
|
12
12
|
|
|
13
|
-
def_delegators :@source, :file_path, :lines, :start_line, :scope
|
|
13
|
+
def_delegators :@source, :file_path, :lines, :lines=, :start_line, :end_line, :scope
|
|
14
14
|
def_delegators :@source, :wrap, :export
|
|
15
15
|
|
|
16
16
|
def initialize(name:, source:)
|
data/lib/lowkey.rb
CHANGED
|
@@ -18,7 +18,7 @@ module Lowkey
|
|
|
18
18
|
keys[key]
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def load(file_path)
|
|
21
|
+
def load(file_path, cache: true)
|
|
22
22
|
root_node = Prism.parse_file(file_path).value
|
|
23
23
|
file_proxy = ProxyFactory.file_proxy(root_node:, file_path:)
|
|
24
24
|
|
|
@@ -28,7 +28,7 @@ module Lowkey
|
|
|
28
28
|
|
|
29
29
|
AdapterLoader.load(file_proxy:)
|
|
30
30
|
|
|
31
|
-
if Lowkey.config.cache
|
|
31
|
+
if Lowkey.config.cache && cache
|
|
32
32
|
map_file_path(file_proxy:)
|
|
33
33
|
map_definitions(file_proxy:)
|
|
34
34
|
end
|
data/lib/models/source.rb
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Lowkey
|
|
4
|
+
class WriteError < StandardError; end
|
|
5
|
+
|
|
4
6
|
class Source
|
|
5
|
-
attr_reader :file_path, :scope
|
|
6
|
-
attr_accessor :
|
|
7
|
+
attr_reader :file_path, :scope, :lines
|
|
8
|
+
attr_accessor :start_line, :end_line
|
|
7
9
|
|
|
8
10
|
def initialize(file_path:, scope:, lines:, start_line:, end_line: nil)
|
|
9
11
|
@file_path = file_path
|
|
@@ -14,16 +16,26 @@ module Lowkey
|
|
|
14
16
|
@lines = lines
|
|
15
17
|
end
|
|
16
18
|
|
|
19
|
+
def lines=(new_lines)
|
|
20
|
+
raise WriteError, "More new lines than old lines, won't fit" if new_lines.count > lines.count
|
|
21
|
+
|
|
22
|
+
indent = lines[start_index][/^\s+/]
|
|
23
|
+
|
|
24
|
+
[start_index..end_index].each do |line_index|
|
|
25
|
+
lines[line_index] = indent + new_lines.pop.to_s || ''
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
17
29
|
def wrap(prefix:, suffix:)
|
|
18
30
|
start_line = lines[start_index]
|
|
19
31
|
indent = start_line[/^\s+/]
|
|
20
|
-
lines[start_index] = indent + prefix.to_s + start_line.lstrip
|
|
21
32
|
|
|
33
|
+
lines[start_index] = indent + prefix.to_s + start_line.lstrip
|
|
22
34
|
lines[end_index] = lines[end_index] + suffix.to_s
|
|
23
35
|
end
|
|
24
36
|
|
|
25
37
|
def export
|
|
26
|
-
lines.join
|
|
38
|
+
lines[start_index..end_index].join
|
|
27
39
|
end
|
|
28
40
|
|
|
29
41
|
private
|
data/lib/proxies/class_proxy.rb
CHANGED
|
@@ -1,45 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
4
|
-
require_relative '../queries/query'
|
|
3
|
+
require_relative 'module_proxy'
|
|
5
4
|
|
|
6
5
|
module Lowkey
|
|
7
|
-
class ClassProxy <
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
attr_reader :namespace
|
|
11
|
-
attr_accessor :private_start_line, :keyed_methods, :class_methods, :instance_methods, :method_calls
|
|
6
|
+
class ClassProxy < ModuleProxy
|
|
7
|
+
attr_accessor :instance_methods, :class_binding
|
|
12
8
|
|
|
13
9
|
def initialize(node:, name:, namespace:, source:)
|
|
14
|
-
super(name:, source:)
|
|
15
|
-
|
|
16
|
-
@node = node
|
|
17
|
-
@namespace = namespace
|
|
18
|
-
|
|
19
|
-
@private_start_line = nil
|
|
10
|
+
super(node:, name:, namespace:, source:)
|
|
20
11
|
|
|
21
|
-
@keyed_methods = {}
|
|
22
|
-
@class_methods = {}
|
|
23
12
|
@instance_methods = {}
|
|
24
|
-
|
|
25
|
-
@method_calls = []
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def [](key)
|
|
29
|
-
key.start_with?('.') ? query(node: @node, namespace: nil, name: key.delete_prefix('.')) : @keyed_methods[key]
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
class << self
|
|
33
|
-
def class_method?(method_node:, parent_map:)
|
|
34
|
-
return true if method_node.is_a?(::Prism::DefNode) && method_node.receiver.instance_of?(Prism::SelfNode) # self.method_name
|
|
35
|
-
return true if method_node.is_a?(::Prism::SingletonClassNode) # class << self
|
|
36
|
-
|
|
37
|
-
if (parent_node = parent_map[method_node])
|
|
38
|
-
return class_method?(method_node: parent_node, parent_map:)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
false
|
|
42
|
-
end
|
|
13
|
+
@class_binding = nil
|
|
43
14
|
end
|
|
44
15
|
end
|
|
45
16
|
end
|
data/lib/proxies/file_proxy.rb
CHANGED
|
@@ -17,7 +17,7 @@ module Lowkey
|
|
|
17
17
|
@root_node = root_node
|
|
18
18
|
|
|
19
19
|
@definitions = {}
|
|
20
|
-
@dependencies =
|
|
20
|
+
@dependencies = Set.new
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def [](keypath)
|
|
@@ -29,9 +29,13 @@ module Lowkey
|
|
|
29
29
|
# TODO: Slice the lines in a file and replace with the output of the class proxy.
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
def
|
|
32
|
+
def upsert_definition(module_proxy:)
|
|
33
33
|
# TODO: Merge duplicate class with existing class.
|
|
34
|
-
@definitions[
|
|
34
|
+
@definitions[module_proxy.namespace] ||= module_proxy
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def upsert_dependency(namespace:)
|
|
38
|
+
@dependencies.add(namespace)
|
|
35
39
|
end
|
|
36
40
|
end
|
|
37
41
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../interfaces/proxy'
|
|
4
|
+
require_relative '../queries/query'
|
|
5
|
+
|
|
6
|
+
module Lowkey
|
|
7
|
+
class ModuleProxy < Proxy
|
|
8
|
+
include Query
|
|
9
|
+
|
|
10
|
+
attr_reader :namespace
|
|
11
|
+
attr_accessor :private_start_line, :keyed_methods, :class_methods, :method_calls
|
|
12
|
+
|
|
13
|
+
def initialize(node:, name:, namespace:, source:)
|
|
14
|
+
super(name:, source:)
|
|
15
|
+
|
|
16
|
+
@node = node
|
|
17
|
+
@namespace = namespace
|
|
18
|
+
|
|
19
|
+
@private_start_line = nil
|
|
20
|
+
|
|
21
|
+
@keyed_methods = {}
|
|
22
|
+
@class_methods = {}
|
|
23
|
+
|
|
24
|
+
@method_calls = []
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def [](key)
|
|
28
|
+
key.start_with?('.') ? query(node: @node, namespace: nil, name: key.delete_prefix('.')) : @keyed_methods[key]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class << self
|
|
32
|
+
def class_method?(method_node:, parent_map:)
|
|
33
|
+
return true if method_node.is_a?(::Prism::DefNode) && method_node.receiver.instance_of?(Prism::SelfNode) # self.method_name
|
|
34
|
+
return true if method_node.is_a?(::Prism::SingletonClassNode) # class << self
|
|
35
|
+
|
|
36
|
+
if (parent_node = parent_map[method_node])
|
|
37
|
+
return class_method?(method_node: parent_node, parent_map:)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
false
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
data/lib/queries/query.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'prism'
|
|
4
|
+
|
|
3
5
|
module Lowkey
|
|
4
6
|
module Query
|
|
5
7
|
# TODO: Make name a keypath.
|
|
@@ -10,6 +12,9 @@ module Lowkey
|
|
|
10
12
|
end
|
|
11
13
|
|
|
12
14
|
def namespace(node:, parent_map:, namespace: [])
|
|
15
|
+
# When inside RBX, Prism thinks we're defining a class because of "<".
|
|
16
|
+
return nil if node.respond_to?(:constant_path) && node.constant_path.is_a?(Prism::MissingNode)
|
|
17
|
+
|
|
13
18
|
if parent_map[node].nil?
|
|
14
19
|
namespace << 'Object' if namespace.empty?
|
|
15
20
|
return namespace.reverse.join('::')
|
data/lib/version.rb
CHANGED
|
@@ -4,27 +4,18 @@ require_relative '../factories/proxy_factory'
|
|
|
4
4
|
require_relative '../queries/query'
|
|
5
5
|
|
|
6
6
|
module Lowkey
|
|
7
|
-
class
|
|
7
|
+
class ClassVisitor
|
|
8
8
|
include Query
|
|
9
9
|
|
|
10
10
|
def initialize(file_proxy:, parent_map:)
|
|
11
11
|
@file_proxy = file_proxy
|
|
12
12
|
@parent_map = parent_map
|
|
13
|
-
|
|
14
|
-
create_root_class
|
|
15
13
|
end
|
|
16
14
|
|
|
17
15
|
def visit(node)
|
|
18
|
-
namespace = namespace(node:, parent_map:)
|
|
16
|
+
namespace = namespace(node:, parent_map:) || return
|
|
19
17
|
class_proxy = ProxyFactory.class_proxy(node:, namespace:, file_path:, lines:)
|
|
20
|
-
@file_proxy.
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
|
|
25
|
-
def create_root_class
|
|
26
|
-
class_proxy = ProxyFactory.class_proxy(node: @file_proxy.root_node, namespace: 'Object', file_path:, lines:)
|
|
27
|
-
@file_proxy.upsert_class_proxy(class_proxy:)
|
|
18
|
+
@file_proxy.upsert_definition(module_proxy: class_proxy)
|
|
28
19
|
end
|
|
29
20
|
|
|
30
21
|
attr_reader :parent_map
|
|
@@ -12,18 +12,28 @@ module Lowkey
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def visit(node)
|
|
15
|
-
namespace = namespace(node:, parent_map:)
|
|
16
|
-
|
|
17
|
-
class_proxy.method_calls << node
|
|
15
|
+
namespace = namespace(node:, parent_map:) || return
|
|
16
|
+
module_proxy = file_proxy[namespace]
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
module_proxy.method_calls << node
|
|
19
|
+
upsert_dependency(node:, namespace:)
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
return unless node.name == :private && node.respond_to?(:start_line) && module_proxy.start_line && module_proxy.end_line
|
|
22
|
+
return unless node.start_line > module_proxy.start_line && node.start_line < module_proxy.end_line
|
|
23
|
+
|
|
24
|
+
module_proxy.private_start_line = node.start_line
|
|
23
25
|
end
|
|
24
26
|
|
|
25
27
|
private
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
def upsert_dependency(node:, namespace:)
|
|
30
|
+
return unless %i[include extend].include?(node.name)
|
|
31
|
+
|
|
32
|
+
dependency_name = node.arguments.arguments.first.name.to_s
|
|
33
|
+
dependency_name = "#{namespace}::#{dependency_name}" unless dependency_name.start_with?('::')
|
|
34
|
+
file_proxy.upsert_dependency(namespace: dependency_name)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
attr_reader :file_proxy, :parent_map
|
|
28
38
|
end
|
|
29
39
|
end
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative '../factories/source_factory'
|
|
4
4
|
require_relative '../factories/proxy_factory'
|
|
5
|
+
require_relative '../proxies/method_proxy'
|
|
5
6
|
require_relative '../queries/query'
|
|
6
7
|
|
|
7
8
|
module Lowkey
|
|
@@ -15,16 +16,16 @@ module Lowkey
|
|
|
15
16
|
|
|
16
17
|
def visit(method_node)
|
|
17
18
|
namespace = namespace(node: method_node, parent_map:)
|
|
18
|
-
|
|
19
|
+
module_proxy = file_proxy[namespace]
|
|
19
20
|
method_proxy = ProxyFactory.method_proxy(method_node:, file_proxy:)
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
module_proxy.keyed_methods[method_node.name] = method_proxy
|
|
22
23
|
|
|
23
24
|
# TODO: Implemented as tagged methods similar to tagged params.
|
|
24
|
-
if
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
if ModuleProxy.class_method?(method_node:, parent_map:)
|
|
26
|
+
module_proxy.class_methods[method_node.name] = method_proxy
|
|
27
|
+
elsif module_proxy.class <= ClassProxy
|
|
28
|
+
module_proxy.instance_methods[method_node.name] = method_proxy
|
|
28
29
|
end
|
|
29
30
|
end
|
|
30
31
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../factories/proxy_factory'
|
|
4
|
+
require_relative '../queries/query'
|
|
5
|
+
|
|
6
|
+
module Lowkey
|
|
7
|
+
class ModuleVisitor
|
|
8
|
+
include Query
|
|
9
|
+
|
|
10
|
+
def initialize(file_proxy:, parent_map:)
|
|
11
|
+
@file_proxy = file_proxy
|
|
12
|
+
@parent_map = parent_map
|
|
13
|
+
|
|
14
|
+
create_root_module
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def visit(node)
|
|
18
|
+
namespace = namespace(node:, parent_map:)
|
|
19
|
+
module_proxy = ProxyFactory.module_proxy(node:, namespace:, file_path:, lines:)
|
|
20
|
+
@file_proxy.upsert_definition(module_proxy:)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def create_root_module
|
|
26
|
+
module_proxy = ProxyFactory.module_proxy(node: @file_proxy.root_node, namespace: 'Object', file_path:, lines:)
|
|
27
|
+
@file_proxy.upsert_definition(module_proxy:)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
attr_reader :parent_map
|
|
31
|
+
|
|
32
|
+
def file_path
|
|
33
|
+
@file_proxy.file_path
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def lines
|
|
37
|
+
@file_proxy.lines
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
data/lib/visitors/visitor.rb
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
4
|
-
require_relative '
|
|
3
|
+
require_relative 'class_visitor'
|
|
4
|
+
require_relative 'module_visitor'
|
|
5
5
|
require_relative 'method_def_visitor'
|
|
6
|
+
require_relative 'method_call_visitor'
|
|
6
7
|
|
|
7
8
|
module Lowkey
|
|
8
9
|
class Visitor < Prism::Visitor
|
|
9
10
|
def initialize(file_proxy:, parent_map:)
|
|
10
|
-
@
|
|
11
|
-
@
|
|
11
|
+
@class_visitor = ClassVisitor.new(file_proxy:, parent_map:)
|
|
12
|
+
@module_visitor = ModuleVisitor.new(file_proxy:, parent_map:)
|
|
12
13
|
@method_def_visitor = MethodDefVisitor.new(file_proxy:, parent_map:)
|
|
14
|
+
@method_call_visitor = MethodCallVisitor.new(file_proxy:, parent_map:)
|
|
13
15
|
end
|
|
14
16
|
|
|
15
|
-
def
|
|
16
|
-
@
|
|
17
|
+
def visit_class_node(node)
|
|
18
|
+
@class_visitor.visit(node)
|
|
17
19
|
super
|
|
18
20
|
end
|
|
19
21
|
|
|
20
|
-
def
|
|
21
|
-
@
|
|
22
|
+
def visit_module_node(node)
|
|
23
|
+
@module_visitor.visit(node)
|
|
22
24
|
super
|
|
23
25
|
end
|
|
24
26
|
|
|
@@ -26,5 +28,10 @@ module Lowkey
|
|
|
26
28
|
@method_def_visitor.visit(node)
|
|
27
29
|
super
|
|
28
30
|
end
|
|
31
|
+
|
|
32
|
+
def visit_call_node(node)
|
|
33
|
+
@method_call_visitor.visit(node)
|
|
34
|
+
super
|
|
35
|
+
end
|
|
29
36
|
end
|
|
30
37
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lowkey
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- maedi
|
|
@@ -44,13 +44,15 @@ files:
|
|
|
44
44
|
- lib/proxies/class_proxy.rb
|
|
45
45
|
- lib/proxies/file_proxy.rb
|
|
46
46
|
- lib/proxies/method_proxy.rb
|
|
47
|
+
- lib/proxies/module_proxy.rb
|
|
47
48
|
- lib/proxies/param_proxy.rb
|
|
48
49
|
- lib/proxies/return_proxy.rb
|
|
49
50
|
- lib/queries/query.rb
|
|
50
51
|
- lib/version.rb
|
|
52
|
+
- lib/visitors/class_visitor.rb
|
|
51
53
|
- lib/visitors/method_call_visitor.rb
|
|
52
|
-
- lib/visitors/method_class_visitor.rb
|
|
53
54
|
- lib/visitors/method_def_visitor.rb
|
|
55
|
+
- lib/visitors/module_visitor.rb
|
|
54
56
|
- lib/visitors/visitor.rb
|
|
55
57
|
homepage: https://github.com/low-rb/lowkey
|
|
56
58
|
licenses: []
|