ruby_jard 0.2.3 → 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 +4 -4
- data/.github/FUNDING.yml +3 -0
- data/.github/workflows/documentation.yml +65 -0
- data/.github/workflows/{ruby.yml → rspec.yml} +22 -11
- data/.rubocop.yml +6 -0
- data/CHANGELOG.md +15 -3
- data/Gemfile +9 -2
- data/README.md +52 -332
- data/benchmark/path_filter_bench.rb +58 -0
- data/lib/ruby_jard.rb +15 -5
- data/lib/ruby_jard/color_schemes.rb +9 -1
- data/lib/ruby_jard/color_schemes/256_color_scheme.rb +21 -35
- data/lib/ruby_jard/color_schemes/256_light_color_scheme.rb +23 -35
- data/lib/ruby_jard/color_schemes/deep_space_color_scheme.rb +20 -34
- data/lib/ruby_jard/color_schemes/gruvbox_color_scheme.rb +20 -34
- data/lib/ruby_jard/color_schemes/one_half_dark_color_scheme.rb +20 -34
- data/lib/ruby_jard/color_schemes/one_half_light_color_scheme.rb +21 -34
- data/lib/ruby_jard/commands/color_helpers.rb +32 -0
- data/lib/ruby_jard/commands/frame_command.rb +2 -2
- data/lib/ruby_jard/commands/jard/color_scheme_command.rb +25 -3
- data/lib/ruby_jard/commands/jard/filter_command.rb +136 -0
- data/lib/ruby_jard/commands/jard/output_command.rb +13 -5
- data/lib/ruby_jard/commands/jard_command.rb +3 -1
- data/lib/ruby_jard/config.rb +9 -2
- data/lib/ruby_jard/decorators/array_decorator.rb +79 -0
- data/lib/ruby_jard/decorators/attributes_decorator.rb +172 -0
- data/lib/ruby_jard/decorators/color_decorator.rb +12 -5
- data/lib/ruby_jard/decorators/hash_decorator.rb +74 -0
- data/lib/ruby_jard/decorators/inspection_decorator.rb +91 -58
- data/lib/ruby_jard/decorators/object_decorator.rb +122 -0
- data/lib/ruby_jard/decorators/path_decorator.rb +55 -72
- data/lib/ruby_jard/decorators/rails_decorator.rb +194 -0
- data/lib/ruby_jard/decorators/string_decorator.rb +41 -0
- data/lib/ruby_jard/decorators/struct_decorator.rb +79 -0
- data/lib/ruby_jard/frame.rb +23 -10
- data/lib/ruby_jard/keys.rb +1 -0
- data/lib/ruby_jard/layouts/narrow_horizontal_layout.rb +4 -0
- data/lib/ruby_jard/layouts/tiny_layout.rb +4 -0
- data/lib/ruby_jard/pager.rb +21 -5
- data/lib/ruby_jard/path_classifier.rb +133 -0
- data/lib/ruby_jard/path_filter.rb +125 -0
- data/lib/ruby_jard/reflection.rb +97 -0
- data/lib/ruby_jard/repl_processor.rb +71 -38
- data/lib/ruby_jard/row_renderer.rb +5 -3
- data/lib/ruby_jard/screen.rb +2 -2
- data/lib/ruby_jard/screen_manager.rb +13 -36
- data/lib/ruby_jard/screen_renderer.rb +1 -1
- data/lib/ruby_jard/screens/backtrace_screen.rb +55 -39
- data/lib/ruby_jard/screens/menu_screen.rb +30 -30
- data/lib/ruby_jard/screens/source_screen.rb +46 -62
- data/lib/ruby_jard/screens/threads_screen.rb +59 -72
- data/lib/ruby_jard/screens/variables_screen.rb +168 -124
- data/lib/ruby_jard/session.rb +120 -16
- data/lib/ruby_jard/thread_info.rb +69 -0
- data/lib/ruby_jard/version.rb +1 -1
- data/ruby_jard.gemspec +3 -1
- metadata +20 -39
- data/.travis.yml +0 -6
- data/CNAME +0 -1
- data/_config.yml +0 -1
- data/docs/_config.yml +0 -8
- data/docs/color_schemes/256-light.png +0 -0
- data/docs/color_schemes/256.png +0 -0
- data/docs/color_schemes/deep-space.png +0 -0
- data/docs/color_schemes/gruvbox.png +0 -0
- data/docs/color_schemes/one-half-dark.png +0 -0
- data/docs/color_schemes/one-half-light.png +0 -0
- data/docs/demo.png +0 -0
- data/docs/guide-ui.png +0 -0
- data/docs/index.md +0 -238
- data/docs/logo.jpg +0 -0
- data/docs/screen-backtrace.png +0 -0
- data/docs/screen-repl.png +0 -0
- data/docs/screen-source.png +0 -0
- data/docs/screen-threads.png +0 -0
- data/docs/screen-variables.png +0 -0
- data/images/bg_hr.png +0 -0
- data/images/blacktocat.png +0 -0
- data/images/body-bg.jpg +0 -0
- data/images/download-button.png +0 -0
- data/images/github-button.png +0 -0
- data/images/header-bg.jpg +0 -0
- data/images/highlight-bg.jpg +0 -0
- data/images/icon_download.png +0 -0
- data/images/sidebar-bg.jpg +0 -0
- data/images/sprite_download.png +0 -0
- data/javascripts/main.js +0 -1
- data/stylesheets/github-light.css +0 -130
- data/stylesheets/normalize.css +0 -424
- data/stylesheets/print.css +0 -228
- data/stylesheets/stylesheet.css +0 -245
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyJard
|
4
|
+
module Decorators
|
5
|
+
##
|
6
|
+
# A light decorator for a string. String should be escaped, and cut off.
|
7
|
+
class StringDecorator
|
8
|
+
def initialize(generic_decorator)
|
9
|
+
@generic_decorator = generic_decorator
|
10
|
+
end
|
11
|
+
|
12
|
+
def match?(variable)
|
13
|
+
RubyJard::Reflection.call_is_a?(variable, String)
|
14
|
+
end
|
15
|
+
|
16
|
+
# rubocop:disable Lint/UnusedMethodArgument
|
17
|
+
def decorate_multiline(variable, first_line_limit:, line_limit:, lines:, depth: 0)
|
18
|
+
[
|
19
|
+
decorate_singleline(variable, line_limit: first_line_limit)
|
20
|
+
]
|
21
|
+
end
|
22
|
+
|
23
|
+
def decorate_singleline(variable, line_limit:, depth: 0)
|
24
|
+
inspection = variable.inspect[1..-1].chomp!('"')
|
25
|
+
str =
|
26
|
+
if inspection.length < line_limit - 2
|
27
|
+
inspection
|
28
|
+
else
|
29
|
+
inspection[0..line_limit - 4] + '…'
|
30
|
+
end
|
31
|
+
[
|
32
|
+
|
33
|
+
RubyJard::Span.new(content: '"', styles: :string),
|
34
|
+
RubyJard::Span.new(content: str, styles: :string),
|
35
|
+
RubyJard::Span.new(content: '"', styles: :string)
|
36
|
+
]
|
37
|
+
end
|
38
|
+
# rubocop:enable Lint/UnusedMethodArgument
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyJard
|
4
|
+
module Decorators
|
5
|
+
##
|
6
|
+
# Decorator for Struct.
|
7
|
+
# TODO: This one should handle Open Struct too
|
8
|
+
class StructDecorator
|
9
|
+
def initialize(generic_decorator)
|
10
|
+
@generic_decorator = generic_decorator
|
11
|
+
@attributes_decorator = RubyJard::Decorators::AttributesDecorator.new(generic_decorator)
|
12
|
+
end
|
13
|
+
|
14
|
+
def match?(variable)
|
15
|
+
RubyJard::Reflection.call_is_a?(variable, Struct)
|
16
|
+
end
|
17
|
+
|
18
|
+
def decorate_singleline(variable, line_limit:, depth: 0)
|
19
|
+
spans = [RubyJard::Span.new(content: '#<struct', margin_right: 1, styles: :text_dim)]
|
20
|
+
unless variable.class.name.nil?
|
21
|
+
spans << RubyJard::Span.new(content: variable.class.name.to_s, margin_right: 1, styles: :text_primary)
|
22
|
+
end
|
23
|
+
spans += @attributes_decorator.inline_pairs(
|
24
|
+
variable.members.each_with_index,
|
25
|
+
total: variable.length, line_limit: line_limit - spans.map(&:content_length).sum - 1,
|
26
|
+
process_key: false, depth: depth + 1,
|
27
|
+
value_proc: ->(key) { variable[key] }
|
28
|
+
)
|
29
|
+
spans << RubyJard::Span.new(content: '>', styles: :text_dim)
|
30
|
+
end
|
31
|
+
|
32
|
+
def decorate_multiline(variable, first_line_limit:, lines:, line_limit:, depth: 0)
|
33
|
+
if variable.size > lines * 1.5
|
34
|
+
return do_decorate_multiline(variable, lines: lines, line_limit: line_limit, depth: depth)
|
35
|
+
end
|
36
|
+
|
37
|
+
singleline = decorate_singleline(variable, line_limit: first_line_limit)
|
38
|
+
|
39
|
+
if singleline.map(&:content_length).sum < line_limit || variable.length <= 1
|
40
|
+
[singleline]
|
41
|
+
else
|
42
|
+
do_decorate_multiline(variable, lines: lines, line_limit: line_limit, depth: depth)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def do_decorate_multiline(variable, lines:, line_limit:, depth: 0)
|
49
|
+
spans = []
|
50
|
+
start = [RubyJard::Span.new(content: '#<struct', styles: :text_dim)]
|
51
|
+
unless variable.class.name.nil?
|
52
|
+
start << RubyJard::Span.new(content: variable.class.name.to_s, margin_left: 1, styles: :text_primary)
|
53
|
+
end
|
54
|
+
start << RubyJard::Span.new(content: '>', styles: :text_dim)
|
55
|
+
spans << start
|
56
|
+
|
57
|
+
item_count = 0
|
58
|
+
variable.members.each_with_index do |member, index|
|
59
|
+
spans << @attributes_decorator.pair(
|
60
|
+
member, variable[member], line_limit: line_limit, process_key: false, depth: depth + 1
|
61
|
+
)
|
62
|
+
item_count += 1
|
63
|
+
break if index >= lines - 2
|
64
|
+
end
|
65
|
+
spans << last_line(variable.length, item_count) if variable.length > item_count
|
66
|
+
spans
|
67
|
+
end
|
68
|
+
|
69
|
+
def last_line(total, item_count)
|
70
|
+
[
|
71
|
+
RubyJard::Span.new(
|
72
|
+
content: "▸ #{total - item_count} more...",
|
73
|
+
margin_left: 2, styles: :text_dim
|
74
|
+
)
|
75
|
+
]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
data/lib/ruby_jard/frame.rb
CHANGED
@@ -6,42 +6,55 @@ module RubyJard
|
|
6
6
|
# access to Byebug's internal data structure, provides some more helpers
|
7
7
|
# and make Jard easier to test.
|
8
8
|
class Frame
|
9
|
-
attr_reader :
|
9
|
+
attr_reader :real_pos
|
10
|
+
attr_writer :visible
|
11
|
+
attr_accessor :virtual_pos
|
10
12
|
|
11
|
-
def initialize(context,
|
13
|
+
def initialize(context, real_pos, virtual_pos: nil)
|
12
14
|
@context = context
|
13
|
-
@
|
15
|
+
@real_pos = real_pos
|
16
|
+
@virtual_pos = virtual_pos
|
17
|
+
|
18
|
+
@visible = true
|
19
|
+
end
|
20
|
+
|
21
|
+
def visible?
|
22
|
+
@visible == true
|
23
|
+
end
|
24
|
+
|
25
|
+
def hidden?
|
26
|
+
@visible == false
|
14
27
|
end
|
15
28
|
|
16
29
|
def frame_file
|
17
|
-
@context.frame_file(@
|
30
|
+
@context.frame_file(@real_pos)
|
18
31
|
end
|
19
32
|
|
20
33
|
def frame_line
|
21
|
-
@context.frame_line(@
|
34
|
+
@context.frame_line(@real_pos)
|
22
35
|
end
|
23
36
|
|
24
37
|
def frame_location
|
25
|
-
frame_backtrace = @context.backtrace[@
|
38
|
+
frame_backtrace = @context.backtrace[@real_pos]
|
26
39
|
return nil if frame_backtrace.nil?
|
27
40
|
|
28
41
|
frame_backtrace.first
|
29
42
|
end
|
30
43
|
|
31
44
|
def frame_self
|
32
|
-
@context.frame_self(@
|
45
|
+
@context.frame_self(@real_pos)
|
33
46
|
end
|
34
47
|
|
35
48
|
def frame_class
|
36
|
-
@context.frame_class(@
|
49
|
+
@context.frame_class(@real_pos)
|
37
50
|
end
|
38
51
|
|
39
52
|
def frame_binding
|
40
|
-
@context.frame_binding(@
|
53
|
+
@context.frame_binding(@real_pos)
|
41
54
|
end
|
42
55
|
|
43
56
|
def frame_method
|
44
|
-
@context.frame_method(@
|
57
|
+
@context.frame_method(@real_pos)
|
45
58
|
end
|
46
59
|
|
47
60
|
def c_frame?
|
data/lib/ruby_jard/keys.rb
CHANGED
data/lib/ruby_jard/pager.rb
CHANGED
@@ -29,17 +29,25 @@ module RubyJard
|
|
29
29
|
!!@enabled
|
30
30
|
end
|
31
31
|
|
32
|
+
##
|
33
|
+
# Pager tracker in Pry does not expose enough
|
34
|
+
class JardPageTracker < Pry::Pager::PageTracker
|
35
|
+
attr_reader :row, :col
|
36
|
+
end
|
37
|
+
|
32
38
|
##
|
33
39
|
# Pager using GNU Less
|
34
40
|
class LessPager < Pry::Pager::NullPager
|
35
|
-
def initialize(pry_instance, force_open: false, pager_start_at_the_end: false)
|
41
|
+
def initialize(pry_instance, force_open: false, pager_start_at_the_end: false, prompt: nil)
|
36
42
|
super(pry_instance.output)
|
37
43
|
@pry_instance = pry_instance
|
38
44
|
@buffer = ''
|
39
45
|
|
40
46
|
@pager_start_at_the_end = pager_start_at_the_end
|
47
|
+
@prompt = prompt
|
41
48
|
|
42
|
-
@
|
49
|
+
@window_width, @window_height = RubyJard::Console.screen_size(@pry_instance.output)
|
50
|
+
@tracker = JardPageTracker.new(@window_height, @window_width)
|
43
51
|
@pager = force_open ? open_pager : nil
|
44
52
|
end
|
45
53
|
|
@@ -63,9 +71,11 @@ module RubyJard
|
|
63
71
|
@pager.close
|
64
72
|
@pry_instance.exec_hook :after_pager, self
|
65
73
|
|
66
|
-
|
67
|
-
|
68
|
-
@out.
|
74
|
+
list_prompt
|
75
|
+
elsif @tracker.row > @window_height / 2
|
76
|
+
@out.write @buffer
|
77
|
+
|
78
|
+
list_prompt
|
69
79
|
else
|
70
80
|
@out.write @buffer
|
71
81
|
end
|
@@ -78,6 +88,7 @@ module RubyJard
|
|
78
88
|
def open_pager
|
79
89
|
@pry_instance.exec_hook :before_pager, self
|
80
90
|
less_command = ['less', '-R', '-X']
|
91
|
+
less_command << "--prompt \"#{@prompt}\"" if @prompt
|
81
92
|
less_command << '+G' if @pager_start_at_the_end
|
82
93
|
|
83
94
|
IO.popen(
|
@@ -91,6 +102,11 @@ module RubyJard
|
|
91
102
|
|
92
103
|
@pager.write str.encode('UTF-8', undef: :replace)
|
93
104
|
end
|
105
|
+
|
106
|
+
def list_prompt
|
107
|
+
prompt = @pry_instance.prompt.wait_proc.call
|
108
|
+
@out.puts "#{prompt}Tips: You can use `list` command to show back debugger screens"
|
109
|
+
end
|
94
110
|
end
|
95
111
|
end
|
96
112
|
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
require 'rbconfig'
|
5
|
+
|
6
|
+
module RubyJard
|
7
|
+
##
|
8
|
+
# Classify a particular path by its orign such as stdlib, gem, evaluation, etc.
|
9
|
+
# Usage
|
10
|
+
# type, *info = PathClassifier.new.class('lib/abc')
|
11
|
+
class PathClassifier
|
12
|
+
GEM_PATTERN = /(.*)-(\d+\.\d+[.\d]*[.\d]*[-.\w]*)/i.freeze
|
13
|
+
STDLIB_PATTERN = /(.*)\.rb$/.freeze
|
14
|
+
INTERNAL_PATTERN = /<internal:[^>]+>/.freeze
|
15
|
+
EVALUATION_SIGNATURE = '(eval)'
|
16
|
+
RUBY_SCRIPT_SIGNATURE = '-e'
|
17
|
+
|
18
|
+
TYPES = [
|
19
|
+
TYPE_SOURCE_TREE = :source_tree,
|
20
|
+
TYPE_GEM = :gem,
|
21
|
+
TYPE_STDLIB = :stdlib,
|
22
|
+
TYPE_INTERNAL = :internal,
|
23
|
+
TYPE_EVALUATION = :evaluation,
|
24
|
+
TYPE_RUBY_SCRIPT = :ruby_script,
|
25
|
+
TYPE_UNKNOWN = :unknown
|
26
|
+
].freeze
|
27
|
+
|
28
|
+
def initialize
|
29
|
+
@gem_paths = fetch_gem_paths
|
30
|
+
end
|
31
|
+
|
32
|
+
def classify(path)
|
33
|
+
return TYPE_UNKNOWN if path.nil?
|
34
|
+
|
35
|
+
return TYPE_INTERNAL if try_classify_internal(path)
|
36
|
+
|
37
|
+
return TYPE_EVALUATION if try_classify_evaluation(path)
|
38
|
+
|
39
|
+
return TYPE_RUBY_SCRIPT if try_classify_ruby_script(path)
|
40
|
+
|
41
|
+
return TYPE_SOURCE_TREE if try_classify_source_tree(path)
|
42
|
+
|
43
|
+
matched, *info = try_classify_gem(path)
|
44
|
+
return TYPE_GEM, *info if matched
|
45
|
+
|
46
|
+
matched, *info = try_classify_stdlib(path)
|
47
|
+
return TYPE_STDLIB, *info if matched
|
48
|
+
|
49
|
+
TYPE_UNKNOWN
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def try_classify_gem(path)
|
55
|
+
@gem_paths.each do |gem_path|
|
56
|
+
next unless path.start_with?(gem_path)
|
57
|
+
|
58
|
+
splitted_path =
|
59
|
+
path[gem_path.length..-1]
|
60
|
+
.split('/')
|
61
|
+
.reject(&:empty?)
|
62
|
+
gem_name = splitted_path.shift
|
63
|
+
gem_version = nil
|
64
|
+
|
65
|
+
match = GEM_PATTERN.match(gem_name)
|
66
|
+
if match
|
67
|
+
gem_name = match[1]
|
68
|
+
gem_version = match[2]
|
69
|
+
end
|
70
|
+
|
71
|
+
return true, gem_name, gem_version, splitted_path.join('/')
|
72
|
+
end
|
73
|
+
|
74
|
+
false
|
75
|
+
end
|
76
|
+
|
77
|
+
def try_classify_internal(path)
|
78
|
+
# https://github.com/ruby/ruby/blob/master/template/prelude.c.tmpl#L18
|
79
|
+
path =~ INTERNAL_PATTERN
|
80
|
+
end
|
81
|
+
|
82
|
+
def try_classify_stdlib(path)
|
83
|
+
lib_dir = RbConfig::CONFIG['rubylibdir'].to_s.strip
|
84
|
+
|
85
|
+
return false if lib_dir.empty?
|
86
|
+
return false unless path.start_with?(lib_dir)
|
87
|
+
|
88
|
+
splitted_path =
|
89
|
+
path[lib_dir.length..-1]
|
90
|
+
.split('/')
|
91
|
+
.reject(&:empty?)
|
92
|
+
lib_name = splitted_path.first
|
93
|
+
match = STDLIB_PATTERN.match(lib_name)
|
94
|
+
lib_name = match[1] if match
|
95
|
+
|
96
|
+
[true, lib_name, splitted_path.join('/')]
|
97
|
+
rescue NameError
|
98
|
+
# RbConfig is not available
|
99
|
+
false
|
100
|
+
end
|
101
|
+
|
102
|
+
def try_classify_evaluation(path)
|
103
|
+
path == EVALUATION_SIGNATURE
|
104
|
+
end
|
105
|
+
|
106
|
+
def try_classify_ruby_script(path)
|
107
|
+
path == RUBY_SCRIPT_SIGNATURE
|
108
|
+
end
|
109
|
+
|
110
|
+
def try_classify_source_tree(path)
|
111
|
+
path.start_with?(Dir.pwd)
|
112
|
+
end
|
113
|
+
|
114
|
+
def fetch_gem_paths
|
115
|
+
paths = []
|
116
|
+
|
117
|
+
if defined?(Gem)
|
118
|
+
Gem.path.each do |gem_path|
|
119
|
+
paths << File.join(gem_path, 'gems')
|
120
|
+
paths << gem_path
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
if defined?(Bundler)
|
125
|
+
bundle_path = Bundler.bundle_path.to_s
|
126
|
+
paths << File.join(bundle_path, 'gems')
|
127
|
+
paths << bundle_path
|
128
|
+
end
|
129
|
+
|
130
|
+
paths
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyJard
|
4
|
+
##
|
5
|
+
# Check whether a particular path should be passed when debugging.
|
6
|
+
# Filtering is based on path classification (from PathClassifier),
|
7
|
+
# program's current filter mode, and filter included, excluded.
|
8
|
+
class PathFilter
|
9
|
+
FILTERS = [
|
10
|
+
FILTER_SOURCE_TREE = :source_tree,
|
11
|
+
FILTER_APPLICATION = :application,
|
12
|
+
FILTER_GEMS = :gems,
|
13
|
+
FILTER_EVERYTHING = :everything
|
14
|
+
].freeze
|
15
|
+
def initialize(config: nil, path_classifier: nil)
|
16
|
+
@config = config || RubyJard.config
|
17
|
+
@path_classifier = path_classifier || RubyJard::PathClassifier.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def match?(path)
|
21
|
+
case @config.filter
|
22
|
+
when FILTER_EVERYTHING
|
23
|
+
match_everything?(path)
|
24
|
+
when FILTER_GEMS
|
25
|
+
match_gems?(path)
|
26
|
+
when FILTER_APPLICATION
|
27
|
+
match_application?(path)
|
28
|
+
when FILTER_SOURCE_TREE
|
29
|
+
match_source_tree?(path)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def match_everything?(path)
|
36
|
+
return true if @config.filter_excluded.empty?
|
37
|
+
|
38
|
+
type, *info = @path_classifier.classify(path)
|
39
|
+
|
40
|
+
case type
|
41
|
+
when RubyJard::PathClassifier::TYPE_SOURCE_TREE, RubyJard::PathClassifier::TYPE_UNKNOWN
|
42
|
+
!match_excluded?(path)
|
43
|
+
when RubyJard::PathClassifier::TYPE_GEM
|
44
|
+
!match_excluded?(info[0], expand_path: false) && !match_excluded?(path)
|
45
|
+
when RubyJard::PathClassifier::TYPE_STDLIB
|
46
|
+
!match_excluded?(info[0], expand_path: false) && !match_excluded?(path)
|
47
|
+
else
|
48
|
+
true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def match_gems?(path)
|
53
|
+
type, *info = @path_classifier.classify(path)
|
54
|
+
|
55
|
+
case type
|
56
|
+
when RubyJard::PathClassifier::TYPE_SOURCE_TREE, RubyJard::PathClassifier::TYPE_UNKNOWN
|
57
|
+
!match_excluded?(path)
|
58
|
+
when RubyJard::PathClassifier::TYPE_GEM
|
59
|
+
!match_excluded?(info[0], expand_path: false) && !match_excluded?(path)
|
60
|
+
when RubyJard::PathClassifier::TYPE_STDLIB
|
61
|
+
match_included?(info[0], expand_path: false) || match_included?(path)
|
62
|
+
when RubyJard::PathClassifier::TYPE_RUBY_SCRIPT, RubyJard::PathClassifier::TYPE_EVALUATION
|
63
|
+
true
|
64
|
+
when RubyJard::PathClassifier::TYPE_INTERNAL
|
65
|
+
false
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def match_application?(path)
|
70
|
+
type, *info = @path_classifier.classify(path)
|
71
|
+
|
72
|
+
case type
|
73
|
+
when RubyJard::PathClassifier::TYPE_SOURCE_TREE, RubyJard::PathClassifier::TYPE_UNKNOWN
|
74
|
+
!match_excluded?(path)
|
75
|
+
when RubyJard::PathClassifier::TYPE_GEM, RubyJard::PathClassifier::TYPE_STDLIB
|
76
|
+
match_included?(info[0], expand_path: false) || match_included?(path)
|
77
|
+
when RubyJard::PathClassifier::TYPE_RUBY_SCRIPT
|
78
|
+
true
|
79
|
+
when RubyJard::PathClassifier::TYPE_EVALUATION
|
80
|
+
false
|
81
|
+
when RubyJard::PathClassifier::TYPE_INTERNAL
|
82
|
+
false
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def match_source_tree?(path)
|
87
|
+
type, *info = @path_classifier.classify(path)
|
88
|
+
|
89
|
+
case type
|
90
|
+
when RubyJard::PathClassifier::TYPE_SOURCE_TREE
|
91
|
+
!match_excluded?(path)
|
92
|
+
when RubyJard::PathClassifier::TYPE_UNKNOWN
|
93
|
+
match_included?(path)
|
94
|
+
when RubyJard::PathClassifier::TYPE_GEM, RubyJard::PathClassifier::TYPE_STDLIB
|
95
|
+
match_included?(info[0], expand_path: false) || match_included?(path)
|
96
|
+
when RubyJard::PathClassifier::TYPE_RUBY_SCRIPT
|
97
|
+
true
|
98
|
+
when RubyJard::PathClassifier::TYPE_EVALUATION
|
99
|
+
false
|
100
|
+
when RubyJard::PathClassifier::TYPE_INTERNAL
|
101
|
+
false
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def match_excluded?(path, expand_path: true)
|
106
|
+
@config.filter_excluded.any? do |excluded|
|
107
|
+
if expand_path
|
108
|
+
File.fnmatch(File.expand_path(excluded), path)
|
109
|
+
else
|
110
|
+
File.fnmatch(excluded, path)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def match_included?(path, expand_path: true)
|
116
|
+
@config.filter_included.any? do |included|
|
117
|
+
if expand_path
|
118
|
+
File.fnmatch(File.expand_path(included), path)
|
119
|
+
else
|
120
|
+
File.fnmatch(included, path)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|