Skip to content

Commit 8548e54

Browse files
formatter
1 parent 03a27ba commit 8548e54

7 files changed

Lines changed: 753 additions & 5 deletions

File tree

applies

Whitespace-only changes.

bin/code

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ require "dorian/arguments"
66

77
parsed =
88
Dorian::Arguments.parse(
9+
format: {
10+
type: :boolean,
11+
alias: :f
12+
},
913
input: {
1014
type: :string,
1115
alias: :i
@@ -43,14 +47,20 @@ require "ruby-prof" if profile
4347

4448
RubyProf.start if profile
4549

46-
input = 'loop { print("> ") puts(evaluate(read)) }' if input.blank?
50+
input = STDIN.each_line.to_a.join if input.empty?
4751

4852
if parsed.options.parse
4953
begin
5054
pp Code::Parser.parse(input).to_raw
51-
rescue Exception => e
55+
rescue StandardError => e
5256
warn e.message
5357
end
58+
elsif parsed.options.format
59+
begin
60+
print(Code.format(input, timeout: parsed.options.timeout))
61+
rescue Code::Error => e
62+
warn "#{e.class}: #{e.message}"
63+
end
5464
else
5565
begin
5666
print(

lib/code.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@ def self.evaluate(...)
3232
new(...).evaluate
3333
end
3434

35+
def self.format(source_or_tree, timeout: DEFAULT_TIMEOUT)
36+
parse_tree =
37+
if source_or_tree.is_a?(::String)
38+
parse(source_or_tree, timeout: timeout)
39+
else
40+
source_or_tree
41+
end
42+
43+
Format.format(parse_tree)
44+
end
45+
3546
def evaluate
3647
Timeout.timeout(timeout) do
3748
Node::Code.new(Code.parse(source)).evaluate(

0 commit comments

Comments
 (0)