prettyrb 0.1.0 → 0.2.0

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: 6627cfb70e4dee209000644f4be5d57d6794c240fda5767b4b85d877c7cb2ed5
4
- data.tar.gz: ae15fc8e9b154777b0bdaad845047b8a8c6709ee0e8e7616bcabb77cf12f3f06
3
+ metadata.gz: ea94d815e156b5294c602a74176b57ad6d7f368dbba00e9f5435fec4921c5bb5
4
+ data.tar.gz: 5e58bd43571e3565dc88bf97fa5f36204f09edd68b7aa15190e1a58a2c9aa6b8
5
5
  SHA512:
6
- metadata.gz: 5e0543768d14fbb1fa9715a2c1657bbcc4d376939e342cd7badc14cddde7a0b8c8354d3ead3321b0a14ad5143fae8381c4eaf55e4d3c66785ac0eb8300ae75d7
7
- data.tar.gz: 7d186ac5763c031e88d4357d00cae4afe6ba002d1a82381bf8f00b8050b8c33ca9e3f9a4ca8dde1312488fba002196544ffea134bdb144cefca2a05350a55c13
6
+ metadata.gz: 002b78f6a4ad5b5f94c05ac6fd78e685bddc9901b8dc6d29e5170da65933b3159c04c76d5d38a2a4ec645b5936bcb44cc8fae273a39dafbef8a4fd7d1d691100
7
+ data.tar.gz: ba85b4cc39ace86efe1639e83e7e307ea2a7b22e0b8574fcc490e9ed848bb71dacab2040592729fe0b24c6962a9eab4031f5ccf96a78bcf35f30ebc5387642d6
@@ -0,0 +1,24 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ build:
11
+
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - uses: actions/checkout@v2
16
+ - name: Set up Ruby 2.6
17
+ uses: actions/setup-ruby@v1
18
+ with:
19
+ ruby-version: 2.6.x
20
+ - name: Build and test with Rake
21
+ run: |
22
+ gem install bundler
23
+ bundle install --jobs 4 --retry 3
24
+ bundle exec rake
data/Gemfile.lock CHANGED
@@ -2,25 +2,29 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  prettyrb (0.1.0)
5
- ruby_parser (~> 3.14)
5
+ parser (~> 2.7.0.5)
6
+ thor
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
11
+ ast (2.4.0)
12
+ byebug (11.1.1)
10
13
  minitest (5.14.0)
11
- rake (10.5.0)
12
- ruby_parser (3.14.2)
13
- sexp_processor (~> 4.9)
14
- sexp_processor (4.14.1)
14
+ parser (2.7.0.5)
15
+ ast (~> 2.4.0)
16
+ rake (12.3.3)
17
+ thor (1.0.1)
15
18
 
16
19
  PLATFORMS
17
20
  ruby
18
21
 
19
22
  DEPENDENCIES
20
23
  bundler (~> 1.17)
24
+ byebug (~> 11.1)
21
25
  minitest (~> 5.0)
22
26
  prettyrb!
23
- rake (~> 10.0)
27
+ rake (~> 12.3.3)
24
28
 
25
29
  BUNDLED WITH
26
30
  1.17.2
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Prettyrb
2
2
 
3
- Super experimental gem for auto-formatting Ruby files. Pronounced "pretty-erb"
3
+ Super experimental gem for auto-formatting Ruby files. AKA the code isn't great, but things are kind of working.
4
+
5
+ Pronounced "pretty-erb".
4
6
 
5
7
  ## Installation
6
8
 
data/exe/prettyrb ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "prettyrb"
4
+ require "prettyrb/cli"
5
+
6
+ Prettyrb::CLI.start
@@ -0,0 +1,11 @@
1
+ require "thor"
2
+
3
+ module Prettyrb
4
+ class CLI < Thor
5
+ desc "format FILE", "file to prettify"
6
+ def format(file)
7
+ content = File.read(file)
8
+ puts Prettyrb::Formatter.new(content).format
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,34 @@
1
+ module Prettyrb
2
+ MAX_LINE_LENGTH = 100
3
+
4
+ class Formatter
5
+ def self.for(node)
6
+ end
7
+
8
+ def initialize(code)
9
+ @code = code
10
+ end
11
+
12
+ def format
13
+ root_node, comments = Parser::CurrentRuby.parse_with_comments(@code)
14
+
15
+ visitor = Visitor.new
16
+ visitor.visit(root_node)
17
+
18
+ visitor.output
19
+ end
20
+
21
+ private
22
+
23
+ def format_type(node, indentation)
24
+ case node.node_type
25
+ when :if
26
+ IfFormatter.new(node, indentation).format
27
+ else
28
+ raise "can't handle #{node}"
29
+ end
30
+ end
31
+
32
+ attr_reader :code
33
+ end
34
+ end
@@ -1,3 +1,3 @@
1
1
  module Prettyrb
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,412 @@
1
+ module Prettyrb
2
+ class Visitor
3
+ MAX_LENGTH = 100
4
+
5
+ attr_reader :output
6
+
7
+ def initialize
8
+ @indent_level = 0
9
+ @output = ""
10
+
11
+ @newline = true
12
+ @multiline_conditional_level = 0
13
+ @__current_node = nil
14
+ end
15
+
16
+ def indents
17
+ ' ' * @indent_level
18
+ end
19
+
20
+ def dedent(&block)
21
+ old_indent_level = @indent_level
22
+
23
+ @indent_level = [0, @indent_level - 1].max
24
+ yield
25
+ @indent_level = old_indent_level
26
+ end
27
+
28
+ def indent(&block)
29
+ old_indent_level = @indent_level
30
+
31
+ @indent_level += 1
32
+ yield
33
+ @indent_level = old_indent_level
34
+ end
35
+
36
+ def multiline_conditional_level
37
+ @multiline_conditional_level
38
+ end
39
+
40
+ def in_multiline_conditional(&block)
41
+ old_multiline_condtiional_level = @multiline_conditional_level
42
+ @multiline_conditional_level += 1
43
+ @multiline_condtiional_level = 0
44
+ yield
45
+ @multiline_conditional_level = old_multiline_condtiional_level
46
+ end
47
+
48
+ def capture(&block)
49
+ old_newline = @newline
50
+ old_output = @output
51
+
52
+ @output = ""
53
+
54
+ yield
55
+
56
+ @output.tap do |output|
57
+ @output = old_output
58
+ @newline = old_newline
59
+ end
60
+ end
61
+
62
+ def newline
63
+ @output << "\n"
64
+ @newline = true
65
+ end
66
+
67
+ def write(input)
68
+ if @newline
69
+ @output << indents
70
+ end
71
+ @newline = false
72
+ @output << input
73
+ end
74
+
75
+ def visit(node)
76
+ @previous_node = @__current_node
77
+ @__current_node = node
78
+
79
+ case node.type
80
+ when :module
81
+ write "module "
82
+ visit node.children[0]
83
+ newline
84
+
85
+ indent do
86
+ visit node.children[1]
87
+ end
88
+
89
+ write "end"
90
+ newline
91
+ when :class
92
+ write "class "
93
+ visit node.children[0]
94
+ newline
95
+ # TODO handle children[1] which is inheritance
96
+
97
+ indent do
98
+ visit node.children[2]
99
+ end
100
+
101
+ newline unless @output.end_with?("\n")
102
+ write "end"
103
+ newline
104
+ when :const
105
+ write node.children[1].to_s
106
+ when :casgn
107
+ write node.children[1].to_s
108
+ write " = "
109
+ visit node.children[2]
110
+ when :block
111
+ visit node.children[0]
112
+ write " do"
113
+
114
+ if node.children[1].children.length > 0
115
+ write " |"
116
+ visit node.children[1]
117
+ write "|"
118
+ end
119
+
120
+ newline
121
+
122
+ indent do
123
+ visit node.children[2]
124
+ end
125
+
126
+ newline
127
+
128
+ write "end"
129
+ newline
130
+ when :send
131
+ if [:!=, :==, :+, :-, :*, :/, :<<].include?(node.children[1])
132
+ visit node.children[0]
133
+ write " "
134
+ write node.children[1].to_s
135
+ write " "
136
+ visit node.children[2]
137
+ elsif node.children[1] == :[]
138
+ visit node.children[0]
139
+ write "["
140
+ visit node.children[2]
141
+ write "]"
142
+ elsif node.children[1] == :!
143
+ write "!"
144
+ visit node.children[0]
145
+ elsif node.children[0] == nil
146
+ write node.children[1].to_s
147
+
148
+ # TODO possible > MAX via `capture`
149
+ arguments = node.children[2..-1]
150
+ if arguments.length > 0
151
+ write "("
152
+ arguments.each_with_index do |node, index|
153
+ visit node
154
+ write ", " unless index == arguments.length - 1
155
+ end
156
+ write ")"
157
+ end
158
+
159
+ newline if @previous_node.type == :class
160
+ else
161
+ visit node.children[0]
162
+ write "."
163
+ write node.children[1].to_s
164
+
165
+ # TODO possible > MAX via `capture`
166
+ arguments = node.children[2..-1]
167
+ if arguments.length > 0
168
+ write "("
169
+ arguments.each_with_index do |node, index|
170
+ visit node
171
+ write ", " unless index == arguments.length - 1
172
+ end
173
+ write ")"
174
+ end
175
+ end
176
+ when :if
177
+ write "if"
178
+ indent do
179
+ conditions = capture do
180
+ visit node.children[0]
181
+ end
182
+
183
+ if !conditions.start_with?("\n")
184
+ write(" ")
185
+ end
186
+ write conditions
187
+
188
+ newline
189
+
190
+ if node.children[1]
191
+ visit node.children[1]
192
+ newline
193
+ end
194
+ end
195
+
196
+ if node.children[2]
197
+ if node.children[2] == :if
198
+ write "elsif"
199
+ visit node.children[2]
200
+ else
201
+ write "else"
202
+ newline
203
+
204
+ indent do
205
+ visit node.children[2]
206
+ end
207
+ end
208
+ newline
209
+ end
210
+
211
+ write "end"
212
+ when :true
213
+ write "true"
214
+ when :false
215
+ write "false"
216
+ when :nil
217
+ write "nil"
218
+ when :int
219
+ write node.children[0].to_s
220
+ when :array
221
+ possible_output = capture do
222
+ write "["
223
+ node.children.each_with_index do |child, index|
224
+ visit(child)
225
+ write ", " unless index == node.children.length - 1
226
+ end
227
+ write "]"
228
+ end
229
+
230
+ if possible_output.length > MAX_LENGTH
231
+ write "["
232
+ newline
233
+
234
+ indent do
235
+ node.children.map do |child|
236
+ visit(child)
237
+ write ","
238
+ newline
239
+ end
240
+ end
241
+
242
+ write "]"
243
+ else
244
+ write possible_output.lstrip
245
+ end
246
+ when :str
247
+ write '"'
248
+ write node.children[0].gsub("\n", "\\n")
249
+ write '"'
250
+ when :dstr
251
+ write "\""
252
+ node.children.map do |child|
253
+ if child.type == :str
254
+ write child.children[0]
255
+ write child.children[0].gsub("\n", "\\n")
256
+ else
257
+ write '#{'
258
+ visit child
259
+ write '}'
260
+ end
261
+ end
262
+ write "\""
263
+ when :begin
264
+ if @previous_node.type == :or || @previous_node.type == :and
265
+ write "("
266
+ node.children.map { |child| visit child }
267
+ write ")"
268
+ else
269
+ node.children.each_with_index do |child, index|
270
+ visit child
271
+ newline unless index == node.children.length - 1
272
+ end
273
+ end
274
+ when :or, :and
275
+ possible_output = capture do
276
+ visit node.children[0]
277
+ if node.type == :or
278
+ write " || "
279
+ elsif node.type == :and
280
+ write " && "
281
+ end
282
+ visit node.children[1]
283
+ end
284
+
285
+
286
+ if @multiline_conditional_level > 0 # TODO track and check currently level
287
+ write_multiline_conditional(node)
288
+ elsif possible_output.length > MAX_LENGTH
289
+ in_multiline_conditional do
290
+ newline
291
+ write_multiline_conditional(node)
292
+ end
293
+
294
+ dedent do
295
+ newline
296
+ write "then"
297
+ end
298
+ else
299
+ write possible_output
300
+ end
301
+ when :def
302
+ write "def "
303
+ write node.children[0].to_s
304
+ if node.children[1].children.length > 0
305
+ write "("
306
+ visit node.children[1]
307
+ write ")"
308
+ end
309
+ newline
310
+
311
+ indent do
312
+ visit node.children[2]
313
+ end
314
+
315
+ newline
316
+ write "end"
317
+ when :args
318
+ node.children.each_with_index do |child, index|
319
+ visit child
320
+ write ", " unless index == node.children.length - 1
321
+ end
322
+ when :arg
323
+ write node.children[0].to_s
324
+ when :lvar
325
+ write node.children[0].to_s
326
+ when :self
327
+ "self"
328
+ when :sym
329
+ write ":"
330
+ write node.children[0].to_s
331
+ when :return
332
+ write "return"
333
+
334
+ possible_output = capture do
335
+ visit node.children[0]
336
+ end
337
+
338
+ if !possible_output.start_with?("\n")
339
+ write " "
340
+ end
341
+ when :case
342
+ write "case "
343
+ visit node.children[0]
344
+ newline
345
+ node.children[1..-1].each do |child|
346
+ if child.type != :when
347
+ write "else"
348
+ newline
349
+
350
+ indent do
351
+ visit child
352
+ end
353
+ else
354
+ visit child
355
+ newline
356
+ end
357
+ end
358
+ write "end"
359
+ when :when
360
+ write "when "
361
+ visit node.children[0]
362
+ newline
363
+ indent do
364
+ visit node.children[1]
365
+ end
366
+ when :or_asgn
367
+ visit node.children[0]
368
+ write " ||= " # TODO handle long lines here too
369
+ visit node.children[1]
370
+ when :ivasgn
371
+ write node.children[0].to_s
372
+ when :ivar
373
+ write node.children[0].to_s
374
+ when :blockarg
375
+ write node.children[0].to_s
376
+ when :yield
377
+ write "yield"
378
+ when :op_asgn
379
+ visit node.children[0]
380
+ write " "
381
+ write node.children[1].to_s
382
+ write " "
383
+ visit node.children[2]
384
+ when :lvasgn
385
+ write node.children[0].to_s
386
+ write " = "
387
+
388
+ visit node.children[1]
389
+ when :irange
390
+ visit node.children[0]
391
+ write ".."
392
+ visit node.children[1]
393
+ else
394
+ raise "unhandled node type `#{node.type}`\nnode: #{node}"
395
+ end
396
+ end
397
+
398
+ def write_multiline_conditional(node)
399
+ visit node.children[0]
400
+
401
+ if node.type == :or
402
+ write " ||"
403
+ elsif node.type == :and
404
+ write " &&"
405
+ end
406
+
407
+ newline
408
+
409
+ visit node.children[1]
410
+ end
411
+ end
412
+ end
data/lib/prettyrb.rb CHANGED
@@ -1,191 +1,11 @@
1
- require "ruby_parser"
1
+ require "parser/current"
2
2
  require "prettyrb/version"
3
3
 
4
- module Prettyrb
5
- class Error < StandardError; end
6
-
7
- class Formatter
8
- def self.for(sexp)
9
- case sexp.sexp_type
10
- when :if
11
- IfFormatter
12
- when :str
13
- StringFormatter
14
- when :or
15
- OrFormatter
16
- when :and
17
- AndFormatter
18
- when :lit
19
- LitFormatter
20
- when :call
21
- CallFormatter
22
- when :class
23
- ClassFormatter
24
- when :cdecl
25
- CdeclFormatter
26
- when :array
27
- ArrayFormatter
28
- else
29
- raise "can't handle #{sexp}"
30
- end
31
- end
32
-
33
- def initialize(code)
34
- @code = code
35
- end
36
-
37
- def format
38
- sexp_tree = RubyParser.new.parse(@code)
39
-
40
- self.class.for(sexp_tree).new(sexp_tree, 0, nil).format
41
- end
42
-
43
- private
44
-
45
- def format_type(sexp, indentation)
46
- case sexp.sexp_type
47
- when :if
48
- IfFormatter.new(sexp, indentation).format
49
- else
50
- raise "can't handle #{sexp}"
51
- end
52
- end
53
-
54
- attr_reader :code
55
- end
56
-
57
- class BaseFormatter
58
- attr_reader :sexp, :indentation, :parent
59
-
60
- def initialize(sexp, indentation, parent)
61
- @sexp = sexp
62
- @indentation = indentation
63
- @parent = parent
64
- end
65
-
66
- def type
67
- sexp.sexp_type
68
- end
69
-
70
- def indents
71
- ' ' * indentation
72
- end
73
- end
74
-
75
- class LitFormatter < BaseFormatter
76
- def format
77
- sexp[1]
78
- end
79
- end
80
-
81
- class StringFormatter < BaseFormatter
82
- def format
83
- if parent.type == :array
84
- "\"#{sexp[1]}\""
85
- else
86
- "#{indents}\"#{sexp[1]}\""
87
- end
88
- end
89
- end
90
-
91
- class IfFormatter < BaseFormatter
92
- def format
93
- start = "#{' ' * @indentation}if "
94
- condition = Formatter.for(sexp[1]).new(@sexp[1], @indentation + 2, self).format
95
- body = Formatter.for(sexp[2]).new(@sexp[2], @indentation + 2, self).format
96
- ending = "#{' ' * @indentation}end"
97
-
98
- "#{start}#{condition}\n#{body}\n#{ending}"
99
- end
100
- end
4
+ require "prettyrb/formatter"
5
+ require "prettyrb/visitor"
101
6
 
102
- class OrFormatter < BaseFormatter
103
- def format
104
- left = Formatter.for(sexp[1]).new(sexp[1], @indentation, self).format
105
- right = Formatter.for(sexp[2]).new(sexp[2], @indentation, self).format
7
+ require "prettyrb/cli"
106
8
 
107
- if needs_parens?
108
- "(#{left} || #{right})"
109
- else
110
- "#{left} || #{right}"
111
- end
112
- end
113
-
114
- private
115
-
116
- def needs_parens?
117
- parent&.type == :or || parent&.type == :and
118
- end
119
- end
120
-
121
- class AndFormatter < BaseFormatter
122
- def format
123
- left = Formatter.for(sexp[1]).new(sexp[1], @indentation, self).format
124
- right = Formatter.for(sexp[2]).new(sexp[2], @indentation, self).format
125
-
126
- if needs_parens?
127
- "(#{left} && #{right})"
128
- else
129
- "#{left} && #{right}"
130
- end
131
- end
132
-
133
- private
134
-
135
- def needs_parens?
136
- parent&.type == :or || parent&.type == :and
137
- end
138
- end
139
-
140
- class CallFormatter < BaseFormatter
141
- def format
142
- if infix?
143
- left = Formatter.for(sexp[1]).new(sexp[1], @indentation, self).format
144
- right = Formatter.for(sexp[3]).new(sexp[3], @indentation, self).format
145
-
146
- if needs_parens?
147
- "(#{left} #{sexp[2]} #{right})"
148
- else
149
- "#{left} #{sexp[2]} #{right}"
150
- end
151
- else
152
- content = Formatter.for(sexp[1]).new(sexp[1], @indentation, self).format
153
- "#{content}.#{sexp[2]}"
154
- end
155
- end
156
-
157
- private
158
-
159
- def infix?
160
- sexp.length == 4
161
- end
162
-
163
- def needs_parens?
164
- parent&.type == :or || parent&.type == :and
165
- end
166
- end
167
-
168
- class ClassFormatter < BaseFormatter
169
- def format
170
- content = Formatter.for(sexp[3]).new(sexp[3], indentation + 2, self).format
171
- "#{indents}class #{sexp[1]}\n#{content}\n#{indents}end" # TODO handle inheritance
172
- end
173
- end
174
-
175
- class CdeclFormatter < BaseFormatter
176
- def format
177
- content = Formatter.for(sexp[2]).new(sexp[2], indentation + 2, self).format
178
- "#{indents}#{sexp[1]} = #{content}"
179
- end
180
- end
181
-
182
- class ArrayFormatter < BaseFormatter
183
- def format
184
- elements = sexp[1..-1].map do |nested_sexp|
185
- Formatter.for(nested_sexp).new(nested_sexp, indentation + 2, self).format
186
- end
187
-
188
- "[#{elements.join(", ")}]"
189
- end
190
- end
9
+ module Prettyrb
10
+ class Error < StandardError; end
191
11
  end
data/prettyrb.gemspec CHANGED
@@ -32,9 +32,11 @@ Gem::Specification.new do |spec|
32
32
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
33
33
  spec.require_paths = ["lib"]
34
34
 
35
- spec.add_dependency "ruby_parser", "~> 3.14"
35
+ spec.add_dependency "parser", "~> 2.7.0.5"
36
+ spec.add_dependency "thor"
36
37
 
37
38
  spec.add_development_dependency "bundler", "~> 1.17"
38
- spec.add_development_dependency "rake", "~> 10.0"
39
+ spec.add_development_dependency "rake", "~> 12.3.3"
39
40
  spec.add_development_dependency "minitest", "~> 5.0"
41
+ spec.add_development_dependency "byebug", "~> 11.1"
40
42
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prettyrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Williams
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-28 00:00:00.000000000 Z
11
+ date: 2020-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: ruby_parser
14
+ name: parser
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.14'
19
+ version: 2.7.0.5
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.14'
26
+ version: 2.7.0.5
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +58,14 @@ dependencies:
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '10.0'
61
+ version: 12.3.3
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '10.0'
68
+ version: 12.3.3
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: minitest
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -66,13 +80,29 @@ dependencies:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: '5.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '11.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '11.1'
69
97
  description: Ruby source code formatter
70
98
  email:
71
99
  - blake@blakewilliams.me
72
- executables: []
100
+ executables:
101
+ - prettyrb
73
102
  extensions: []
74
103
  extra_rdoc_files: []
75
104
  files:
105
+ - ".github/workflows/ruby.yml"
76
106
  - ".gitignore"
77
107
  - ".travis.yml"
78
108
  - Gemfile
@@ -82,8 +112,12 @@ files:
82
112
  - Rakefile
83
113
  - bin/console
84
114
  - bin/setup
115
+ - exe/prettyrb
85
116
  - lib/prettyrb.rb
117
+ - lib/prettyrb/cli.rb
118
+ - lib/prettyrb/formatter.rb
86
119
  - lib/prettyrb/version.rb
120
+ - lib/prettyrb/visitor.rb
87
121
  - prettyrb.gemspec
88
122
  homepage: https://github.com/blakewilliams/prettyrb
89
123
  licenses: