ruby-beautify 0.92.2 → 0.93.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 +7 -0
- data/.gitignore +1 -0
- data/README.md +44 -13
- data/bin/rbeautify +164 -12
- data/lib/ruby-beautify.rb +0 -6
- data/lib/ruby-beautify/version.rb +1 -1
- data/ruby-beautify.gemspec +1 -1
- metadata +11 -40
- data/lib/beautifier.rb +0 -168
- data/lib/ruby-beautify/block_end.rb +0 -23
- data/lib/ruby-beautify/block_matcher.rb +0 -153
- data/lib/ruby-beautify/block_start.rb +0 -119
- data/lib/ruby-beautify/config/ruby.rb +0 -131
- data/lib/ruby-beautify/language.rb +0 -37
- data/lib/ruby-beautify/line.rb +0 -53
- data/spec/fixtures/ruby.yml +0 -408
- data/spec/rbeautify/block_matcher_spec.rb +0 -89
- data/spec/rbeautify/block_start_spec.rb +0 -51
- data/spec/rbeautify/config/ruby_spec.rb +0 -183
- data/spec/rbeautify/line_spec.rb +0 -73
- data/spec/rbeautify_spec.rb +0 -1
- data/spec/spec_helper.rb +0 -124
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 771591fa2eb43b8a8244394dff9afc39082923bc
|
4
|
+
data.tar.gz: 276d9e48285d905dabec7943f926432c23f573d7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a29b4dcd745558242d2e14eb22989c02e5731c95aeb28e857a3aaa64fdcc2fca80e94bcfbcfedacc993fd90104c85bc2b19a0151782ef1849c663da104e38db7
|
7
|
+
data.tar.gz: 89cdc67493a723ab777bba6306e07750531b7c8e199461a929ff3ef15135d269dea40789b8725b7d94b9d00b2b9894ecd43ac31a6676dc7c07505eed2e9278ac
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -2,38 +2,69 @@
|
|
2
2
|
|
3
3
|
This gem provides a cli binary named 'rbeautify' that will pretty up ruby code.
|
4
4
|
|
5
|
+
|
5
6
|
## Installation
|
6
7
|
|
7
|
-
|
8
|
+
% gem install ruby-beautify
|
8
9
|
|
9
10
|
## Usage
|
10
11
|
|
11
12
|
To Pretty up a file:
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
It can take mulitple filenames:
|
16
|
-
|
17
|
-
$ rbeautify a b c
|
14
|
+
% rbeautify filename
|
18
15
|
|
19
16
|
Without a filename it reads from STDIN, suitable for piping:
|
20
17
|
|
21
|
-
|
18
|
+
% curl 'http://example.org/ugly-file.rb' | rbeautify
|
22
19
|
|
23
20
|
It has help:
|
24
21
|
|
25
|
-
|
22
|
+
% rbeautify --help
|
23
|
+
|
24
|
+
You can pick your indent character:
|
25
|
+
|
26
|
+
% rbeautify --(t)abs
|
27
|
+
|
28
|
+
% rbeautify --(s)paces
|
29
|
+
|
30
|
+
You can also pick the count of characters:
|
31
|
+
|
32
|
+
% rbeautify --indent_(c)ount 1
|
33
|
+
|
34
|
+
Examples:
|
35
|
+
|
36
|
+
% rbeautify -c 2 -s filename
|
37
|
+
|
38
|
+
% rbeautify filename
|
39
|
+
|
40
|
+
% rbeautify -t -c 2 filename
|
41
|
+
|
42
|
+
## Bugs
|
43
|
+
|
44
|
+
I don't have every ruby style tested against, so I expect some gaps. Feel free to submit issues (please include an example) and I'll figure out how to 'beautify' it.
|
45
|
+
|
46
|
+
Please feel free to open issues, I am actively working on this project again, thanks entirely to the ripper gem.
|
47
|
+
|
48
|
+
## Todo
|
49
|
+
|
50
|
+
* Add vim style comment hinting.
|
51
|
+
* Add overwrite in place to files.
|
52
|
+
* Add 'best guest' for files that fail syntax checking.
|
53
|
+
* Add syntax checking to files rendered via STDIN.
|
54
|
+
|
55
|
+
Longer term I'd like to do some more to assignment, line wrapping, and spacing in/around keywords.
|
26
56
|
|
27
57
|
## Contributing
|
28
58
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
5. Create new Pull Request
|
59
|
+
* fork it.
|
60
|
+
* create it.
|
61
|
+
* push it.
|
62
|
+
* pull it.
|
34
63
|
|
35
64
|
# History
|
36
65
|
|
37
66
|
The original analyzer is available at: http://www.arachnoid.com/ruby/rubyBeautifier.html.
|
38
67
|
|
39
68
|
My work is based off of this sublime-text2 plugin: https://github.com/CraigWilliams/BeautifyRuby but cleaned up and made suitable for use directly in a shell.
|
69
|
+
|
70
|
+
I've recently re-written this to use the stdlib `ripper` gem to do the lexical analyzing. Consequently I've dropped all of the old legacy code that did this.
|
data/bin/rbeautify
CHANGED
@@ -1,28 +1,180 @@
|
|
1
|
-
#!/usr/bin/ruby
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
require 'ruby-beautify'
|
3
|
+
require 'ripper'
|
3
4
|
require 'optparse'
|
4
5
|
|
5
|
-
include RBeautify
|
6
|
-
|
7
6
|
Options = OptionParser.new do |opts|
|
8
7
|
opts.on("-V", "--version", "Print version") { |version| puts RBeautify::VERSION;exit 0}
|
8
|
+
opts.on("-c", "--indent_count [COUNT]", Integer, "Count of characters to use for indenting. (default: 1)") { |count| @indent_count = count}
|
9
|
+
opts.on("-t", "--tabs", "Use tabs for the indent character (default)") { @indent_token = "\t" }
|
10
|
+
opts.on("-s", "--spaces", "Use tabs for the indent character") { @indent_token = " " }
|
9
11
|
opts.banner = "Usage: print ruby into a pretty format, or break trying."
|
10
12
|
end
|
11
13
|
Options.parse!
|
12
14
|
|
13
|
-
if
|
15
|
+
@open_block_start = ["module", "class", "begin", "def", 'if', 'while', 'unless']
|
16
|
+
@both_block = ["else", "elsif", 'rescue']
|
17
|
+
@open_block_do = ['do', '{']
|
18
|
+
@close_block = ['end', '}']
|
19
|
+
|
20
|
+
@open_brackets = [:on_lparen, :on_lbracket, :on_lbrace]
|
21
|
+
@close_brackets = [:on_rparen, :on_rbracket, :on_rbrace]
|
22
|
+
@indent_token = "\t" unless @indent_token
|
23
|
+
@indent_count = 1 unless @indent_count
|
24
|
+
|
25
|
+
def flatten_content(content)
|
26
|
+
# I realize this is slow, todo, make it not slow.
|
27
|
+
flat_content = []
|
28
|
+
content.split("\n").each do |l|
|
29
|
+
w = l.split(/\s*(?<line>.*)/).last
|
30
|
+
if w
|
31
|
+
flat_content.push w
|
32
|
+
else
|
33
|
+
flat_content.push l
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
return flat_content.join("\n")
|
38
|
+
end
|
39
|
+
|
40
|
+
def puts_indented_line(level, string)
|
41
|
+
indent = (@indent_token * @indent_count) * level
|
42
|
+
puts indent + string
|
43
|
+
end
|
44
|
+
|
45
|
+
def pretty(content)
|
46
|
+
# it's far easier if the content is 'flat', we don't have to worry about
|
47
|
+
# pre-existing indent levels. So lets lex that.
|
14
48
|
begin
|
15
|
-
|
16
|
-
rescue
|
17
|
-
|
18
|
-
exit
|
49
|
+
lex = Ripper.lex(flatten_content(content))
|
50
|
+
rescue
|
51
|
+
exit 255
|
19
52
|
end
|
53
|
+
|
54
|
+
# quick way to get our total lines.
|
55
|
+
total_lines = lex.last[0][0]
|
56
|
+
line_index = 1
|
57
|
+
|
58
|
+
indent_level = 0
|
59
|
+
|
60
|
+
# walk through our lines.
|
61
|
+
while (line_index <= total_lines)
|
62
|
+
# a 'lex' copy of our line.
|
63
|
+
line_lex = lex.select {|l| l[0][0] == line_index}
|
64
|
+
# a string version.
|
65
|
+
line_string = line_lex.map {|l| l.last}.join("")
|
66
|
+
|
67
|
+
# did we just close something? if so, lets bring it down a level.
|
68
|
+
if closing_block?(line_lex) || closing_assignment?(line_lex)
|
69
|
+
indent_level -=1 if indent_level > 0
|
70
|
+
end
|
71
|
+
|
72
|
+
# print our line, in place.
|
73
|
+
puts_indented_line(indent_level, line_string)
|
74
|
+
|
75
|
+
# oh, we opened something did we? lets indent for the next run.
|
76
|
+
if opening_block?(line_lex) || opening_assignment?(line_lex)
|
77
|
+
indent_level +=1
|
78
|
+
end
|
79
|
+
|
80
|
+
line_index += 1
|
81
|
+
end
|
82
|
+
|
83
|
+
return nil
|
84
|
+
end
|
85
|
+
|
86
|
+
# how many times do we open in this line?
|
87
|
+
def opening_block_count(line_lex)
|
88
|
+
line_lex.select {|l| l[1] == :on_kw && @open_block_do.include?(l[2])}.count
|
89
|
+
end
|
90
|
+
|
91
|
+
# how many times do we close?
|
92
|
+
def closing_block_count(line_lex)
|
93
|
+
line_lex.select {|l| l[1] == :on_kw && @close_block.include?(l[2])}.count
|
94
|
+
end
|
95
|
+
|
96
|
+
# is the first word a key word?
|
97
|
+
def starts_block?(line_lex)
|
98
|
+
line_lex.first[1] == :on_kw && @open_block_start.include?(line_lex.first[2])
|
99
|
+
end
|
100
|
+
|
101
|
+
# is the first word one of our 'both' keywords?
|
102
|
+
def both_block?(line_lex)
|
103
|
+
return line_lex.first[1] == :on_kw && @both_block.include?(line_lex.first[2])
|
104
|
+
end
|
105
|
+
|
106
|
+
# kinda complex, we count open/close to determine if we ultimately have a
|
107
|
+
# hanging line. Always true if it's a both_block.
|
108
|
+
def opening_block?(line_lex)
|
109
|
+
return true if both_block? line_lex
|
110
|
+
opens = starts_block?(line_lex) ? 1 : 0
|
111
|
+
opens += opening_block_count line_lex
|
112
|
+
closes = closing_block_count line_lex
|
113
|
+
return false if opens == closes
|
114
|
+
return true if opens > closes
|
115
|
+
end
|
116
|
+
|
117
|
+
# kinda complex, we count open/close to determine if we ultimately have close a
|
118
|
+
# hanging line. Always true if it's a both_block.
|
119
|
+
def closing_block?(line_lex)
|
120
|
+
return true if both_block? line_lex
|
121
|
+
opens = starts_block?(line_lex) ? 1 : 0
|
122
|
+
opens += opening_block_count line_lex
|
123
|
+
closes = closing_block_count line_lex
|
124
|
+
return false if opens == closes
|
125
|
+
return true if opens < closes
|
126
|
+
end
|
127
|
+
|
128
|
+
# count the amount of opening assignments.
|
129
|
+
def opening_assignment_count(line_lex)
|
130
|
+
line_lex.select {|l| @open_brackets.include? l[1]}.count
|
131
|
+
end
|
132
|
+
|
133
|
+
# count the amount of closing assignments.
|
134
|
+
def closing_assignment_count(line_lex)
|
135
|
+
line_lex.select {|l| @close_brackets.include? l[1]}.count
|
136
|
+
end
|
137
|
+
|
138
|
+
# same trick as opening_block
|
139
|
+
def opening_assignment?(line_lex)
|
140
|
+
opens = opening_assignment_count line_lex
|
141
|
+
closes = closing_assignment_count line_lex
|
142
|
+
return false if opens == closes
|
143
|
+
return true if opens > closes
|
144
|
+
end
|
145
|
+
|
146
|
+
# ...
|
147
|
+
def closing_assignment?(line_lex)
|
148
|
+
opens = opening_assignment_count line_lex
|
149
|
+
closes = closing_assignment_count line_lex
|
150
|
+
return false if opens == closes
|
151
|
+
return true if closes > opens
|
152
|
+
end
|
153
|
+
|
154
|
+
# is this ruby file valid syntax?
|
155
|
+
def valid_syntax?(file)
|
156
|
+
#ugly but fast, ruby returns stdout if it's ok, and stderr if not.
|
157
|
+
#if we get anything back, we were ok, else we were not.
|
158
|
+
r = `ruby -c #{file} 2> /dev/null`
|
159
|
+
return false if r == ""
|
160
|
+
return true
|
161
|
+
end
|
162
|
+
|
163
|
+
# no argument, assume we want to open STDIN.
|
164
|
+
if ARGV.empty?
|
165
|
+
content = gets
|
166
|
+
puts pretty content
|
20
167
|
else
|
21
|
-
|
22
|
-
|
23
|
-
|
168
|
+
file = ARGV[0]
|
169
|
+
if File.exist? file
|
170
|
+
if valid_syntax? file
|
171
|
+
content = open(file).read
|
172
|
+
pretty content
|
24
173
|
else
|
25
|
-
puts
|
174
|
+
puts content
|
175
|
+
exit 127
|
26
176
|
end
|
177
|
+
else
|
178
|
+
puts "No such file: #{file}"
|
27
179
|
end
|
28
180
|
end
|
data/lib/ruby-beautify.rb
CHANGED
@@ -1,10 +1,4 @@
|
|
1
1
|
require "ruby-beautify/version"
|
2
|
-
require 'ruby-beautify/block_start'
|
3
|
-
require 'ruby-beautify/block_end'
|
4
|
-
require 'ruby-beautify/block_matcher'
|
5
|
-
require 'ruby-beautify/language'
|
6
|
-
require 'ruby-beautify/line'
|
7
|
-
require 'ruby-beautify/config/ruby'
|
8
2
|
|
9
3
|
module RBeautify
|
10
4
|
def self.beautify_string(language, source, use_tabs=false)
|
data/ruby-beautify.gemspec
CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new do |gem|
|
|
4
4
|
gem.name = 'ruby-beautify'
|
5
5
|
gem.summary = "a cli tool (and module) to beautify ruby code."
|
6
6
|
gem.description = gem.summary
|
7
|
-
gem.authors = ["Ernie Brodeur"
|
7
|
+
gem.authors = ["Ernie Brodeur"]
|
8
8
|
gem.email = 'ebrodeur@ujami.net'
|
9
9
|
gem.homepage = "https://github.com/erniebrodeur/ruby-beautify"
|
10
10
|
|
metadata
CHANGED
@@ -1,33 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-beautify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.93.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ernie Brodeur
|
9
|
-
- Craig Williams
|
10
|
-
- Joel Chippindale
|
11
|
-
- Paul Lutus
|
12
8
|
autorequire:
|
13
9
|
bindir: bin
|
14
10
|
cert_chain: []
|
15
|
-
date:
|
11
|
+
date: 2014-11-16 00:00:00.000000000 Z
|
16
12
|
dependencies:
|
17
13
|
- !ruby/object:Gem::Dependency
|
18
14
|
name: rspec
|
19
15
|
requirement: !ruby/object:Gem::Requirement
|
20
|
-
none: false
|
21
16
|
requirements:
|
22
|
-
- -
|
17
|
+
- - ">="
|
23
18
|
- !ruby/object:Gem::Version
|
24
19
|
version: '0'
|
25
20
|
type: :development
|
26
21
|
prerelease: false
|
27
22
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
23
|
requirements:
|
30
|
-
- -
|
24
|
+
- - ">="
|
31
25
|
- !ruby/object:Gem::Version
|
32
26
|
version: '0'
|
33
27
|
description: a cli tool (and module) to beautify ruby code.
|
@@ -37,60 +31,37 @@ executables:
|
|
37
31
|
extensions: []
|
38
32
|
extra_rdoc_files: []
|
39
33
|
files:
|
40
|
-
- .gitignore
|
34
|
+
- ".gitignore"
|
41
35
|
- Gemfile
|
42
36
|
- LICENSE
|
43
37
|
- README.md
|
44
38
|
- RELEASE.md
|
45
39
|
- Rakefile
|
46
40
|
- bin/rbeautify
|
47
|
-
- lib/beautifier.rb
|
48
41
|
- lib/ruby-beautify.rb
|
49
|
-
- lib/ruby-beautify/block_end.rb
|
50
|
-
- lib/ruby-beautify/block_matcher.rb
|
51
|
-
- lib/ruby-beautify/block_start.rb
|
52
|
-
- lib/ruby-beautify/config/ruby.rb
|
53
|
-
- lib/ruby-beautify/language.rb
|
54
|
-
- lib/ruby-beautify/line.rb
|
55
42
|
- lib/ruby-beautify/version.rb
|
56
43
|
- ruby-beautify.gemspec
|
57
|
-
- spec/fixtures/ruby.yml
|
58
|
-
- spec/rbeautify/block_matcher_spec.rb
|
59
|
-
- spec/rbeautify/block_start_spec.rb
|
60
|
-
- spec/rbeautify/config/ruby_spec.rb
|
61
|
-
- spec/rbeautify/line_spec.rb
|
62
|
-
- spec/rbeautify_spec.rb
|
63
|
-
- spec/spec_helper.rb
|
64
44
|
homepage: https://github.com/erniebrodeur/ruby-beautify
|
65
45
|
licenses: []
|
46
|
+
metadata: {}
|
66
47
|
post_install_message:
|
67
48
|
rdoc_options: []
|
68
49
|
require_paths:
|
69
50
|
- lib
|
70
51
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
52
|
requirements:
|
73
|
-
- -
|
53
|
+
- - ">="
|
74
54
|
- !ruby/object:Gem::Version
|
75
55
|
version: '0'
|
76
56
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
-
none: false
|
78
57
|
requirements:
|
79
|
-
- -
|
58
|
+
- - ">="
|
80
59
|
- !ruby/object:Gem::Version
|
81
60
|
version: '0'
|
82
61
|
requirements: []
|
83
62
|
rubyforge_project:
|
84
|
-
rubygems_version:
|
63
|
+
rubygems_version: 2.2.2
|
85
64
|
signing_key:
|
86
|
-
specification_version:
|
65
|
+
specification_version: 4
|
87
66
|
summary: a cli tool (and module) to beautify ruby code.
|
88
|
-
test_files:
|
89
|
-
- spec/fixtures/ruby.yml
|
90
|
-
- spec/rbeautify/block_matcher_spec.rb
|
91
|
-
- spec/rbeautify/block_start_spec.rb
|
92
|
-
- spec/rbeautify/config/ruby_spec.rb
|
93
|
-
- spec/rbeautify/line_spec.rb
|
94
|
-
- spec/rbeautify_spec.rb
|
95
|
-
- spec/spec_helper.rb
|
96
|
-
has_rdoc:
|
67
|
+
test_files: []
|
data/lib/beautifier.rb
DELETED
@@ -1,168 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Ruby beautifier, version 2.1, 09/11/2006
|
4
|
-
# Copyright (c) 2006, P. Lutus
|
5
|
-
# Released under the GPL
|
6
|
-
|
7
|
-
# Changes
|
8
|
-
# Craig Williams
|
9
|
-
# 12/26/2011
|
10
|
-
# Modified (very minor) to work with a Sublime Text 2 plugin
|
11
|
-
|
12
|
-
# indent regexp tests
|
13
|
-
|
14
|
-
@indentExp = [
|
15
|
-
/^module\b/,
|
16
|
-
/^if\b/,
|
17
|
-
/^\@{0,2}[\w\.]*[\s\t]*\=[\s\t]*if\b/,
|
18
|
-
/(=\s*|^)until\b/,
|
19
|
-
/(=\s*|^)for\b/,
|
20
|
-
/^unless\b/,
|
21
|
-
/^\@{0,2}[\w\.]*[\s\t]*\=[\s\t]*unless\b/,
|
22
|
-
/(=\s*|^)while\b/,
|
23
|
-
/(=\s*|^)begin\b/,
|
24
|
-
/(^| )case\b/,
|
25
|
-
/\bthen\b/,
|
26
|
-
/^class\b/,
|
27
|
-
/^rescue\b/,
|
28
|
-
/^def\b/,
|
29
|
-
/\bdo\b/,
|
30
|
-
/^else\b/,
|
31
|
-
/^elsif\b/,
|
32
|
-
/^ensure\b/,
|
33
|
-
/\bwhen\b/,
|
34
|
-
/\{[^\}]*$/,
|
35
|
-
/\[[^\]]*$/,
|
36
|
-
/\([^\)]*$/
|
37
|
-
]
|
38
|
-
|
39
|
-
# outdent regexp tests
|
40
|
-
|
41
|
-
@outdentExp = [
|
42
|
-
/^rescue\b/,
|
43
|
-
/^ensure\b/,
|
44
|
-
/^elsif\b/,
|
45
|
-
/^end\b/,
|
46
|
-
/^else\b/,
|
47
|
-
/\bwhen\b/,
|
48
|
-
/^[^\{]*\}/,
|
49
|
-
/^[^\[]*\]/,
|
50
|
-
/^[^\(]*\)/
|
51
|
-
]
|
52
|
-
|
53
|
-
def makeTab(tab)
|
54
|
-
(tab < 0) ? "" : @tabStr * @tabSize * tab
|
55
|
-
end
|
56
|
-
|
57
|
-
def addLine(line,tab)
|
58
|
-
line.strip!
|
59
|
-
line = makeTab(tab)+line if line.length > 0
|
60
|
-
line + "\n"
|
61
|
-
end
|
62
|
-
|
63
|
-
def beautifyRuby(contents)
|
64
|
-
commentBlock = false
|
65
|
-
programEnd = false
|
66
|
-
multiLineArray = Array.new
|
67
|
-
multiLineStr = ""
|
68
|
-
tab = 0
|
69
|
-
source = contents
|
70
|
-
dest = ""
|
71
|
-
source.split("\n").each do |line|
|
72
|
-
if(!programEnd)
|
73
|
-
# detect program end mark
|
74
|
-
if(line =~ /^__END__$/)
|
75
|
-
programEnd = true
|
76
|
-
else
|
77
|
-
# combine continuing lines
|
78
|
-
if(!(line =~ /^\s*#/) && line =~ /[^\\]\\\s*$/)
|
79
|
-
multiLineArray.push line
|
80
|
-
multiLineStr += line.sub(/^(.*)\\\s*$/,"\\1")
|
81
|
-
next
|
82
|
-
end
|
83
|
-
|
84
|
-
# add final line
|
85
|
-
if(multiLineStr.length > 0)
|
86
|
-
multiLineArray.push line
|
87
|
-
multiLineStr += line.sub(/^(.*)\\\s*$/,"\\1")
|
88
|
-
end
|
89
|
-
|
90
|
-
tline = ((multiLineStr.length > 0)?multiLineStr:line).strip
|
91
|
-
if(tline =~ /^=begin/)
|
92
|
-
commentBlock = true
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
if(commentBlock || programEnd)
|
97
|
-
# add the line unchanged
|
98
|
-
dest += line + "\n"
|
99
|
-
else
|
100
|
-
commentLine = (tline =~ /^#/)
|
101
|
-
if(!commentLine)
|
102
|
-
# throw out sequences that will
|
103
|
-
# only sow confusion
|
104
|
-
while tline.gsub!(/'.*?'/,"")
|
105
|
-
end
|
106
|
-
while tline.gsub!(/".*?"/,"")
|
107
|
-
end
|
108
|
-
while tline.gsub!(/\`.*?\`/,"")
|
109
|
-
end
|
110
|
-
while tline.gsub!(/\{[^\{]*?\}/,"")
|
111
|
-
end
|
112
|
-
while tline.gsub!(/\([^\(]*?\)/,"")
|
113
|
-
end
|
114
|
-
while tline.gsub!(/\/.*?\//,"")
|
115
|
-
end
|
116
|
-
while tline.gsub!(/%r(.).*?\1/,"")
|
117
|
-
end
|
118
|
-
tline.gsub!(/\\\"/,"'")
|
119
|
-
@outdentExp.each do |re|
|
120
|
-
if(tline =~ re)
|
121
|
-
tab -= 1
|
122
|
-
break
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
if (multiLineArray.length > 0)
|
127
|
-
multiLineArray.each do |ml|
|
128
|
-
dest += addLine(ml,tab)
|
129
|
-
end
|
130
|
-
multiLineArray.clear
|
131
|
-
multiLineStr = ""
|
132
|
-
else
|
133
|
-
dest += addLine(line,tab)
|
134
|
-
end
|
135
|
-
if(!commentLine)
|
136
|
-
@indentExp.each do |re|
|
137
|
-
if(tline =~ re && !(tline =~ /\s+end\s*$/))
|
138
|
-
tab += 1
|
139
|
-
break
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
if(tline =~ /^=end/)
|
145
|
-
commentBlock = false
|
146
|
-
end
|
147
|
-
end
|
148
|
-
STDOUT.write(dest)
|
149
|
-
# uncomment this to complain about mismatched blocks
|
150
|
-
# if(tab != 0)
|
151
|
-
# STDERR.puts "#{path}: Indentation error: #{tab}"
|
152
|
-
# end
|
153
|
-
end
|
154
|
-
|
155
|
-
tab_or_space = ARGV.first
|
156
|
-
path = ARGV.last
|
157
|
-
path.gsub!("\\", "/") if RUBY_PLATFORM =~ /mswin/
|
158
|
-
contents = IO.read(path)
|
159
|
-
|
160
|
-
if tab_or_space == 'space'
|
161
|
-
@tabSize = 2
|
162
|
-
@tabStr = " "
|
163
|
-
else
|
164
|
-
@tabSize = 1
|
165
|
-
@tabStr = "\t"
|
166
|
-
end
|
167
|
-
|
168
|
-
beautifyRuby(contents)
|