countloc 0.3.1 → 0.4.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.
data/README CHANGED
@@ -17,6 +17,8 @@ Python, C, C++, C#, Java, Perl, etc. ...
17
17
  == Download
18
18
  The latest release can be downloaded from: http://rubyforge.org/projects/countloc/
19
19
 
20
+ The latest release can also be installed from the Gem Cutter repository at: http://gemcutter.org/gems/countloc
21
+
20
22
  == Installation
21
23
  CountLOC is packaged as a Ruby gem and as a .zip file.
22
24
 
@@ -62,10 +64,23 @@ To get LOC metrics for a C file:
62
64
  % countloc.rb hello.c
63
65
 
64
66
  To get LOC metrics for all C files in a directory tree:
65
- % countloc.rb -r --file-types "*.c *.h"
67
+ % countloc.rb -r -m c .
66
68
 
67
69
 
68
70
  == Release Notes
71
+ === Release 0.4.0:
72
+ Features
73
+ * Added VB support via patch posted on Rubyforge
74
+ * Added mode option to simplify the selection of source code language.
75
+ * By default all known file types will be processed with language selected based on file type.
76
+ * Installers now install an executable - countloc
77
+
78
+ Bugfixes:
79
+ * [27526] Added workaround for Ruby 1.9.1 bug which caused a stack trace to be dumped during exception processing when a bad filename or directory name was encountered.
80
+ * [27527] Improved help text.
81
+ * [27528] Improved handling of non-ruby source files.
82
+ * [27565] Fixed error where files are duplicated when a directory is specified as an argument.
83
+
69
84
  === Release 0.3.1:
70
85
  Features
71
86
  * No new features - bugfix release only.
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # = countloc - Ruby line counter.
4
+ #
5
+ # Copyright (C) 2009 Stephen Doyle
6
+ #
7
+ # == Features
8
+ # countloc currently supports generating LOC metrics for source
9
+ # code of various languages.
10
+ #
11
+ # == Download
12
+ # The latest countloc release can be downloaded from RubyForge:
13
+ # http://rubyforge.org/frs/?group_id=7555&release_id=29931
14
+ #
15
+ # == Example
16
+ # * countloc --help
17
+ # * countloc some_file.rb
18
+ # * countloc -r .
19
+ #
20
+
21
+ require 'countloc'
22
+
23
+ class CmdLineOptParser
24
+
25
+ def self.usage
26
+ "Usage: #{File.basename($0)} [-h|--help] [options] <file> ... <file>"
27
+ end
28
+
29
+ #
30
+ # Return a structure describing the options
31
+ #
32
+ def self.parse(args)
33
+ # The options set on the command line will be collected in "options"
34
+ # Setup the defaults here
35
+ options = {}
36
+ options[:recurse] = false
37
+ options[:quiet] = false
38
+ options[:mode] = :ruby
39
+ options[:defaultMode] = true
40
+ options[:csv] = false
41
+ options[:csvFilename] = 'countloc.csv'
42
+ options[:html] = false
43
+ options[:htmlFilename] = 'countloc.html'
44
+ options[:useUserFileTypes] = false
45
+
46
+ begin
47
+ OptionParser.new do |opts|
48
+ opts.banner = usage
49
+
50
+ opts.on('-r', '--recurse', 'Recurse into subdirectories') do
51
+ options[:recurse] = true
52
+ end
53
+
54
+ opts.on('-v', '--version', 'Display version number') do
55
+ puts "#{File.basename($0)}, version: #{CountLOC::VERSION}"
56
+ exit
57
+ end
58
+
59
+ opts.on('-q', '--quiet', "Don't write results to stdout") do
60
+ options[:quiet] = true
61
+ end
62
+
63
+ opts.on('-m', '--mode mode',
64
+ [:ruby, :python, :c, :cpp, :csharp, :java, :vb],
65
+ "Set the language mode.",
66
+ "All languages are used by default",
67
+ "if the mode option is omitted.",
68
+ "Supported modes: ",
69
+ " ruby, python,",
70
+ " c, cpp, csharp,",
71
+ " java, vb") do |mode|
72
+ options[:mode] = mode
73
+ options[:defaultMode] = false
74
+ end
75
+
76
+ opts.on('--csv csvFilename', 'Generate csv file') do |csvFilename|
77
+ options[:csvFilename] = csvFilename
78
+ options[:csv] = true
79
+ end
80
+
81
+ opts.on('--html htmlFilename', 'Generate html file') do |htmlFilename|
82
+ options[:htmlFilename] = htmlFilename
83
+ options[:html] = true
84
+ end
85
+
86
+ opts.on('--file-types fileTypes',
87
+ "File types to be included.",
88
+ "Default is dependant upon language mode:",
89
+ " ruby: *.rb",
90
+ " python: *.py",
91
+ " c: *.h, *.c",
92
+ " cpp: *.h, *.hpp, *.cpp, *.c, *.inl",
93
+ " csharp: *.cs",
94
+ " java: *.java",
95
+ " vb: *.vb",
96
+ "Defaults are overridden using this option.") do |fileTypes|
97
+ options[:fileTypes] = fileTypes.split()
98
+ options[:useUserFileTypes] = true
99
+ end
100
+
101
+ opts.on_tail('-h', '--help', 'Display this help and exit') do
102
+ puts opts
103
+ exit
104
+ end
105
+
106
+ end.parse!(args)
107
+
108
+ rescue
109
+ puts "Error: " + $!.to_s
110
+ exit
111
+ end
112
+
113
+ options
114
+ end # parse()
115
+ end # class CmdLineOptParser
116
+
117
+ options = CmdLineOptParser.parse(ARGV)
118
+ if ARGV.length < 1
119
+ puts CmdLineOptParser.usage
120
+ exit
121
+ end
122
+
123
+ CountLOC.countloc(ARGV, options)
@@ -5,23 +5,18 @@
5
5
  # Copyright (C) 2008 Stephen Doyle
6
6
  #
7
7
  # == Features
8
- # countloc.rb currently supports generating LOC metrics for Ruby source code.
9
- #
10
- # The following commenting styles are supported:
11
- # * Single line comments - starting from a # until the end of the line.
12
- # * Multi-line comments - between "=begin" and "=end" tags.
8
+ # countloc.rb generates LOC metrics for a variety of programming languages.
13
9
  #
14
10
  # == Download
15
11
  # The latest countloc release can be downloaded from RubyForge:
16
12
  # http://rubyforge.org/frs/?group_id=7555&release_id=29931
17
13
  #
18
14
  # == Example
19
- # * countloc.rb --help
20
- # * countloc.rb some_file.rb
21
- # * countloc.rb -r .
15
+ # * countloc --help
16
+ # * countloc some_file.rb
17
+ # * countloc -r .
22
18
  #
23
19
 
24
-
25
20
  require 'optparse'
26
21
  require 'time'
27
22
 
@@ -31,7 +26,36 @@ require 'time'
31
26
  #
32
27
  module CountLOC
33
28
 
34
- VERSION = '0.3.1'
29
+ VERSION = '0.4.0'
30
+
31
+ DEFAULT_FILE_TYPES = {
32
+ :ruby => [".rb"],
33
+ :python => [".py"],
34
+ :c => [".h", ".c"],
35
+ :cpp => [".h", ".hpp", ".cpp", ".c", ".cc", ".inl"],
36
+ :csharp => [".cs"],
37
+ :java => [".java"],
38
+ :vb => [".vb"]
39
+ }
40
+
41
+ DEFAULT_STYLE = {
42
+ ".rb" => :ruby,
43
+ ".py" => :python,
44
+ ".h" => :cpp,
45
+ ".c" => :cpp,
46
+ ".hpp" => :cpp,
47
+ ".cpp" => :cpp,
48
+ ".cc" => :cpp,
49
+ ".inl" => :cpp,
50
+ ".cs" => :csharp,
51
+ ".java" => :java,
52
+ ".vb" => :vb
53
+ }
54
+
55
+ # Get the supported style for a given filename
56
+ def getStyle(filename)
57
+ DEFAULT_FILE_TYPES.invert[File.extname(filename)]
58
+ end
35
59
 
36
60
  # Class that gathers the metrics.
37
61
  #
@@ -42,33 +66,48 @@ module CountLOC
42
66
  attr_reader :name
43
67
  attr_accessor :code, :comments, :blank, :lines
44
68
 
45
- COMMENT_PATTERNS = {
46
- :ruby => {
47
- :single_line_full => /^\s*#/,
48
- :single_line_mixed => /#/,
49
- :multiline_begin => /=begin(\s|$)/,
50
- :multiline_end => /=end(\s|$)/,
51
- :blank_line => /^\s*$/
52
- },
69
+ def comment_patterns(style)
70
+ patterns = {
71
+ :ruby => {
72
+ :single_line_full => /^\s*#/,
73
+ :single_line_mixed => /#/,
74
+ :multiline_begin => /=begin(\s|$)/,
75
+ :multiline_end => /=end(\s|$)/,
76
+ :blank_line => /^\s*$/
77
+ },
53
78
 
54
- :python => {
55
- :single_line_full => /^\s*#/,
56
- :single_line_mixed => /#/,
57
- :multiline_begin => /^\s*"""/,
58
- :multiline_end => /"""/,
59
- :blank_line => /^\s*$/
60
- },
61
-
62
- :cplusplus => {
63
- :single_line_full => /^\s*\/\//,
64
- :single_line_mixed => /\/\//,
65
- :multiline_begin => /\/\*/,
66
- :multiline_end => /\*\/\s*$/,
67
- :multiline_begin_mixed => /^[^\s]+.*\/\*/,
68
- :multiline_end_mixed => /\*\/\s*[^\s]+$/,
69
- :blank_line => /^\s*$/
79
+ :vb => {
80
+ :single_line_full => /^\s*\'/,
81
+ :single_line_mixed => /\'/,
82
+ :multiline_begin => /=begin(\s|$)/, # No VB multi-line comment
83
+ :multiline_end => /=end(\s|$)/, # No VB multi-line comment
84
+ :blank_line => /^\s*$/
85
+ },
86
+
87
+ :python => {
88
+ :single_line_full => /^\s*#/,
89
+ :single_line_mixed => /#/,
90
+ :multiline_begin => /^\s*"""/,
91
+ :multiline_end => /"""/,
92
+ :blank_line => /^\s*$/
93
+ },
94
+
95
+ :cpp => { # C++
96
+ :single_line_full => /^\s*\/\//,
97
+ :single_line_mixed => /\/\//,
98
+ :multiline_begin => /\/\*/,
99
+ :multiline_end => /\*\/\s*$/,
100
+ :multiline_begin_mixed => /^[^\s]+.*\/\*/,
101
+ :multiline_end_mixed => /\*\/\s*[^\s]+$/,
102
+ :blank_line => /^\s*$/
103
+ }
70
104
  }
71
- }
105
+ patterns[:c] = patterns[:cpp]
106
+ patterns[:csharp] = patterns[:cpp]
107
+ patterns[:java] = patterns[:cpp]
108
+
109
+ patterns[style]
110
+ end
72
111
 
73
112
  LINE_FORMAT = '%8s %8s %8s %8s %12s %s'
74
113
 
@@ -87,23 +126,6 @@ module CountLOC
87
126
  self.headline.split(' ', 6)
88
127
  end
89
128
 
90
- #
91
- # Retrieve the commenting style that should be used for the given
92
- # file type.
93
- #
94
- def self.commentStyle(ext)
95
- { ".rb" => :ruby,
96
- ".py" => :python,
97
- ".c" => :cplusplus,
98
- ".cpp" => :cplusplus,
99
- ".cc" => :cplusplus,
100
- ".cs" => :cplusplus,
101
- ".h" => :cplusplus,
102
- ".hpp" => :cplusplus,
103
- ".java" => :cplusplus
104
- }[ext]
105
- end
106
-
107
129
  def initialize(name)
108
130
  @name = name
109
131
  @code = 0
@@ -129,7 +151,7 @@ module CountLOC
129
151
  line.gsub!(/\/.*?\//, "X") # Regular expression
130
152
  end
131
153
 
132
- patterns = COMMENT_PATTERNS[style]
154
+ patterns = comment_patterns(style)
133
155
 
134
156
  # In the event where the multiline_end pattern is the same as the
135
157
  # multiline_begin pattern, it is necessary to check for the ending
@@ -280,7 +302,7 @@ module CountLOC
280
302
  begin
281
303
  File.open(@filename, "wb") { |file| file.puts data.to_csv }
282
304
  rescue
283
- puts "Error: " + $!
305
+ puts "Error: " + $!.to_s
284
306
  end
285
307
  end
286
308
 
@@ -301,7 +323,7 @@ module CountLOC
301
323
  begin
302
324
  File.open(@filename, "w") { |file| file.puts data.to_html }
303
325
  rescue
304
- puts "Error: " + $!
326
+ puts "Error: " + $!.to_s
305
327
  end
306
328
  end
307
329
 
@@ -316,15 +338,23 @@ module CountLOC
316
338
  # * :html - write the results to a html file. Default = false.
317
339
  # * :htmlFilename - name of html file to generate. Used with :html option. Default = countloc.html
318
340
  # * :quiet - do not output results to stdout
319
- # * :fileTypes - Types of file to include in the LOC analysis. Used for filtering files
320
- # in recursive analysis and to specify languages other than Ruby. Default = *.rb
341
+ # * :mode - language mode. Determines parsing rules and default file types.
342
+ # Supported modes: ruby, python, c, cpp, csharp, java, vb.
343
+ # If no mode is selected, the default mode is to select the parsing rules based on
344
+ # file extension. A default set of file extensions covering all supported languages
345
+ # will be used.
346
+ # * :fileTypes - Types of file to include in the LOC analysis. By default the file types
347
+ # used are based on the language mode selected. This option can be used to override
348
+ # the default file types.
321
349
  def countloc(files, options = {})
322
-
350
+
323
351
  # Setup defaults for filenames
324
- options[:fileTypes] = ["*.rb"] if not options.include?(:fileTypes)
325
- options[:csvFilename] = "countloc.csv" if not options.include?(:csvFilename)
326
- options[:htmlFilename] = "countloc.html" if not options.include?(:htmlFilename)
327
-
352
+ if options[:defaultMode]
353
+ options[:fileTypes] = DEFAULT_FILE_TYPES.values.flatten if not options[:useUserFileTypes]
354
+ else
355
+ options[:fileTypes] = DEFAULT_FILE_TYPES[options[:mode]] if not options[:useUserFileTypes]
356
+ end
357
+
328
358
  # Setup the output writers based on the options
329
359
  writers = []
330
360
  writers << ConsoleWriter.new if not options[:quiet]
@@ -337,8 +367,9 @@ module CountLOC
337
367
  recursePattern = ("**" if options[:recurse]) || ""
338
368
  files -= dirs
339
369
  options[:fileTypes].each do |fileType|
340
- files += dirs.collect { |dirname| Dir.glob(File.join(dirname, recursePattern, fileType))}.flatten
370
+ files += dirs.collect { |dirname| Dir.glob(File.join(dirname, recursePattern, '*'+fileType))}.flatten
341
371
  end
372
+ files.uniq!
342
373
  end
343
374
 
344
375
  # Sum will keep the running total
@@ -350,14 +381,18 @@ module CountLOC
350
381
  # Generate metrics for each file
351
382
  files.each do |filename|
352
383
  begin
353
- File.open(filename) do |file|
384
+ File.open(filename) do |file|
354
385
  counter = LineCounter.new(filename)
355
- counter.read(file, LineCounter.commentStyle(File.extname(filename)))
386
+ mode = options[:mode]
387
+ if options[:defaultMode]
388
+ mode = DEFAULT_STYLE[File.extname(filename)] || options[:mode]
389
+ end
390
+ counter.read(file, mode)
356
391
  sum += counter
357
392
  results << counter
358
393
  end
359
394
  rescue
360
- puts "Error: " + $!
395
+ puts "Error: " + $!.to_s
361
396
  end
362
397
  end
363
398
 
@@ -392,6 +427,15 @@ if $0 == __FILE__
392
427
  # The options set on the command line will be collected in "options"
393
428
  # Setup the defaults here
394
429
  options = {}
430
+ options[:recurse] = false
431
+ options[:quiet] = false
432
+ options[:mode] = :ruby
433
+ options[:defaultMode] = true
434
+ options[:csv] = false
435
+ options[:csvFilename] = 'countloc.csv'
436
+ options[:html] = false
437
+ options[:htmlFilename] = 'countloc.html'
438
+ options[:useUserFileTypes] = false
395
439
 
396
440
  begin
397
441
  OptionParser.new do |opts|
@@ -402,7 +446,7 @@ if $0 == __FILE__
402
446
  end
403
447
 
404
448
  opts.on('-v', '--version', 'Display version number') do
405
- puts "#{File.basename($0)}, version: #{VERSION}"
449
+ puts "#{File.basename($0)}, version: #{CountLOC::VERSION}"
406
450
  exit
407
451
  end
408
452
 
@@ -410,6 +454,19 @@ if $0 == __FILE__
410
454
  options[:quiet] = true
411
455
  end
412
456
 
457
+ opts.on('-m', '--mode mode',
458
+ [:ruby, :python, :c, :cpp, :csharp, :java, :vb],
459
+ "Set the language mode.",
460
+ "All languages are used by default",
461
+ "if the mode option is omitted.",
462
+ "Supported modes: ",
463
+ " ruby, python,",
464
+ " c, cpp, csharp,",
465
+ " java, vb") do |mode|
466
+ options[:mode] = mode
467
+ options[:defaultMode] = false
468
+ end
469
+
413
470
  opts.on('--csv csvFilename', 'Generate csv file') do |csvFilename|
414
471
  options[:csvFilename] = csvFilename
415
472
  options[:csv] = true
@@ -422,8 +479,17 @@ if $0 == __FILE__
422
479
 
423
480
  opts.on('--file-types fileTypes',
424
481
  "File types to be included.",
425
- "Default = *.rb") do |fileTypes|
482
+ "Default is dependant upon language mode:",
483
+ " ruby: *.rb",
484
+ " python: *.py",
485
+ " c: *.h, *.c",
486
+ " cpp: *.h, *.hpp, *.cpp, *.c, *.inl",
487
+ " csharp: *.cs",
488
+ " java: *.java",
489
+ " vb: *.vb",
490
+ "Defaults are overridden using this option.") do |fileTypes|
426
491
  options[:fileTypes] = fileTypes.split()
492
+ options[:useUserFileTypes] = true
427
493
  end
428
494
 
429
495
  opts.on_tail('-h', '--help', 'Display this help and exit') do
@@ -434,7 +500,7 @@ if $0 == __FILE__
434
500
  end.parse!(args)
435
501
 
436
502
  rescue
437
- puts "Error: " + $!
503
+ puts "Error: " + $!.to_s
438
504
  exit
439
505
  end
440
506
 
data/setup.rb CHANGED
@@ -8,6 +8,10 @@
8
8
  # the GNU LGPL, Lesser General Public License version 2.1.
9
9
  #
10
10
 
11
+ require 'rubygems'
12
+ require 'fileutils'
13
+ require 'tmpdir'
14
+
11
15
  unless Enumerable.method_defined?(:map) # Ruby 1.4.6
12
16
  module Enumerable
13
17
  alias map collect
@@ -1344,6 +1348,9 @@ class Installer
1344
1348
 
1345
1349
  def install_dir_bin(rel)
1346
1350
  install_files targetfiles(), "#{config('bindir')}/#{rel}", 0755
1351
+
1352
+ return unless Gem.win_platform?
1353
+ install_bat_files targetfiles(), "#{config('bindir')}/#{rel}", 0755
1347
1354
  end
1348
1355
 
1349
1356
  def install_dir_lib(rel)
@@ -1378,6 +1385,30 @@ class Installer
1378
1385
  end
1379
1386
  end
1380
1387
 
1388
+ def install_bat_files(list, dest, mode)
1389
+ mkdir_p dest, @config.install_prefix
1390
+ list.each do |bin_file|
1391
+ begin
1392
+ bin_cmd_file = File.join Dir.tmpdir, "#{bin_file}.bat"
1393
+
1394
+ File.open bin_cmd_file, 'w' do |file|
1395
+ file.puts <<-TEXT
1396
+ @ECHO OFF
1397
+ IF NOT "%~f0" == "~f0" GOTO :WinNT
1398
+ @"#{Gem.ruby}" "#{bin_file}" %1 %2 %3 %4 %5 %6 %7 %8 %9
1399
+ GOTO :EOF
1400
+ :WinNT
1401
+ "%~d0%~p0ruby.exe" "%~d0%~p0%~n0" %*
1402
+ TEXT
1403
+ end
1404
+
1405
+ install bin_cmd_file, dest, mode, @config.install_prefix
1406
+ ensure
1407
+ FileUtils.rm bin_cmd_file
1408
+ end
1409
+ end
1410
+ end
1411
+
1381
1412
  def libfiles
1382
1413
  glob_reject(%w(*.y *.output), targetfiles())
1383
1414
  end
@@ -11,7 +11,7 @@ class CppTest < Test::Unit::TestCase
11
11
 
12
12
  def setup
13
13
  @counter = LineCounter.new('Test')
14
- @style = :cplusplus
14
+ @style = :cpp
15
15
  end
16
16
 
17
17
  def test_single_line_comment
@@ -0,0 +1,67 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+
3
+ # Copyright (C) 2008 Stephen Doyle
4
+
5
+ require 'test/unit'
6
+ require 'countloc'
7
+
8
+ class VBTest < Test::Unit::TestCase
9
+
10
+ include CountLOC
11
+
12
+ def setup
13
+ @counter = LineCounter.new('Test')
14
+ @style = :vb
15
+ end
16
+
17
+ def test_single_line_comment
18
+ @counter.read("' This is a comment", @style)
19
+ assert_equal(0, @counter.code)
20
+ assert_equal(1, @counter.comments)
21
+ assert_equal(0, @counter.blank)
22
+ assert_equal(1, @counter.lines)
23
+ end
24
+
25
+ def test_single_line_comment_with_whitespace
26
+ @counter.read(" ' This is a comment", @style)
27
+ assert_equal(0, @counter.code)
28
+ assert_equal(1, @counter.comments)
29
+ assert_equal(0, @counter.blank)
30
+ assert_equal(1, @counter.lines)
31
+ end
32
+
33
+ def test_mixed
34
+ @counter.read("Label1.Visible = false ' This is a mixed comment", @style)
35
+ assert_equal(1, @counter.code)
36
+ assert_equal(1, @counter.comments)
37
+ assert_equal(0, @counter.blank)
38
+ assert_equal(1, @counter.lines)
39
+ end
40
+
41
+ def test_comment_char_in_double_quote_string
42
+ @counter.read("x = \"hello '\"", @style)
43
+ assert_equal(1, @counter.code)
44
+ assert_equal(0, @counter.comments)
45
+ assert_equal(0, @counter.blank)
46
+ assert_equal(1, @counter.lines)
47
+ end
48
+
49
+ def test_blank_lines_with_newline
50
+ @counter.read("\n", @style)
51
+ assert_equal(0, @counter.code)
52
+ assert_equal(0, @counter.comments)
53
+ assert_equal(1, @counter.blank)
54
+ assert_equal(1, @counter.lines)
55
+ end
56
+
57
+ def test_blank_lines_with_whitespace
58
+ @counter.read(" \t", @style)
59
+ assert_equal(0, @counter.code)
60
+ assert_equal(0, @counter.comments)
61
+ assert_equal(1, @counter.blank)
62
+ assert_equal(1, @counter.lines)
63
+ end
64
+
65
+ end
66
+
67
+
@@ -6,3 +6,4 @@ require 'test/unit'
6
6
  require 'tc_ruby'
7
7
  require 'tc_python'
8
8
  require 'tc_cpp'
9
+ require 'tc_vb'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: countloc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Doyle
@@ -9,14 +9,14 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-08 22:34:09.136095 +00:00
12
+ date: 2009-12-17 21:43:16.254209 +00:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
16
  description: LOC metrics generation script implementation in Ruby.
17
17
  email: support@stephendoyle.net
18
- executables: []
19
-
18
+ executables:
19
+ - countloc
20
20
  extensions: []
21
21
 
22
22
  extra_rdoc_files: []
@@ -26,12 +26,16 @@ files:
26
26
  - LICENSE
27
27
  - setup.rb
28
28
  - lib/countloc.rb
29
+ - bin/countloc
29
30
  - test/tc_cpp.rb
30
31
  - test/tc_python.rb
31
32
  - test/tc_ruby.rb
33
+ - test/tc_vb.rb
32
34
  - test/ts_countloc.rb
33
35
  has_rdoc: true
34
36
  homepage: http://countloc.rubyforge.org/
37
+ licenses: []
38
+
35
39
  post_install_message:
36
40
  rdoc_options:
37
41
  - --title
@@ -54,9 +58,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
54
58
  requirements: []
55
59
 
56
60
  rubyforge_project: countloc
57
- rubygems_version: 1.0.1
61
+ rubygems_version: 1.3.5
58
62
  signing_key:
59
- specification_version: 2
63
+ specification_version: 3
60
64
  summary: Ruby line counter - countLOC
61
65
  test_files:
62
66
  - test/ts_countloc.rb