danger-xcode_summary 0.1.4 → 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
  SHA1:
3
- metadata.gz: b206c998ed6da63ed6db8f95fba23cd5462bf647
4
- data.tar.gz: 53c168e9094af71f1ffc4f56bdfb6884e9c09b5c
3
+ metadata.gz: fea9e12b00a58261fd0f841b76b7228395f4257f
4
+ data.tar.gz: 721e083c3336c8d53cdec149bf9de450fa57a439
5
5
  SHA512:
6
- metadata.gz: ca7b8d6828da186b54c5d23d91af79a6022c08fc1e5b9f7854cc3ea1f71a7976c8b83af9dcfd98c6ee7ed1c8b2ed503d9099eafb193836b1b12cbcdea3c57bb0
7
- data.tar.gz: 54bc8cee7c7e293a29e167ec8c875cd2b86b6a0c2f02f72236f57d880ecba354347d9cf72d10c4093cbae2ce9cab451d0a874b7f4a7c38690eb5618ca463f1fc
6
+ metadata.gz: 90588b0811d839b2c0a1b2d084742ff23ca4da1dc9f4a94128a18ad21f571ccc78c5a2725b0e51e84652303bbf4e67a3857741f757f6601f7b75a38deb66225a
7
+ data.tar.gz: 8bdb96a869ea5944cdf8e3fba78827a1f30dcd6b4eb23ef1505d573ed948f7e6d842bb586ae2b0b235c83b03331d4c58d036e2fe345d649d777f5e3e42006265
data/.rubocop.yml CHANGED
@@ -80,6 +80,9 @@ Style/RedundantSelf:
80
80
  Metrics/MethodLength:
81
81
  Max: 60
82
82
 
83
+ Metrics/ModuleLength:
84
+ Enabled: false
85
+
83
86
  # We're not there yet
84
87
  Style/Documentation:
85
88
  Enabled: false
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- danger-xcode_summary (0.1.4)
4
+ danger-xcode_summary (0.2.0)
5
5
  danger-plugin-api (~> 1.0)
6
6
 
7
7
  GEM
@@ -16,10 +16,9 @@ GEM
16
16
  nap
17
17
  open4 (~> 1.3)
18
18
  coderay (1.1.1)
19
- colored (1.2)
20
19
  colored2 (3.1.2)
21
- cork (0.2.0)
22
- colored (~> 1.2)
20
+ cork (0.3.0)
21
+ colored2 (~> 3.1)
23
22
  danger (4.3.3)
24
23
  claide (~> 1.0)
25
24
  claide-plugins (>= 0.9.2)
@@ -131,4 +130,4 @@ DEPENDENCIES
131
130
  yard
132
131
 
133
132
  BUNDLED WITH
134
- 1.14.3
133
+ 1.14.6
data/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  [![License](http://img.shields.io/badge/license-MIT-green.svg?style=flat)](LICENSE.txt)
4
4
  [![Gem Version](https://badge.fury.io/rb/danger-xcode_summary.svg)](https://badge.fury.io/rb/danger-xcode_summary)
5
5
  [![Build Status](https://travis-ci.org/diogot/danger-xcode_summary.svg?branch=master)](https://travis-ci.org/diogot/danger-xcode_summary)
6
+ [![Dependency Status](https://dependencyci.com/github/diogot/danger-xcode_summary/badge)](https://dependencyci.com/github/diogot/danger-xcode_summary)
6
7
 
7
8
  A [Danger](http://danger.systems) plugin that shows all build errors, warnings and unit tests results generated from `xcodebuild`.
8
9
 
@@ -104,6 +105,15 @@ xcode_summary.ignored_files = '**/Pods/**'
104
105
  xcode_summary.report 'xcodebuild.json'
105
106
  ```
106
107
 
108
+ You can use `inline_mode`.
109
+ When this value is enabled, each warnings and errors are commented on each lines.
110
+
111
+ ```ruby
112
+ # Comment on each lines
113
+ xcode_summary.inline_mode = true
114
+ xcode_summary.report 'xcodebuild.json'
115
+ ```
116
+
107
117
  ## License
108
118
 
109
119
  danger-xcode_summary is released under the MIT license. See [LICENSE.txt](LICENSE.txt) for details.
@@ -1,5 +1,7 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
4
+
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
6
  require 'xcode_summary/gem_version.rb'
5
7
 
@@ -1,3 +1,3 @@
1
1
  module XcodeSummary
2
- VERSION = '0.1.4'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -18,6 +18,9 @@ module Danger
18
18
  # @tags xcode, xcodebuild, format
19
19
  #
20
20
  class DangerXcodeSummary < Plugin
21
+ Location = Struct.new(:file_name, :file_path, :line)
22
+ Result = Struct.new(:message, :location)
23
+
21
24
  # The project root, which will be used to make the paths relative.
22
25
  # Defaults to `pwd`.
23
26
  # @param [String] value
@@ -44,6 +47,12 @@ module Danger
44
47
  # @return [Boolean]
45
48
  attr_accessor :test_summary
46
49
 
50
+ # Defines if using inline comment or not.
51
+ # Defaults to `false`.
52
+ # @param [Boolean] value
53
+ # @return [Boolean]
54
+ attr_accessor :inline_mode
55
+
47
56
  def project_root
48
57
  root = @project_root || Dir.pwd
49
58
  root += '/' unless root.end_with? '/'
@@ -59,7 +68,11 @@ module Danger
59
68
  end
60
69
 
61
70
  def test_summary
62
- @test_summary .nil? ? true : @test_summary
71
+ @test_summary.nil? ? true : @test_summary
72
+ end
73
+
74
+ def inline_mode
75
+ @inline_mode || false
63
76
  end
64
77
 
65
78
  # Reads a file with JSON Xcode summary and reports it.
@@ -79,8 +92,20 @@ module Danger
79
92
 
80
93
  def format_summary(xcode_summary)
81
94
  messages(xcode_summary).each { |s| message(s, sticky: sticky_summary) }
82
- warnings(xcode_summary).each { |s| warn(s, sticky: false) }
83
- errors(xcode_summary).each { |s| fail(s, sticky: false) }
95
+ warnings(xcode_summary).each do |result|
96
+ if inline_mode && result.location
97
+ warn(result.message, sticky: false, file: result.location.file_name, line: result.location.line)
98
+ else
99
+ warn(result.message, sticky: false)
100
+ end
101
+ end
102
+ errors(xcode_summary).each do |result|
103
+ if inline_mode && result.location
104
+ fail(result.message, sticky: false, file: result.location.file_name, line: result.location.line)
105
+ else
106
+ fail(result.message, sticky: false)
107
+ end
108
+ end
84
109
  end
85
110
 
86
111
  def messages(xcode_summary)
@@ -95,21 +120,46 @@ module Danger
95
120
 
96
121
  def warnings(xcode_summary)
97
122
  [
98
- xcode_summary[:warnings],
99
- xcode_summary[:ld_warnings],
100
- xcode_summary.fetch(:compile_warnings, {}).map { |s| format_compile_warning(s) }
101
- ].flatten.uniq.compact
123
+ xcode_summary.fetch(:warnings, []).map { |message| Result.new(message, nil) },
124
+ xcode_summary.fetch(:ld_warnings, []).map { |message| Result.new(message, nil) },
125
+ xcode_summary.fetch(:compile_warnings, {}).map do |h|
126
+ Result.new(format_compile_warning(h), parse_location(h))
127
+ end
128
+ ].flatten.uniq.compact.reject { |result| result.message.nil? }
102
129
  end
103
130
 
104
131
  def errors(xcode_summary)
105
132
  [
106
133
  xcode_summary[:errors],
107
- xcode_summary.fetch(:compile_errors, {}).map { |s| format_compile_warning(s) },
108
- xcode_summary.fetch(:file_missing_errors, {}).map { |s| format_format_file_missing_error(s) },
109
- xcode_summary.fetch(:undefined_symbols_errors, {}).map { |s| format_undefined_symbols(s) },
110
- xcode_summary.fetch(:duplicate_symbols_errors, {}).map { |s| format_duplicate_symbols(s) },
111
- xcode_summary.fetch(:tests_failures, {}).map { |k, v| format_test_failure(k, v) }.flatten
112
- ].flatten.uniq.compact
134
+ xcode_summary.fetch(:compile_errors, {}).map do |h|
135
+ Result.new(format_compile_warning(h), parse_location(h))
136
+ end,
137
+ xcode_summary.fetch(:file_missing_errors, {}).map do |h|
138
+ Result.new(format_format_file_missing_error(h), parse_location(h))
139
+ end,
140
+ xcode_summary.fetch(:undefined_symbols_errors, {}).map do |h|
141
+ Result.new(format_undefined_symbols(h), nil)
142
+ end,
143
+ xcode_summary.fetch(:duplicate_symbols_errors, {}).map do |h|
144
+ Result.new(format_duplicate_symbols(h), nil)
145
+ end,
146
+ xcode_summary.fetch(:tests_failures, {}).map do |test_suite, failures|
147
+ failures.map do |failure|
148
+ Result.new(format_test_failure(test_suite, failure), parse_test_location(failure))
149
+ end
150
+ end
151
+ ].flatten.uniq.compact.reject { |result| result.message.nil? }
152
+ end
153
+
154
+ def parse_location(h)
155
+ file_path, line, _column = h[:file_path].split(':')
156
+ Location.new(h[:file_name], file_path, line.to_i)
157
+ end
158
+
159
+ def parse_test_location(failure)
160
+ path, line = failure[:file_path].split(':')
161
+ file_name = relative_path(path)
162
+ Location.new(file_name, path, line.to_i)
113
163
  end
114
164
 
115
165
  def format_path(path)
@@ -181,12 +231,10 @@ module Danger
181
231
  "> #{h[:file_paths].map { |path| path.split('/').last }.join('<br /> ')}"
182
232
  end
183
233
 
184
- def format_test_failure(suite_name, failures)
185
- failures.map do |f|
186
- path = relative_path(f[:file_path])
187
- path_link = format_path(path)
188
- "**#{suite_name}**: #{f[:test_case]}, #{escape_reason(f[:reason])} <br /> #{path_link}"
189
- end
234
+ def format_test_failure(suite_name, failure)
235
+ path = relative_path(failure[:file_path])
236
+ path_link = format_path(path)
237
+ "**#{suite_name}**: #{failure[:test_case]}, #{escape_reason(failure[:reason])} <br /> #{path_link}"
190
238
  end
191
239
  end
192
240
  end
@@ -93,6 +93,40 @@ module Danger
93
93
  # rubocop:enable LineLength
94
94
  ]
95
95
  end
96
+
97
+ context 'with inline_mode' do
98
+ before do
99
+ @xcode_summary.inline_mode = true
100
+ end
101
+
102
+ it 'asserts errors on the line' do
103
+ allow(@xcode_summary).to receive(:fail)
104
+ @xcode_summary.report('spec/fixtures/test_errors.json')
105
+ expect(@xcode_summary).to have_received(:fail).with(
106
+ instance_of(String),
107
+ sticky: false,
108
+ file: 'MyWeight/MyWeightTests/Tests.swift',
109
+ line: 86
110
+ )
111
+ end
112
+
113
+ it 'asserts warning on the line' do
114
+ allow(@xcode_summary).to receive(:warn)
115
+ @xcode_summary.report('spec/fixtures/summary.json')
116
+ expect(@xcode_summary).to have_received(:warn).with(
117
+ instance_of(String),
118
+ sticky: false,
119
+ file: 'Bla.m',
120
+ line: 32
121
+ )
122
+ expect(@xcode_summary).to have_received(:warn).with(
123
+ instance_of(String),
124
+ sticky: false,
125
+ file: 'ISO8601DateFormatter.m',
126
+ line: 176
127
+ )
128
+ end
129
+ end
96
130
  end
97
131
  end
98
132
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-xcode_summary
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diogo Tridapalli
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-04-11 00:00:00.000000000 Z
12
+ date: 2017-04-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: danger-plugin-api