Merge pull request #234 from TouchInstinct/feature/multiple_swiftlint_fixes
some fixes and improvements for multiple swiftlint
This commit is contained in:
commit
5669222c5c
|
|
@ -32,6 +32,7 @@ opt_in_rules:
|
|||
- fatal_error_message
|
||||
- extension_access_modifier
|
||||
- explicit_init
|
||||
- prefer_zero_over_explicit_init
|
||||
|
||||
# style
|
||||
|
||||
|
|
@ -72,8 +73,7 @@ opt_in_rules:
|
|||
excluded:
|
||||
- Carthage
|
||||
- Pods
|
||||
- Generated
|
||||
- Localization
|
||||
- "**/Generated"
|
||||
|
||||
line_length:
|
||||
warning: 128
|
||||
|
|
|
|||
|
|
@ -7,17 +7,50 @@ class SettingOption
|
|||
def initialize
|
||||
@options = OpenStruct.new
|
||||
OptionParser.new do |opt|
|
||||
opt.on('-p', '--project_root_path STRING', 'The path of project directory and contains *.xcodeproj file always. ' +
|
||||
'Example: project_root_path=~/Projects/MyProject/Source/..') { |option| @options.project_root_path = option }
|
||||
opt.on('-r', '--source_root_path STRING', 'The path of source directory and may not contains *.xcodeproj file in some cases. ' +
|
||||
'Example: source_root_path=~/Projects/MyProject/') { |option| @options.source_root_path = option }
|
||||
opt.on('-s', '--swiftlint_executable_path STRING', 'The executable path of swiftlint') { |option| @options.swiftlint_executable_path = option }
|
||||
opt.on('-c', '--check_mode MODE', 'The mode of check is "fully" or "simplified"') { |option| @options.check_mode = option }
|
||||
opt.on('-u', '--use_multiple BOOL', 'The flag indicates the use of multiple yaml swiftlint configurations') { |option| @options.use_multiple = option }
|
||||
opt.on('-d', '--source_date DATE', 'The date of grouping files according touchin and old swiftlint rules') { |option| @options.source_date = option }
|
||||
opt.on('-y', '--touchin_swiftlint_yaml_path STRING', 'The path to the touchin swiftlint yaml relative to the source directory') { |option| @options.touchin_swiftlint_yaml_path = option }
|
||||
opt.on('-p',
|
||||
'--project_root_path STRING',
|
||||
'The path of project directory and contains *.xcodeproj file always. ' +
|
||||
'Example: project_root_path=~/Projects/MyProject/Source/..') { |option|
|
||||
@options.project_root_path = option
|
||||
}
|
||||
opt.on('-r',
|
||||
'--source_root_path STRING',
|
||||
'The path of source directory and may not contains *.xcodeproj file in some cases. ' +
|
||||
'Example: source_root_path=~/Projects/MyProject/') { |option|
|
||||
@options.source_root_path = option
|
||||
}
|
||||
opt.on('-s',
|
||||
'--swiftlint_executable_path STRING',
|
||||
'The executable path of swiftlint') { |option|
|
||||
@options.swiftlint_executable_path = option
|
||||
}
|
||||
opt.on('-c',
|
||||
'--check_mode MODE',
|
||||
'The mode of check is "fully" or "simplified"') { |option|
|
||||
@options.check_mode = option
|
||||
}
|
||||
opt.on('-u',
|
||||
'--use_multiple BOOL',
|
||||
'The flag indicates the use of multiple yaml swiftlint configurations') { |option|
|
||||
@options.use_multiple = option
|
||||
}
|
||||
opt.on('-d',
|
||||
'--source_date DATE',
|
||||
'The date of grouping files according touchin and old swiftlint rules') { |option|
|
||||
@options.source_date = option
|
||||
}
|
||||
opt.on('-tc',
|
||||
'--touchin_swiftlint_yaml_path STRING',
|
||||
'The path to the touchin swiftlint yaml relative to the source directory') { |option|
|
||||
@options.touchin_swiftlint_yaml_path = option
|
||||
}
|
||||
opt.on('-oc',
|
||||
'--old_swiftlint_yaml_path STRING',
|
||||
'The path to the old swiftlint yaml relative to the source directory') { |option|
|
||||
@options.old_swiftlint_yaml_path = option
|
||||
}
|
||||
end.parse!
|
||||
|
||||
|
||||
if @options.check_mode.to_s.nilOrEmpty?
|
||||
@options.check_mode = 'fully'
|
||||
end
|
||||
|
|
@ -29,37 +62,17 @@ class SettingOption
|
|||
if @options.source_root_path.to_s.nilOrEmpty?
|
||||
@options.source_root_path = @options.project_root_path
|
||||
end
|
||||
|
||||
|
||||
if @options.touchin_swiftlint_yaml_path.to_s.nilOrEmpty?
|
||||
@options.touchin_swiftlint_yaml_path = '/build-scripts/xcode/.swiftlint.yml'
|
||||
@options.touchin_swiftlint_yaml_path = File.join(project_root_path, 'build-scripts/xcode/.swiftlint.yml')
|
||||
end
|
||||
|
||||
if @options.old_swiftlint_yaml_path.to_s.nilOrEmpty?
|
||||
@options.old_swiftlint_yaml_path = File.join(project_root_path, '.swiftlint.yml')
|
||||
end
|
||||
end
|
||||
|
||||
def project_root_path
|
||||
@options.project_root_path
|
||||
end
|
||||
|
||||
def source_date
|
||||
@options.source_date
|
||||
end
|
||||
|
||||
def swiftlint_executable_path
|
||||
@options.swiftlint_executable_path
|
||||
end
|
||||
|
||||
def check_mode
|
||||
@options.check_mode
|
||||
end
|
||||
|
||||
def use_multiple
|
||||
@options.use_multiple
|
||||
end
|
||||
|
||||
def source_root_path
|
||||
@options.source_root_path
|
||||
end
|
||||
|
||||
def touchin_swiftlint_yaml_path
|
||||
@options.touchin_swiftlint_yaml_path
|
||||
|
||||
def method_missing(method, *args, &block)
|
||||
@options.send(method, *args, &block)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
require 'fileutils'
|
||||
require 'tmpdir'
|
||||
|
||||
require_relative 'array_extension.rb'
|
||||
require_relative 'git_caretaker.rb'
|
||||
|
|
@ -7,19 +8,19 @@ require_relative 'swift_file_manager.rb'
|
|||
require_relative 'yaml_manager.rb'
|
||||
|
||||
class StrategyMaker
|
||||
def initialize(project_root_path, swiftlint_executable_path, touchin_swiftlint_yaml_path)
|
||||
@project_root_path = project_root_path
|
||||
@touchin_swiftlint_yaml_path = project_root_path + touchin_swiftlint_yaml_path
|
||||
@old_swiftlint_yaml_path = project_root_path + '/.swiftlint.yml'
|
||||
|
||||
@temporary_swiftlint_folder_name = project_root_path + '/temporary_swiftlint'
|
||||
@touchin_swiftlint_yaml_temporary_path = @temporary_swiftlint_folder_name + '/.touchin_swiftlint.yml'
|
||||
@old_swiftlint_yaml_temporary_path = @temporary_swiftlint_folder_name + '/.old_swiftlint.yml'
|
||||
|
||||
def initialize(project_root_path, swiftlint_executable_path, touchin_swiftlint_yaml_path, old_swiftlint_yaml_path)
|
||||
@project_root_path = project_root_path
|
||||
@touchin_swiftlint_yaml_path = touchin_swiftlint_yaml_path
|
||||
@old_swiftlint_yaml_path = old_swiftlint_yaml_path
|
||||
|
||||
@temporary_swiftlint_folder_name = Dir.mktmpdir
|
||||
@touchin_swiftlint_yaml_temporary_path = File.join(@temporary_swiftlint_folder_name, '.touchin_swiftlint.yml')
|
||||
@old_swiftlint_yaml_temporary_path = File.join(@temporary_swiftlint_folder_name, '.old_swiftlint.yml')
|
||||
|
||||
@swiftlint_autocorrect_command = swiftlint_executable_path + ' autocorrect --path ' + @project_root_path + ' --config '
|
||||
@swiftlint_lint_command = swiftlint_executable_path + ' --path ' + @project_root_path + ' --config '
|
||||
end
|
||||
|
||||
|
||||
def run_fully_multiple_strategy(source_date)
|
||||
create_yaml_managers_and_copy_temporary_files
|
||||
|
||||
|
|
@ -33,38 +34,38 @@ class StrategyMaker
|
|||
|
||||
@touchin_swiftlint_yaml_manager.update('excluded', total_touchin_excluded_files)
|
||||
@old_swiftlint_yaml_manager.update('excluded', total_old_excluded_files)
|
||||
|
||||
|
||||
run_multiple_strategy(@touchin_swiftlint_yaml_temporary_path, @old_swiftlint_yaml_temporary_path)
|
||||
end
|
||||
|
||||
|
||||
def run_simplified_multiple_strategy(source_date, source_root_path)
|
||||
included_files = GitСaretaker.get_modified_files
|
||||
|
||||
|
||||
if included_files.nilOrEmpty?
|
||||
puts 'Git did not found swift files to check'
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
create_yaml_managers_and_copy_temporary_files
|
||||
|
||||
exclude_files = unique_exclude_files(@touchin_swiftlint_yaml_manager, @old_swiftlint_yaml_manager)
|
||||
included_files = included_files.map { |file_path| source_root_path + file_path }
|
||||
|
||||
|
||||
swift_file_manager = SwiftFileManager.new(exclude_files, source_date)
|
||||
swift_file_manager.find_list_file_paths_from(included_files)
|
||||
|
||||
|
||||
total_touchin_included_files = swift_file_manager.new_files
|
||||
total_old_included_files = swift_file_manager.old_files
|
||||
|
||||
|
||||
@touchin_swiftlint_yaml_manager.update('excluded', [])
|
||||
@old_swiftlint_yaml_manager.update('excluded', [])
|
||||
|
||||
|
||||
@touchin_swiftlint_yaml_manager.update('included', total_touchin_included_files)
|
||||
@old_swiftlint_yaml_manager.update('included', total_old_included_files)
|
||||
|
||||
|
||||
is_exist_total_touchin_included_files = (not total_touchin_included_files.nilOrEmpty?)
|
||||
is_exist_total_old_included_files = (not total_old_included_files.nilOrEmpty?)
|
||||
|
||||
|
||||
if is_exist_total_touchin_included_files and is_exist_total_old_included_files
|
||||
run_multiple_strategy(@touchin_swiftlint_yaml_temporary_path, @old_swiftlint_yaml_temporary_path)
|
||||
elsif is_exist_total_touchin_included_files and not is_exist_total_old_included_files
|
||||
|
|
@ -75,11 +76,11 @@ class StrategyMaker
|
|||
puts 'Git did not found swift files to check'
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def run_fully_single_strategy
|
||||
run_single_strategy(@touchin_swiftlint_yaml_path)
|
||||
end
|
||||
|
||||
|
||||
def run_simplified_single_strategy(source_root_path)
|
||||
included_files = GitСaretaker.get_modified_files
|
||||
|
||||
|
|
@ -87,34 +88,34 @@ class StrategyMaker
|
|||
puts 'Git did not found swift files to check'
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
create_copy_temporary_touchin_files
|
||||
|
||||
|
||||
touchin_swiftlint_yaml_manager = YamlManager.new(@touchin_swiftlint_yaml_temporary_path)
|
||||
touchin_excluded_files = touchin_swiftlint_yaml_manager.get_configuration('excluded')
|
||||
swift_files = SwiftFileManager.new(touchin_excluded_files, '')
|
||||
|
||||
included_files = included_files.select { |file_name| not swift_files.is_excluded_file(file_name) }
|
||||
included_files = included_files.map { |file_path| source_root_path + file_path }
|
||||
|
||||
|
||||
touchin_swiftlint_yaml_manager.update('excluded', [])
|
||||
touchin_swiftlint_yaml_manager.update('included', included_files)
|
||||
|
||||
|
||||
if not included_files.nilOrEmpty?
|
||||
run_single_strategy(@touchin_swiftlint_yaml_temporary_path)
|
||||
else
|
||||
puts 'Git found the swift files to check, but they are excluded in yaml'
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
|
||||
def run_single_strategy(swiftlint_yaml_path)
|
||||
result_swiftlint_command = get_swiftlint_command(swiftlint_yaml_path)
|
||||
puts result_swiftlint_command
|
||||
run_bash_command(result_swiftlint_command)
|
||||
end
|
||||
|
||||
|
||||
def run_multiple_strategy(touchin_swiftlint_yaml_temporary_path, old_swiftlint_yaml_temporary_path)
|
||||
touchin_swiftlint_command = get_swiftlint_command(touchin_swiftlint_yaml_temporary_path)
|
||||
old_swiftlint_command = get_swiftlint_command(old_swiftlint_yaml_temporary_path)
|
||||
|
|
@ -122,34 +123,34 @@ class StrategyMaker
|
|||
puts result_swiftlint_command
|
||||
run_bash_command(result_swiftlint_command)
|
||||
end
|
||||
|
||||
|
||||
def get_swiftlint_command(swiftlint_yaml_path)
|
||||
autocorrect_command = @swiftlint_autocorrect_command + swiftlint_yaml_path
|
||||
lint_command = @swiftlint_lint_command + swiftlint_yaml_path
|
||||
return autocorrect_command + ' && ' + lint_command
|
||||
end
|
||||
|
||||
|
||||
def run_bash_command(bash_command)
|
||||
exit (exec bash_command)
|
||||
end
|
||||
|
||||
def create_yaml_managers_and_copy_temporary_files
|
||||
create_copy_temporary_files
|
||||
|
||||
|
||||
@touchin_swiftlint_yaml_manager = YamlManager.new(@touchin_swiftlint_yaml_temporary_path)
|
||||
@old_swiftlint_yaml_manager = YamlManager.new(@old_swiftlint_yaml_temporary_path)
|
||||
end
|
||||
|
||||
|
||||
def create_copy_temporary_files
|
||||
create_copy_temporary_touchin_files
|
||||
FileUtils.cp @old_swiftlint_yaml_path, @old_swiftlint_yaml_temporary_path
|
||||
end
|
||||
|
||||
|
||||
def create_copy_temporary_touchin_files
|
||||
Dir.mkdir(@temporary_swiftlint_folder_name) unless Dir.exist?(@temporary_swiftlint_folder_name)
|
||||
FileUtils.cp @touchin_swiftlint_yaml_path, @touchin_swiftlint_yaml_temporary_path
|
||||
end
|
||||
|
||||
|
||||
def unique_exclude_files(touchin_swiftlint_yaml_manager, old_swiftlint_yaml_manager)
|
||||
touchin_excluded_files = touchin_swiftlint_yaml_manager.get_configuration('excluded')
|
||||
old_excluded_files = old_swiftlint_yaml_manager.get_configuration('excluded')
|
||||
|
|
|
|||
|
|
@ -3,7 +3,10 @@ require_relative 'setting_option.rb'
|
|||
require_relative 'strategy_maker.rb'
|
||||
|
||||
setting = SettingOption.new
|
||||
strategy_maker = StrategyMaker.new(setting.project_root_path, setting.swiftlint_executable_path, setting.touchin_swiftlint_yaml_path)
|
||||
strategy_maker = StrategyMaker.new(setting.project_root_path,
|
||||
setting.swiftlint_executable_path,
|
||||
setting.touchin_swiftlint_yaml_path,
|
||||
setting.old_swiftlint_yaml_path)
|
||||
|
||||
if setting.check_mode.eql? 'fully' and setting.use_multiple.true?
|
||||
strategy_maker.run_fully_multiple_strategy(setting.source_date)
|
||||
|
|
|
|||
Loading…
Reference in New Issue