thor-completion 0.0.3 → 0.0.4

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
2
  SHA256:
3
- metadata.gz: 691cb833f0cc214e326a1b186f6c884cab5abe6102dc4357f1eee7cd6f82ed1e
4
- data.tar.gz: fb8a29b2ceb7ae67e907d3e63e02717acfa6e44ab68a229ed85bc6c1f91db3a5
3
+ metadata.gz: 04d13f1834c0add34287b632d18e8e854457c28f42394e0bd44f5f70f6c132d8
4
+ data.tar.gz: a6095ce17d6b6f41c834d88ee078c7c5adadea8027cdeae51d34c51dc2aa3c25
5
5
  SHA512:
6
- metadata.gz: bd116f5e939b154e1dce77cd86bb02ccf07f832c5591d6ba782aa3b8b0aa9d0fdf459fd9e6eddb0ecf500ccaf0fb911579a40b7f435996a9b417d42bfb63f4f5
7
- data.tar.gz: 19120d0dba101995ae46132e91e45eea1c674ef47b27d4ca86c022c5bff6a6569b2c3dd7028db693840dcb74d8a6f5dbdc1f4260baff13cb88be33ebe42b026d
6
+ metadata.gz: e0d00a39ec7b612794d7d0271f102729073efc28c5b280c5556dc25188b1d6624197e429635a4dcd79c22434ad2ffd799c482e7acf37b658e423da3ee3ba6b70
7
+ data.tar.gz: 04d07083431b0c28fb4a4f000d6d8601c14a81789851d48768ad83b98358a03b066db0f38dbd3e940e822884a42a822bd5f9a3361637fbe94ab06a6b2450016e
data/CHANGELOG.md CHANGED
@@ -11,6 +11,12 @@ Prefix your message with one of the following:
11
11
  - [Security] in case of vulnerabilities.
12
12
  -->
13
13
 
14
+ ## v0.0.4
15
+
16
+ - [Fixed] Escape newlines in option descriptions for zsh completions.
17
+ - [Fixed] Properly escape single quotes in zsh completion strings.
18
+ - [Fixed] Properly normalize command names.
19
+
14
20
  ## v0.0.3
15
21
 
16
22
  - [Fixed] Map Thor's `numeric` type to schema's `float` type.
@@ -7,8 +7,8 @@ class Thor
7
7
 
8
8
  def self.call(name:, description:, version:, cli:)
9
9
  schema = {
10
- name:,
11
- description:,
10
+ name: normalize_name(name),
11
+ description: normalize_description(description),
12
12
  version:,
13
13
  commands: [],
14
14
  subcommands: [],
@@ -24,6 +24,25 @@ class Thor
24
24
  schema
25
25
  end
26
26
 
27
+ def self.dasherize(text) = text.to_s.tr("_", "-")
28
+
29
+ def self.normalize_description(description)
30
+ description.to_s.gsub(/(\r?\n)+/, " ")
31
+ end
32
+
33
+ def self.normalize_name(name)
34
+ case name
35
+ when "_run"
36
+ # Thor reserves the name `run` for its internal use.
37
+ # I've done ARGV manipulation to replace `run` with `_run` so that
38
+ # users can still use `run` as a command name. Let's assume this
39
+ # is the case and rename it back to `run`.
40
+ "run"
41
+ else
42
+ dasherize(name)
43
+ end
44
+ end
45
+
27
46
  def self.build_command(cli, parent)
28
47
  cli.options.each_value do |option|
29
48
  parent[:options] += build_option(option)
@@ -31,8 +50,8 @@ class Thor
31
50
 
32
51
  cli.all_commands.each_value do |command|
33
52
  cmd_schema = {
34
- name: command.name,
35
- description: command.description || "",
53
+ name: normalize_name(command.name),
54
+ description: normalize_description(command.description),
36
55
  options: command.options.each_value.flat_map { build_option(_1) }
37
56
  }
38
57
 
@@ -78,8 +97,8 @@ class Thor
78
97
  def self.build_subcommands(cli, parent)
79
98
  cli.all_commands.each_value do |command|
80
99
  subcmd_schema = {
81
- name: command.name,
82
- description: command.description || "",
100
+ name: normalize_name(command.name),
101
+ description: normalize_description(command.description),
83
102
  options: command.options.each_value.flat_map { build_option(_1) }
84
103
  }
85
104
 
@@ -111,7 +130,7 @@ class Thor
111
130
 
112
131
  values.map do |type, name|
113
132
  arg_hash = {
114
- name: name.to_s,
133
+ name: normalize_name(name),
115
134
  description: name.to_s.tr("_", " ").capitalize,
116
135
  required: type == :req,
117
136
  variadic: type == :rest
@@ -126,15 +145,14 @@ class Thor
126
145
  end
127
146
 
128
147
  def self.build_option(option)
129
- dasherize = proc { _1.to_s.tr("_", "-") }
130
- name = dasherize.call(option.name)
148
+ name = dasherize(option.name)
131
149
 
132
150
  [].tap do |list|
133
- short_opts = option.aliases.map { dasherize.call(_1.gsub(/^-+/, "")) }
151
+ short_opts = option.aliases.map { dasherize(_1.gsub(/^-+/, "")) }
134
152
  opt_hash = {
135
- name:,
153
+ name: normalize_name(name),
136
154
  type: normalize_type(option.type),
137
- description: option.description || "",
155
+ description: normalize_description(option.description),
138
156
  required: option.required,
139
157
  repeatable: option.repeatable || false,
140
158
  default: option.default,
@@ -2,6 +2,6 @@
2
2
 
3
3
  class Thor
4
4
  module Completion
5
- VERSION = "0.0.3"
5
+ VERSION = "0.0.4"
6
6
  end
7
7
  end
@@ -293,7 +293,7 @@ class Thor
293
293
 
294
294
  private def add_completion_spec(spec, completion)
295
295
  comp_spec = format_completion(completion)
296
- spec.sub(/\]$/, "]:value:#{comp_spec}'")
296
+ spec + "]:value:#{comp_spec}'"
297
297
  end
298
298
 
299
299
  private def format_completion(completion)
@@ -324,11 +324,11 @@ class Thor
324
324
  end
325
325
 
326
326
  private def escape_description(desc)
327
- desc.to_s.gsub(/[\[\]']/, '\\\\\&')
327
+ desc.to_s.gsub("\n", " ").gsub("'", "'\\\\''" ).gsub(/[\[\]]/, '\\\\\&')
328
328
  end
329
329
 
330
330
  private def escape_value(value)
331
- value.to_s.gsub(/[\s']/, '\\\\\&')
331
+ value.to_s.gsub("'", "'\\\\''" ).gsub(/[\s]/, '\\\\\&')
332
332
  end
333
333
 
334
334
  private def quote(str)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thor-completion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
@@ -165,10 +165,10 @@ metadata:
165
165
  rubygems_mfa_required: 'true'
166
166
  homepage_uri: https://github.com/fnando/thor-completion
167
167
  bug_tracker_uri: https://github.com/fnando/thor-completion/issues
168
- source_code_uri: https://github.com/fnando/thor-completion/tree/v0.0.3
169
- changelog_uri: https://github.com/fnando/thor-completion/tree/v0.0.3/CHANGELOG.md
170
- documentation_uri: https://github.com/fnando/thor-completion/tree/v0.0.3/README.md
171
- license_uri: https://github.com/fnando/thor-completion/tree/v0.0.3/LICENSE.md
168
+ source_code_uri: https://github.com/fnando/thor-completion/tree/v0.0.4
169
+ changelog_uri: https://github.com/fnando/thor-completion/tree/v0.0.4/CHANGELOG.md
170
+ documentation_uri: https://github.com/fnando/thor-completion/tree/v0.0.4/README.md
171
+ license_uri: https://github.com/fnando/thor-completion/tree/v0.0.4/LICENSE.md
172
172
  rdoc_options: []
173
173
  require_paths:
174
174
  - lib