code_tools 4.1.0 → 4.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 +4 -4
- data/bin/code_tools +4 -1
- data/bin/ender +4 -0
- data/bin/spacer +4 -0
- data/lib/ender.rb +167 -0
- data/lib/spacer.rb +405 -0
- data/lib/vamper.rb +6 -5
- metadata +23 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da904aa42c144ba90f9479facf968c63f6c9502f
|
4
|
+
data.tar.gz: 090ca4a1c671a2fc91c8259801af3b6c128c21e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16ad5be70ccf2e1b792f5f8745cd6c88d39c5520366ba3d4ced52104e59262478c73675b281600b5adf29a09cfe08cfaecc24107828aaa5aaad7dfe09720886b
|
7
|
+
data.tar.gz: 40d615576784fd90c4c3580e52e96d91c55913ca650622c3610db08802443b72f0bd988820e64a14a7854b71127d89366528c9e483a2b26c84d5724928578ac8
|
data/bin/code_tools
CHANGED
data/bin/ender
ADDED
data/bin/spacer
ADDED
data/lib/ender.rb
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'optparse'
|
3
|
+
require 'colorize'
|
4
|
+
|
5
|
+
$VERSION='4.2.0-20151225.0'
|
6
|
+
|
7
|
+
class Ender
|
8
|
+
|
9
|
+
def parse(args)
|
10
|
+
options = OpenStruct.new
|
11
|
+
options.output_filename = ''
|
12
|
+
options.input_filename = ''
|
13
|
+
options.convert_mode = nil
|
14
|
+
|
15
|
+
opt_parser = OptionParser.new do |opts|
|
16
|
+
opts.banner = %Q(Ender Line Ending Fixer. Version #{$VERSION}
|
17
|
+
Copyright (c) John Lyon-Smith, 2015.
|
18
|
+
Usage: #{File.basename(__FILE__)} [options]
|
19
|
+
)
|
20
|
+
opts.separator %Q(Options:
|
21
|
+
)
|
22
|
+
|
23
|
+
opts.on("-o", "--output FILE", String, "The output file. Default is the same as the input file.") do |file|
|
24
|
+
options.output_filename = File.expand_path(file)
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on("-m", "--mode MODE", [:auto, :lf, :cr, :crlf], "The convert mode (auto, cr, lf, crlf)",
|
28
|
+
"(auto) will use the most commonly occurring ending.",
|
29
|
+
"Updates will only be done when this argument is given.") do |mode|
|
30
|
+
options.convert_mode = mode
|
31
|
+
end
|
32
|
+
|
33
|
+
opts.on_tail("-?", "--help", "Show this message") do
|
34
|
+
puts opts
|
35
|
+
exit
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
opt_parser.parse!(args)
|
40
|
+
options.input_filename = ARGV.pop
|
41
|
+
raise 'Need to specify a file to process' unless options.input_filename
|
42
|
+
options.input_filename = File.expand_path(options.input_filename)
|
43
|
+
options
|
44
|
+
end
|
45
|
+
|
46
|
+
def execute
|
47
|
+
options = self.parse(ARGV)
|
48
|
+
|
49
|
+
if !File.exist?(options.input_filename)
|
50
|
+
error "File #{options.input_filename} does not exist"
|
51
|
+
exit
|
52
|
+
end
|
53
|
+
|
54
|
+
if options.output_filename.length == 0
|
55
|
+
options.output_filename = options.input_filename
|
56
|
+
end
|
57
|
+
|
58
|
+
# Read the entire file and determine all the different line endings
|
59
|
+
file_contents = IO.read(options.input_filename)
|
60
|
+
num_cr = 0
|
61
|
+
num_lf = 0
|
62
|
+
num_crlf = 0
|
63
|
+
num_lines = 1
|
64
|
+
|
65
|
+
i = 0
|
66
|
+
while i < file_contents.length do
|
67
|
+
c = file_contents[i]
|
68
|
+
|
69
|
+
if c == "\r"
|
70
|
+
if i < file_contents.length - 1 and file_contents[i + 1] == "\n"
|
71
|
+
num_crlf += 1
|
72
|
+
i += 1
|
73
|
+
else
|
74
|
+
num_cr += 1
|
75
|
+
end
|
76
|
+
|
77
|
+
num_lines += 1
|
78
|
+
elsif c == "\n"
|
79
|
+
num_lf += 1
|
80
|
+
num_lines += 1
|
81
|
+
end
|
82
|
+
i += 1
|
83
|
+
end
|
84
|
+
|
85
|
+
num_endings = (num_cr > 0 ? 1 : 0) + (num_lf > 0 ? 1 : 0) + (num_crlf > 0 ? 1 : 0)
|
86
|
+
le = num_endings > 1 ? :mixed : num_cr > 0 ? :cr : num_lf > 0 ? :lf : :crlf
|
87
|
+
msg = "\"#{options.input_filename}\", #{le.to_s}, #{num_lines} lines"
|
88
|
+
|
89
|
+
if options.convert_mode == nil
|
90
|
+
puts msg
|
91
|
+
exit
|
92
|
+
end
|
93
|
+
|
94
|
+
if options.convert_mode == :auto
|
95
|
+
# Find the most common line ending and make that the automatic line ending
|
96
|
+
auto_line_ending = :lf
|
97
|
+
n = num_lf
|
98
|
+
|
99
|
+
if num_crlf > n
|
100
|
+
auto_line_ending = :crlf
|
101
|
+
n = num_crlf
|
102
|
+
end
|
103
|
+
|
104
|
+
if num_cr > n
|
105
|
+
auto_line_ending = :cr
|
106
|
+
end
|
107
|
+
|
108
|
+
options.convert_mode = auto_line_ending
|
109
|
+
end
|
110
|
+
|
111
|
+
new_num_lines = 1
|
112
|
+
|
113
|
+
if (options.convert_mode == :cr and num_cr + 1 == num_lines) or
|
114
|
+
(options.convert_mode == :lf and num_lf + 1 == num_lines) or
|
115
|
+
(options.convert_mode == :crlf and num_crlf + 1 == num_lines)
|
116
|
+
# We're not changing the line endings; nothing to do
|
117
|
+
new_num_lines = num_lines
|
118
|
+
else
|
119
|
+
newline_chars =
|
120
|
+
options.convert_mode == :cr ? "\r" :
|
121
|
+
options.convert_mode == :lf ? "\n" :
|
122
|
+
"\r\n"
|
123
|
+
|
124
|
+
file = nil
|
125
|
+
|
126
|
+
begin
|
127
|
+
file = File.new(options.output_filename, 'w')
|
128
|
+
|
129
|
+
i = 0
|
130
|
+
while i < file_contents.length
|
131
|
+
c = file_contents[i]
|
132
|
+
|
133
|
+
if c == "\r"
|
134
|
+
if i < file_contents.length - 1 && file_contents[i + 1] == "\n"
|
135
|
+
i += 1
|
136
|
+
end
|
137
|
+
|
138
|
+
new_num_lines += 1
|
139
|
+
file.write(newline_chars)
|
140
|
+
elsif c == "\n"
|
141
|
+
new_num_lines += 1
|
142
|
+
file.write(newline_chars)
|
143
|
+
else
|
144
|
+
file.write(c)
|
145
|
+
end
|
146
|
+
|
147
|
+
i += 1
|
148
|
+
end
|
149
|
+
rescue Exception => e
|
150
|
+
error "unable to write #{options.output_filename}. #{e.to_s}"
|
151
|
+
exit
|
152
|
+
ensure
|
153
|
+
file.close() unless !file
|
154
|
+
end
|
155
|
+
|
156
|
+
msg += " -> \"#{options.output_filename}\", #{options.convert_mode.to_s}, #{new_num_lines} lines"
|
157
|
+
end
|
158
|
+
|
159
|
+
puts msg
|
160
|
+
end
|
161
|
+
|
162
|
+
|
163
|
+
def error(msg)
|
164
|
+
STDERR.puts "error: #{msg}".colorize(:red)
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
data/lib/spacer.rb
ADDED
@@ -0,0 +1,405 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'optparse'
|
3
|
+
require 'colorize'
|
4
|
+
|
5
|
+
$VERSION='4.2.0-20151225.0'
|
6
|
+
|
7
|
+
class Spacer
|
8
|
+
|
9
|
+
def parse(args)
|
10
|
+
options = OpenStruct.new
|
11
|
+
options.output_filename = ''
|
12
|
+
options.input_filename = nil
|
13
|
+
options.convert_mode = nil
|
14
|
+
options.tabsize = 4
|
15
|
+
options.round_down_spaces = false
|
16
|
+
|
17
|
+
opt_parser = OptionParser.new do |opts|
|
18
|
+
opts.banner = %Q(Spacer Text File Space/Tab Fixer Tool. Version #{$VERSION}
|
19
|
+
Copyright (c) John Lyon-Smith, 2015.
|
20
|
+
Usage: #{File.basename(__FILE__)} [options]
|
21
|
+
)
|
22
|
+
opts.separator %Q(Description:
|
23
|
+
When reporting the tool indicates beginning-of-line \(BOL\) tabs and spaces.
|
24
|
+
When replacing, all tabs not at the beginning of a line are replaced with spaces.
|
25
|
+
Spaces and tabs inside multi-line C# strings (@"...") and inside Ruby \%Q\(...\) strings
|
26
|
+
are ignored.
|
27
|
+
Note that conversion to tabs may still leave the file as mixed as some lines may have
|
28
|
+
spaces that are not a whole number multiple of the tabstop size. In that case use the
|
29
|
+
-round option to remove smooth out the spurious spaces.
|
30
|
+
|
31
|
+
)
|
32
|
+
opts.separator %Q(Options:
|
33
|
+
)
|
34
|
+
|
35
|
+
opts.on("-o", "--output FILE", String, "The output file. Default is the same as the input file.") do |file|
|
36
|
+
options.output_filename = File.expand_path(file)
|
37
|
+
end
|
38
|
+
|
39
|
+
opts.on("-m", "--mode MODE", [:mixed, :tabs, :spaces], "The convert mode (mixed, tabs or spaces)",
|
40
|
+
"Default is to just display the files current state.",
|
41
|
+
"Updates will only be done when this argument is given.") do |mode|
|
42
|
+
options.convert_mode = mode
|
43
|
+
end
|
44
|
+
|
45
|
+
opts.on("-t", "--tabsize SIZE", Integer, "Tab size. Default is 4 spaces.",
|
46
|
+
"Default is to just display the files current state.",
|
47
|
+
"Updates will only be done when this argument is given.") do |size|
|
48
|
+
options.tabsize = size
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on("-r", "--round", "When tabifying, round BOL spaces down to an exact number of tabs.") do |round|
|
52
|
+
options.round_down_spaces = round
|
53
|
+
end
|
54
|
+
|
55
|
+
opts.on_tail("-?", "--help", "Show this message") do
|
56
|
+
puts opts
|
57
|
+
exit
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
opt_parser.parse!(args)
|
62
|
+
options.input_filename = ARGV.pop
|
63
|
+
if options.input_filename == nil
|
64
|
+
error 'Need to specify a file to process'
|
65
|
+
exit
|
66
|
+
end
|
67
|
+
options.input_filename = File.expand_path(options.input_filename)
|
68
|
+
options
|
69
|
+
end
|
70
|
+
|
71
|
+
def execute
|
72
|
+
options = self.parse(ARGV)
|
73
|
+
|
74
|
+
if !File.exist?(options.input_filename)
|
75
|
+
error "File #{options.input_filename} does not exist"
|
76
|
+
exit
|
77
|
+
end
|
78
|
+
|
79
|
+
if options.output_filename.length == 0
|
80
|
+
options.output_filename = options.input_filename
|
81
|
+
end
|
82
|
+
|
83
|
+
if File.extname(options.input_filename) == '.cs'
|
84
|
+
file_type = :csharp
|
85
|
+
else
|
86
|
+
file_type = :other
|
87
|
+
end
|
88
|
+
|
89
|
+
lines = read_file_lines(options.input_filename)
|
90
|
+
|
91
|
+
if file_type == :csharp
|
92
|
+
before = count_csharp_bol_spaces_and_tabs(lines)
|
93
|
+
else
|
94
|
+
before = count_bol_spaces_and_tabs(lines)
|
95
|
+
end
|
96
|
+
|
97
|
+
if options.convert_mode != nil
|
98
|
+
if file_type == :other
|
99
|
+
untabify(lines, options)
|
100
|
+
else
|
101
|
+
csharp_untabify(lines, options)
|
102
|
+
end
|
103
|
+
|
104
|
+
if options.convert_mode == :tabs
|
105
|
+
if file_type == :other
|
106
|
+
tabify(lines, options)
|
107
|
+
else
|
108
|
+
csharp_tabify(lines, options)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
ws = get_whitespace_type(before)
|
114
|
+
|
115
|
+
msg = "\"#{options.input_filename}\", #{file_type.to_s}, #{ws.to_s}"
|
116
|
+
|
117
|
+
if options.convert_mode != nil
|
118
|
+
if file_type == :csharp
|
119
|
+
after = count_csharp_bol_spaces_and_tabs(lines)
|
120
|
+
else
|
121
|
+
after = count_bol_spaces_and_tabs(lines)
|
122
|
+
end
|
123
|
+
|
124
|
+
ws = get_whitespace_type(after)
|
125
|
+
file = nil
|
126
|
+
|
127
|
+
begin
|
128
|
+
file = File.new(options.output_filename, 'w')
|
129
|
+
|
130
|
+
for line in lines do
|
131
|
+
file.write(line)
|
132
|
+
end
|
133
|
+
ensure
|
134
|
+
file.close() unless file == nil
|
135
|
+
end
|
136
|
+
|
137
|
+
msg += " -> \"#{options.output_filename}\", #{ws.to_s}"
|
138
|
+
end
|
139
|
+
|
140
|
+
puts msg
|
141
|
+
end
|
142
|
+
|
143
|
+
def get_whitespace_type(bol)
|
144
|
+
(bol.tabs > 0) ? (bol.spaces > 0 ? :mixed : :tabs) : :spaces
|
145
|
+
end
|
146
|
+
|
147
|
+
def read_file_lines(filename)
|
148
|
+
# Read the entire file
|
149
|
+
file_contents = File.read(filename)
|
150
|
+
|
151
|
+
# Convert to a list of lines, preserving the end-of-lines
|
152
|
+
lines = []
|
153
|
+
s = 0
|
154
|
+
i = 0
|
155
|
+
|
156
|
+
while i < file_contents.length do
|
157
|
+
c = file_contents[i]
|
158
|
+
c1 = i < file_contents.length - 1 ? file_contents[i + 1] : "\0"
|
159
|
+
|
160
|
+
if c == "\r"
|
161
|
+
i += 1
|
162
|
+
|
163
|
+
if c1 == "\n"
|
164
|
+
i += 1
|
165
|
+
end
|
166
|
+
elsif c == "\n"
|
167
|
+
i += 1
|
168
|
+
else
|
169
|
+
i += 1
|
170
|
+
next
|
171
|
+
end
|
172
|
+
|
173
|
+
lines.push(file_contents[s, i - s])
|
174
|
+
s = i
|
175
|
+
end
|
176
|
+
|
177
|
+
if s != i
|
178
|
+
lines.push(file_contents[s, i - s])
|
179
|
+
end
|
180
|
+
|
181
|
+
lines
|
182
|
+
end
|
183
|
+
|
184
|
+
def count_csharp_bol_spaces_and_tabs(lines)
|
185
|
+
bol = OpenStruct.new
|
186
|
+
bol.tabs = 0
|
187
|
+
bol.spaces = 0
|
188
|
+
in_multi_line_string = false
|
189
|
+
|
190
|
+
for line in lines do
|
191
|
+
in_bol = true
|
192
|
+
i = 0
|
193
|
+
while i < line.length do
|
194
|
+
c = line[i]
|
195
|
+
c1 = i < line.length - 1 ? line[i + 1] : "\0"
|
196
|
+
|
197
|
+
if in_multi_line_string and c == "\"" and c1 != "\""
|
198
|
+
in_multi_line_string = false
|
199
|
+
elsif c == "@" and c1 == "\""
|
200
|
+
in_multi_line_string = true
|
201
|
+
i += 1
|
202
|
+
elsif in_bol and !in_multi_line_string and c == " "
|
203
|
+
bol.spaces += 1
|
204
|
+
elsif in_bol and !in_multi_line_string and c == "\t"
|
205
|
+
bol.tabs += 1
|
206
|
+
else
|
207
|
+
in_bol = false
|
208
|
+
end
|
209
|
+
i += 1
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
bol
|
214
|
+
end
|
215
|
+
|
216
|
+
def count_bol_spaces_and_tabs(lines)
|
217
|
+
bol = OpenStruct.new
|
218
|
+
bol.spaces = 0
|
219
|
+
bol.tabs = 0
|
220
|
+
|
221
|
+
for line in lines do
|
222
|
+
for i in 0...line.length do
|
223
|
+
c = line[i]
|
224
|
+
|
225
|
+
if c == " "
|
226
|
+
bol.spaces += 1
|
227
|
+
elsif c == "\t"
|
228
|
+
bol.tabs += 1
|
229
|
+
else
|
230
|
+
break
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
bol
|
236
|
+
end
|
237
|
+
|
238
|
+
def untabify(lines, options)
|
239
|
+
i = 0
|
240
|
+
while i < lines.length do
|
241
|
+
line = lines[i]
|
242
|
+
j = 0
|
243
|
+
new_line = ""
|
244
|
+
|
245
|
+
while j < line.length do
|
246
|
+
c = line[j]
|
247
|
+
|
248
|
+
if c == "\t"
|
249
|
+
num_spaces = options.tabsize - (new_line.length % options.tabsize)
|
250
|
+
new_line += " " * num_spaces
|
251
|
+
else
|
252
|
+
new_line += c
|
253
|
+
end
|
254
|
+
j += 1
|
255
|
+
end
|
256
|
+
|
257
|
+
lines[i] = new_line
|
258
|
+
i += 1
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
def tabify(lines, options)
|
263
|
+
i = 0
|
264
|
+
while i < lines.length do
|
265
|
+
line = lines[i]
|
266
|
+
j = 0
|
267
|
+
bol = true
|
268
|
+
num_bol_spaces = 0
|
269
|
+
new_line = ""
|
270
|
+
|
271
|
+
while j < line.length do
|
272
|
+
c = line[j]
|
273
|
+
|
274
|
+
if bol and c == " "
|
275
|
+
num_bol_spaces += 1
|
276
|
+
elsif bol and c != " "
|
277
|
+
bol = false
|
278
|
+
new_line += "\t" * (num_bol_spaces / options.tabsize)
|
279
|
+
|
280
|
+
if !options.round_down_spaces
|
281
|
+
new_line += " " * (num_bol_spaces % options.tabsize)
|
282
|
+
end
|
283
|
+
|
284
|
+
new_line += c
|
285
|
+
else
|
286
|
+
new_line += c
|
287
|
+
end
|
288
|
+
|
289
|
+
j += 1
|
290
|
+
end
|
291
|
+
|
292
|
+
lines[i] = new_line
|
293
|
+
i += 1
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
def csharp_untabify(lines, options)
|
298
|
+
# Expand tabs anywhere on a line, but not inside @"..." strings
|
299
|
+
in_multi_line_string = false
|
300
|
+
|
301
|
+
i = 0
|
302
|
+
while i < lines.length do
|
303
|
+
line = lines[i]
|
304
|
+
in_string = false
|
305
|
+
new_line = ""
|
306
|
+
j = 0
|
307
|
+
|
308
|
+
while j < line.length do
|
309
|
+
c_1 = j > 0 ? line[j - 1] : '\0'
|
310
|
+
c = line[j]
|
311
|
+
c1 = j < line.length - 1 ? line[j + 1] : '\0'
|
312
|
+
|
313
|
+
raise "line #{i + 1} has overlapping regular and multiline strings" if (in_string and in_multi_line_string)
|
314
|
+
|
315
|
+
if !in_multi_line_string and c == "\t"
|
316
|
+
# Add spaces to next tabstop
|
317
|
+
num_spaces = options.tabsize - (new_line.length % options.tabsize)
|
318
|
+
|
319
|
+
new_line += " " * num_spaces
|
320
|
+
elsif !in_multi_line_string and !in_string and c == "\""
|
321
|
+
in_string = true
|
322
|
+
new_line += c
|
323
|
+
elsif !in_multi_line_string and !in_string and c == "@" and c1 == "\""
|
324
|
+
in_multi_line_string = true
|
325
|
+
new_line += c
|
326
|
+
j += 1
|
327
|
+
new_line += c1
|
328
|
+
elsif in_string and c == "\"" and c_1 != "\\"
|
329
|
+
in_string = false
|
330
|
+
new_line += c
|
331
|
+
elsif in_multi_line_string and c == "\"" and c1 != "\""
|
332
|
+
in_multi_line_string = false
|
333
|
+
new_line += c
|
334
|
+
else
|
335
|
+
new_line += c
|
336
|
+
end
|
337
|
+
|
338
|
+
lines[i] = new_line
|
339
|
+
j += 1
|
340
|
+
end
|
341
|
+
i += 1
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
def csharp_tabify(lines, options)
|
346
|
+
# Insert tabs for spaces, but only at the beginning of lines and not inside @"..." or "..." strings
|
347
|
+
in_multi_line_string = false
|
348
|
+
i = 0
|
349
|
+
|
350
|
+
while i < lines.length do
|
351
|
+
line = lines[i]
|
352
|
+
in_string = false
|
353
|
+
bol = true
|
354
|
+
num_bol_spaces = 0
|
355
|
+
new_line = ""
|
356
|
+
j = 0
|
357
|
+
|
358
|
+
while j < line.length do
|
359
|
+
c_1 = j > 0 ? line[j - 1] : "\0"
|
360
|
+
c = line[j]
|
361
|
+
c1 = j < line.length - 1 ? line[j + 1] : "\0"
|
362
|
+
|
363
|
+
if !in_string and !in_multi_line_string and bol and c == " "
|
364
|
+
# Just count the spaces
|
365
|
+
num_bol_spaces += 1
|
366
|
+
elsif !in_string and !in_multi_line_string and bol and c != " "
|
367
|
+
bol = false
|
368
|
+
|
369
|
+
new_line += "\t" * (num_bol_spaces / options.tabsize)
|
370
|
+
|
371
|
+
if !options.round_down_spaces
|
372
|
+
new_line += " " * (num_bol_spaces % options.tabsize)
|
373
|
+
end
|
374
|
+
# Process this character again as not BOL
|
375
|
+
j -= 1
|
376
|
+
elsif !in_multi_line_string and !in_string and c == '"'
|
377
|
+
in_string = true
|
378
|
+
new_line += c
|
379
|
+
elsif !in_multi_line_string and !in_string and c == "@" and c1 == "\""
|
380
|
+
in_multi_line_string = true
|
381
|
+
new_line += c
|
382
|
+
j += 1
|
383
|
+
new_line += c1
|
384
|
+
elsif in_string and c == "\"" and c_1 != "\\"
|
385
|
+
in_string = false
|
386
|
+
new_line += c
|
387
|
+
elsif in_multi_line_string and c == "\"" and c1 != "\""
|
388
|
+
in_multi_line_string = false
|
389
|
+
new_line += c
|
390
|
+
else
|
391
|
+
new_line += c
|
392
|
+
end
|
393
|
+
|
394
|
+
lines[i] = new_line
|
395
|
+
j += 1
|
396
|
+
end
|
397
|
+
i += 1
|
398
|
+
end
|
399
|
+
end
|
400
|
+
|
401
|
+
def error(msg)
|
402
|
+
STDERR.puts "error: #{msg}".colorize(:red)
|
403
|
+
end
|
404
|
+
|
405
|
+
end
|
data/lib/vamper.rb
CHANGED
@@ -2,11 +2,12 @@ require 'tzinfo'
|
|
2
2
|
require 'nokogiri'
|
3
3
|
require 'ostruct'
|
4
4
|
require 'optparse'
|
5
|
+
require 'colorize'
|
5
6
|
require_relative './vamper/version_file.rb'
|
6
7
|
require_relative './vamper/version_config_file.rb'
|
7
8
|
require_relative './core_ext.rb'
|
8
9
|
|
9
|
-
$VERSION='4.
|
10
|
+
$VERSION='4.2.0-20151225.0'
|
10
11
|
|
11
12
|
class Vamper
|
12
13
|
|
@@ -16,15 +17,15 @@ class Vamper
|
|
16
17
|
options.version_file_name = ''
|
17
18
|
|
18
19
|
opt_parser = OptionParser.new do |opts|
|
19
|
-
opts.banner = %Q(Version Stamper. Version #{$VERSION}
|
20
|
+
opts.banner = %Q(Vamper Version Stamper. Version #{$VERSION}
|
20
21
|
Copyright (c) John Lyon-Smith, 2016.
|
21
22
|
Usage: #{File.basename(__FILE__)} [options]
|
22
23
|
)
|
23
24
|
opts.separator %Q(Options:
|
24
25
|
)
|
25
26
|
|
26
|
-
opts.on("-u", "--update", "Increment the build number and update all files") do |
|
27
|
-
options.do_update =
|
27
|
+
opts.on("-u", "--update", "Increment the build number and update all files") do |update|
|
28
|
+
options.do_update = update
|
28
29
|
end
|
29
30
|
|
30
31
|
opts.on_tail("-?", "--help", "Show this message") do
|
@@ -189,7 +190,7 @@ Usage: #{File.basename(__FILE__)} [options]
|
|
189
190
|
end
|
190
191
|
|
191
192
|
def error(msg)
|
192
|
-
puts "error:
|
193
|
+
puts "error: #{msg}".colorize(:red)
|
193
194
|
end
|
194
195
|
|
195
196
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: code_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Lyon-smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tzinfo
|
@@ -38,18 +38,38 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: colorize
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.7.7
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.7.7
|
41
55
|
description: Tools for source code maintenance, including version stamping, line endings
|
42
56
|
and tab/space conversion.
|
43
57
|
email: john@jamoki.com
|
44
58
|
executables:
|
45
|
-
- vamper
|
46
59
|
- code_tools
|
60
|
+
- ender
|
61
|
+
- spacer
|
62
|
+
- vamper
|
47
63
|
extensions: []
|
48
64
|
extra_rdoc_files: []
|
49
65
|
files:
|
50
66
|
- bin/code_tools
|
67
|
+
- bin/ender
|
68
|
+
- bin/spacer
|
51
69
|
- bin/vamper
|
52
70
|
- lib/core_ext.rb
|
71
|
+
- lib/ender.rb
|
72
|
+
- lib/spacer.rb
|
53
73
|
- lib/vamper.rb
|
54
74
|
- lib/vamper/default.version.config
|
55
75
|
- lib/vamper/version_config_file.rb
|