CoffeeTags 0.0.1.8 → 0.0.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.
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Gemfile CHANGED
@@ -14,5 +14,5 @@ group :development do
14
14
  end
15
15
 
16
16
  group :test do
17
- gem 'rspec', '~> 2.6.0'
17
+ gem 'rspec', '2.8.0'
18
18
  end
@@ -12,7 +12,7 @@ module Coffeetags
12
12
 
13
13
  # regexes
14
14
  @block = /^\s*(if|unless|switch|loop|do)/
15
- @class_regex = /^\s*class\s*(\w*)/
15
+ @class_regex = /^\s*class\s*([\w\.]*)/
16
16
  @proto_meths = /^\s*([A-Za-z]*)::([@a-zA-Z0-9_]*)/
17
17
  @var_regex = /([@a-zA-Z0-9_]*)\s*[=:]{1}\s*$/
18
18
  @token_regex = /([@a-zA-Z0-9_]*)\s*[:=]{1}/
@@ -49,8 +49,12 @@ module Coffeetags
49
49
  line_n += 1
50
50
  level = line_level line
51
51
 
52
- if (_class = line.match @class_regex)
53
- @tree << { :name => _class[1], :level => level }
52
+ # ignore comments!
53
+ next if line =~ /^\s*#/
54
+
55
+ # FIXME this could be DRYied
56
+ if (_class = line.match @class_regex)
57
+ @tree << { :name => _class[1], :level => level }
54
58
  end
55
59
 
56
60
  if(_proto = line.match @proto_meths)
@@ -70,19 +74,19 @@ module Coffeetags
70
74
 
71
75
  if not token.nil?
72
76
  o = {
73
- :name => token[1],
74
- :level => level,
75
- :parent => '',
76
- :source => line.chomp,
77
- :line => line_n
77
+ :name => token[1],
78
+ :level => level,
79
+ :parent => '',
80
+ :source => line.chomp,
81
+ :line => line_n
78
82
  }
79
83
 
80
84
  # remove edge cases for now
81
85
  # - if a line containes a line like: element.getElement('type=[checkbox]').lol()
82
86
  is_in_string = line =~ /.*['"].*#{token[1]}.*=.*["'].*/
83
87
 
84
- # - scope access and comparison in if x == 'lol'
85
- is_in_comparison = line =~ /::|==/
88
+ # - scope access and comparison in if x == 'lol'
89
+ is_in_comparison = line =~ /::|==/
86
90
 
87
91
  # - objects with blank parent (parser bug?)
88
92
  has_blank_parent = o[:parent] =~ /\.$/
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Coffeetags
3
- VERSION = "0.0.1.8"
3
+ VERSION = "0.0.2.0"
4
4
  end
data/lib/CoffeeTags.rb CHANGED
@@ -2,6 +2,7 @@
2
2
  require "CoffeeTags/version"
3
3
  require "CoffeeTags/parser"
4
4
  require "CoffeeTags/formatter"
5
+ require 'optparse'
5
6
 
6
7
  class Object
7
8
  def blank?
@@ -18,22 +19,10 @@ module Coffeetags
18
19
  NAME = "CoffeeTags"
19
20
  URL = "https://github.com/lukaszkorecki/CoffeeTags"
20
21
 
21
- STRINGS = {
22
- 'version' => "#{NAME} #{Coffeetags::VERSION} by #{AUTHOR} ( #{URL} )",
23
- 'help' => <<-HELP
24
- -R - process current directory recursively and look for all *.coffee files
25
- --f <file> - save tags to <file>, if <file> == '-' tags get print out to STDOUT (jscatgs style)
26
- --version - coffeetags version
27
- --vim-conf - print out tagbar config for vim
28
- --include-vars - include objects/variables in generated tags
29
- combine --vim-conf and --include-vars to create a config which adds '--include-vars' option
30
- HELP
31
- }
32
22
  class Utils
33
23
  def self.tagbar_conf include_vars
34
24
  <<-CONF
35
25
  " Add this type definition to your vimrc
36
- " or do
37
26
  " coffeetags --vim-conf >> <PATH TO YOUR VIMRC>
38
27
  " if you want your tags to include vars/objects do:
39
28
  " coffeetags --vim-conf --include-vars
@@ -54,36 +43,59 @@ HELP
54
43
  end
55
44
 
56
45
  def self.option_parser args
57
- args = ['--version', '--help'] if args.empty?
46
+ args << '-h' if args.empty?
47
+ options = {}
48
+ optparse = OptionParser.new do |opts|
58
49
 
59
- include_vars = ! args.delete('--include-vars').nil?
60
- recursive = ! args.delete('-R').nil?
50
+ opts.banner = (<<-BAN
51
+ #{NAME} #{Coffeetags::VERSION}
52
+ by #{AUTHOR} ( #{URL} )
53
+ Usage:
54
+ coffeetags [OPTIONS] <list of files>
55
+ BAN
56
+ ).gsub(/^\s*/,'')
61
57
 
62
- output = nil
58
+ opts.on('-i', '--include-vars', "Include variables in generated tags") do |o|
59
+ options[:include_vars] = true
60
+ end
61
+
62
+ opts.on('-f', '--file FILE', 'Write tags to FILE (use - for std out)') do |o|
63
+ options[:output] = o unless o == '-'
64
+
65
+ end
66
+
67
+ opts.on('-R', '--recursive', 'Process current directory recursively') do |o|
68
+ options[:recur] = true
69
+ end
70
+
71
+ opts.on('-v', '--version', 'Current version') do
72
+ puts Coffeetags::VERSION
73
+ exit
74
+
75
+ end
76
+
77
+ opts.on('-h','--help','HALP') do
78
+ puts opts
79
+ exit
80
+ end
63
81
 
64
- unless args.index( '-f').nil?
65
- output = args[ args.index('-f') + 1]
66
- args.delete '-f'
67
- args.delete output
68
- output = nil if output == '-'
69
82
  end
70
83
 
71
- to_print = [].tap do |_to_print|
72
- _to_print << args.delete( '--version')
73
- _to_print << args.delete( '--help')
74
- end.reject { |i| i.nil? }.map { |i| i.sub '--', ''}.map { |s| STRINGS[s] }
75
- ( to_print << tagbar_conf(include_vars) ) unless args.delete('--vim-conf').nil?
84
+ optparse.parse! args
85
+
86
+ options[:files] = args.to_a
87
+ options[:files] += Dir['./**/*.coffee', './**/Cakefile'] if options[:recur]
76
88
 
77
- to_print.each { |str| puts str }
89
+ [
90
+ options[:output],
91
+ options[:include_vars],
92
+ options[:files]
93
+ ]
78
94
 
79
- args += Dir['./**/*.coffee', './**/Cakefile'] if recursive
80
- [output, include_vars, args] unless args.empty?
81
95
  end
82
96
 
83
97
 
84
98
  def self.run output, include_vars, files
85
-
86
- files = [files] if files.is_a? String
87
99
  __out = if output.nil?
88
100
  STDOUT
89
101
  else
@@ -92,6 +104,8 @@ HELP
92
104
 
93
105
  __out << Coffeetags::Formatter.header
94
106
 
107
+ files = [ files] if files.is_a? String
108
+
95
109
  files.reject { |f| f =~ /^-/}.each do |file|
96
110
  sc = File.read file
97
111
  parser = Coffeetags::Parser.new sc, include_vars
@@ -1,13 +1,16 @@
1
- require File.expand_path('lib/CoffeeTags')
1
+ require 'spec_helper'
2
2
  include Coffeetags
3
3
  describe Utils do
4
4
  context 'Argument parsing' do
5
5
  it "returns nil when nothing is passed" do
6
- Utils.option_parser( []).should == nil
6
+ expect {
7
+ Utils.option_parser( [])
8
+ }.to raise_error SystemExit
9
+
7
10
  end
8
11
 
9
12
  it "returns files list" do
10
- Utils.option_parser( [ 'lol.coffee']).should == [ nil, false, ['lol.coffee']]
13
+ Utils.option_parser([ 'lol.coffee']).should == [ nil, nil, ['lol.coffee']]
11
14
  end
12
15
 
13
16
  it "parses --include-vars option" do
@@ -15,7 +18,7 @@ describe Utils do
15
18
  end
16
19
 
17
20
  it "parses -f <file> option" do
18
- Utils.option_parser( [ '-f','tags' ,'lol.coffee']).should == [ 'tags', false, ['lol.coffee']]
21
+ Utils.option_parser( [ '-f','tags' ,'lol.coffee']).should == [ 'tags', nil, ['lol.coffee']]
19
22
  end
20
23
 
21
24
  end
@@ -85,7 +88,6 @@ FF
85
88
 
86
89
  end
87
90
  after :each do
88
- STDERR << "DELETING!"
89
91
  `rm test.out`
90
92
  end
91
93
  end
@@ -0,0 +1,2 @@
1
+ class App.Campfire
2
+ constructor: ->
@@ -3,7 +3,7 @@
3
3
  !_TAG_PROGRAM_AUTHOR Łukasz Korecki /lukasz@coffeesounds.com/
4
4
  !_TAG_PROGRAM_NAME CoffeeTags //
5
5
  !_TAG_PROGRAM_URL https://github.com/lukaszkorecki/CoffeeTags /GitHub repository/
6
- !_TAG_PROGRAM_VERSION 0.0.1.7 //
6
+ !_TAG_PROGRAM_VERSION 0.0.1.8 //
7
7
  bump spec/fixtures/test.coffee /bump/;" f lineno:1 object:window type:function
8
8
  ho spec/fixtures/test.coffee /ho/;" f lineno:5 object:Wat type:function
9
9
  bump spec/fixtures/test.coffee /bump/;" f lineno:10 object:Wat.ho.@lolWat type:function
@@ -11,6 +11,7 @@ bump_up spec/fixtures/test.coffee /bump_up/;" f lineno:12 object:Wat.ho.@lolWat
11
11
  @filter spec/fixtures/test.coffee /@filter/;" f lineno:14 object:Wat.ho type:function
12
12
  _loop spec/fixtures/test.coffee /_loop/;" f lineno:19 object:window type:function
13
13
  bound_func spec/fixtures/test.coffee /bound_func/;" f lineno:41 object:window type:function
14
+ beam_magnum spec/fixtures/test.coffee /beam_magnum/;" f lineno:44 object:window type:function
14
15
  constructor spec/fixtures/campfire.coffee /constructor/;" f lineno:8 object:Campfire type:function
15
16
  handlers spec/fixtures/campfire.coffee /handlers/;" f lineno:14 object:Campfire type:function
16
17
  onSuccess spec/fixtures/campfire.coffee /onSuccess/;" f lineno:16 object:Campfire.handlers.resp type:function
@@ -3,7 +3,7 @@
3
3
  !_TAG_PROGRAM_AUTHOR Łukasz Korecki /lukasz@coffeesounds.com/
4
4
  !_TAG_PROGRAM_NAME CoffeeTags //
5
5
  !_TAG_PROGRAM_URL https://github.com/lukaszkorecki/CoffeeTags /GitHub repository/
6
- !_TAG_PROGRAM_VERSION 0.0.1.7 //
6
+ !_TAG_PROGRAM_VERSION 0.0.1.8 //
7
7
  bump spec/fixtures/test.coffee /bump/;" f lineno:1 object:window type:function
8
8
  ho spec/fixtures/test.coffee /ho/;" f lineno:5 object:Wat type:function
9
9
  bump spec/fixtures/test.coffee /bump/;" f lineno:10 object:Wat.ho.@lolWat type:function
@@ -11,3 +11,4 @@ bump_up spec/fixtures/test.coffee /bump_up/;" f lineno:12 object:Wat.ho.@lolWat
11
11
  @filter spec/fixtures/test.coffee /@filter/;" f lineno:14 object:Wat.ho type:function
12
12
  _loop spec/fixtures/test.coffee /_loop/;" f lineno:19 object:window type:function
13
13
  bound_func spec/fixtures/test.coffee /bound_func/;" f lineno:41 object:window type:function
14
+ beam_magnum spec/fixtures/test.coffee /beam_magnum/;" f lineno:44 object:window type:function
@@ -39,3 +39,6 @@ for f in dir
39
39
  zorb = get['x=\\/f'].getLast('/woot$')
40
40
 
41
41
  bound_func = (ok) => wat(ok)
42
+
43
+ # TODO: beam_shield -> deployed(true)
44
+ beam_magnum : -> deployed(true)
@@ -62,3 +62,10 @@
62
62
  :kind: f
63
63
  :name: 'bound_func'
64
64
  :parent: window
65
+ - :source: 'beam_magnum : -> deployed(true)'
66
+ :line: 44
67
+ :level: 0
68
+ :kind: f
69
+ :name: 'beam_magnum'
70
+ :parent: window
71
+
@@ -58,6 +58,15 @@
58
58
  :line: 41
59
59
  :level: 4
60
60
 
61
+ - :name: App.Campfire
62
+ :level: 0
63
+ - :source: " constructor: ->"
64
+ :parent: App.Campfire
65
+ :kind: f
66
+ :name: constructor
67
+ :line: 8
68
+ :level: 2
69
+
61
70
 
62
71
  - :name: Test
63
72
  :level: 0
@@ -1,5 +1,4 @@
1
- require './lib/CoffeeTags'
2
-
1
+ require 'spec_helper'
3
2
  describe 'CoffeeTags::Formatter' do
4
3
  before :each do
5
4
  @tree = YAML::load_file './spec/fixtures/tree.yaml'
data/spec/parser_spec.rb CHANGED
@@ -1,7 +1,8 @@
1
- require './lib/CoffeeTags'
1
+ require 'spec_helper'
2
2
  describe 'CoffeeTags::Parser' do
3
3
  before :all do
4
4
  @campfire_class = File.read File.expand_path('./spec/fixtures/campfire.coffee')
5
+ @class_with_dot = File.read File.expand_path('./spec/fixtures/class_with_dot.coffee')
5
6
  @test_file = File.read File.expand_path('./spec/fixtures/test.coffee')
6
7
 
7
8
  @cf_tree = YAML::load_file File.expand_path('./spec/fixtures/tree.yaml')
@@ -76,6 +77,14 @@ describe 'CoffeeTags::Parser' do
76
77
  c.should == @cf_tree.find {|i| i[:name] == 'Test'}
77
78
  end
78
79
 
80
+ it "parses the class with dot in name" do
81
+ @coffee_parser = Coffeetags::Parser.new @class_with_dot, true
82
+ @coffee_parser.execute!
83
+
84
+ c = @coffee_parser.tree.find { |i| i[:name] == 'App.Campfire'}
85
+ c.should == @cf_tree.find {|i| i[:name] == 'App.Campfire'}
86
+ end
87
+
79
88
  it "parses the instance variable" do
80
89
  c =@coffee_parser.tree.find { |i| i[:name] == '@url'}
81
90
  c.should == @cf_tree.find {|i| i[:name] == '@url'}
@@ -122,11 +131,10 @@ describe 'CoffeeTags::Parser' do
122
131
 
123
132
  end
124
133
  it "detects a fat arrow function" do
125
- c =@parser_test.tree.find { |i| i[:name] == 'bound_func'}
134
+ c = @parser_test.tree.find { |i| i[:name] == 'bound_func'}
126
135
  c.should == @test_tree.find {|i| i[:name] == 'bound_func'}
127
136
 
128
137
  end
129
-
130
138
  it "extracts a method defined in a prototype" do
131
139
  pending 'methods defined on prototype needs implementing'
132
140
  pro = @parser_test.tree.find { |i| i[:name] == '_loop'}
@@ -135,6 +143,11 @@ describe 'CoffeeTags::Parser' do
135
143
  pro.should == exp
136
144
  end
137
145
 
146
+ it 'Ignores #TODO: -> (and any other comment line)' do
147
+ @parser_test.tree.find { |i| i[:name] == 'TODO' }.should be_nil
148
+
149
+ end
150
+
138
151
  context 'for loop' do
139
152
  subject {
140
153
  @parser_test = Coffeetags::Parser.new @test_file, true
@@ -0,0 +1,2 @@
1
+ require 'yaml'
2
+ require './lib/CoffeeTags'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: CoffeeTags
3
3
  version: !ruby/object:Gem::Version
4
- hash: 91
4
+ hash: 71
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- - 8
11
- version: 0.0.1.8
9
+ - 2
10
+ - 0
11
+ version: 0.0.2.0
12
12
  platform: ruby
13
13
  authors:
14
14
  - "\xC5\x81ukasz Korecki"
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-01-02 00:00:00 +00:00
19
+ date: 2012-02-28 00:00:00 +00:00
20
20
  default_executable:
21
21
  dependencies: []
22
22
 
@@ -31,6 +31,7 @@ extra_rdoc_files: []
31
31
 
32
32
  files:
33
33
  - .gitignore
34
+ - .rspec
34
35
  - .rvmrc
35
36
  - .travis.yml
36
37
  - CoffeeTags.gemspec
@@ -47,6 +48,7 @@ files:
47
48
  - spec/fixtures/campfire.coffee
48
49
  - spec/fixtures/campfire.js
49
50
  - spec/fixtures/campfire.js.tags
51
+ - spec/fixtures/class_with_dot.coffee
50
52
  - spec/fixtures/out.test-two.ctags
51
53
  - spec/fixtures/out.test.ctags
52
54
  - spec/fixtures/test.coffee
@@ -54,6 +56,7 @@ files:
54
56
  - spec/fixtures/tree.yaml
55
57
  - spec/formatter_spec.rb
56
58
  - spec/parser_spec.rb
59
+ - spec/spec_helper.rb
57
60
  - test.rb
58
61
  has_rdoc: true
59
62
  homepage: http://github.com/lukaszkorecki/CoffeeTags
@@ -94,6 +97,7 @@ test_files:
94
97
  - spec/fixtures/campfire.coffee
95
98
  - spec/fixtures/campfire.js
96
99
  - spec/fixtures/campfire.js.tags
100
+ - spec/fixtures/class_with_dot.coffee
97
101
  - spec/fixtures/out.test-two.ctags
98
102
  - spec/fixtures/out.test.ctags
99
103
  - spec/fixtures/test.coffee
@@ -101,3 +105,4 @@ test_files:
101
105
  - spec/fixtures/tree.yaml
102
106
  - spec/formatter_spec.rb
103
107
  - spec/parser_spec.rb
108
+ - spec/spec_helper.rb