fastlane-plugin-lizard 0.1.2 → 1.0.1
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9de970de855b2210fbf9fb92295f5702084531ae
|
4
|
+
data.tar.gz: 0bce82b9a9c562a7c1b8d2abb09bdcbe5bbcc594
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bba85d449d509527f062e79bf433754eed0a803207ece49c12b64c404d557eb54ad4afce9aa9c331f8ea9e7acae1a61c4478c30c3bb4611ab8e2ce955ffc5a44
|
7
|
+
data.tar.gz: 8cca9c3904dc1f04e520cc83eb9113416d1e0d307460f2af75aed854c37327e8c99029c84135aa2531176a37b2705a3d0614236c2a11af6f8167bde9e6fc27ca
|
@@ -2,7 +2,29 @@ module Fastlane
|
|
2
2
|
module Actions
|
3
3
|
class LizardAction < Action
|
4
4
|
def self.run(params)
|
5
|
-
|
5
|
+
if `which lizard`.to_s.empty?
|
6
|
+
UI.user_error!("You have to install lizard using `[sudo] pip install lizard` or specify the executable path with the `:executable` option.")
|
7
|
+
end
|
8
|
+
|
9
|
+
command = forming_command(params)
|
10
|
+
|
11
|
+
if params[:show_warnings]
|
12
|
+
Fastlane::Actions.sh_control_output("lizard #{params[:source_folder]} | sed -n -e '/^$/,$p'", print_command: true, print_command_output: true)
|
13
|
+
end
|
14
|
+
|
15
|
+
begin
|
16
|
+
Actions.sh(command.join(" "), log: false)
|
17
|
+
rescue StandardError => e
|
18
|
+
puts e
|
19
|
+
handle_lizard_error(params[:ignore_exit_status], $CHILD_STATUS.exitstatus)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.forming_command(params)
|
24
|
+
command = []
|
25
|
+
command << 'lizard' unless params[:executable]
|
26
|
+
command << "python #{params[:executable]}" if params[:executable]
|
27
|
+
command << params[:source_folder].to_s if params[:source_folder]
|
6
28
|
command << "-l #{params[:language]}" if params[:language]
|
7
29
|
command << "--#{params[:export_type]}" if params[:export_type]
|
8
30
|
command << "-C #{params[:ccn]}" if params[:ccn] # stands for cyclomatic complexity number
|
@@ -14,21 +36,33 @@ module Fastlane
|
|
14
36
|
command << "-E #{params[:extensions]}" if params[:extensions]
|
15
37
|
command << "-s #{params[:sorting]}" if params[:sorting]
|
16
38
|
command << "-W #{params[:whitelist]}" if params[:whitelist]
|
17
|
-
command << ">
|
39
|
+
command << "> #{params[:report_file].shellescape}" if params[:report_file]
|
18
40
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
41
|
+
return command
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.handle_lizard_error(ignore_exit_status, exit_status)
|
45
|
+
if ignore_exit_status
|
46
|
+
failure_suffix = 'which would normally fail the build.'
|
47
|
+
secondary_message = 'fastlane will continue because the `ignore_exit_status` option was used! 🙈'
|
24
48
|
else
|
25
|
-
|
26
|
-
|
49
|
+
failure_suffix = 'which represents a failure.'
|
50
|
+
secondary_message = 'If you want fastlane to continue anyway, use the `ignore_exit_status` option. 🙈'
|
27
51
|
end
|
52
|
+
|
53
|
+
UI.important("")
|
54
|
+
UI.important("Lizard finished with exit code #{exit_status}, #{failure_suffix}")
|
55
|
+
UI.important(secondary_message)
|
56
|
+
UI.important("")
|
57
|
+
UI.user_error!("Lizard finished with errors (exit code: #{exit_status})") unless ignore_exit_status
|
28
58
|
end
|
29
59
|
|
60
|
+
#####################################################
|
61
|
+
# @!group Documentation
|
62
|
+
#####################################################
|
63
|
+
|
30
64
|
def self.description
|
31
|
-
"
|
65
|
+
"Run lizard code cyclomatic complexity analysis."
|
32
66
|
end
|
33
67
|
|
34
68
|
def self.authors
|
@@ -44,31 +78,34 @@ module Fastlane
|
|
44
78
|
FastlaneCore::ConfigItem.new(key: :source_folder,
|
45
79
|
env_name: "FL_LIZARD_SOURCE_FOLDER",
|
46
80
|
description: "The folders that contains the source code for lizard to scan",
|
47
|
-
|
48
|
-
UI.user_error!("No source folder specified") unless value and !value.empty?
|
49
|
-
end),
|
81
|
+
optional: true),
|
50
82
|
FastlaneCore::ConfigItem.new(key: :language,
|
51
83
|
env_name: "FL_LIZARD_LANGUAGE",
|
52
84
|
description: "List the programming languages you want to analyze",
|
53
|
-
default_value: "swift"
|
85
|
+
default_value: "swift",
|
86
|
+
optional: true),
|
54
87
|
FastlaneCore::ConfigItem.new(key: :export_type,
|
55
|
-
|
56
|
-
|
88
|
+
env_name: "FL_LIZARD_EXPORT_TYPE",
|
89
|
+
description: "The file extension of your export. E.g. xml, csv",
|
90
|
+
optional: true),
|
57
91
|
FastlaneCore::ConfigItem.new(key: :ccn,
|
58
92
|
env_name: "FL_LIZARD_CCN",
|
59
93
|
description: "Threshold of cyclomatic complexity number warning",
|
94
|
+
is_string: false,
|
60
95
|
optional: true),
|
61
96
|
FastlaneCore::ConfigItem.new(key: :length,
|
62
|
-
|
63
|
-
|
64
|
-
|
97
|
+
env_name: "FL_LIZARD_LENGTH",
|
98
|
+
description: "Threshold for maximum function length warning",
|
99
|
+
is_string: false,
|
100
|
+
optional: true),
|
65
101
|
FastlaneCore::ConfigItem.new(key: :arguments,
|
66
|
-
|
67
|
-
|
68
|
-
|
102
|
+
env_name: "FL_LIZARD_ARGUMENTS",
|
103
|
+
description: "Limit for number of parameters",
|
104
|
+
optional: true),
|
69
105
|
FastlaneCore::ConfigItem.new(key: :number,
|
70
106
|
env_name: "FL_LIZARD_NUMBER",
|
71
107
|
description: "If the number of warnings is equal or less than the number, the tool will exit normally, otherwise it will generate error. Useful in makefile for legacy code",
|
108
|
+
is_string: false,
|
72
109
|
optional: true),
|
73
110
|
FastlaneCore::ConfigItem.new(key: :exclude,
|
74
111
|
env_name: "FL_LIZARD_EXCLUDE",
|
@@ -82,6 +119,7 @@ module Fastlane
|
|
82
119
|
FastlaneCore::ConfigItem.new(key: :extensions,
|
83
120
|
env_name: "FL_LIZARD_EXTENSIONS",
|
84
121
|
description: "User the extensions. The available extensions are: -Ecpre: it will ignore code in the #else branch. -Ewordcount: count word frequencies and generate tag cloud. -Eoutside: include the global code as one function",
|
122
|
+
is_string: true,
|
85
123
|
optional: true),
|
86
124
|
FastlaneCore::ConfigItem.new(key: :sorting,
|
87
125
|
env_name: "FL_LIZARD_SORTING",
|
@@ -93,17 +131,27 @@ module Fastlane
|
|
93
131
|
optional: true),
|
94
132
|
FastlaneCore::ConfigItem.new(key: :report_file,
|
95
133
|
env_name: "FL_LIZARD_REPORT_FILE",
|
96
|
-
description: "The folder/file which lizard output to"
|
134
|
+
description: "The folder/file which lizard output to",
|
135
|
+
optional: true),
|
136
|
+
FastlaneCore::ConfigItem.new(key: :ignore_exit_status,
|
137
|
+
description: "Ignore the exit status of the lizard command, so that serious violations don't fail the build (true/false)",
|
138
|
+
default_value: false,
|
139
|
+
is_string: false,
|
140
|
+
optional: true),
|
97
141
|
FastlaneCore::ConfigItem.new(key: :show_warnings,
|
98
142
|
env_name: "FL_LIZARD_SHOW_WARNINGS",
|
99
143
|
description: "Show lizard warnings on console, on code that is too complex",
|
100
144
|
is_string: false,
|
101
|
-
default_value: false)
|
145
|
+
default_value: false),
|
146
|
+
FastlaneCore::ConfigItem.new(key: :executable,
|
147
|
+
description: "Path to the `lizard.py` executable on your machine",
|
148
|
+
is_string: true,
|
149
|
+
optional: true)
|
102
150
|
]
|
103
151
|
end
|
104
152
|
|
105
153
|
def self.is_supported?(platform)
|
106
|
-
|
154
|
+
[:ios, :android, :mac].include?(platform)
|
107
155
|
end
|
108
156
|
end
|
109
157
|
end
|
@@ -0,0 +1,166 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class SwiftlintAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
if `which swiftlint`.to_s.length == 0 && params[:executable].nil? && !Helper.test?
|
6
|
+
UI.user_error!("You have to install swiftlint using `brew install swiftlint` or specify the executable path with the `:executable` option.")
|
7
|
+
end
|
8
|
+
|
9
|
+
version = swiftlint_version(executable: params[:executable])
|
10
|
+
if params[:mode] == :autocorrect and version < Gem::Version.new('0.5.0') and !Helper.test?
|
11
|
+
UI.user_error!("Your version of swiftlint (#{version}) does not support autocorrect mode.\nUpdate swiftlint using `brew update && brew upgrade swiftlint`")
|
12
|
+
end
|
13
|
+
|
14
|
+
command = (params[:executable] || "swiftlint").dup
|
15
|
+
command << " #{params[:mode]}"
|
16
|
+
command << supported_option_switch(params, :strict, "0.9.2", true)
|
17
|
+
command << " --config #{params[:config_file].shellescape}" if params[:config_file]
|
18
|
+
command << " --reporter #{params[:reporter]}" if params[:reporter]
|
19
|
+
command << supported_option_switch(params, :quiet, "0.9.0", true)
|
20
|
+
|
21
|
+
if params[:files]
|
22
|
+
if version < Gem::Version.new('0.5.1')
|
23
|
+
UI.user_error!("Your version of swiftlint (#{version}) does not support list of files as input.\nUpdate swiftlint using `brew update && brew upgrade swiftlint`")
|
24
|
+
end
|
25
|
+
|
26
|
+
files = params[:files].map.with_index(0) { |f, i| "SCRIPT_INPUT_FILE_#{i}=#{f.shellescape}" }.join(" ")
|
27
|
+
command = command.prepend("SCRIPT_INPUT_FILE_COUNT=#{params[:files].count} #{files} ")
|
28
|
+
command << " --use-script-input-files"
|
29
|
+
end
|
30
|
+
|
31
|
+
command << " > #{params[:output_file].shellescape}" if params[:output_file]
|
32
|
+
|
33
|
+
begin
|
34
|
+
Actions.sh(command)
|
35
|
+
rescue
|
36
|
+
handle_swiftlint_error(params[:ignore_exit_status], $?.exitstatus)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Get current SwiftLint version
|
41
|
+
def self.swiftlint_version(executable: nil)
|
42
|
+
binary = executable || 'swiftlint'
|
43
|
+
Gem::Version.new(`#{binary} version`.chomp)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Return "--option" switch if option is on and current SwiftLint version is greater or equal than min version.
|
47
|
+
# Return "" otherwise.
|
48
|
+
def self.supported_option_switch(params, option, min_version, can_ignore = false)
|
49
|
+
return "" unless params[option]
|
50
|
+
version = swiftlint_version(executable: params[:executable])
|
51
|
+
if version < Gem::Version.new(min_version)
|
52
|
+
message = "Your version of swiftlint (#{version}) does not support '--#{option}' option.\nUpdate swiftlint to #{min_version} or above using `brew update && brew upgrade swiftlint`"
|
53
|
+
message += "\nThe option will be ignored." if can_ignore
|
54
|
+
can_ignore ? UI.important(message) : UI.user_error!(message)
|
55
|
+
""
|
56
|
+
else
|
57
|
+
" --#{option}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
#####################################################
|
62
|
+
# @!group Documentation
|
63
|
+
#####################################################
|
64
|
+
|
65
|
+
def self.description
|
66
|
+
"Run swift code validation using Lizard"
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.details
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.available_options
|
73
|
+
[
|
74
|
+
FastlaneCore::ConfigItem.new(key: :mode,
|
75
|
+
description: "SwiftLint mode: :lint or :autocorrect",
|
76
|
+
is_string: false,
|
77
|
+
default_value: :lint,
|
78
|
+
optional: true),
|
79
|
+
FastlaneCore::ConfigItem.new(key: :output_file,
|
80
|
+
description: 'Path to output SwiftLint result',
|
81
|
+
optional: true),
|
82
|
+
FastlaneCore::ConfigItem.new(key: :config_file,
|
83
|
+
description: 'Custom configuration file of SwiftLint',
|
84
|
+
optional: true),
|
85
|
+
FastlaneCore::ConfigItem.new(key: :strict,
|
86
|
+
description: 'Fail on warnings? (true/false)',
|
87
|
+
default_value: false,
|
88
|
+
is_string: false,
|
89
|
+
optional: true),
|
90
|
+
FastlaneCore::ConfigItem.new(key: :files,
|
91
|
+
description: 'List of files to process',
|
92
|
+
is_string: false,
|
93
|
+
optional: true),
|
94
|
+
FastlaneCore::ConfigItem.new(key: :ignore_exit_status,
|
95
|
+
description: "Ignore the exit status of the SwiftLint command, so that serious violations \
|
96
|
+
don't fail the build (true/false)",
|
97
|
+
default_value: false,
|
98
|
+
is_string: false,
|
99
|
+
optional: true),
|
100
|
+
FastlaneCore::ConfigItem.new(key: :reporter,
|
101
|
+
description: 'Choose output reporter',
|
102
|
+
is_string: true,
|
103
|
+
optional: true),
|
104
|
+
FastlaneCore::ConfigItem.new(key: :quiet,
|
105
|
+
description: "Don't print status logs like 'Linting <file>' & 'Done linting'",
|
106
|
+
default_value: false,
|
107
|
+
is_string: false,
|
108
|
+
optional: true),
|
109
|
+
FastlaneCore::ConfigItem.new(key: :executable,
|
110
|
+
description: "Path to the `swiftlint` executable on your machine",
|
111
|
+
is_string: true,
|
112
|
+
optional: true)
|
113
|
+
]
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.output
|
117
|
+
end
|
118
|
+
|
119
|
+
def self.return_value
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.authors
|
123
|
+
["KrauseFx"]
|
124
|
+
end
|
125
|
+
|
126
|
+
def self.is_supported?(platform)
|
127
|
+
[:ios, :mac].include?(platform)
|
128
|
+
end
|
129
|
+
|
130
|
+
def self.example_code
|
131
|
+
[
|
132
|
+
'swiftlint(
|
133
|
+
mode: :lint, # SwiftLint mode: :lint (default) or :autocorrect
|
134
|
+
output_file: "swiftlint.result.json", # The path of the output file (optional)
|
135
|
+
config_file: ".swiftlint-ci.yml", # The path of the configuration file (optional)
|
136
|
+
files: [ # List of files to process (optional)
|
137
|
+
"AppDelegate.swift",
|
138
|
+
"path/to/project/Model.swift"
|
139
|
+
],
|
140
|
+
ignore_exit_status: true # Allow fastlane to continue even if SwiftLint returns a non-zero exit status
|
141
|
+
)'
|
142
|
+
]
|
143
|
+
end
|
144
|
+
|
145
|
+
def self.category
|
146
|
+
:testing
|
147
|
+
end
|
148
|
+
|
149
|
+
def self.handle_swiftlint_error(ignore_exit_status, exit_status)
|
150
|
+
if ignore_exit_status
|
151
|
+
failure_suffix = 'which would normally fail the build.'
|
152
|
+
secondary_message = 'fastlane will continue because the `ignore_exit_status` option was used! 🙈'
|
153
|
+
else
|
154
|
+
failure_suffix = 'which represents a failure.'
|
155
|
+
secondary_message = 'If you want fastlane to continue anyway, use the `ignore_exit_status` option. 🙈'
|
156
|
+
end
|
157
|
+
|
158
|
+
UI.important("")
|
159
|
+
UI.important("SwiftLint finished with exit code #{exit_status}, #{failure_suffix}")
|
160
|
+
UI.important(secondary_message)
|
161
|
+
UI.important("")
|
162
|
+
UI.user_error!("SwiftLint finished with errors (exit code: #{exit_status})") unless ignore_exit_status
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-lizard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Moses Liao
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -17,7 +17,7 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
|
-
type: :
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
|
-
type: :
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
@@ -45,7 +45,7 @@ dependencies:
|
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
|
-
type: :
|
48
|
+
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
-
type: :
|
62
|
+
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
@@ -73,7 +73,7 @@ dependencies:
|
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
|
-
type: :
|
76
|
+
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
|
-
type: :
|
90
|
+
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
@@ -101,7 +101,7 @@ dependencies:
|
|
101
101
|
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
|
-
type: :
|
104
|
+
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
@@ -115,7 +115,7 @@ dependencies:
|
|
115
115
|
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
|
-
type: :
|
118
|
+
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- README.md
|
133
133
|
- lib/fastlane/plugin/lizard.rb
|
134
134
|
- lib/fastlane/plugin/lizard/actions/lizard_action.rb
|
135
|
+
- lib/fastlane/plugin/lizard/actions/swiftlint_example.rb
|
135
136
|
- lib/fastlane/plugin/lizard/helper/lizard_helper.rb
|
136
137
|
- lib/fastlane/plugin/lizard/version.rb
|
137
138
|
homepage: https://github.com/liaogz82/fastlane-plugin-lizard
|
@@ -157,5 +158,5 @@ rubyforge_project:
|
|
157
158
|
rubygems_version: 2.6.13
|
158
159
|
signing_key:
|
159
160
|
specification_version: 4
|
160
|
-
summary:
|
161
|
+
summary: Run swift code complexity analytics using Lizard
|
161
162
|
test_files: []
|