thor-zsh_completion 0.1.0 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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