danger-swiftlint 0.21.1 → 0.22.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|