danger-swiftlint 0.21.1 → 0.22.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 +5 -5
- data/lib/danger_plugin.rb +56 -0
- data/lib/version.rb +2 -2
- data/spec/danger_plugin_spec.rb +57 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c86940adc167f7b4863e444266b96770155c2ab8
|
4
|
+
data.tar.gz: c398255b1c603ed1e979426afba4a9a4c73f3a40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71f4b0e1f6e4fb1238d3934d58feefe9f1a113bcb640bc2a8f3fd6089565c73cb6f8d23e2023e0af1efdfb4fb59d996ac14cd329c5f3cccbca5e84186868ef65
|
7
|
+
data.tar.gz: 18ecfda87f5bc8cc1cd3bb2670530505550b95a938d5e4c62d2566838a3c114cde4f4c6651a73a97b309402feef4ff457275484ab3a5f5f415dd86d0d7057c55
|
data/lib/danger_plugin.rb
CHANGED
@@ -50,6 +50,9 @@ module Danger
|
|
50
50
|
# All issues found
|
51
51
|
attr_accessor :issues
|
52
52
|
|
53
|
+
# Whether all issues or ones in PR Diff to be reported
|
54
|
+
attr_accessor :filter_issues_in_diff
|
55
|
+
|
53
56
|
# Lints Swift files. Will fail if `swiftlint` cannot be installed correctly.
|
54
57
|
# Generates a `markdown` list of warnings for the prose in a corpus of
|
55
58
|
# .markdown and .md files.
|
@@ -109,6 +112,11 @@ module Danger
|
|
109
112
|
issues = run_swiftlint_for_each(files, options, additional_swiftlint_args)
|
110
113
|
end
|
111
114
|
|
115
|
+
if filter_issues_in_diff
|
116
|
+
# Filter issues related to changes in PR Diff
|
117
|
+
issues = filter_git_diff_issues(issues)
|
118
|
+
end
|
119
|
+
|
112
120
|
@issues = issues
|
113
121
|
other_issues_count = 0
|
114
122
|
unless @max_num_violations.nil? || no_comment
|
@@ -308,5 +316,53 @@ module Danger
|
|
308
316
|
def log(text)
|
309
317
|
puts(text) if @verbose
|
310
318
|
end
|
319
|
+
|
320
|
+
# Filters issues reported against changes in the modified files
|
321
|
+
#
|
322
|
+
# @return [Array] swiftlint issues
|
323
|
+
def filter_git_diff_issues(issues)
|
324
|
+
modified_files_info = git_modified_files_info()
|
325
|
+
return issues.select { |i|
|
326
|
+
modified_files_info["#{i['file']}"] != nil && modified_files_info["#{i['file']}"].include?(i['line'].to_i)
|
327
|
+
}
|
328
|
+
end
|
329
|
+
|
330
|
+
# Finds modified files and added files, creates array of files with modified line numbers
|
331
|
+
#
|
332
|
+
# @return [Array] Git diff changes for each file
|
333
|
+
def git_modified_files_info()
|
334
|
+
modified_files_info = Hash.new
|
335
|
+
updated_files = (git.modified_files - git.deleted_files) + git.added_files
|
336
|
+
updated_files.each {|file|
|
337
|
+
modified_lines = git_modified_lines(file)
|
338
|
+
modified_files_info[File.expand_path(file)] = modified_lines
|
339
|
+
}
|
340
|
+
modified_files_info
|
341
|
+
end
|
342
|
+
|
343
|
+
# Gets git patch info and finds modified line numbers, excludes removed lines
|
344
|
+
#
|
345
|
+
# @return [Array] Modified line numbers i
|
346
|
+
def git_modified_lines(file)
|
347
|
+
git_range_info_line_regex = /^@@ .+\+(?<line_number>\d+),/
|
348
|
+
git_modified_line_regex = /^\+(?!\+|\+)/
|
349
|
+
git_removed_line_regex = /^[-]/
|
350
|
+
git_not_removed_line_regex = /^[^-]/
|
351
|
+
file_info = git.diff_for_file(file)
|
352
|
+
line_number = 0
|
353
|
+
lines = []
|
354
|
+
file_info.patch.split("\n").each do |line|
|
355
|
+
starting_line_number = 0
|
356
|
+
case line
|
357
|
+
when git_range_info_line_regex
|
358
|
+
starting_line_number = Regexp.last_match[:line_number].to_i
|
359
|
+
when git_modified_line_regex
|
360
|
+
lines << line_number
|
361
|
+
end
|
362
|
+
line_number += 1 if line_number > 0
|
363
|
+
line_number = starting_line_number if line_number == 0 && starting_line_number > 0
|
364
|
+
end
|
365
|
+
lines
|
366
|
+
end
|
311
367
|
end
|
312
368
|
end
|
data/lib/version.rb
CHANGED
data/spec/danger_plugin_spec.rb
CHANGED
@@ -348,6 +348,63 @@ module Danger
|
|
348
348
|
expect(status[:errors]).to be_empty
|
349
349
|
end
|
350
350
|
|
351
|
+
it 'Get git modified file line numbers' do
|
352
|
+
git_diff = File.read("spec/fixtures/SwiftFile.diff")
|
353
|
+
allow(@swiftlint.git).to receive(:diff_for_file).and_return(git_diff)
|
354
|
+
allow(@swiftlint.git.diff_for_file).to receive(:patch).and_return(git_diff)
|
355
|
+
modified_lines = @swiftlint.git_modified_lines("spec/fixtures/SwiftFile.swift")
|
356
|
+
expect(modified_lines).to_not be_empty
|
357
|
+
expect(modified_lines.length).to eql(23)
|
358
|
+
end
|
359
|
+
|
360
|
+
it 'Get git modified files info' do
|
361
|
+
allow(@swiftlint.git).to receive(:added_files).and_return([])
|
362
|
+
allow(@swiftlint.git).to receive(:modified_files).and_return([
|
363
|
+
'spec/fixtures/SwiftFile.swift',
|
364
|
+
'spec/fixtures/DeletedFile.swift'
|
365
|
+
])
|
366
|
+
allow(@swiftlint.git).to receive(:deleted_files).and_return([
|
367
|
+
'spec/fixtures/DeletedFile.swift'
|
368
|
+
])
|
369
|
+
git_diff = File.read("spec/fixtures/SwiftFile.diff")
|
370
|
+
allow(@swiftlint.git).to receive(:diff_for_file).and_return(git_diff)
|
371
|
+
allow(@swiftlint.git.diff_for_file).to receive(:patch).and_return(git_diff)
|
372
|
+
modified_files_info = @swiftlint.git_modified_files_info
|
373
|
+
expect(modified_files_info).to_not be_empty
|
374
|
+
expect(modified_files_info.length).to eql(1)
|
375
|
+
end
|
376
|
+
|
377
|
+
it 'filters lint issues to return issues in modified files based on git diff patch info' do
|
378
|
+
allow(@swiftlint.git).to receive(:added_files).and_return([])
|
379
|
+
allow(@swiftlint.git).to receive(:modified_files).and_return([
|
380
|
+
'spec/fixtures/SwiftFile.swift',
|
381
|
+
'spec/fixtures/DeletedFile.swift'
|
382
|
+
])
|
383
|
+
allow(@swiftlint.git).to receive(:deleted_files).and_return([
|
384
|
+
'spec/fixtures/DeletedFile.swift'
|
385
|
+
])
|
386
|
+
git_diff = File.read("spec/fixtures/SwiftFile.diff")
|
387
|
+
allow(@swiftlint.git).to receive(:diff_for_file).and_return(git_diff)
|
388
|
+
allow(@swiftlint.git.diff_for_file).to receive(:patch).and_return(git_diff)
|
389
|
+
|
390
|
+
swiftlint_violations_response = '[{ "rule_id" : "force_cast", "reason" : "Force casts should be avoided.", "character" : 19, "file" : "/Users/me/this_repo/spec/fixtures/SwiftFile.swift", "severity" : "Error", "type" : "Force Cast", "line" : 14 },
|
391
|
+
{ "rule_id" : "force_cast", "reason" : "Force casts should be avoided.", "character" : 10, "file" : "/Users/me/this_repo/spec/fixtures/SwiftFile.swift", "severity" : "Error", "type" : "Force Cast", "line" : 16 }]'
|
392
|
+
|
393
|
+
violations_json = JSON.parse(swiftlint_violations_response)
|
394
|
+
violations_json[0][:file] = File.expand_path('spec/fixtures/SwiftFile.swift')
|
395
|
+
violations_json[1][:file] = File.expand_path('spec/fixtures/SwiftFile.swift')
|
396
|
+
swiftlint_violations_response= violations_json.to_json
|
397
|
+
allow_any_instance_of(Swiftlint).to receive(:lint)
|
398
|
+
.with(hash_including(path: File.expand_path('spec/fixtures/SwiftFile.swift')), '')
|
399
|
+
.and_return(swiftlint_violations_response)
|
400
|
+
|
401
|
+
@swiftlint.filter_issues_in_diff = true
|
402
|
+
@swiftlint.lint_files('spec/fixtures/*.swift', inline_mode: true, fail_on_error: false, additional_swiftlint_args: '')
|
403
|
+
|
404
|
+
status = @swiftlint.status_report
|
405
|
+
expect(status[:warnings]).to eql(["Force casts should be avoided.\n`force_cast` `SwiftFile.swift:16`"])
|
406
|
+
end
|
407
|
+
|
351
408
|
context '#strict' do
|
352
409
|
before(:each) do
|
353
410
|
allow_any_instance_of(Swiftlint).to receive(:lint)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: danger-swiftlint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.22.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ash Furrow
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2019-
|
15
|
+
date: 2019-07-12 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: danger
|
@@ -181,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
181
|
version: '0'
|
182
182
|
requirements: []
|
183
183
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
184
|
+
rubygems_version: 2.6.13
|
185
185
|
signing_key:
|
186
186
|
specification_version: 4
|
187
187
|
summary: A Danger plugin for linting Swift with SwiftLint.
|