prettyrb 0.1.0 → 0.2.0

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
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: