danger-periphery 0.2.0 → 0.2.2

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