danger-periphery 0.1.0 → 0.2.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: 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: []