danger-periphery 0.2.0 → 0.2.1

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.
data/Rakefile DELETED
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
5
- require "rubocop/rake_task"
6
-
7
- RSpec::Core::RakeTask.new(:specs)
8
-
9
- task default: :specs
10
-
11
- task spec: %i(specs rubocop spec_docs)
12
-
13
- desc "Run RuboCop on the lib/specs directory"
14
- RuboCop::RakeTask.new(:rubocop)
15
-
16
- desc "Ensure that the plugin passes `danger plugins lint`"
17
- task :spec_docs do
18
- sh "danger plugins lint"
19
- end
@@ -1,7 +0,0 @@
1
- #!/bin/sh
2
-
3
- cd "$(dirname "$0")"
4
- version="2.9.0"
5
- curl -Lo periphery.zip "https://github.com/peripheryapp/periphery/releases/download/$version/periphery-v$version.zip"
6
- unzip periphery.zip
7
- rm periphery.zip LICENSE.md
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- lib = File.expand_path("lib", __dir__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require "version"
6
-
7
- Gem::Specification.new do |spec|
8
- spec.name = "danger-periphery"
9
- spec.version = DangerPeriphery::VERSION
10
- spec.authors = ["Ryosuke Ito"]
11
- spec.email = ["rito.0305@gmail.com"]
12
- spec.description = "A Danger plugin to detect unused codes."
13
- spec.summary = spec.description
14
- spec.homepage = "https://github.com/manicmaniac/danger-periphery"
15
- spec.license = "MIT"
16
- spec.required_ruby_version = ">= 2.6.0"
17
- spec.metadata["rubygems_mfa_required"] = "true"
18
-
19
- spec.files = `git ls-files`.split($/)
20
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
- spec.require_paths = ["lib"]
22
-
23
- spec.add_dependency "danger-plugin-api", "~> 1.0"
24
- end
@@ -1,195 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Danger::DangerPeriphery do
4
- include DangerPluginHelper
5
-
6
- let(:periphery_options) do
7
- {
8
- project: fixture("test.xcodeproj"),
9
- targets: "test",
10
- schemes: "test"
11
- }
12
- end
13
-
14
- it "should be a plugin" do
15
- expect(Danger::DangerPeriphery.new(nil)).to be_a Danger::Plugin
16
- end
17
-
18
- context "with Dangerfile" do
19
- let(:dangerfile) { testing_dangerfile }
20
- let(:periphery) { dangerfile.periphery }
21
-
22
- before do
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
27
- allow(Pathname).to receive(:getwd).and_return fixtures_path
28
- end
29
-
30
- context "when periphery is not installed" do
31
- before { periphery.binary_path = "not_installed" }
32
-
33
- it "fails with error" do
34
- expect { periphery.scan }.to raise_error Errno::ENOENT
35
- end
36
- end
37
-
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
48
-
49
- it "reports nothing" do
50
- periphery.scan(periphery_options)
51
-
52
- expect(dangerfile.status_report[:warnings]).to be_empty
53
- end
54
- end
55
-
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
69
- end
70
-
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)
81
-
82
- expect(dangerfile.status_report[:warnings]).to include "Function 'unusedMethod()' is unused"
83
- end
84
- end
85
- end
86
-
87
- context "with block" do
88
- subject { dangerfile.status_report[:warnings] }
89
-
90
- before do
91
- allow(periphery.git).to receive(:renamed_files).and_return []
92
- allow(periphery.git).to receive(:modified_files).and_return ["test/main.swift"]
93
- allow(periphery.git).to receive(:deleted_files).and_return []
94
- allow(periphery.git).to receive(:added_files).and_return []
95
- periphery.scan(periphery_options, &block)
96
- end
97
-
98
- context "that returns nil" do
99
- let(:block) { ->(violation) {} }
100
-
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
136
- end
137
- end
138
-
139
- describe "#postprocessor" do
140
- subject { dangerfile.status_report[:warnings] }
141
-
142
- before do
143
- allow(periphery.git).to receive(:renamed_files).and_return []
144
- allow(periphery.git).to receive(:modified_files).and_return ["test/main.swift"]
145
- allow(periphery.git).to receive(:deleted_files).and_return []
146
- allow(periphery.git).to receive(:added_files).and_return []
147
- periphery.postprocessor = postprocessor
148
- periphery.scan(periphery_options)
149
- end
150
-
151
- context "when returns nil" do
152
- let(:postprocessor) { ->(path, line, column, message) {} }
153
-
154
- it "does not report warnings" do
155
- expect(subject).to be_empty
156
- end
157
- end
158
-
159
- context "when returns false" do
160
- let(:postprocessor) { ->(path, line, column, message) { false } }
161
-
162
- it "does not report warnings" do
163
- expect(subject).to be_empty
164
- end
165
- end
166
-
167
- context "when returns true" do
168
- let(:postprocessor) { ->(path, line, column, message) { true } }
169
-
170
- it "reports warnings" do
171
- expect(subject).to include "Function 'unusedMethod()' is unused"
172
- end
173
- end
174
-
175
- context "when returns a modified array" do
176
- let(:postprocessor) do
177
- ->(path, line, column, message) { [path, line, column, message.gsub(/Function/, "Foobar")] }
178
- end
179
-
180
- it "reports modified warnings" do
181
- expect(subject).to include "Foobar 'unusedMethod()' is unused"
182
- end
183
- end
184
- end
185
-
186
- describe "#process_warnings" do
187
- it "sets postprocessor" do
188
- periphery.process_warnings do |path, line, column, message|
189
- nil
190
- end
191
- expect { periphery.process_warnings { |*args| nil } }.to(change { periphery.postprocessor })
192
- end
193
- end
194
- end
195
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Periphery::CheckstyleParser do
4
- subject(:parser) { described_class.new }
5
-
6
- describe "#parse" do
7
- subject { parser.parse(string) }
8
-
9
- context "with vaild checkstyle xml" do
10
- let(:string) do
11
- <<~LOG
12
- <?xml version="1.0" encoding="utf-8"?>
13
- <checkstyle version="4.3">
14
- <file name="/Users/manicmaniac/danger-periphery/main.swift">
15
- <error line="1" column="1" severity="warning" message="Typealias &apos;UnusedTypeAlias&apos; is unused"/>
16
- <error line="2" column="1" severity="warning" message="Class &apos;UnusedClass&apos; is unused"/>
17
- <error line="3" column="1" severity="warning" message="Protocol &apos;UnusedProtocol&apos; is unused"/>
18
- </file>
19
- </checkstyle>
20
- LOG
21
- end
22
-
23
- before { allow(Pathname).to receive(:getwd).and_return Pathname.new("/Users/manicmaniac/danger-periphery") }
24
-
25
- it "parses all warnings" do
26
- expect(subject).to eq [
27
- Periphery::ScanResult.new("main.swift", 1, 1, "Typealias 'UnusedTypeAlias' is unused"),
28
- Periphery::ScanResult.new("main.swift", 2, 1, "Class 'UnusedClass' is unused"),
29
- Periphery::ScanResult.new("main.swift", 3, 1, "Protocol 'UnusedProtocol' is unused")
30
- ]
31
- end
32
- end
33
- end
34
- end
@@ -1,116 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Periphery::Runner do
4
- subject(:runner) { described_class.new(binary_path) }
5
-
6
- let(:binary_path) { binary("periphery") }
7
-
8
- describe "#scan" do
9
- subject { runner.scan(options) }
10
-
11
- context "with valid args" do
12
- let(:options) do
13
- {
14
- project: fixture("test.xcodeproj"),
15
- targets: "test",
16
- "schemes" => "test"
17
- }
18
- end
19
-
20
- let(:command) do
21
- [
22
- binary_path,
23
- "scan",
24
- "--project",
25
- fixture("test.xcodeproj"),
26
- "--targets",
27
- "test",
28
- "--schemes",
29
- "test"
30
- ]
31
- end
32
-
33
- it "runs scan without args" do
34
- status = double(Process::Status, success?: true)
35
- expect(Open3).to receive(:capture3).once.with(*command).and_return ["warning:", "", status]
36
- expect(subject).to include "warning:"
37
- end
38
- end
39
- end
40
-
41
- describe "#scan_arguments" do
42
- subject { runner.scan_arguments(options) }
43
-
44
- context "with empty options" do
45
- let(:options) { {} }
46
-
47
- it { is_expected.to be_empty }
48
- end
49
-
50
- context "with options that takes no argument" do
51
- let(:options) do
52
- {
53
- clean_build: true,
54
- skip_build: true
55
- }
56
- end
57
-
58
- it "returns correct arguments" do
59
- expect(subject).to eq %w(--clean-build --skip-build)
60
- end
61
- end
62
-
63
- context "with options that takes an argument" do
64
- let(:options) do
65
- {
66
- project: "test.xcodeproj",
67
- targets: "test1,test2"
68
- }
69
- end
70
-
71
- it "returns correct arguments" do
72
- expect(subject).to eq %w(--project test.xcodeproj --targets test1,test2)
73
- end
74
- end
75
-
76
- context "with options that takes an array as argument" do
77
- let(:options) do
78
- {
79
- project: "test.xcodeproj",
80
- targets: %w(test1 test2)
81
- }
82
- end
83
-
84
- it "returns correct arguments" do
85
- expect(subject).to eq %w(--project test.xcodeproj --targets test1,test2)
86
- end
87
- end
88
-
89
- context "with options passed as symbol" do
90
- let(:options) do
91
- {
92
- project: "test.xcodeproj",
93
- targets: :test
94
- }
95
- end
96
-
97
- it "returns correct arguments" do
98
- expect(subject).to eq %w(--project test.xcodeproj --targets test)
99
- end
100
- end
101
-
102
- context "with options passed as boolean" do
103
- let(:options) do
104
- {
105
- project: "test.xcodeproj",
106
- targets: "test",
107
- clean_build: true
108
- }
109
- end
110
-
111
- it "returns correct arguments" do
112
- expect(subject).to eq %w(--project test.xcodeproj --targets test --clean-build)
113
- end
114
- end
115
- end
116
- end
data/spec/spec_helper.rb DELETED
@@ -1,83 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ROOT = Pathname.new(File.expand_path("..", __dir__))
4
- $:.unshift("#{ROOT}lib".to_s, "#{ROOT}spec".to_s)
5
-
6
- require "bundler/setup"
7
- require "danger"
8
- require "danger_plugin"
9
- require "pry"
10
- require "rspec"
11
-
12
- module FixtureHelper
13
- def fixtures_path
14
- Pathname.new("support/fixtures").expand_path(__dir__)
15
- end
16
-
17
- def fixture(filename)
18
- fixtures_path.join(filename).to_s
19
- end
20
-
21
- def binaries_path
22
- Pathname.new("../bin").expand_path(__dir__)
23
- end
24
-
25
- def binary(filename)
26
- binaries_path.join(filename).to_s
27
- end
28
- end
29
-
30
- module DangerPluginHelper
31
- def self.included(_module)
32
- if `git remote -v` == ""
33
- puts "You cannot run tests without setting a local git remote on this repo"
34
- puts "It's a weird side-effect of Danger's internals."
35
- exit(0)
36
- end
37
- end
38
-
39
- # These functions are a subset of https://github.com/danger/danger/blob/master/spec/spec_helper.rb
40
- # If you are expanding these files, see if it's already been done ^.
41
-
42
- # A silent version of the user interface,
43
- # it comes with an extra function `.string` which will
44
- # strip all ANSI colours from the string.
45
-
46
- # rubocop:disable Lint/NestedMethodDefinition
47
- def testing_ui
48
- @output = StringIO.new
49
- def @output.winsize
50
- [20, 9999]
51
- end
52
-
53
- cork = Cork::Board.new(out: @output)
54
- def cork.string
55
- out.string.gsub(/\e\[([;\d]+)?m/, "")
56
- end
57
- cork
58
- end
59
- # rubocop:enable Lint/NestedMethodDefinition
60
-
61
- # Example environment (ENV) that would come from
62
- # running a PR on TravisCI
63
- def testing_env
64
- {
65
- "HAS_JOSH_K_SEAL_OF_APPROVAL" => "true",
66
- "TRAVIS_PULL_REQUEST" => "800",
67
- "TRAVIS_REPO_SLUG" => "artsy/eigen",
68
- "TRAVIS_COMMIT_RANGE" => "759adcbd0d8f...13c4dc8bb61d",
69
- "DANGER_GITHUB_API_TOKEN" => "123sbdq54erfsd3422gdfio"
70
- }
71
- end
72
-
73
- # A stubbed out Dangerfile for use in tests
74
- def testing_dangerfile
75
- env = Danger::EnvironmentManager.new(testing_env)
76
- Danger::Dangerfile.new(env, testing_ui)
77
- end
78
- end
79
-
80
- RSpec.configure do |config|
81
- config.filter_gems_from_backtrace "bundler"
82
- config.include FixtureHelper
83
- end