tabry 0.2.2 → 0.2.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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/bin/tabry-fish +9 -0
  3. data/bin/tabry-generate-fish-complete +31 -0
  4. data/lib/tabry/cli/all_in_one.rb +27 -6
  5. data/lib/tabry/config_builder/arg_or_flag_builder.rb +5 -0
  6. data/lib/tabry/config_builder/top_level_builder.rb +3 -0
  7. data/lib/tabry/machine.rb +1 -1
  8. data/lib/tabry/models/const_option.rb +1 -1
  9. data/lib/tabry/models/flags_list.rb +6 -2
  10. data/lib/tabry/models/include_option.rb +2 -2
  11. data/lib/tabry/models/method_option.rb +14 -0
  12. data/lib/tabry/models/option.rb +5 -5
  13. data/lib/tabry/models/options_list.rb +2 -2
  14. data/lib/tabry/models/shell_option.rb +1 -1
  15. data/lib/tabry/models/subs_list.rb +13 -2
  16. data/lib/tabry/options_finder.rb +13 -8
  17. data/lib/tabry/replty/base.rb +23 -0
  18. data/lib/tabry/replty/builder.rb +100 -0
  19. data/lib/tabry/runner.rb +2 -2
  20. data/lib/tabry/shell_tokenizer.rb +50 -0
  21. data/lib/tabry/shells/bash/wrapper.rb +2 -2
  22. data/lib/tabry/shells/fish/wrapper.rb +51 -0
  23. data/lib/tabry/shells/fish.rb +82 -0
  24. data/lib/tabry/version.rb +3 -0
  25. data/sh/fish/README.md +2 -1
  26. data/sh/fish/tabry_fish.fish +17 -11
  27. data/spec/fixtures/config_builder/underscoresdashes.yml +1 -1
  28. data/spec/fixtures/vehicles-expectations.json +351 -0
  29. data/spec/tabry/cli/all_in_one_spec.rb +12 -0
  30. data/spec/tabry/machine_spec.rb +5 -82
  31. data/spec/tabry/shell_tokenizer_spec.rb +34 -0
  32. data/tabry.gemspec +2 -4
  33. data/treesitter/corpus/opts.txt +2 -0
  34. data/treesitter/grammar.js +7 -0
  35. data/treesitter/src/grammar.json +21 -0
  36. data/treesitter/src/node-types.json +23 -0
  37. data/treesitter/src/parser.c +959 -893
  38. data/treesitter/tabry-compile.js +6 -0
  39. metadata +16 -5
  40. data/lib/tabry/shell_splitter.rb +0 -34
  41. data/spec/tabry/shell_splitter_spec.rb +0 -22
@@ -317,6 +317,12 @@ const handlers = {
317
317
  createOpts(state, {type: 'shell', value: textFromString(value)});
318
318
  },
319
319
 
320
+ handleOptsMethodStatement(state, node) {
321
+ checkContext(state, node, ['arg', 'flag', 'option_include']);
322
+ const {value} = pick(node, {value: 'string'});
323
+ createOpts(state, {type: 'method', value: textFromString(value)});
324
+ },
325
+
320
326
  handleOptsFileStatement(state, node) {
321
327
  checkContext(state, node, ['arg', 'flag', 'option_include']);
322
328
  createOpts(state, {type: 'file'});
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tabry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Battaglia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-15 00:00:00.000000000 Z
11
+ date: 2023-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry-byebug
@@ -84,7 +84,9 @@ description:
84
84
  email: battaglia.evan@gmail.com
85
85
  executables:
86
86
  - tabry-bash
87
+ - tabry-fish
87
88
  - tabry-generate-bash-complete
89
+ - tabry-generate-fish-complete
88
90
  - tabry-help
89
91
  - tabry-test-options
90
92
  - tabry-test-parse
@@ -92,7 +94,9 @@ extensions: []
92
94
  extra_rdoc_files: []
93
95
  files:
94
96
  - bin/tabry-bash
97
+ - bin/tabry-fish
95
98
  - bin/tabry-generate-bash-complete
99
+ - bin/tabry-generate-fish-complete
96
100
  - bin/tabry-help
97
101
  - bin/tabry-test-options
98
102
  - bin/tabry-test-parse
@@ -132,6 +136,7 @@ files:
132
136
  - lib/tabry/models/include_flag.rb
133
137
  - lib/tabry/models/include_option.rb
134
138
  - lib/tabry/models/include_sub.rb
139
+ - lib/tabry/models/method_option.rb
135
140
  - lib/tabry/models/option.rb
136
141
  - lib/tabry/models/option_base.rb
137
142
  - lib/tabry/models/option_includes.rb
@@ -140,14 +145,19 @@ files:
140
145
  - lib/tabry/models/sub.rb
141
146
  - lib/tabry/models/subs_list.rb
142
147
  - lib/tabry/options_finder.rb
148
+ - lib/tabry/replty/base.rb
149
+ - lib/tabry/replty/builder.rb
143
150
  - lib/tabry/result.rb
144
151
  - lib/tabry/runner.rb
145
- - lib/tabry/shell_splitter.rb
152
+ - lib/tabry/shell_tokenizer.rb
146
153
  - lib/tabry/shells/bash.rb
147
154
  - lib/tabry/shells/bash/wrapper.rb
155
+ - lib/tabry/shells/fish.rb
156
+ - lib/tabry/shells/fish/wrapper.rb
148
157
  - lib/tabry/state.rb
149
158
  - lib/tabry/usage_generator.rb
150
159
  - lib/tabry/util.rb
160
+ - lib/tabry/version.rb
151
161
  - sh/bash/README.md
152
162
  - sh/bash/tabry_bash.sh
153
163
  - sh/bash/tabry_bash_core.sh
@@ -173,6 +183,7 @@ files:
173
183
  - spec/fixtures/config_builder/underscoresdashes.rb
174
184
  - spec/fixtures/config_builder/underscoresdashes.tabry
175
185
  - spec/fixtures/config_builder/underscoresdashes.yml
186
+ - spec/fixtures/vehicles-expectations.json
176
187
  - spec/fixtures/vehicles.tabry
177
188
  - spec/fixtures/vehicles.yaml
178
189
  - spec/spec_helper.rb
@@ -194,7 +205,7 @@ files:
194
205
  - spec/tabry/options_finder_spec.rb
195
206
  - spec/tabry/result_spec.rb
196
207
  - spec/tabry/runner_spec.rb
197
- - spec/tabry/shell_splitter_spec.rb
208
+ - spec/tabry/shell_tokenizer_spec.rb
198
209
  - spec/tabry/shells/bash_spec.rb
199
210
  - spec/tabry/usage_generator_spec.rb
200
211
  - tabry.gemspec
@@ -253,7 +264,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
253
264
  - !ruby/object:Gem::Version
254
265
  version: '0'
255
266
  requirements: []
256
- rubygems_version: 3.2.22
267
+ rubygems_version: 3.3.26
257
268
  signing_key:
258
269
  specification_version: 4
259
270
  summary: Tab completion and CLIs extraordinaire
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Use Shellwords.split() to split a command line + comp point (index of the
4
- # cursor in the command line) into the args up to the current token plus
5
- # current token
6
- module Tabry
7
- module ShellSplitter
8
- module_function
9
-
10
- COMP_POINT_SENTINEL = "\uFFFF"
11
-
12
- def split(cmd_line, comp_point)
13
- # Returns [cmd_name, args, last_arg]
14
- # cmd_name is the basename of the command run
15
- #
16
- # TODO: in weird scenarios this acts weird: namely, special shell operators like <(ls), $$((1 + 1))
17
- # Also it crashed on unbalanced quotes, like: foo "bar<TAB>
18
- # however, this will handle the common scenarios of escaping with quotes, single quotes, and backslashes
19
- # Split up args and put the argument that comp_point is in in the `last_arg` variable.
20
- # Just cutting off everything after comp_point might have worked, although
21
- # maybe we wanted the whole arg? Not sure this is the best.
22
- cmd_line = cmd_line.dup
23
- cmd_line[comp_point.to_i...comp_point.to_i] = COMP_POINT_SENTINEL
24
- cmd, *all_args = Shellwords.split(cmd_line)
25
- last_arg_index = all_args.index { |arg| arg.include?(COMP_POINT_SENTINEL) }
26
- args = all_args[0..last_arg_index]
27
- last_arg = args.pop.gsub! COMP_POINT_SENTINEL, ""
28
-
29
- cmd_name = cmd.gsub(%r{.*/}, "")
30
-
31
- [cmd_name, args, last_arg]
32
- end
33
- end
34
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../../lib/tabry/shell_splitter"
4
-
5
- describe Tabry::ShellSplitter do
6
- describe ".split" do
7
- it "returns the command basename, argument, and last argument" do
8
- str = "foo/bar abc def ghi"
9
- expect(described_class.split(str, 13)).to eq(["bar", ["abc"], "def"])
10
- end
11
-
12
- it "handles quotes and backslashes like a shell" do
13
- expect(described_class.split('"/foo bar/waz" a\'b \'c\\ d "ef g" "hi jk" lmn', 38)).to eq(
14
- [
15
- "waz",
16
- ["ab c d", "ef g"],
17
- "hi jk"
18
- ]
19
- )
20
- end
21
- end
22
- end