countloc 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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