leftovers 0.11.2 → 0.12.1
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/CHANGELOG.md +8 -0
- data/lib/leftovers/cli.rb +8 -5
- data/lib/leftovers/collection.rb +2 -2
- data/lib/leftovers/file_collector/node_processor/error.rb +16 -0
- data/lib/leftovers/file_collector/node_processor.rb +12 -2
- data/lib/leftovers/file_collector.rb +19 -8
- data/lib/leftovers/matcher_builders/node_type.rb +8 -2
- data/lib/leftovers/matcher_builders/or.rb +1 -1
- data/lib/leftovers/merged_config.rb +1 -1
- data/lib/leftovers/version.rb +1 -1
- data/lib/leftovers.rb +10 -2
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e52a1e28bb2607d09a74d36c1602a7bdbabd0f7ec58f542bd836b1d509f9c8a
|
4
|
+
data.tar.gz: 73df5d8f0694d5bd44c6a99f9268f64474cebc4f1097a2261233fee3596e235f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07a7d1443f20c26d39b3e030fc86469435fb6a067fb292d6c2c5bef8b4f7a34f19f7899c20c4d38f588612f6ea0b4e028d74319879cb14a7fa043deaf1ef7566
|
7
|
+
data.tar.gz: 1ab0edb8d8382e3c4fdef6cbd5dc78c57cd87a391baba773f1ced92fb3080528f8a80dd642c4c4f1db9c08c863b2532079d8bd764931b4b659a4e12d61fe357a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
# v0.12.1
|
2
|
+
|
3
|
+
- handle anonymous block arguments e.g. `def method(&); other_method(&); end`. thanks @sclarsen and @orien and @juanlujoanne
|
4
|
+
|
5
|
+
# v0.12.0
|
6
|
+
- improve error handling when a file can't be processed
|
7
|
+
- fail rather than warn when encountering a syntax error in a file being processed
|
8
|
+
|
1
9
|
# v0.11.2
|
2
10
|
|
3
11
|
- add `has_block: true/false` for matching method calls with a block.
|
data/lib/leftovers/cli.rb
CHANGED
@@ -9,11 +9,14 @@ module Leftovers
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def run
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
parse_options
|
13
|
+
|
14
|
+
runner.run
|
15
|
+
rescue ::Leftovers::Error => e
|
16
|
+
Leftovers.warn("\e[31m#{e.class}: #{e.message}\e[0m\n\n#{e.backtrace.join("\n")}")
|
17
|
+
1
|
18
|
+
rescue ::Leftovers::Exit => e
|
19
|
+
e.status # what why?
|
17
20
|
end
|
18
21
|
|
19
22
|
private
|
data/lib/leftovers/collection.rb
CHANGED
@@ -59,8 +59,8 @@ module Leftovers
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def freeze_calls
|
62
|
-
@calls = @calls.to_set.freeze
|
63
|
-
@test_calls = @test_calls.to_set.freeze
|
62
|
+
@calls = @calls.to_set.compare_by_identity.freeze
|
63
|
+
@test_calls = @test_calls.to_set.compare_by_identity.freeze
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Leftovers
|
4
|
+
class FileCollector
|
5
|
+
class NodeProcessor
|
6
|
+
class Error < ::Leftovers::FileCollector::Error
|
7
|
+
attr_reader :node
|
8
|
+
|
9
|
+
def initialize(message, node)
|
10
|
+
super(message)
|
11
|
+
@node = node
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -4,7 +4,17 @@ require 'parser'
|
|
4
4
|
|
5
5
|
module Leftovers
|
6
6
|
class FileCollector
|
7
|
-
class NodeProcessor < ::Parser::AST::Processor
|
7
|
+
class NodeProcessor < ::Parser::AST::Processor # rubocop:disable Metrics/ClassLength
|
8
|
+
include Autoloader
|
9
|
+
|
10
|
+
def process(ast)
|
11
|
+
super
|
12
|
+
rescue FileCollector::Error
|
13
|
+
raise
|
14
|
+
rescue StandardError => e
|
15
|
+
raise Error.new(e.message, ast)
|
16
|
+
end
|
17
|
+
|
8
18
|
def initialize(collector) # rubocop:disable Lint/MissingSuper # there isn't one to call
|
9
19
|
@collector = collector
|
10
20
|
end
|
@@ -100,7 +110,7 @@ module Leftovers
|
|
100
110
|
# grab e.g. :to_s in each(&:to_s)
|
101
111
|
def on_block_pass(node)
|
102
112
|
super
|
103
|
-
return unless node.first
|
113
|
+
return unless node.first&.sym?
|
104
114
|
|
105
115
|
@collector.calls << node.first.to_sym
|
106
116
|
end
|
@@ -4,6 +4,8 @@ require 'set'
|
|
4
4
|
|
5
5
|
module Leftovers
|
6
6
|
class FileCollector
|
7
|
+
class Error < ::Leftovers::Error; end
|
8
|
+
|
7
9
|
include Autoloader
|
8
10
|
|
9
11
|
attr_reader :calls, :allow_lines, :test_lines, :dynamic_lines
|
@@ -35,15 +37,27 @@ module Leftovers
|
|
35
37
|
list
|
36
38
|
end
|
37
39
|
|
38
|
-
def collect(ruby = @ruby, line = 1)
|
40
|
+
def collect(ruby = @ruby, line = 1) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
39
41
|
ast, comments = Parser.parse_with_comments(ruby, @file.relative_path, line)
|
40
42
|
CommentsProcessor.process(comments, self)
|
41
43
|
NodeProcessor.new(self).process(ast)
|
42
44
|
rescue ::Parser::SyntaxError => e
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
45
|
+
raise Error, <<~MESSAGE.chomp, e.backtrace
|
46
|
+
SyntaxError: #{e.message}
|
47
|
+
when processing #{filename}:#{e.diagnostic.location.line}:#{e.diagnostic.location.column}
|
48
|
+
MESSAGE
|
49
|
+
rescue NodeProcessor::Error => e
|
50
|
+
raise Error, <<~MESSAGE.chomp, e.backtrace
|
51
|
+
#{e.cause.class}: #{e.message}
|
52
|
+
when processing #{e.node} at #{filename}:#{e.node.loc.line}:#{e.node.loc.column}
|
53
|
+
MESSAGE
|
54
|
+
rescue Error
|
55
|
+
raise
|
56
|
+
rescue ::StandardError => e
|
57
|
+
raise Error, <<~MESSAGE.chomp, e.backtrace
|
58
|
+
#{e.class}: #{e.message}
|
59
|
+
when processing #{filename}
|
60
|
+
MESSAGE
|
47
61
|
end
|
48
62
|
|
49
63
|
def collect_subfile(string, location)
|
@@ -112,9 +126,6 @@ module Leftovers
|
|
112
126
|
|
113
127
|
def collect_dynamic(node)
|
114
128
|
::Leftovers.config.dynamic.process(nil, node, node, self)
|
115
|
-
rescue ::StandardError => e
|
116
|
-
raise Error, "#{e.class}: #{e.message}\n" \
|
117
|
-
"when processing #{node} at #{filename}:#{node.loc.line}:#{node.loc.column}", e.backtrace
|
118
129
|
end
|
119
130
|
|
120
131
|
private
|
@@ -15,8 +15,14 @@ module Leftovers
|
|
15
15
|
when :Array then Matchers::NodeType.new(:array)
|
16
16
|
when :Hash then Matchers::NodeType.new(:hash)
|
17
17
|
when :Proc then Matchers::NodeIsProc
|
18
|
-
when :Method
|
19
|
-
|
18
|
+
when :Method
|
19
|
+
Matchers::NodeType.new(
|
20
|
+
::Set[:send, :csend, :def, :defs].compare_by_identity.freeze
|
21
|
+
)
|
22
|
+
when :Constant
|
23
|
+
Matchers::NodeType.new(
|
24
|
+
::Set[:const, :class, :module, :casgn].compare_by_identity.freeze
|
25
|
+
)
|
20
26
|
# :nocov:
|
21
27
|
else raise UnexpectedCase, "Unhandled value #{type.inspect}"
|
22
28
|
# :nocov:
|
@@ -66,7 +66,7 @@ module Leftovers
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def build_grouped(set: nil, regexp: nil, nil: nil, **matcher_classes) # rubocop:disable Lint/UnusedMethodArgument i want to throw away nils
|
69
|
-
set = set.to_set.compare_by_identity if set.is_a?(::Array)
|
69
|
+
set = set.to_set.compare_by_identity.freeze if set.is_a?(::Array)
|
70
70
|
regexp = ::Regexp.union(regexp) if regexp.is_a?(::Array)
|
71
71
|
matcher_classes = matcher_classes.each_value.flat_map do |matchers|
|
72
72
|
build_grouped_for_matcher(matchers)
|
data/lib/leftovers/version.rb
CHANGED
data/lib/leftovers.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Leftovers
|
4
|
+
class Exit < ::StandardError
|
5
|
+
attr_reader :status
|
6
|
+
|
7
|
+
def initialize(status) # rubocop:disable Lint/MissingSuper
|
8
|
+
@status = status
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
4
12
|
require_relative 'leftovers/autoloader'
|
5
13
|
include Autoloader
|
6
14
|
|
@@ -44,7 +52,7 @@ module Leftovers
|
|
44
52
|
def error(message, did_you_mean = nil)
|
45
53
|
warn("\e[31m#{message}\e[0m")
|
46
54
|
warn("\n#{did_you_mean}") if did_you_mean
|
47
|
-
|
55
|
+
raise Exit, 1
|
48
56
|
end
|
49
57
|
|
50
58
|
def puts(message)
|
@@ -60,7 +68,7 @@ module Leftovers
|
|
60
68
|
end
|
61
69
|
|
62
70
|
def exit(status = 0)
|
63
|
-
|
71
|
+
raise Exit, status
|
64
72
|
end
|
65
73
|
|
66
74
|
def try_require(requirable, message: nil)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: leftovers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dana Sherson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -439,6 +439,7 @@ files:
|
|
439
439
|
- lib/leftovers/file_collector.rb
|
440
440
|
- lib/leftovers/file_collector/comments_processor.rb
|
441
441
|
- lib/leftovers/file_collector/node_processor.rb
|
442
|
+
- lib/leftovers/file_collector/node_processor/error.rb
|
442
443
|
- lib/leftovers/file_list.rb
|
443
444
|
- lib/leftovers/matcher_builders.rb
|
444
445
|
- lib/leftovers/matcher_builders/and.rb
|
@@ -584,7 +585,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
584
585
|
- !ruby/object:Gem::Version
|
585
586
|
version: '0'
|
586
587
|
requirements: []
|
587
|
-
rubygems_version: 3.
|
588
|
+
rubygems_version: 3.1.6
|
588
589
|
signing_key:
|
589
590
|
specification_version: 4
|
590
591
|
summary: Find unused methods and classes/modules
|