thor-zsh_completion 0.1.0 → 0.1.6

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
- SHA1:
3
- metadata.gz: 2d2b258587a459e70ec955724fb631aafc73786f
4
- data.tar.gz: 24905d7c013630ac13c9bea4e6a29cfb3af9f2b3
2
+ SHA256:
3
+ metadata.gz: a14bd88f01d2f3389989eb8325cf4fefeb441bf73678a9e35665f27d4420a052
4
+ data.tar.gz: 632f050d06d11c50355e318867037ec31a1b53e151e379c21b85d66bf739dc33
5
5
  SHA512:
6
- metadata.gz: 1b30db3b9e7649a2f3253aa6f54d061d40db7b5381829ceae9b923d6435ff68653f3c7d582a677dd304e73c84e0cd5b091f7028f82b7507c79548f6cde369877
7
- data.tar.gz: b69f1767db423e6f957573fe30f866adf44d7e0bd17b70a9cb3b06f77cdc5136a23feea4749ab5db07d3e481fcb52bc97070449fc59ff99b387da29e7f0fd4ed
6
+ metadata.gz: 6cf2c8c5c8cf1f61851bec0570810ba00e628d2374b7c7a05e812dce088d94edc80933debe86c70f9a937eeac9d6621737208f54d4fb12b3fd150ddcf6400188
7
+ data.tar.gz: 9015c85103b6a35f150bc74bd139194b22a7102dd8b76d82c9227e92079e27f1e5cf50cd50ad9cf6d4a9ae209a9d3b7b51046a3c1265faaff1908ba4ff9ddbfe
@@ -0,0 +1,127 @@
1
+ AllCops:
2
+ Exclude:
3
+ - bin/*
4
+ - node_modules/**/*
5
+ NewCops: enable
6
+
7
+ Layout/CaseIndentation:
8
+ EnforcedStyle: end
9
+
10
+ Layout/EndAlignment:
11
+ EnforcedStyleAlignWith: variable
12
+
13
+ Layout/LineLength:
14
+ Enabled: false
15
+
16
+ Layout/EmptyLinesAroundAccessModifier:
17
+ EnforcedStyle: only_before
18
+
19
+ Layout/SpaceInLambdaLiteral:
20
+ EnforcedStyle: require_space
21
+
22
+ Layout/SpaceInsideBlockBraces:
23
+ SpaceBeforeBlockParameters: false
24
+
25
+ Layout/SpaceInsideHashLiteralBraces:
26
+ EnforcedStyle: no_space
27
+
28
+ Metrics/AbcSize:
29
+ Enabled: false
30
+
31
+ Metrics/BlockLength:
32
+ Enabled: false
33
+
34
+ Metrics/ClassLength:
35
+ Enabled: false
36
+
37
+ Metrics/CyclomaticComplexity:
38
+ Enabled: false
39
+
40
+ Metrics/MethodLength:
41
+ Enabled: false
42
+
43
+ Metrics/ModuleLength:
44
+ Enabled: false
45
+
46
+ Metrics/PerceivedComplexity:
47
+ Enabled: false
48
+
49
+ Naming/HeredocDelimiterNaming:
50
+ Enabled: false
51
+
52
+ Naming/MethodParameterName:
53
+ Enabled: false
54
+
55
+ Naming/PredicateName:
56
+ Enabled: false
57
+
58
+ Style/Alias:
59
+ EnforcedStyle: prefer_alias_method
60
+
61
+ Style/AsciiComments:
62
+ Enabled: false
63
+
64
+ Style/BlockDelimiters:
65
+ Enabled: false
66
+
67
+ Style/Documentation:
68
+ Enabled: false
69
+
70
+ Style/EmptyCaseCondition:
71
+ Enabled: false
72
+
73
+ Style/EmptyMethod:
74
+ EnforcedStyle: expanded
75
+
76
+ Style/FrozenStringLiteralComment:
77
+ Enabled: false
78
+
79
+ Style/HashSyntax:
80
+ Exclude:
81
+ - Rakefile
82
+ - "**/*.rake"
83
+
84
+ Style/Lambda:
85
+ EnforcedStyle: literal
86
+
87
+ Style/IfUnlessModifier:
88
+ Enabled: false
89
+
90
+ Style/MultilineBlockChain:
91
+ Enabled: false
92
+
93
+ Style/NumericLiterals:
94
+ Enabled: false
95
+
96
+ Style/NumericPredicate:
97
+ Enabled: false
98
+
99
+ Style/PercentLiteralDelimiters:
100
+ PreferredDelimiters:
101
+ '%i': '()'
102
+ '%w': '()'
103
+ '%r': '()'
104
+
105
+ Style/SpecialGlobalVars:
106
+ Enabled: false
107
+
108
+ Style/StringLiterals:
109
+ EnforcedStyle: double_quotes
110
+
111
+ Style/StringLiteralsInInterpolation:
112
+ EnforcedStyle: double_quotes
113
+
114
+ Style/SymbolArray:
115
+ Enabled: false
116
+
117
+ Style/TrailingCommaInArguments:
118
+ EnforcedStyleForMultiline: consistent_comma
119
+
120
+ Style/TrailingCommaInArrayLiteral:
121
+ EnforcedStyleForMultiline: consistent_comma
122
+
123
+ Style/TrailingCommaInHashLiteral:
124
+ EnforcedStyleForMultiline: consistent_comma
125
+
126
+ Style/ZeroLengthPredicate:
127
+ Enabled: false
@@ -0,0 +1,34 @@
1
+ ### 0.1.6
2
+
3
+ Misc
4
+
5
+ - fix the generation of zsh completion scripts to prevent [ShellCheck](https://www.shellcheck.net/) warnings (@joehorsnell)†verz
6
+
7
+ ### 0.1.5
8
+
9
+ Bugfixes
10
+
11
+ - remove unnecessary `local state` in generated script. (reported by @aoyama-val)
12
+
13
+ ### 0.1.4
14
+
15
+ Bugfixes
16
+
17
+ - support `Thor.map`. (by @Zhomart)
18
+
19
+ ### 0.1.3
20
+
21
+ Bugfixes
22
+
23
+ - fix invalid script generation bug for option description. (by @tbpgr)
24
+ - fix invalid script generation bug for not aliased option.
25
+
26
+ ### 0.1.1
27
+
28
+ Features
29
+
30
+ - support ruby 1.9.3.
31
+
32
+ ### 0.1.0
33
+
34
+ - initial release.
data/Gemfile CHANGED
@@ -1,4 +1,9 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in thor-zsh_completion.gemspec
4
4
  gemspec
5
+
6
+ gem "bundler", "~> 2.1"
7
+ gem "rake", "~> 13.0"
8
+ gem "rspec", "~> 3.9"
9
+ gem "rubocop", "~> 0.86"
data/README.md CHANGED
@@ -69,6 +69,11 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
69
69
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
70
70
 
71
71
 
72
+ ### Testing completion script
73
+
74
+ source spec/thor/zsh_completion/generator_spec.zsh
75
+ generator_spec [TAB]
76
+
72
77
  ## Contributing
73
78
 
74
79
  Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/thor-zsh_completion. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rspec' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rspec-core", "rspec")
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rubocop' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rubocop", "rubocop")
@@ -1,7 +1,7 @@
1
1
  class Thor
2
2
  module ZshCompletion
3
3
  class Generator
4
- SUBCOMMAND_FUNCTION_TEMPLATE = ERB.new(File.read("#{__dir__}/template/subcommand_function.erb"), nil, "-")
4
+ SUBCOMMAND_FUNCTION_TEMPLATE = ERB.new(File.read("#{File.dirname(__FILE__)}/template/subcommand_function.erb"), nil, "-")
5
5
  attr_reader :thor, :name
6
6
 
7
7
  def initialize(thor, name)
@@ -47,15 +47,17 @@ class Thor
47
47
  name: "__#{name}",
48
48
  description: nil,
49
49
  options: [],
50
- subcommands: subcommand_metadata(thor)
50
+ subcommands: subcommand_metadata(thor),
51
51
  }
52
52
 
53
- erb = File.read("#{__dir__}/template/main.erb")
53
+ erb = File.read("#{File.dirname(__FILE__)}/template/main.erb")
54
54
  ERB.new(erb, nil, "-").result(binding)
55
55
  end
56
56
 
57
57
  private
58
- def render_subcommand_function(subcommand, prefix: [])
58
+ def render_subcommand_function(subcommand, options = {})
59
+ prefix = options[:prefix] || []
60
+
59
61
  source = []
60
62
 
61
63
  prefix = (prefix + [subcommand[:name]])
@@ -63,33 +65,63 @@ class Thor
63
65
  depth = prefix.size + 1
64
66
 
65
67
  source << SUBCOMMAND_FUNCTION_TEMPLATE.result(binding)
66
- subcommand[:subcommands].each do |subcommand|
67
- source << render_subcommand_function(subcommand, prefix: prefix)
68
+
69
+ subcommand[:subcommands].each do |nested|
70
+ source << render_subcommand_function(nested, prefix: prefix)
68
71
  end
69
72
  source.join("\n").strip + "\n"
70
73
  end
71
74
 
72
75
  def subcommand_metadata(thor)
73
- thor.tasks.map do |(name, command)|
74
- if subcommand_class = thor.subcommand_classes[name]
75
- subcommands = subcommand_metadata(subcommand_class)
76
- else
77
- subcommands = []
78
- end
79
- { name: command.name.gsub("_", "-"),
80
- usage: command.usage,
81
- description: command.description,
82
- options: thor.class_options.map{|_, o| option_metadata(o) } +
83
- command.options.map{|(_, o)| option_metadata(o) },
84
- subcommands: subcommands
85
- }
76
+ result = []
77
+ thor.tasks.each do |(name, command)|
78
+ aliases = thor.map.select {|_, original_name|
79
+ name == original_name
80
+ }.map(&:first)
81
+ result << generate_command_information(thor, name, command, aliases)
82
+ end
83
+ result
84
+ end
85
+
86
+ def generate_command_information(thor, name, command, aliases)
87
+ subcommands = if (subcommand_class = thor.subcommand_classes[name])
88
+ subcommand_metadata(subcommand_class)
89
+ else
90
+ []
86
91
  end
92
+ {name: hyphenate(name),
93
+ aliases: aliases.map {|a| hyphenate(a) },
94
+ usage: command.usage,
95
+ description: command.description,
96
+ options: thor.class_options.map {|_, o| option_metadata(o) } +
97
+ command.options.map {|(_, o)| option_metadata(o) },
98
+ subcommands: subcommands,}
87
99
  end
88
100
 
89
101
  def option_metadata(option)
90
- { names: ["--#{option.name}"] + option.aliases.map{|a| "-#{a}" },
91
- description: option.description,
92
- }
102
+ {names: ["--#{option.name}"] + option.aliases.map {|a| "-#{a}" },
103
+ description: option.description,}
104
+ end
105
+
106
+ def quote(s)
107
+ escaped = s.gsub(/'/, "''")
108
+ %('#{escaped}')
109
+ end
110
+
111
+ def bracket(s)
112
+ %([#{s}])
113
+ end
114
+
115
+ def escape_option_names(names)
116
+ if names.size == 1
117
+ names.first
118
+ else
119
+ "{" + names.join(",") + "}"
120
+ end
121
+ end
122
+
123
+ def hyphenate(s)
124
+ s.gsub("_", "-")
93
125
  end
94
126
  end
95
127
  end
@@ -1,7 +1,5 @@
1
1
  #compdef <%= name %>
2
2
 
3
- local state
4
-
5
3
  _<%= name %>() {
6
4
  __<%= name %>
7
5
  }
@@ -6,7 +6,7 @@
6
6
  $DEPTH)
7
7
  _arguments \
8
8
  <%- subcommand[:options].each do |option| -%>
9
- {<%= option[:names].join(",") %>}<%= option[:description].gsub(/'/, "''") if option[:description] %> \
9
+ <%= escape_option_names(option[:names]) %><%= quote(bracket(option[:description])) if option[:description] %> \
10
10
  <%- end -%>
11
11
  '*: :->subcommands'
12
12
 
@@ -15,18 +15,26 @@
15
15
  _values \
16
16
  'subcommand' \
17
17
  <%- subcommand[:subcommands].each do |subcommand| -%>
18
- '<%= subcommand[:name] %>[<%= subcommand[:description].gsub(/'/, "''") %>]' \
18
+ <%= quote(subcommand[:name] + bracket(subcommand[:description])) %> \
19
+ <%- subcommand[:aliases].each do |_alias| -%>
20
+ <%= quote(_alias + bracket(subcommand[:description])) %> \
21
+ <%- end -%>
19
22
  <%- end -%>
20
23
  ;
21
24
  ;;
22
25
  esac
23
26
  ;;
24
27
  *)
25
- case $words[$DEPTH] in
28
+ case ${words[$DEPTH]} in
26
29
  <%- subcommand[:subcommands].each do |subcommand| -%>
27
30
  <%= subcommand[:name] %>)
28
31
  <%= function_name %>_<%= subcommand[:name] %>
29
32
  ;;
33
+ <%- subcommand[:aliases].each do |_alias| -%>
34
+ <%= _alias %>)
35
+ <%= function_name %>_<%= subcommand[:name] %>
36
+ ;;
37
+ <%- end -%>
30
38
  <%- end -%>
31
39
  *)
32
40
  # if does not match any subcommand
@@ -41,7 +49,7 @@
41
49
  <%= function_name %>() {
42
50
  _arguments \
43
51
  <%- subcommand[:options].each do |option| -%>
44
- {<%= option[:names].join(",") %>}<%= option[:description].gsub(/'/, "''") if option[:description] %> \
52
+ <%= escape_option_names(option[:names]) %><%= quote(bracket(option[:description])) if option[:description] %> \
45
53
  <%- end -%>
46
54
  '*: :->rest'
47
55
 
@@ -1,5 +1,5 @@
1
1
  class Thor
2
2
  module ZshCompletion
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.6".freeze
4
4
  end
5
5
  end
@@ -1,7 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path("lib", __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'thor/zsh_completion/version'
3
+ require "thor/zsh_completion/version"
5
4
 
6
5
  Gem::Specification.new do |spec|
7
6
  spec.name = "thor-zsh_completion"
@@ -9,17 +8,15 @@ Gem::Specification.new do |spec|
9
8
  spec.authors = ["labocho"]
10
9
  spec.email = ["labocho@penguinlab.jp"]
11
10
 
12
- spec.summary = %q{Create zsh completion script for Thor subclass}
13
- spec.description = %q{Create zsh completion script for Thor subclass}
11
+ spec.summary = "Create zsh completion script for Thor subclass"
12
+ spec.description = "Create zsh completion script for Thor subclass"
14
13
  spec.homepage = "https://github.com/labocho/thor-zsh_completion"
15
14
  spec.license = "MIT"
16
15
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^(test|spec|features)/}) }
18
17
  spec.bindir = "exe"
19
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
+ spec.executables = spec.files.grep(%r(^exe/)) {|f| File.basename(f) }
20
19
  spec.require_paths = ["lib"]
21
20
 
22
- spec.add_development_dependency "bundler", "~> 1.10"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rspec"
21
+ spec.add_dependency "thor", "~> 0"
25
22
  end
metadata CHANGED
@@ -1,55 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thor-zsh_completion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - labocho
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-17 00:00:00.000000000 Z
11
+ date: 2020-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: thor
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.10'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.10'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '10.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '10.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
18
  - !ruby/object:Gem::Version
47
19
  version: '0'
48
- type: :development
20
+ type: :runtime
49
21
  prerelease: false
50
22
  version_requirements: !ruby/object:Gem::Requirement
51
23
  requirements:
52
- - - ">="
24
+ - - "~>"
53
25
  - !ruby/object:Gem::Version
54
26
  version: '0'
55
27
  description: Create zsh completion script for Thor subclass
@@ -61,13 +33,17 @@ extra_rdoc_files: []
61
33
  files:
62
34
  - ".gitignore"
63
35
  - ".rspec"
36
+ - ".rubocop.yml"
64
37
  - ".travis.yml"
38
+ - CHANGELOG.md
65
39
  - CODE_OF_CONDUCT.md
66
40
  - Gemfile
67
41
  - LICENSE.txt
68
42
  - README.md
69
43
  - Rakefile
70
44
  - bin/console
45
+ - bin/rspec
46
+ - bin/rubocop
71
47
  - bin/setup
72
48
  - lib/thor/zsh_completion.rb
73
49
  - lib/thor/zsh_completion/command.rb
@@ -95,8 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
71
  - !ruby/object:Gem::Version
96
72
  version: '0'
97
73
  requirements: []
98
- rubyforge_project:
99
- rubygems_version: 2.4.5.1
74
+ rubygems_version: 3.1.2
100
75
  signing_key:
101
76
  specification_version: 4
102
77
  summary: Create zsh completion script for Thor subclass