rdoc-tags 1.0 → 1.1

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,12 @@
1
+ === 1.1 / 2010-12-29
2
+
3
+ * Minor enhancements
4
+ * Added RDoc::TagsTask which generates a TAGS file
5
+ * Added +:rdoc_tags+ plugin for Hoe
6
+ * Bug fix
7
+ * Multiple tags are now generated for definitions across more than one file.
8
+ Bug #1 by postmodern.
9
+
1
10
  === 1.0 / 2010-12-23
2
11
 
3
12
  * 1 major enhancement
@@ -3,6 +3,8 @@ History.txt
3
3
  Manifest.txt
4
4
  README.txt
5
5
  Rakefile
6
+ lib/hoe/rdoc_tags.rb
6
7
  lib/rdoc/discover.rb
7
8
  lib/rdoc/generator/tags.rb
9
+ lib/rdoc/tags_task.rb
8
10
  test/test_rdoc_generator_tags.rb
data/README.txt CHANGED
@@ -1,4 +1,4 @@
1
- = rdoc_tags
1
+ = rdoc-tags
2
2
 
3
3
  * https://github.com/rdoc/rdoc-tags
4
4
 
@@ -8,6 +8,10 @@ A TAGS file generator based on http://ctags.sourceforge.net/FORMAT. rdoc-tags
8
8
  handles namespaced classes and modules, ! and ? methods, constants and
9
9
  attributes better than Exuberant Ctags.
10
10
 
11
+ rdoc-tags includes a Hoe plugin +:rdoc_tags+ making it easy to add tag support
12
+ to your ruby project. If you don't use Hoe you can instead use RDoc::TagsTask
13
+ to add rake tasks for building TAGS to your ruby project.
14
+
11
15
  == FEATURES/PROBLEMS:
12
16
 
13
17
  * Much slower that Exuberant Ctags
data/Rakefile CHANGED
@@ -6,15 +6,16 @@ require 'hoe'
6
6
  Hoe.plugin :git
7
7
  Hoe.plugin :isolate
8
8
  Hoe.plugin :minitest
9
+ Hoe.plugin :rdoc_tags
9
10
  Hoe.plugins.delete :rubyforge
10
11
 
11
12
  Hoe.spec 'rdoc-tags' do
12
13
  developer 'Eric Hodel', 'drbrain@segment7.net'
13
14
 
14
- extra_deps << ['rdoc', '~> 3']
15
+ extra_deps << ['rdoc', '~> 3.2']
15
16
  extra_dev_deps << ['isolate', '~> 3']
16
17
 
17
- self.isolate_dir = 'tmp/isolated'
18
+ self.isolate_dir = 'tmp/isolate'
18
19
  end
19
20
 
20
21
  # vim: syntax=Ruby
@@ -0,0 +1,44 @@
1
+ require 'rdoc/tags_task'
2
+
3
+ ##
4
+ # The RDoc tags plugin for Hoe uses the standard names +tags+, +retag+ and
5
+ # +clobber_tags+ from RDoc::TagsTask. The plugin also integrates with the
6
+ # +clean+, +clobber+ and +newb+ tasks Hoe provides to add automatic cleanup.
7
+ #
8
+ # The +tags+ task automatically builds tags using all files in your
9
+ # specification's require paths (defaults to the lib directory).
10
+ #
11
+ # When the +newb+ task is run the plugin will automatically build a TAGS file.
12
+ #
13
+ # When the +clean+ or +clobber+ task is run the plugin will automatically
14
+ # remove the TAGS file.
15
+ #
16
+ # The plugin defaults to generating vim-style tags. You can override this by
17
+ # setting a value for <tt>'tags_style'</tt> in ~/.hoerc. Be sure to check
18
+ # <tt>rdoc --help</tt> for valid values.
19
+
20
+ module Hoe::RDoc_tags
21
+
22
+ ##
23
+ # Defines tasks for building and removing TAGS files that integrate with
24
+ # Hoe.
25
+
26
+ def define_rdoc_tags_tasks
27
+ tags_style = 'vim'
28
+
29
+ with_config do |config, _|
30
+ tags_style = config['tags_style']
31
+ end
32
+
33
+ RDoc::TagsTask.new do |rd|
34
+ rd.files += spec.require_paths
35
+ rd.tags_style = tags_style
36
+ end
37
+
38
+ task :clean => :clobber_tags
39
+ task :clobber => :clobber_tags
40
+ task :newb => :tags
41
+ end
42
+
43
+ end
44
+
@@ -9,7 +9,7 @@ class RDoc::Generator::Tags
9
9
  ##
10
10
  # The version of the tags generator you are using
11
11
 
12
- VERSION = '1.0'
12
+ VERSION = '1.1'
13
13
 
14
14
  RDoc::RDoc.add_generator self
15
15
 
@@ -61,7 +61,7 @@ class RDoc::Generator::Tags
61
61
  def initialize options
62
62
  @options = options
63
63
  @dry_run = options.dry_run
64
- @tags = {}
64
+ @tags = Hash.new { |h, name| h[name] = [] }
65
65
  end
66
66
 
67
67
  ##
@@ -69,7 +69,7 @@ class RDoc::Generator::Tags
69
69
 
70
70
  def generate top_levels
71
71
  top_levels.each do |top_level|
72
- @tags[top_level.relative_name] = [top_level.relative_name, 0, 'F']
72
+ @tags[top_level.relative_name] << [top_level.relative_name, 0, 'F']
73
73
  end
74
74
 
75
75
  RDoc::TopLevel.all_classes_and_modules.each do |klass|
@@ -83,8 +83,8 @@ class RDoc::Generator::Tags
83
83
  end
84
84
 
85
85
  klass.in_files.each do |file|
86
- @tags[klass.full_name] = [file.relative_name, address, 'c']
87
- @tags[klass.name] = [file.relative_name, address, 'c']
86
+ @tags[klass.full_name] << [file.relative_name, address, 'c']
87
+ @tags[klass.name] << [file.relative_name, address, 'c']
88
88
  end
89
89
 
90
90
  klass.each_attribute do |attr|
@@ -95,12 +95,12 @@ class RDoc::Generator::Tags
95
95
  kind
96
96
  ]
97
97
 
98
- @tags[attr.name] = where
99
- @tags["#{attr.name}="] = where
98
+ @tags[attr.name] << where
99
+ @tags["#{attr.name}="] << where
100
100
  end
101
101
 
102
102
  klass.each_constant do |constant|
103
- @tags[constant.name] = [
103
+ @tags[constant.name] << [
104
104
  constant.file.relative_name, "/#{constant.name}\\s\\*=/", 'd', kind]
105
105
  end
106
106
 
@@ -112,7 +112,7 @@ class RDoc::Generator::Tags
112
112
  "/def #{method.name}/"
113
113
  end
114
114
 
115
- @tags[method.name] = [
115
+ @tags[method.name] << [
116
116
  method.file.relative_name, address, 'f', kind]
117
117
  end
118
118
  end
@@ -134,8 +134,10 @@ class RDoc::Generator::Tags
134
134
  !_TAG_PROGRAM_VERSION\t#{VERSION}
135
135
  INFO
136
136
 
137
- @tags.sort.each do |name, (file, address, *field)|
138
- io.write "#{name}\t#{file}\t#{address};\"\t#{field.join "\t"}\n"
137
+ @tags.sort.each do |name, definitions|
138
+ definitions.uniq.each do |(file, address, *field)|
139
+ io.write "#{name}\t#{file}\t#{address};\"\t#{field.join "\t"}\n"
140
+ end
139
141
  end
140
142
  end
141
143
  end
@@ -0,0 +1,129 @@
1
+ require 'rubygems'
2
+
3
+ begin
4
+ gem 'rake'
5
+ rescue Gem::LoadError
6
+ end
7
+
8
+ require 'rake'
9
+ require 'rake/tasklib'
10
+
11
+ ##
12
+ # Creates rake tasks for building, rebuilding and removing TAGS files.
13
+ #
14
+ # In your Rakefile add:
15
+ #
16
+ # require 'rdoc/tags_task'
17
+ #
18
+ # RDoc::TagsTask.new
19
+ #
20
+ # Then run from the commandline:
21
+ #
22
+ # $ rake tags # build
23
+ # $ rake retag # rebuild
24
+ # $ rake clobber_tags # remove
25
+ #
26
+ # Use the Hoe::RDoc_tags plugin instead if you're using Hoe.
27
+
28
+ class RDoc::TagsTask < Rake::TaskLib
29
+
30
+ ##
31
+ # Rake::FileList of files to be used for tag generation.
32
+ #
33
+ # Your gem's require paths are probably sufficient.
34
+
35
+ attr_accessor :files
36
+
37
+ ##
38
+ # Directory to generate tags into. Defaults to '.'
39
+
40
+ attr_accessor :tags_dir
41
+
42
+ ##
43
+ # Name of the TAGS file. Defaults to 'TAGS'
44
+
45
+ attr_accessor :tags_file
46
+
47
+ ##
48
+ # Tag style to output. Defaults to vim.
49
+
50
+ attr_accessor :tag_style
51
+
52
+ ##
53
+ # Creates a new RDoc task that will build a TAGS file. Default task names
54
+ # are +tags+ to build, +retag+ to rebuild and +clobber_tags+ to remove.
55
+ # These may be overridden using the +names+ hash with the +:tags+,
56
+ # +:retag+ and +:clobber+ keys respectively.
57
+
58
+ def initialize names = {} # :yield: self
59
+ @clobber_task = names[:clobber] || 'clobber_tags'
60
+ @retag_task = names[:retag] || 'retag'
61
+ @tags_task = names[:tags] || 'tags'
62
+
63
+ @files = Rake::FileList.new
64
+ @tags_dir = '.'
65
+ @tags_file = 'TAGS'
66
+ @tag_style = 'vim'
67
+
68
+ yield self if block_given?
69
+
70
+ define
71
+ end
72
+
73
+ ##
74
+ # Builds the TAGS file.
75
+
76
+ def build_tags
77
+ args = [
78
+ '-f', 'tags',
79
+ '-q',
80
+ '--tag-style', @tag_style,
81
+ '-o', @tags_dir,
82
+ ]
83
+
84
+ args += @files
85
+
86
+ begin
87
+ gem 'rdoc'
88
+ rescue Gem::LoadError
89
+ end
90
+
91
+ require 'rdoc/rdoc'
92
+ $stderr.puts "rdoc #{args.join ' '}" if Rake.application.options.trace
93
+
94
+ RDoc::RDoc.new.document args
95
+ end
96
+
97
+ ##
98
+ # Defines tasks for building, rebuilding and clobbering the TAGS file
99
+
100
+ def define
101
+ desc 'Build TAGS file'
102
+ task @tags_task => @tags_file
103
+
104
+ desc 'Rebuild TAGS file'
105
+ task @retag_task => [@clobber_task, @tags_task]
106
+
107
+ desc 'Clobber TAGS file'
108
+ task @clobber_task do
109
+ rm_f tags_path
110
+ end
111
+
112
+ directory @tags_dir
113
+
114
+ file @tags_file => [@tags_dir, Rake.application.rakefile, @files] do
115
+ build_tags
116
+ end
117
+
118
+ self
119
+ end
120
+
121
+ ##
122
+ # Path to the tags file
123
+
124
+ def tags_path
125
+ File.join @tags_dir, @tags_file
126
+ end
127
+
128
+ end
129
+
@@ -54,6 +54,10 @@ class TestRDocGeneratorTags < MiniTest::Unit::TestCase
54
54
  @klass.add_method @meth_bang
55
55
  @klass.add_attribute @attr
56
56
  @klass.add_constant @const
57
+
58
+ @top_level_2 = RDoc::TopLevel.new 'file_2.rb'
59
+ @A_B_A = @B.add_class RDoc::NormalClass, 'A'
60
+ @A_B_A.record_location @top_level_2
57
61
  end
58
62
 
59
63
  def teardown
@@ -145,11 +149,15 @@ class TestRDocGeneratorTags < MiniTest::Unit::TestCase
145
149
  assert_equal "!_TAG_PROGRAM_VERSION\t#{RDoc::Generator::Tags::VERSION}\n",
146
150
  tags.next
147
151
 
148
- assert_equal "A\tfile.rb\t/class A/;\"\tc\n", tags.next
149
- assert_equal "A::B\tfile.rb\t/class \\(A::\\)\\?B/;\"\tc\n", tags.next
150
- assert_equal "B\tfile.rb\t/class \\(A::\\)\\?B/;\"\tc\n", tags.next
152
+ assert_equal "A\tfile.rb\t/class A/;\"\tc\n", tags.next
153
+ assert_equal "A\tfile_2.rb\t/class \\(A::B::\\)\\?A/;\"\tc\n", tags.next
154
+ assert_equal "A::B\tfile.rb\t/class \\(A::\\)\\?B/;\"\tc\n", tags.next
155
+ assert_equal "A::B::A\tfile_2.rb\t/class \\(A::B::\\)\\?A/;\"\tc\n",
156
+ tags.next
157
+ assert_equal "B\tfile.rb\t/class \\(A::\\)\\?B/;\"\tc\n", tags.next
151
158
 
152
- assert_equal "CONST\tfile.rb\t/CONST\\s\\*=/;\"\td\tclass:Object\n", tags.next
159
+ assert_equal "CONST\tfile.rb\t/CONST\\s\\*=/;\"\td\tclass:Object\n",
160
+ tags.next
153
161
 
154
162
  assert_equal "Object\tfile.rb\t/class Object/;\"\tc\n", tags.next
155
163
 
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdoc-tags
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 13
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 0
9
- version: "1.0"
8
+ - 1
9
+ version: "1.1"
10
10
  platform: ruby
11
11
  authors:
12
12
  - Eric Hodel
@@ -35,7 +35,7 @@ cert_chain:
35
35
  x52qPcexcYZR7w==
36
36
  -----END CERTIFICATE-----
37
37
 
38
- date: 2010-12-23 00:00:00 -08:00
38
+ date: 2010-12-29 00:00:00 -08:00
39
39
  default_executable:
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
@@ -46,10 +46,11 @@ dependencies:
46
46
  requirements:
47
47
  - - ~>
48
48
  - !ruby/object:Gem::Version
49
- hash: 5
49
+ hash: 3
50
50
  segments:
51
51
  - 3
52
- version: "3"
52
+ - 2
53
+ version: "3.2"
53
54
  type: :runtime
54
55
  version_requirements: *id001
55
56
  - !ruby/object:Gem::Dependency
@@ -60,12 +61,12 @@ dependencies:
60
61
  requirements:
61
62
  - - ">="
62
63
  - !ruby/object:Gem::Version
63
- hash: 15
64
+ hash: 11
64
65
  segments:
65
66
  - 2
66
67
  - 0
67
- - 0
68
- version: 2.0.0
68
+ - 2
69
+ version: 2.0.2
69
70
  type: :development
70
71
  version_requirements: *id002
71
72
  - !ruby/object:Gem::Dependency
@@ -102,6 +103,10 @@ description: |-
102
103
  A TAGS file generator based on http://ctags.sourceforge.net/FORMAT. rdoc-tags
103
104
  handles namespaced classes and modules, ! and ? methods, constants and
104
105
  attributes better than Exuberant Ctags.
106
+
107
+ rdoc-tags includes a Hoe plugin +:rdoc_tags+ making it easy to add tag support
108
+ to your ruby project. If you don't use Hoe you can instead use RDoc::TagsTask
109
+ to add rake tasks for building TAGS to your ruby project.
105
110
  email:
106
111
  - drbrain@segment7.net
107
112
  executables: []
@@ -118,8 +123,10 @@ files:
118
123
  - Manifest.txt
119
124
  - README.txt
120
125
  - Rakefile
126
+ - lib/hoe/rdoc_tags.rb
121
127
  - lib/rdoc/discover.rb
122
128
  - lib/rdoc/generator/tags.rb
129
+ - lib/rdoc/tags_task.rb
123
130
  - test/test_rdoc_generator_tags.rb
124
131
  has_rdoc: true
125
132
  homepage: https://github.com/rdoc/rdoc-tags
metadata.gz.sig CHANGED
Binary file