watson-ruby 1.6.2 → 1.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +1 -0
- data/lib/watson/command.rb +19 -0
- data/lib/watson/config.rb +71 -10
- data/lib/watson/formatters.rb +1 -0
- data/lib/watson/formatters/nocolor_formatter.rb +198 -0
- data/lib/watson/parser.rb +57 -79
- data/lib/watson/version.rb +1 -1
- data/spec/parser_spec.rb +8 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8a024874dc8eeea248cbe763168012a330e18c8
|
4
|
+
data.tar.gz: ace9f356ed3afa6ca4e569c02796c0b09a4b485d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54fb65d9d2cf0b41109cca529045a41aa0e0db0d8885dd919174df8cb2356b8e87e522db58594c01d416dc51d513f90d8f11ed4196d166e8aec51cec51d27142
|
7
|
+
data.tar.gz: 8e1522e949c5f4f7dc8b13e63ac760eb41121826333803157faf4b3b97735d677184e3e67284dc9273ac67455869299e10253dfed9eeb89b7690cdceefdfd763
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
data/lib/watson/command.rb
CHANGED
@@ -172,6 +172,8 @@ module Watson
|
|
172
172
|
@config.run
|
173
173
|
structure = @parser.run
|
174
174
|
@printer.run(structure)
|
175
|
+
|
176
|
+
print RESET;
|
175
177
|
end
|
176
178
|
|
177
179
|
|
@@ -251,6 +253,9 @@ module Watson
|
|
251
253
|
return false
|
252
254
|
end
|
253
255
|
|
256
|
+
# Set config flag for CL context_set in config
|
257
|
+
@config.cl_context_set = true
|
258
|
+
debug_print "Updated cl_context_set flag: #{ @config.cl_context_set }\n"
|
254
259
|
|
255
260
|
# For context_depth we do NOT append to RC, ALWAYS overwrite
|
256
261
|
# For each argument passed, make sure valid, then set @config.parse_depth
|
@@ -393,6 +398,10 @@ module Watson
|
|
393
398
|
return false
|
394
399
|
end
|
395
400
|
|
401
|
+
# Set config flag for CL parse_set in config
|
402
|
+
@config.cl_parse_set = true
|
403
|
+
debug_print "Updated cl_parse_set flag: #{ @config.cl_parse_set }\n"
|
404
|
+
|
396
405
|
# For max_dpeth we do NOT append to RC, ALWAYS overwrite
|
397
406
|
# For each argument passed, make sure valid, then set @config.parse_depth
|
398
407
|
args.each do | _parse_depth |
|
@@ -539,6 +548,10 @@ module Watson
|
|
539
548
|
return false
|
540
549
|
end
|
541
550
|
|
551
|
+
# Set config flag for CL tag set in config
|
552
|
+
@config.cl_output_set = true
|
553
|
+
debug_print "Updated cl_output_set flag: #{ @config.cl_output_set }\n"
|
554
|
+
|
542
555
|
@config.output_format = case args.pop.to_s
|
543
556
|
when 'j', 'json'
|
544
557
|
Watson::Formatters::JsonFormatter
|
@@ -546,6 +559,8 @@ module Watson
|
|
546
559
|
Watson::Formatters::UniteFormatter
|
547
560
|
when 'silent'
|
548
561
|
Watson::Formatters::SilentFormatter
|
562
|
+
when 'nocolor'
|
563
|
+
Watson::Formatters::NoColorFormatter
|
549
564
|
else
|
550
565
|
Watson::Formatters::DefaultFormatter
|
551
566
|
end
|
@@ -568,6 +583,10 @@ module Watson
|
|
568
583
|
return false
|
569
584
|
end
|
570
585
|
|
586
|
+
# Set config flag for CL tag set in config
|
587
|
+
@config.cl_show_set = true
|
588
|
+
debug_print "Updated cl_show_set flag: #{ @config.cl_show_set }\n"
|
589
|
+
|
571
590
|
args.each do | _show |
|
572
591
|
case _show.downcase
|
573
592
|
when 'clean'
|
data/lib/watson/config.rb
CHANGED
@@ -47,6 +47,14 @@ module Watson
|
|
47
47
|
attr_accessor :cl_ignore_set
|
48
48
|
# Flag for command line setting of tag to parse for
|
49
49
|
attr_accessor :cl_tag_set
|
50
|
+
# Flag for command line setting of showtype
|
51
|
+
attr_accessor :cl_show_set
|
52
|
+
# Flag for command line setting of output format
|
53
|
+
attr_accessor :cl_output_set
|
54
|
+
# Flag for command line setting of context depth
|
55
|
+
attr_accessor :cl_context_set
|
56
|
+
# Flag for command line setting of parse depth
|
57
|
+
attr_accessor :cl_parse_set
|
50
58
|
|
51
59
|
# Entries that watson should show
|
52
60
|
attr_accessor :show_type
|
@@ -130,9 +138,11 @@ module Watson
|
|
130
138
|
@context_depth = 15
|
131
139
|
|
132
140
|
# State flags
|
133
|
-
@cl_entry_set
|
134
|
-
@cl_tag_set
|
135
|
-
@cl_ignore_set
|
141
|
+
@cl_entry_set = false
|
142
|
+
@cl_tag_set = false
|
143
|
+
@cl_ignore_set = false
|
144
|
+
@cl_show_set = false
|
145
|
+
@cl_output_set = false
|
136
146
|
|
137
147
|
@show_type = 'all'
|
138
148
|
|
@@ -183,7 +193,8 @@ module Watson
|
|
183
193
|
@asana_issues = Hash.new()
|
184
194
|
|
185
195
|
|
186
|
-
@output_format = Watson::Formatters::DefaultFormatter
|
196
|
+
@output_format = STDOUT.tty? ? Watson::Formatters::DefaultFormatter :
|
197
|
+
Watson::Formatters::NoColorFormatter
|
187
198
|
|
188
199
|
|
189
200
|
end
|
@@ -362,15 +373,29 @@ module Watson
|
|
362
373
|
|
363
374
|
case _section
|
364
375
|
when "context_depth"
|
376
|
+
# If set from command line, ignore config file
|
377
|
+
if @cl_context_set
|
378
|
+
debug_print "Directories or files set from command line ignoring rc [context_depth]\n"
|
379
|
+
next
|
380
|
+
end
|
381
|
+
|
365
382
|
# No need for regex on context value, command should read this in only as a #
|
366
383
|
# Chomp to get rid of any nonsense
|
367
384
|
@context_depth = _line.chomp!.to_i
|
385
|
+
debug_print "@context_depth --> #{ @context_depth }\n"
|
368
386
|
|
369
387
|
|
370
388
|
when "parse_depth"
|
389
|
+
# If set from command line, ignore config file
|
390
|
+
if @cl_parse_set
|
391
|
+
debug_print "Directories or files set from command line ignoring rc [parse_depth]\n"
|
392
|
+
next
|
393
|
+
end
|
394
|
+
|
371
395
|
# No need for regex on parse value, command should read this in only as a #
|
372
396
|
# Chomp to get rid of any nonsense
|
373
397
|
@parse_depth = _line.chomp!
|
398
|
+
debug_print "@parse_depth --> #{ @parse_depth }\n"
|
374
399
|
|
375
400
|
|
376
401
|
when "dirs"
|
@@ -393,6 +418,36 @@ module Watson
|
|
393
418
|
debug_print "@dir_list --> #{ @dir_list }\n"
|
394
419
|
|
395
420
|
|
421
|
+
when "output_format"
|
422
|
+
if @cl_output_set
|
423
|
+
debug_print "Output type set from command line, ignoring rc [output_format]\n"
|
424
|
+
next
|
425
|
+
end
|
426
|
+
|
427
|
+
# Set default output format for printing
|
428
|
+
_output = _line.chomp!
|
429
|
+
|
430
|
+
@output_format = case _output.downcase
|
431
|
+
when 'json'
|
432
|
+
debug_print "Output format set to JSON\n"
|
433
|
+
Watson::Formatters::JsonFormatter
|
434
|
+
when 'unite'
|
435
|
+
debug_print "Output format set to Unite\n"
|
436
|
+
Watson::Formatters::UniteFormatter
|
437
|
+
when 'silent'
|
438
|
+
debug_print "Output format set to Silent\n"
|
439
|
+
Watson::Formatters::SilentFormatter
|
440
|
+
when 'nocolor'
|
441
|
+
debug_print "Output format set to NoColor\n"
|
442
|
+
Watson::Formatters::NoColorFormatter
|
443
|
+
else
|
444
|
+
debug_print "Output format set to default (color or nocolor depending on tty)\n"
|
445
|
+
STDOUT.tty? ? Watson::Formatters::DefaultFormatter :
|
446
|
+
Watson::Formatters::NoColorFormatter
|
447
|
+
end
|
448
|
+
|
449
|
+
debug_print "@output_format --> #{ @output_format }\n"
|
450
|
+
|
396
451
|
when "tags"
|
397
452
|
# Same as previous for tags
|
398
453
|
# [review] - Populate @tag_list, then check size instead
|
@@ -414,7 +469,7 @@ module Watson
|
|
414
469
|
|
415
470
|
when "tag_format"
|
416
471
|
@tag_format = _line.chomp!
|
417
|
-
debug_print @tag_format
|
472
|
+
debug_print "@tag_format --> #{ @tag_format }\n"
|
418
473
|
|
419
474
|
when "type"
|
420
475
|
# Regex to grab ".type" => ["param1", "param2"]
|
@@ -425,16 +480,17 @@ module Watson
|
|
425
480
|
@type_list[_ext] = _type
|
426
481
|
end
|
427
482
|
|
483
|
+
deug_print "@type_list --> #{ @type_list }\n"
|
428
484
|
|
429
|
-
when "ignore"
|
430
|
-
# Same as previous for ignores
|
431
|
-
# [review] - Populate @tag_list, then check size instead
|
432
485
|
|
486
|
+
when "ignore"
|
433
487
|
if @cl_ignore_set
|
434
488
|
debug_print "Ignores set from command line, ignoring rc [ignores]\n"
|
435
489
|
next
|
436
490
|
end
|
437
491
|
|
492
|
+
# Same as previous for ignores
|
493
|
+
# [review] - Populate @tag_list, then check size instead
|
438
494
|
# Convert each ignore into a regex
|
439
495
|
# Grab ignore and remove leading ./ and trailing /
|
440
496
|
_mtch = _line.match(/^(\.\/)?(\S+)/)[0].gsub(/\/$/, '')
|
@@ -449,8 +505,12 @@ module Watson
|
|
449
505
|
|
450
506
|
|
451
507
|
when "show_type"
|
452
|
-
|
508
|
+
if @cl_show_set
|
509
|
+
debug_print "Show type set from command line, ignoring rc [show_type]\n"
|
510
|
+
next
|
511
|
+
end
|
453
512
|
|
513
|
+
# No need for parsing, just check case
|
454
514
|
case _line.chomp.downcase
|
455
515
|
when "clean"
|
456
516
|
@show_type = "clean"
|
@@ -463,9 +523,10 @@ module Watson
|
|
463
523
|
else
|
464
524
|
@show_type = "all"
|
465
525
|
debug_print "@show_type set to \"all\" from config\n"
|
466
|
-
|
467
526
|
end
|
468
527
|
|
528
|
+
debug_print "@show_type --> #{ @show_type }\n"
|
529
|
+
|
469
530
|
|
470
531
|
# Project directories reference $HOME/.watsonrc for GitHub API token
|
471
532
|
# If we don't find a username=token format string, use username
|
data/lib/watson/formatters.rb
CHANGED
@@ -4,4 +4,5 @@ module Watson::Formatters
|
|
4
4
|
autoload :JsonFormatter, 'watson/formatters/json_formatter'
|
5
5
|
autoload :UniteFormatter, 'watson/formatters/unite_formatter'
|
6
6
|
autoload :SilentFormatter, 'watson/formatters/silent_formatter'
|
7
|
+
autoload :NoColorFormatter, 'watson/formatters/nocolor_formatter'
|
7
8
|
end
|
@@ -0,0 +1,198 @@
|
|
1
|
+
module Watson::Formatters
|
2
|
+
class NoColorFormatter < BaseFormatter
|
3
|
+
def initialize(config)
|
4
|
+
super
|
5
|
+
|
6
|
+
@output = STDOUT
|
7
|
+
end
|
8
|
+
|
9
|
+
def run(structure)
|
10
|
+
debug_print "#{self} : #{__method__}\n"
|
11
|
+
|
12
|
+
output_result do
|
13
|
+
# Check Config to see if we have access to less for printing
|
14
|
+
# If so, open our temp file as the output to write to
|
15
|
+
# Else, just print out to STDOUT
|
16
|
+
# Print header for output
|
17
|
+
debug_print "Printing Header\n"
|
18
|
+
|
19
|
+
print_header
|
20
|
+
|
21
|
+
# Print out structure that was passed to this Printer
|
22
|
+
debug_print "Starting structure printing\n"
|
23
|
+
print_structure(structure)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
###########################################################
|
28
|
+
# Standard header print for class call (uses member cprint)
|
29
|
+
def print_header
|
30
|
+
# Identify method entry
|
31
|
+
debug_print "#{ self } : #{ __method__ }\n"
|
32
|
+
|
33
|
+
# Header
|
34
|
+
cprint <<-MESSAGE.gsub(/^(\s+)/, '')
|
35
|
+
------------------------------
|
36
|
+
watson - inline issue manager\n
|
37
|
+
|
38
|
+
Run in: #{Dir.pwd}
|
39
|
+
Run @ #{Time.now.asctime}
|
40
|
+
------------------------------\n
|
41
|
+
MESSAGE
|
42
|
+
end
|
43
|
+
|
44
|
+
###########################################################
|
45
|
+
# Status printer for member call (uses member cprint)
|
46
|
+
# Print status block in standard format
|
47
|
+
def print_status(msg)
|
48
|
+
cprint "[ #{msg} ]"
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def output_result(&block)
|
54
|
+
debug_print "#{self} : #{__method__}\n"
|
55
|
+
@output = if @config.use_less
|
56
|
+
debug_print "Unix less avaliable, setting output to #{@config.tmp_file}\n"
|
57
|
+
File.open(@config.tmp_file, 'w')
|
58
|
+
else
|
59
|
+
debug_print "Unix less is unavaliable, setting output to STDOUT\n"
|
60
|
+
STDOUT
|
61
|
+
end
|
62
|
+
|
63
|
+
yield
|
64
|
+
|
65
|
+
# If we are using less, close the output file, display with less, then delete
|
66
|
+
if @config.use_less
|
67
|
+
@output.close
|
68
|
+
# [review] - Way of calling a native Ruby less?
|
69
|
+
system("less -R #{@config.tmp_file}")
|
70
|
+
debug_print "File displayed with less, now deleting...\n"
|
71
|
+
File.delete(@config.tmp_file)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
###########################################################
|
76
|
+
# Go through all files and directories and call necessary printing methods
|
77
|
+
# Print all individual entries, call print_structure on each subdir
|
78
|
+
def print_structure(structure)
|
79
|
+
# Identify method entry
|
80
|
+
debug_print "#{self} : #{__method__}\n"
|
81
|
+
|
82
|
+
# First go through all the files in the current structure
|
83
|
+
# The current "structure" should reflect a dir/subdir
|
84
|
+
structure[:files].each do |file|
|
85
|
+
debug_print "Printing info for #{file}\n"
|
86
|
+
print_entry(file)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Next go through all the subdirs and pass them to print_structure
|
90
|
+
structure[:subdirs].each do |subdir|
|
91
|
+
debug_print "Entering #{subdir} to print further\n"
|
92
|
+
print_structure(subdir)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
###########################################################
|
97
|
+
# Individual entry printer
|
98
|
+
# Uses issue hash to format printed output
|
99
|
+
def print_entry(entry)
|
100
|
+
# Identify method entry
|
101
|
+
debug_print "#{self} : #{__method__}\n"
|
102
|
+
|
103
|
+
# If no issues for this file, print that and break
|
104
|
+
# The filename print is repetative, but reduces another check later
|
105
|
+
if entry[:has_issues]
|
106
|
+
return true if @config.show_type == 'clean'
|
107
|
+
|
108
|
+
debug_print "Issues found for #{entry}\n"
|
109
|
+
cprint "\n"
|
110
|
+
print_status 'x'
|
111
|
+
cprint " #{entry[:relative_path]}\n"
|
112
|
+
else
|
113
|
+
unless @config.show_type == 'dirty'
|
114
|
+
debug_print "No issues for #{entry}\n"
|
115
|
+
print_status 'o'
|
116
|
+
cprint " #{entry[:relative_path]}\n"
|
117
|
+
return true
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# [review] - Should the tag structure be self contained in the hash
|
122
|
+
# Or is it ok to reference @config to figure out the tags
|
123
|
+
@config.tag_list.each do | tag |
|
124
|
+
debug_print "Checking for #{ tag }\n"
|
125
|
+
print_tag(tag, entry)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def print_tag(tag, entry)
|
130
|
+
# [review] - Better way to ignore tags through structure (hash) data
|
131
|
+
# Maybe have individual has_issues for each one?
|
132
|
+
if entry[tag].size.zero?
|
133
|
+
debug_print "#{ tag } has no issues, skipping\n"
|
134
|
+
return
|
135
|
+
end
|
136
|
+
|
137
|
+
debug_print "#{tag} has issues in it, print!\n"
|
138
|
+
print_status "#{tag}"
|
139
|
+
cprint "\n"
|
140
|
+
|
141
|
+
# Go through each issue in tag
|
142
|
+
entry[tag].each do |issue|
|
143
|
+
cprint " line #{issue[:line_number]} - #{issue[:title]} "
|
144
|
+
|
145
|
+
|
146
|
+
# If there are any remote issues, print status and issue #
|
147
|
+
if _GH = @config.github_issues[issue[:md5]]
|
148
|
+
debug_print "Found #{ issue[:title]} in remote issues\n"
|
149
|
+
|
150
|
+
cprint <<-MESSAGE.gsub(/^(\s+)/, '').chomp
|
151
|
+
[GH##{_GH[:id]}]
|
152
|
+
MESSAGE
|
153
|
+
end
|
154
|
+
|
155
|
+
if _BB = @config.bitbucket_issues[issue[:md5]]
|
156
|
+
debug_print "Found #{ issue[:title]} in remote issues\n"
|
157
|
+
|
158
|
+
cprint <<-MESSAGE.gsub(/^(\s+)/, '').chomp
|
159
|
+
[BB##{_BB[:id]}]
|
160
|
+
MESSAGE
|
161
|
+
end
|
162
|
+
|
163
|
+
|
164
|
+
if _GL = @config.gitlab_issues[issue[:md5]]
|
165
|
+
debug_print "Found #{ issue[:title]} in remote issues\n"
|
166
|
+
|
167
|
+
cprint <<-MESSAGE.gsub(/^(\s+)/, '').chomp
|
168
|
+
[GL##{_GL[:id]}]
|
169
|
+
MESSAGE
|
170
|
+
end
|
171
|
+
|
172
|
+
if _AS = @config.asana_issues[issue[:md5]]
|
173
|
+
debug_print "Found #{ issue[:title]} in remote issues\n"
|
174
|
+
completed = _AS[:state]
|
175
|
+
|
176
|
+
cprint <<-MESSAGE.gsub(/^(\s+)/, '').chomp
|
177
|
+
[AS##{_AS[:id]}]
|
178
|
+
MESSAGE
|
179
|
+
end
|
180
|
+
|
181
|
+
|
182
|
+
cprint "\n"
|
183
|
+
end
|
184
|
+
|
185
|
+
cprint "\n"
|
186
|
+
end
|
187
|
+
|
188
|
+
###########################################################
|
189
|
+
# Custom color print for member call
|
190
|
+
# Allows not only for custom color printing but writing to file vs STDOUT
|
191
|
+
def cprint(msg)
|
192
|
+
# Identify method entry
|
193
|
+
debug_print "#{self} : #{__method__}\n"
|
194
|
+
|
195
|
+
@output.write(msg)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
data/lib/watson/parser.rb
CHANGED
@@ -12,6 +12,56 @@ module Watson
|
|
12
12
|
require 'digest'
|
13
13
|
require 'pp'
|
14
14
|
|
15
|
+
COMMENT_DEFINITIONS = {
|
16
|
+
'.cpp' => ['//', '/*'], # C++
|
17
|
+
'.cxx' => ['//', '/*'],
|
18
|
+
'.cc' => ['//', '/*'],
|
19
|
+
'.hpp' => ['//', '/*'],
|
20
|
+
'.hxx' => ['//', '/*'],
|
21
|
+
'.c' => ['//', '/*'], # C
|
22
|
+
'.h' => ['//', '/*'],
|
23
|
+
'.java' => ['//', '/*', '/**'], # Java
|
24
|
+
'.class' => ['//', '/*', '/**'],
|
25
|
+
'.cs' => ['//', '/*'], # C#
|
26
|
+
'.scss' => ['//', '/*'], # SASS SCSS
|
27
|
+
'.sass' => ['//', '/*'], # SASS SCSS
|
28
|
+
'.js' => ['//', '/*'], # JavaScript
|
29
|
+
'.php' => ['//', '/*', '#'], # PHP
|
30
|
+
'.m' => ['//', '/*'], # ObjectiveC
|
31
|
+
'.mm' => ['//', '/*'],
|
32
|
+
'.go' => ['//', '/*'], # Go(lang)
|
33
|
+
'.scala' => ['//', '/*'], # Scala
|
34
|
+
'.erl' => ['%%', '%'], # Erlang
|
35
|
+
'.f' => ['!'], # Fortran
|
36
|
+
'.f90' => ['!'], # Fortran
|
37
|
+
'.F' => ['!'], # Fortran
|
38
|
+
'.F90' => ['!'], # Fortran
|
39
|
+
'.hs' => ['--'], # Haskell
|
40
|
+
'.sh' => ['#'], # Bash
|
41
|
+
'.rb' => ['#'], # Ruby
|
42
|
+
'.haml' => ['-#'], # Haml
|
43
|
+
'.pl' => ['#'], # Perl
|
44
|
+
'.pm' => ['#'],
|
45
|
+
'.t' => ['#'],
|
46
|
+
'.py' => ['#'], # Python
|
47
|
+
'.coffee' => ['#'], # CoffeeScript
|
48
|
+
'.zsh' => ['#'], # Zsh
|
49
|
+
'.clj' => [';;'], # Clojure
|
50
|
+
'.sql' => ['---', '//', '#' ], # SQL and PL types
|
51
|
+
'.lua' => ['--', '--[['], # Lua
|
52
|
+
'.vim' => ['"'], # VimL
|
53
|
+
'.md' => ['<!--'], # Markdown
|
54
|
+
'.html' => ['<!--'], # HTML
|
55
|
+
'.el' => [';'], # Emacslisp
|
56
|
+
'.sqf' => ['//','/*'], # SQF
|
57
|
+
'.sqs' => [';'], # SQS
|
58
|
+
'.d' => ['//','/*'], # D
|
59
|
+
'.tex' => ['%'], # LaTex
|
60
|
+
'.hbs' => ['{{!--'], # Handlebars
|
61
|
+
'.twig' => ['{#'] # Twig
|
62
|
+
}.freeze
|
63
|
+
|
64
|
+
|
15
65
|
###########################################################
|
16
66
|
# Initialize the parser with the current watson config
|
17
67
|
def initialize(config)
|
@@ -269,9 +319,9 @@ module Watson
|
|
269
319
|
_issue_list[:has_issues] = true
|
270
320
|
|
271
321
|
# [review] - This could probably be done better, elsewhere!
|
272
|
-
# If it's a HTML comment, remove trailing
|
273
|
-
if _mtch[0].match(
|
274
|
-
_title = _mtch[2].gsub(
|
322
|
+
# If it's a HTML or Handlebars comment, remove trailing -->, --}}
|
323
|
+
if _mtch[0].match(/[<{]+(!--)?(#)?/)
|
324
|
+
_title = _mtch[2].gsub(/(--)?(#)?[>}]+/, "")
|
275
325
|
else
|
276
326
|
_title = _mtch[2]
|
277
327
|
end
|
@@ -365,88 +415,16 @@ module Watson
|
|
365
415
|
# Identify method entry
|
366
416
|
debug_print "#{ self } : #{ __method__ }\n"
|
367
417
|
|
368
|
-
# Grab the file extension (.something)
|
369
|
-
# Check to see whether it is recognized and set comment type
|
370
|
-
# If unrecognized, try to grab the next .something extension
|
371
|
-
# This is to account for file.cpp.1 or file.cpp.bak, ect
|
372
|
-
|
373
|
-
# [review] - Matz style while loop a la http://stackoverflow.com/a/10713963/1604424
|
374
|
-
# Create _mtch var so we can access it outside of the do loop
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
_ext = { '.cpp' => ['//', '/*'], # C++
|
379
|
-
'.cxx' => ['//', '/*'],
|
380
|
-
'.cc' => ['//', '/*'],
|
381
|
-
'.hpp' => ['//', '/*'],
|
382
|
-
'.hxx' => ['//', '/*'],
|
383
|
-
'.c' => ['//', '/*'], # C
|
384
|
-
'.h' => ['//', '/*'],
|
385
|
-
'.java' => ['//', '/*', '/**'], # Java
|
386
|
-
'.class' => ['//', '/*', '/**'],
|
387
|
-
'.cs' => ['//', '/*'], # C#
|
388
|
-
'.scss' => ['//', '/*'], # SASS SCSS
|
389
|
-
'.sass' => ['//', '/*'], # SASS SCSS
|
390
|
-
'.js' => ['//', '/*'], # JavaScript
|
391
|
-
'.php' => ['//', '/*', '#'], # PHP
|
392
|
-
'.m' => ['//', '/*'], # ObjectiveC
|
393
|
-
'.mm' => ['//', '/*'],
|
394
|
-
'.go' => ['//', '/*'], # Go(lang)
|
395
|
-
'.scala' => ['//', '/*'], # Scala
|
396
|
-
'.erl' => ['%%', '%'], # Erlang
|
397
|
-
'.f' => ['!'], # Fortran
|
398
|
-
'.f90' => ['!'], # Fortran
|
399
|
-
'.F' => ['!'], # Fortran
|
400
|
-
'.F90' => ['!'], # Fortran
|
401
|
-
'.hs' => ['--'], # Haskell
|
402
|
-
'.sh' => ['#'], # Bash
|
403
|
-
'.rb' => ['#'], # Ruby
|
404
|
-
'.pl' => ['#'], # Perl
|
405
|
-
'.pm' => ['#'],
|
406
|
-
'.t' => ['#'],
|
407
|
-
'.py' => ['#'], # Python
|
408
|
-
'.coffee' => ['#'], # CoffeeScript
|
409
|
-
'.zsh' => ['#'], # Zsh
|
410
|
-
'.clj' => [';;'], # Clojure
|
411
|
-
'.sql' => ['---', '//', '#' ], # SQL and PL types
|
412
|
-
'.lua' => ['--', '--[['], # Lua
|
413
|
-
'.vim' => ['"'], # VimL
|
414
|
-
'.md' => ['<!--'], # Markdown
|
415
|
-
'.html' => ['<!--'], # HTML
|
416
|
-
'.el' => [';'], # Emacslisp
|
417
|
-
'.sqf' => ['//','/*'], # SQF
|
418
|
-
'.sqs' => [';'], # SQS
|
419
|
-
'.d' => ['//','/*'], # D
|
420
|
-
'.tex' => ['%'] # LaTex
|
421
|
-
}
|
422
|
-
|
423
418
|
# Merge config file type list with defaults
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
loop do
|
428
|
-
_mtch = filename.match(/(\.(\S+))$/)
|
429
|
-
debug_print "Extension: #{ _mtch }\n"
|
430
|
-
|
431
|
-
# Break if we don't find a match
|
432
|
-
break if _mtch.nil?
|
419
|
+
_comments = COMMENT_DEFINITIONS.merge(@config.type_list)
|
433
420
|
|
434
|
-
|
421
|
+
# Grab all possible extensions, check for comment match in reverse order
|
422
|
+
# Return comment type if found in comment definitions, else false
|
423
|
+
filename.split('.')[1..-1].each { |_ext| return _comments['.' << _ext] if _comments.has_key?('.' << _ext) }
|
435
424
|
|
436
|
-
# Can't recognize extension, keep looping in case of .bk, .#, ect
|
437
|
-
filename = filename.gsub(/(\.(\S+))$/, '')
|
438
|
-
debug_print "Didn't recognize, searching #{ filename }\n"
|
439
|
-
|
440
|
-
end
|
441
|
-
|
442
|
-
# We didn't find any matches from the filename, return error (0)
|
443
|
-
# Deal with what default to use in calling method
|
444
|
-
# [review] - Is Ruby convention to return 1 or 0 (or -1) on failure/error?
|
445
425
|
debug_print "Couldn't find any recognized extension type\n"
|
446
426
|
false
|
447
427
|
|
448
428
|
end
|
449
|
-
|
450
|
-
|
451
429
|
end
|
452
430
|
end
|
data/lib/watson/version.rb
CHANGED
data/spec/parser_spec.rb
CHANGED
@@ -93,6 +93,14 @@ describe Parser do
|
|
93
93
|
it 'return correct extension (;; for clojure)' do
|
94
94
|
@parser.get_comment_type('lib/watson.clj').should eql [';;']
|
95
95
|
end
|
96
|
+
|
97
|
+
it 'return correct extension handlebars' do
|
98
|
+
@parser.get_comment_type('lib/watson.hbs').should eql ['{{!--']
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'return correct extension jst handlebars' do
|
102
|
+
@parser.get_comment_type('lib/watson.jst.hbs').should eql ['{{!--']
|
103
|
+
end
|
96
104
|
end
|
97
105
|
|
98
106
|
context 'unknown extension' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watson-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nhmood
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- lib/watson/formatters/base_formatter.rb
|
79
79
|
- lib/watson/formatters/default_formatter.rb
|
80
80
|
- lib/watson/formatters/json_formatter.rb
|
81
|
+
- lib/watson/formatters/nocolor_formatter.rb
|
81
82
|
- lib/watson/formatters/silent_formatter.rb
|
82
83
|
- lib/watson/formatters/unite_formatter.rb
|
83
84
|
- lib/watson/fs.rb
|