lib/synvert/cli.rb in synvert-0.10.0 vs lib/synvert/cli.rb in synvert-0.10.1

- old
+ new

@@ -1,6 +1,7 @@ -# coding: utf-8 +# frozen_string_literal: true + require 'optparse' module Synvert # Synvert command line interface. class CLI @@ -12,11 +13,11 @@ new.run(args) end # Initialize a CLI. def initialize - @options = {command: 'run', custom_snippet_paths: [], snippet_names: []} + @options = { command: 'run', custom_snippet_paths: [], snippet_names: [] } end # Run the CLI. # @param args [Array] arguments. # @return [Boolean] true if command runs successfully. @@ -35,11 +36,12 @@ when 'show' load_rewriters show_rewriter when 'sync' sync_snippets - else # run + else + # run load_rewriters @options[:snippet_names].each do |snippet_name| puts "===== #{snippet_name} started =====" group, name = snippet_name.split('/') rewriter = Core::Rewriter.call group, name @@ -65,68 +67,77 @@ private # Run OptionParser to parse arguments. def run_option_parser(args) - optparse = OptionParser.new do |opts| - opts.banner = 'Usage: synvert [project_path]' - opts.on '-d', '--load SNIPPET_PATHS', 'load custom snippets, snippet paths can be local file path or remote http url' do |snippet_paths| - @options[:custom_snippet_paths] = snippet_paths.split(',').map(&:strip) + optparse = + OptionParser.new do |opts| + opts.banner = 'Usage: synvert [project_path]' + opts.on '-d', + '--load SNIPPET_PATHS', + 'load custom snippets, snippet paths can be local file path or remote http url' do |snippet_paths| + @options[:custom_snippet_paths] = snippet_paths.split(',').map(&:strip) + end + opts.on '-l', '--list', 'list all available snippets' do + @options[:command] = 'list' + end + opts.on '-o', '--open SNIPPET_NAME', 'Open a snippet' do |snippet_name| + @options[:command] = 'open' + @options[:snippet_name] = snippet_name + end + opts.on '-q', '--query QUERY', 'query specified snippets' do |query| + @options[:command] = 'query' + @options[:query] = query + end + opts.on '--skip FILE_PATTERNS', + 'skip specified files or directories, separated by comma, e.g. app/models/post.rb,vendor/plugins/**/*.rb' do |file_patterns| + @options[:skip_file_patterns] = file_patterns.split(',') + end + opts.on '-s', + '--show SNIPPET_NAME', + 'show specified snippet description, SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax' do |snippet_name| + @options[:command] = 'show' + @options[:snippet_name] = snippet_name + end + opts.on '--sync', 'sync snippets' do + @options[:command] = 'sync' + end + opts.on '-r', + '--run SNIPPET_NAMES', + 'run specified snippets, each SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax,ruby/new_lambda_syntax' do |snippet_names| + @options[:snippet_names] = snippet_names.split(',').map(&:strip) + end + opts.on '-v', '--version', 'show this version' do + puts Core::VERSION + exit + end end - opts.on '-l', '--list', 'list all available snippets' do - @options[:command] = 'list' - end - opts.on '-o', '--open SNIPPET_NAME', 'Open a snippet' do |snippet_name| - @options[:command] = 'open' - @options[:snippet_name] = snippet_name - end - opts.on '-q', '--query QUERY', 'query specified snippets' do |query| - @options[:command] = 'query' - @options[:query] = query - end - opts.on '--skip FILE_PATTERNS', 'skip specified files or directories, separated by comma, e.g. app/models/post.rb,vendor/plugins/**/*.rb' do |file_patterns| - @options[:skip_file_patterns] = file_patterns.split(',') - end - opts.on '-s', '--show SNIPPET_NAME', 'show specified snippet description, SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax' do |snippet_name| - @options[:command] = 'show' - @options[:snippet_name] = snippet_name - end - opts.on '--sync', 'sync snippets' do - @options[:command] = 'sync' - end - opts.on '-r', '--run SNIPPET_NAMES', 'run specified snippets, each SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax,ruby/new_lambda_syntax' do |snippet_names| - @options[:snippet_names] = snippet_names.split(',').map(&:strip) - end - opts.on '-v', '--version', 'show this version' do - puts Core::VERSION - exit - end - end paths = optparse.parse(args) Core::Configuration.path = paths.first || Dir.pwd if @options[:skip_file_patterns] && !@options[:skip_file_patterns].empty? - skip_files = @options[:skip_file_patterns].map do |file_pattern| - full_file_pattern = File.join(Core::Configuration.path, file_pattern) - Dir.glob(full_file_pattern) - end.flatten + skip_files = + @options[:skip_file_patterns].map do |file_pattern| + full_file_pattern = File.join(Core::Configuration.path, file_pattern) + Dir.glob(full_file_pattern) + end.flatten Core::Configuration.skip_files = skip_files end end # Load all rewriters. def load_rewriters Dir.glob(File.join(default_snippets_path, 'lib/**/*.rb')).each { |file| require file } @options[:custom_snippet_paths].each do |snippet_path| - if snippet_path =~ /^http/ + if /^http/.match?(snippet_path) uri = URI.parse snippet_path eval(uri.read) else require snippet_path end end - rescue + rescue StandardError FileUtils.rm_rf default_snippets_path retry end # List and print all available rewriters. @@ -134,11 +145,11 @@ if Core::Rewriter.availables.empty? puts 'There is no snippet under ~/.synvert, please run `synvert --sync` to fetch snippets.' else Core::Rewriter.availables.each do |group, rewriters| puts group - rewriters.each do |name, rewriter| + rewriters.each do |name, _rewriter| puts ' ' + name end end puts end @@ -160,15 +171,15 @@ # Query and print available rewriters. def query_available_rewriters Core::Rewriter.availables.each do |group, rewriters| if group.include? @options[:query] puts group - rewriters.each do |name, rewriter| + rewriters.each do |name, _rewriter| puts ' ' + name end elsif rewriters.keys.any? { |name| name.include? @options[:query] } puts group - rewriters.each do |name, rewriter| + rewriters.each do |name, _rewriter| puts ' ' + name if name.include?(@options[:query]) end end end puts