danger-periphery 0.1.0 → 0.2.0

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: 151988044c8bd6c18f36c5c44952bea6cba9443defbdbab19b309058b37c50fd
4
- data.tar.gz: f67a5ec28410926edbd3efd022730fb0f8db0d1a07e77f8319a6c3cfdc241e4c
3
+ metadata.gz: 5b949d4e8279afb04d63616f89e15f3ef0efaf700b83d027273f1973d085fa23
4
+ data.tar.gz: cd8e2564827d41bdee17e7b8fead197f3dc1481f129ee9dcbc22779ea1783489
5
5
  SHA512:
6
- metadata.gz: 5804a836bd9ea4ac4564fba40e207440b62fd135eb0474d54c9a5c539719e3e9cc1a1e119e1c096c6a08f49a9af59c4aec70bdcfaba4982f54a2e853a413cafa
7
- data.tar.gz: e22a91d942805d7abc7d4228b27c1caf0926f8a0ce8a5b16048c30c1bae1e42141522b7a13cd63af7598f3c499ed973b608f4a68b6d40193429f2ead4da0c11c
6
+ metadata.gz: 3d0e28054ab01f50603b92cf32b6005d1befa875545afaa9d8fbd80bdf048d097776bcfcdfe01cc746a0cc24d9455284a400be7b9d11142249db9b2731d1b578
7
+ data.tar.gz: 97d0f89856d52fe03fbda8f3b8539279343e2b28340042ee5db2aa2984222cf6e3ac5eacde6ad17eebc7b393f9d6163ce16f296e8a044fe984442b31566ae6ee
data/.rubocop.yml CHANGED
@@ -124,6 +124,9 @@ Metrics/BlockLength:
124
124
  Style/MixinGrouping:
125
125
  Enabled: false
126
126
 
127
+ Naming/BlockForwarding:
128
+ Enabled: true
129
+
127
130
  Naming/FileName:
128
131
  Enabled: false
129
132
 
@@ -145,10 +148,22 @@ Style/PercentLiteralDelimiters:
145
148
  "%W": ()
146
149
  "%x": ()
147
150
 
151
+ Security/CompoundHash:
152
+ Enabled: true
153
+
148
154
  Security/YAMLLoad:
149
155
  Enabled: false
150
156
 
151
- Gemspec/DateAssignment:
157
+ Gemspec/DeprecatedAttributeAssignment:
158
+ Enabled: true
159
+
160
+ Gemspec/RequireMFA:
161
+ Enabled: true
162
+
163
+ Layout/LineContinuationLeadingSpace:
164
+ Enabled: true
165
+
166
+ Layout/LineContinuationSpacing:
152
167
  Enabled: true
153
168
 
154
169
  Layout/LineEndStringConcatenationIndentation:
@@ -166,6 +181,9 @@ Lint/AmbiguousOperatorPrecedence:
166
181
  Lint/AmbiguousRange:
167
182
  Enabled: true
168
183
 
184
+ Lint/ConstantOverwrittenInRescue:
185
+ Enabled: true
186
+
169
187
  Lint/DeprecatedConstants:
170
188
  Enabled: true
171
189
 
@@ -190,6 +208,9 @@ Lint/IncompatibleIoSelectWithFiberScheduler:
190
208
  Lint/LambdaWithoutLiteralBlock:
191
209
  Enabled: true
192
210
 
211
+ Lint/NonAtomicFileOperation:
212
+ Enabled: true
213
+
193
214
  Lint/NoReturnInBeginEndBlocks:
194
215
  Enabled: true
195
216
 
@@ -202,6 +223,9 @@ Lint/OrAssignmentToConstant:
202
223
  Lint/RedundantDirGlobSort:
203
224
  Enabled: true
204
225
 
226
+ Lint/RefinementImportMethods:
227
+ Enabled: true
228
+
205
229
  Lint/RequireRelativeSelfPath:
206
230
  Enabled: true
207
231
 
@@ -220,6 +244,9 @@ Lint/UnexpectedBlockArity:
220
244
  Lint/UnmodifiedReduceAccumulator:
221
245
  Enabled: true
222
246
 
247
+ Lint/UselessRuby2Keywords:
248
+ Enabled: true
249
+
223
250
  Security/IoMethods:
224
251
  Enabled: true
225
252
 
@@ -235,6 +262,18 @@ Style/DocumentDynamicEvalDefinition:
235
262
  Style/EndlessMethod:
236
263
  Enabled: true
237
264
 
265
+ Style/EnvHome:
266
+ Enabled: true
267
+
268
+ Style/FetchEnvVar:
269
+ Enabled: true
270
+
271
+ Style/FileRead:
272
+ Enabled: true
273
+
274
+ Style/FileWrite:
275
+ Enabled: true
276
+
238
277
  Style/HashConversion:
239
278
  Enabled: true
240
279
 
@@ -247,12 +286,21 @@ Style/IfWithBooleanLiteralBranches:
247
286
  Style/InPatternThen:
248
287
  Enabled: true
249
288
 
289
+ Style/MapCompactWithConditionalBlock:
290
+ Enabled: true
291
+
292
+ Style/MapToHash:
293
+ Enabled: true
294
+
250
295
  Style/MultilineInPatternThen:
251
296
  Enabled: true
252
297
 
253
298
  Style/NegatedIfElseCondition:
254
299
  Enabled: true
255
300
 
301
+ Style/NestedFileDirname:
302
+ Enabled: true
303
+
256
304
  Style/NilLambda:
257
305
  Enabled: true
258
306
 
@@ -262,12 +310,21 @@ Style/NumberedParameters:
262
310
  Style/NumberedParametersLimit:
263
311
  Enabled: true
264
312
 
313
+ Style/ObjectThen:
314
+ Enabled: true
315
+
316
+ Style/OpenStructUse:
317
+ Enabled: true
318
+
265
319
  Style/QuotedSymbols:
266
320
  Enabled: true
267
321
 
268
322
  Style/RedundantArgument:
269
323
  Enabled: true
270
324
 
325
+ Style/RedundantInitialize:
326
+ Enabled: true
327
+
271
328
  Style/RedundantSelfAssignmentBranch:
272
329
  Enabled: true
273
330
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- danger-periphery (0.1.0)
4
+ danger-periphery (0.2.0)
5
5
  danger-plugin-api (~> 1.0)
6
6
 
7
7
  GEM
@@ -10,7 +10,7 @@ GEM
10
10
  addressable (2.8.0)
11
11
  public_suffix (>= 2.0.2, < 5.0)
12
12
  ast (2.4.2)
13
- claide (1.0.3)
13
+ claide (1.1.0)
14
14
  claide-plugins (0.9.2)
15
15
  cork
16
16
  nap
@@ -19,7 +19,7 @@ GEM
19
19
  colored2 (3.1.2)
20
20
  cork (0.3.0)
21
21
  colored2 (~> 3.1)
22
- danger (8.4.0)
22
+ danger (8.6.1)
23
23
  claide (~> 1.0)
24
24
  claide-plugins (>= 0.9.2)
25
25
  colored2 (~> 3.1)
@@ -34,34 +34,38 @@ GEM
34
34
  terminal-table (>= 1, < 4)
35
35
  danger-plugin-api (1.0.0)
36
36
  danger (> 2.0)
37
- danger-rubocop (0.9.5)
37
+ danger-rubocop (0.10.0)
38
38
  danger
39
39
  rubocop (~> 1.0)
40
40
  diff-lcs (1.5.0)
41
- faraday (1.8.0)
41
+ faraday (1.10.0)
42
42
  faraday-em_http (~> 1.0)
43
43
  faraday-em_synchrony (~> 1.0)
44
44
  faraday-excon (~> 1.1)
45
- faraday-httpclient (~> 1.0.1)
45
+ faraday-httpclient (~> 1.0)
46
+ faraday-multipart (~> 1.0)
46
47
  faraday-net_http (~> 1.0)
47
- faraday-net_http_persistent (~> 1.1)
48
+ faraday-net_http_persistent (~> 1.0)
48
49
  faraday-patron (~> 1.0)
49
50
  faraday-rack (~> 1.0)
50
- multipart-post (>= 1.2, < 3)
51
+ faraday-retry (~> 1.0)
51
52
  ruby2_keywords (>= 0.0.4)
52
53
  faraday-em_http (1.0.0)
53
54
  faraday-em_synchrony (1.0.0)
54
55
  faraday-excon (1.1.0)
55
- faraday-http-cache (2.2.0)
56
+ faraday-http-cache (2.4.0)
56
57
  faraday (>= 0.8)
57
58
  faraday-httpclient (1.0.1)
59
+ faraday-multipart (1.0.4)
60
+ multipart-post (~> 2)
58
61
  faraday-net_http (1.0.1)
59
62
  faraday-net_http_persistent (1.2.0)
60
63
  faraday-patron (1.0.0)
61
64
  faraday-rack (1.0.0)
65
+ faraday-retry (1.0.3)
62
66
  ffi (1.15.5)
63
67
  formatador (1.1.0)
64
- git (1.9.1)
68
+ git (1.11.0)
65
69
  rchardet (~> 1.8)
66
70
  guard (2.18.0)
67
71
  formatador (>= 0.2.4)
@@ -77,7 +81,8 @@ GEM
77
81
  guard (~> 2.1)
78
82
  guard-compat (~> 1.1)
79
83
  rspec (>= 2.99.0, < 4.0)
80
- kramdown (2.3.1)
84
+ json (2.6.2)
85
+ kramdown (2.4.0)
81
86
  rexml
82
87
  kramdown-parser-gfm (1.1.0)
83
88
  kramdown (~> 2.0)
@@ -86,67 +91,70 @@ GEM
86
91
  rb-inotify (~> 0.9, >= 0.9.10)
87
92
  lumberjack (1.2.8)
88
93
  method_source (1.0.0)
89
- multipart-post (2.1.1)
94
+ multipart-post (2.2.3)
90
95
  nap (1.1.0)
91
96
  nenv (0.3.0)
92
97
  no_proxy_fix (0.1.2)
93
98
  notiffany (0.1.3)
94
99
  nenv (~> 0.1)
95
100
  shellany (~> 0.0)
96
- octokit (4.21.0)
97
- faraday (>= 0.9)
98
- sawyer (~> 0.8.0, >= 0.5.3)
101
+ octokit (4.25.1)
102
+ faraday (>= 1, < 3)
103
+ sawyer (~> 0.9)
99
104
  open4 (1.3.4)
100
- parallel (1.21.0)
101
- parser (3.0.2.0)
105
+ parallel (1.22.1)
106
+ parser (3.1.2.0)
102
107
  ast (~> 2.4.1)
103
108
  pry (0.14.1)
104
109
  coderay (~> 1.1)
105
110
  method_source (~> 1.0)
106
- public_suffix (4.0.6)
107
- rainbow (3.0.0)
111
+ public_suffix (4.0.7)
112
+ rainbow (3.1.1)
108
113
  rake (13.0.6)
109
- rb-fsevent (0.11.0)
114
+ rb-fsevent (0.11.1)
110
115
  rb-inotify (0.10.1)
111
116
  ffi (~> 1.0)
112
117
  rchardet (1.8.0)
113
- regexp_parser (2.1.1)
118
+ regexp_parser (2.5.0)
114
119
  rexml (3.2.5)
115
- rspec (3.10.0)
116
- rspec-core (~> 3.10.0)
117
- rspec-expectations (~> 3.10.0)
118
- rspec-mocks (~> 3.10.0)
119
- rspec-core (3.10.2)
120
- rspec-support (~> 3.10.0)
121
- rspec-expectations (3.10.2)
120
+ rspec (3.11.0)
121
+ rspec-core (~> 3.11.0)
122
+ rspec-expectations (~> 3.11.0)
123
+ rspec-mocks (~> 3.11.0)
124
+ rspec-core (3.11.0)
125
+ rspec-support (~> 3.11.0)
126
+ rspec-expectations (3.11.0)
122
127
  diff-lcs (>= 1.2.0, < 2.0)
123
- rspec-support (~> 3.10.0)
124
- rspec-mocks (3.10.3)
128
+ rspec-support (~> 3.11.0)
129
+ rspec-mocks (3.11.1)
125
130
  diff-lcs (>= 1.2.0, < 2.0)
126
- rspec-support (~> 3.10.0)
127
- rspec-support (3.10.3)
128
- rubocop (1.22.1)
131
+ rspec-support (~> 3.11.0)
132
+ rspec-support (3.11.0)
133
+ rubocop (1.31.2)
134
+ json (~> 2.3)
129
135
  parallel (~> 1.10)
130
- parser (>= 3.0.0.0)
136
+ parser (>= 3.1.0.0)
131
137
  rainbow (>= 2.2.2, < 4.0)
132
138
  regexp_parser (>= 1.8, < 3.0)
133
- rexml
134
- rubocop-ast (>= 1.12.0, < 2.0)
139
+ rexml (>= 3.2.5, < 4.0)
140
+ rubocop-ast (>= 1.18.0, < 2.0)
135
141
  ruby-progressbar (~> 1.7)
136
142
  unicode-display_width (>= 1.4.0, < 3.0)
137
- rubocop-ast (1.12.0)
138
- parser (>= 3.0.1.1)
143
+ rubocop-ast (1.19.1)
144
+ parser (>= 3.1.1.0)
139
145
  ruby-progressbar (1.11.0)
140
146
  ruby2_keywords (0.0.5)
141
- sawyer (0.8.2)
147
+ sawyer (0.9.2)
142
148
  addressable (>= 2.3.5)
143
- faraday (> 0.8, < 2.0)
149
+ faraday (>= 0.17.3, < 3)
144
150
  shellany (0.0.1)
145
151
  terminal-table (3.0.2)
146
152
  unicode-display_width (>= 1.1.1, < 3)
147
153
  thor (1.2.1)
148
- unicode-display_width (2.1.0)
149
- yard (0.9.26)
154
+ unicode-display_width (2.2.0)
155
+ webrick (1.7.0)
156
+ yard (0.9.28)
157
+ webrick (~> 1.7.0)
150
158
 
151
159
  PLATFORMS
152
160
  ruby
data/Guardfile CHANGED
@@ -4,27 +4,33 @@ module ::Guard
4
4
  class Periphery < Plugin
5
5
  def initialize(options = {})
6
6
  opts = options.dup
7
- @project = opts.delete(:project)
8
- @targets = opts.delete(:targets)
9
- @schemes = opts.delete(:schemes)
7
+ @command = [
8
+ "bin/periphery",
9
+ "scan",
10
+ "--project",
11
+ opts.delete(:project),
12
+ "--targets",
13
+ opts.delete(:targets),
14
+ "--schemes",
15
+ opts.delete(:schemes),
16
+ "--format",
17
+ "checkstyle"
18
+ ]
10
19
  super(opts)
11
20
  end
12
21
 
13
- def run_on_modifications(_paths)
14
- command = %W(
15
- bin/periphery scan
16
- --project '#{@project}'
17
- --targets '#{@targets}'
18
- --schemes '#{@schemes}'
19
- --format checkstyle
20
- ).join(" ")
21
- puts(command)
22
- system(command)
22
+ def run_all
23
+ UI.info(@command.shelljoin)
24
+ system(*@command)
25
+ end
26
+
27
+ def run_on_changes(_paths)
28
+ run_all
23
29
  end
24
30
  end
25
31
  end
26
32
 
27
- guard :rspec, cmd: "bundle exec rspec" do
33
+ guard :rspec, cmd: "bundle exec rspec -t ~slow", run_all: { cmd: "bundle exec rspec" } do
28
34
  require "guard/rspec/dsl"
29
35
  dsl = Guard::RSpec::Dsl.new(self)
30
36
 
data/README.md CHANGED
@@ -42,6 +42,31 @@ periphery.scan(
42
42
 
43
43
  ## Advanced Usage
44
44
 
45
+ ### Postprocess warnings by passing block to `#scan`
46
+
47
+ You can modify warnings as you like by passing a block to `scan`.
48
+ `scan` takes a block that receives `ScanResult` instance as arguments.
49
+ Each `ScanResult` instance corresponds with each entry of Danger warnings.
50
+ If that block returns falsy value, danger-periphery suppresses the corresponding warning.
51
+
52
+ For example, if you want your team members to be careful with warnings, the following code may work.
53
+
54
+ ```ruby
55
+ periphery.scan do |violation|
56
+ violation.message = "Pay attention please! #{violation.message}"
57
+ end
58
+ ```
59
+
60
+ For another example, if you want to suppress warnings complaining about unused parameter of many of `didChangeValue(_ sender: Any)` methods, you can suppress this kind of warnings in the following way.
61
+
62
+ ```ruby
63
+ periphery.scan do |violation|
64
+ ! violation.message.match(/Parameter 'sender' is unused/)
65
+ end
66
+ ```
67
+
68
+ ### Postprocess warnings by calling `#process_warnings`
69
+
45
70
  You can modify warnings as you like by passing a block to `process_warnings`.
46
71
  `process_warnings` takes a block that receives `[path, line, column, message]` as arguments and returns one of the following types.
47
72
 
data/Rakefile CHANGED
@@ -15,5 +15,5 @@ RuboCop::RakeTask.new(:rubocop)
15
15
 
16
16
  desc "Ensure that the plugin passes `danger plugins lint`"
17
17
  task :spec_docs do
18
- sh "bundle exec danger plugins lint"
18
+ sh "danger plugins lint"
19
19
  end
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  cd "$(dirname "$0")"
4
- version="2.8.1"
4
+ version="2.9.0"
5
5
  curl -Lo periphery.zip "https://github.com/peripheryapp/periphery/releases/download/$version/periphery-v$version.zip"
6
6
  unzip periphery.zip
7
7
  rm periphery.zip LICENSE.md
@@ -14,10 +14,10 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "https://github.com/manicmaniac/danger-periphery"
15
15
  spec.license = "MIT"
16
16
  spec.required_ruby_version = ">= 2.6.0"
17
+ spec.metadata["rubygems_mfa_required"] = "true"
17
18
 
18
19
  spec.files = `git ls-files`.split($/)
19
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
21
  spec.require_paths = ["lib"]
22
22
 
23
23
  spec.add_dependency "danger-plugin-api", "~> 1.0"
data/lib/danger_plugin.rb CHANGED
@@ -59,13 +59,13 @@ module Danger
59
59
  # 4. If value is true, drop value and treat it as option without argument.
60
60
  # 5. Override some options like --disable-update-check, --format, --quiet and so.
61
61
  # @return [void]
62
- def scan(**options)
62
+ def scan(**options, &block)
63
63
  output = Periphery::Runner.new(binary_path).scan(options.merge(OPTION_OVERRIDES))
64
64
  files = files_in_diff
65
65
  Periphery::CheckstyleParser.new.parse(output).
66
66
  lazy.
67
67
  select { |entry| files.include?(entry.path) }.
68
- map { |entry| postprocess(entry) }.
68
+ map { |entry| postprocess(entry, &block) }.
69
69
  force.
70
70
  compact.
71
71
  each { |path, line, column, message| warn(message, file: path, line: line) }
@@ -87,21 +87,27 @@ module Danger
87
87
 
88
88
  def files_in_diff
89
89
  # Taken from https://github.com/ashfurrow/danger-ruby-swiftlint/blob/5184909aab00f12954088684bbf2ce5627e08ed6/lib/danger_plugin.rb#L214-L216
90
- renamed_files_hash = git.renamed_files.map { |rename| [rename[:before], rename[:after]] }.to_h
90
+ renamed_files_hash = git.renamed_files.to_h { |rename| [rename[:before], rename[:after]] }
91
91
  post_rename_modified_files = git.modified_files.map { |modified_file| renamed_files_hash[modified_file] || modified_file }
92
92
  (post_rename_modified_files - git.deleted_files) + git.added_files
93
93
  end
94
94
 
95
- def postprocess(entry)
96
- result = @postprocessor.call(entry.path, entry.line, entry.column, entry.message)
97
- if !result
98
- nil
99
- elsif result.kind_of?(TrueClass)
100
- [entry.path, entry.line, entry.column, entry.message]
101
- elsif result.kind_of?(Array) && result.size == 4
102
- result
95
+ def postprocess(entry, &block)
96
+ if block
97
+ if block.call(entry)
98
+ [entry.path, entry.line, entry.column, entry.message]
99
+ end
103
100
  else
104
- raise "Proc passed to postprocessor must return one of nil, true, false and Array that includes 4 elements."
101
+ result = @postprocessor.call(entry.path, entry.line, entry.column, entry.message)
102
+ if !result
103
+ nil
104
+ elsif result.kind_of?(TrueClass)
105
+ [entry.path, entry.line, entry.column, entry.message]
106
+ elsif result.kind_of?(Array) && result.size == 4
107
+ result
108
+ else
109
+ raise "Proc passed to postprocessor must return one of nil, true, false and Array that includes 4 elements."
110
+ end
105
111
  end
106
112
  end
107
113
  end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DangerPeriphery
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -3,6 +3,14 @@
3
3
  describe Danger::DangerPeriphery do
4
4
  include DangerPluginHelper
5
5
 
6
+ let(:periphery_options) do
7
+ {
8
+ project: fixture("test.xcodeproj"),
9
+ targets: "test",
10
+ schemes: "test"
11
+ }
12
+ end
13
+
6
14
  it "should be a plugin" do
7
15
  expect(Danger::DangerPeriphery.new(nil)).to be_a Danger::Plugin
8
16
  end
@@ -12,9 +20,10 @@ describe Danger::DangerPeriphery do
12
20
  let(:periphery) { dangerfile.periphery }
13
21
 
14
22
  before do
15
- periphery.binary_path = binary("periphery")
16
- json = File.read("#{File.dirname(__FILE__)}/support/fixtures/github_pr.json") # example json: `curl https://api.github.com/repos/danger/danger-plugin-template/pulls/18 > github_pr.json`
17
- allow(periphery.github).to receive(:pr_json).and_return(json)
23
+ periphery.binary_path = fixture("mock-periphery")
24
+ # example json: `curl -o github_pr.json https://api.github.com/repos/danger/danger-plugin-template/pulls/18
25
+ json = File.read(fixture("github_pr.json"))
26
+ allow(periphery.github).to receive(:pr_json).and_return json
18
27
  allow(Pathname).to receive(:getwd).and_return fixtures_path
19
28
  end
20
29
 
@@ -26,60 +35,104 @@ describe Danger::DangerPeriphery do
26
35
  end
27
36
  end
28
37
 
29
- context "when .swift files not in diff" do
30
- before do
31
- allow(periphery.git).to receive(:renamed_files).and_return []
32
- allow(periphery.git).to receive(:modified_files).and_return []
33
- allow(periphery.git).to receive(:deleted_files).and_return []
34
- allow(periphery.git).to receive(:added_files).and_return []
35
- end
38
+ context "with a real periphery executable", :slow do
39
+ before { periphery.binary_path = binary("periphery") }
40
+
41
+ context "when .swift files not in diff" do
42
+ before do
43
+ allow(periphery.git).to receive(:renamed_files).and_return []
44
+ allow(periphery.git).to receive(:modified_files).and_return []
45
+ allow(periphery.git).to receive(:deleted_files).and_return []
46
+ allow(periphery.git).to receive(:added_files).and_return []
47
+ end
36
48
 
37
- it "reports nothing" do
38
- periphery.scan(
39
- project: fixture("test.xcodeproj"),
40
- targets: "test",
41
- schemes: "test"
42
- )
49
+ it "reports nothing" do
50
+ periphery.scan(periphery_options)
43
51
 
44
- expect(dangerfile.status_report[:warnings]).to be_empty
52
+ expect(dangerfile.status_report[:warnings]).to be_empty
53
+ end
45
54
  end
46
- end
47
55
 
48
- context "when .swift files were added" do
49
- before do
50
- allow(periphery.git).to receive(:renamed_files).and_return []
51
- allow(periphery.git).to receive(:modified_files).and_return []
52
- allow(periphery.git).to receive(:deleted_files).and_return []
53
- allow(periphery.git).to receive(:added_files).and_return ["test/main.swift"]
56
+ context "when .swift files were added" do
57
+ before do
58
+ allow(periphery.git).to receive(:renamed_files).and_return []
59
+ allow(periphery.git).to receive(:modified_files).and_return []
60
+ allow(periphery.git).to receive(:deleted_files).and_return []
61
+ allow(periphery.git).to receive(:added_files).and_return ["test/main.swift"]
62
+ end
63
+
64
+ it "reports unused code" do
65
+ periphery.scan(periphery_options)
66
+
67
+ expect(dangerfile.status_report[:warnings]).to include "Function 'unusedMethod()' is unused"
68
+ end
54
69
  end
55
70
 
56
- it "reports unused code" do
57
- periphery.scan(
58
- project: fixture("test.xcodeproj"),
59
- targets: "test",
60
- schemes: "test"
61
- )
71
+ context "when .swift files were modified" do
72
+ before do
73
+ allow(periphery.git).to receive(:renamed_files).and_return []
74
+ allow(periphery.git).to receive(:modified_files).and_return ["test/main.swift"]
75
+ allow(periphery.git).to receive(:deleted_files).and_return []
76
+ allow(periphery.git).to receive(:added_files).and_return []
77
+ end
78
+
79
+ it "reports unused code" do
80
+ periphery.scan(periphery_options)
62
81
 
63
- expect(dangerfile.status_report[:warnings]).to include "Function 'unusedMethod()' is unused"
82
+ expect(dangerfile.status_report[:warnings]).to include "Function 'unusedMethod()' is unused"
83
+ end
64
84
  end
65
85
  end
66
86
 
67
- context "when .swift files were modified" do
87
+ context "with block" do
88
+ subject { dangerfile.status_report[:warnings] }
89
+
68
90
  before do
69
91
  allow(periphery.git).to receive(:renamed_files).and_return []
70
92
  allow(periphery.git).to receive(:modified_files).and_return ["test/main.swift"]
71
93
  allow(periphery.git).to receive(:deleted_files).and_return []
72
94
  allow(periphery.git).to receive(:added_files).and_return []
95
+ periphery.scan(periphery_options, &block)
73
96
  end
74
97
 
75
- it "reports unused code" do
76
- periphery.scan(
77
- project: fixture("test.xcodeproj"),
78
- targets: "test",
79
- schemes: "test"
80
- )
98
+ context "that returns nil" do
99
+ let(:block) { ->(violation) {} }
81
100
 
82
- expect(dangerfile.status_report[:warnings]).to include "Function 'unusedMethod()' is unused"
101
+ it "filters out all warnings" do
102
+ expect(subject).to be_empty
103
+ end
104
+ end
105
+
106
+ context "that returns false" do
107
+ let(:block) { ->(violation) { false } }
108
+
109
+ it "filters out all warnings" do
110
+ expect(subject).to be_empty
111
+ end
112
+ end
113
+
114
+ context "that returns true" do
115
+ let(:block) { ->(violation) { true } }
116
+
117
+ it "reports warnings without filtering anything" do
118
+ expect(subject).to include "Function 'unusedMethod()' is unused"
119
+ end
120
+ end
121
+
122
+ context "that returns truthy value" do
123
+ let(:block) { ->(violation) { 0 } }
124
+
125
+ it "reports warnings without filtering anything" do
126
+ expect(subject).to include "Function 'unusedMethod()' is unused"
127
+ end
128
+ end
129
+
130
+ context "that modifies the given violation" do
131
+ let(:block) { ->(violation) { violation.message.gsub!(/Function/, "Foobar") } }
132
+
133
+ it "reports modified warnings" do
134
+ expect(subject).to include "Foobar 'unusedMethod()' is unused"
135
+ end
83
136
  end
84
137
  end
85
138
 
@@ -92,11 +145,7 @@ describe Danger::DangerPeriphery do
92
145
  allow(periphery.git).to receive(:deleted_files).and_return []
93
146
  allow(periphery.git).to receive(:added_files).and_return []
94
147
  periphery.postprocessor = postprocessor
95
- periphery.scan(
96
- project: fixture("test.xcodeproj"),
97
- targets: "test",
98
- schemes: "test"
99
- )
148
+ periphery.scan(periphery_options)
100
149
  end
101
150
 
102
151
  context "when returns nil" do
data/spec/spec_helper.rb CHANGED
@@ -11,7 +11,7 @@ require "rspec"
11
11
 
12
12
  module FixtureHelper
13
13
  def fixtures_path
14
- Pathname.new("../support/fixtures").expand_path(__FILE__)
14
+ Pathname.new("support/fixtures").expand_path(__dir__)
15
15
  end
16
16
 
17
17
  def fixture(filename)
@@ -19,7 +19,7 @@ module FixtureHelper
19
19
  end
20
20
 
21
21
  def binaries_path
22
- Pathname.new("../../bin").expand_path(__FILE__)
22
+ Pathname.new("../bin").expand_path(__dir__)
23
23
  end
24
24
 
25
25
  def binary(filename)
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ puts <<~XML
5
+ <?xml version="1.0" encoding="utf-8"?>
6
+ <checkstyle version="4.3">
7
+ <file name="#{__dir__}/test/main.swift">
8
+ <error line="1" column="10" severity="warning" message="Protocol &apos;RedundantProtocol&apos; is redundant as it&apos;s never used as an existential type"/>
9
+ <error line="4" column="18" severity="warning" message="Protocol &apos;RedundantProtocol&apos; conformance is redundant"/>
10
+ <error line="7" column="14" severity="warning" message="Enum case &apos;unusedCase&apos; is unused"/>
11
+ <error line="10" column="9" severity="warning" message="Property &apos;unusedProperty&apos; is unused"/>
12
+ <error line="11" column="17" severity="warning" message="Property &apos;assignOnlyProperty&apos; is assigned, but never used"/>
13
+ <error line="14" column="17" severity="warning" message="Function &apos;methodWithRedundantPublicAccessibility(_:)&apos; is declared public, but not used outside of test"/>
14
+ <error line="14" column="58" severity="warning" message="Parameter &apos;unusedParameter&apos; is unused"/>
15
+ <error line="19" column="10" severity="warning" message="Function &apos;unusedMethod()&apos; is unused"/>
16
+ </file>
17
+ </checkstyle>
18
+ XML
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-periphery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryosuke Ito
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-01 00:00:00.000000000 Z
11
+ date: 2022-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: danger-plugin-api
@@ -57,12 +57,14 @@ files:
57
57
  - spec/periphery/runner_spec.rb
58
58
  - spec/spec_helper.rb
59
59
  - spec/support/fixtures/github_pr.json
60
+ - spec/support/fixtures/mock-periphery
60
61
  - spec/support/fixtures/test.xcodeproj/project.pbxproj
61
62
  - spec/support/fixtures/test/main.swift
62
63
  homepage: https://github.com/manicmaniac/danger-periphery
63
64
  licenses:
64
65
  - MIT
65
- metadata: {}
66
+ metadata:
67
+ rubygems_mfa_required: 'true'
66
68
  post_install_message:
67
69
  rdoc_options: []
68
70
  require_paths:
@@ -82,11 +84,4 @@ rubygems_version: 3.0.3.1
82
84
  signing_key:
83
85
  specification_version: 4
84
86
  summary: A Danger plugin to detect unused codes.
85
- test_files:
86
- - spec/danger_plugin_spec.rb
87
- - spec/periphery/checkstyle_parser_spec.rb
88
- - spec/periphery/runner_spec.rb
89
- - spec/spec_helper.rb
90
- - spec/support/fixtures/github_pr.json
91
- - spec/support/fixtures/test.xcodeproj/project.pbxproj
92
- - spec/support/fixtures/test/main.swift
87
+ test_files: []