rbtags 0.1.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 ADDED
@@ -0,0 +1,3 @@
1
+ # RbTags #
2
+
3
+ RbTags is a replacement for ctags (and rtags) for Ruby.
@@ -0,0 +1,8 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'lookout/rake/tasks'
4
+ require 'yard'
5
+
6
+ Lookout::Rake::Tasks::Test.new
7
+ Lookout::Rake::Tasks::Gem.new
8
+ YARD::Rake::YardocTask.new
@@ -0,0 +1,31 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module RbTags
4
+ require 'rbtags/file'
5
+ require 'rbtags/formats'
6
+ require 'rbtags/version'
7
+
8
+ class << self
9
+ def with_format(with)
10
+ saved_format = format
11
+ format with
12
+ yield
13
+ format.finish
14
+ ensure
15
+ format saved_format
16
+ end
17
+
18
+ def format(format = nil)
19
+ return @format = format if format
20
+ @format ||= Formats::Extended.new
21
+ end
22
+
23
+ def path
24
+ ::File.expand_path('..', __FILE__)
25
+ end
26
+ end
27
+
28
+ require 'rbtags/class'
29
+ require 'rbtags/module'
30
+ require 'rbtags/object'
31
+ end
@@ -0,0 +1,15 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class Class
4
+ inherited = method(:inherited)
5
+ define_method :inherited do |subclass|
6
+ RbTags.format.class subclass, caller
7
+ inherited.call(subclass)
8
+ end
9
+
10
+ singleton_method_added = method(:singleton_method_added)
11
+ define_method :singleton_method_added do |method|
12
+ RbTags.format.method self, self, method, true, caller
13
+ singleton_method_added.call(method)
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class RbTags::File
4
+ def initialize(file, line)
5
+ @file, @line = file, Integer(line)
6
+ end
7
+
8
+ def name
9
+ @@expanded ||= Hash.new{ |files, file| files[file] = File.expand_path(file) }
10
+ @@expanded[@file]
11
+ end
12
+
13
+ def line
14
+ @@lines ||= Hash.new{ |lines, file|
15
+ sum = 0
16
+ lines[file] = File.open(file, 'rb'){ |io| io.map{ |line| line.chomp } }
17
+ }
18
+ @@lines[@file][@line - 1]
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module RbTags::Formats
4
+ require 'rbtags/formats/extended'
5
+ end
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class RbTags::Formats::Extended
4
+ require 'rbtags/formats/extended/instance'
5
+ require 'rbtags/formats/extended/class'
6
+ require 'rbtags/formats/extended/method'
7
+
8
+ def initialize(io = $stdout)
9
+ @io = io
10
+ @lines = []
11
+ end
12
+
13
+ def class(klass, trace)
14
+ @lines << Class.new(klass, trace)
15
+ end
16
+
17
+ def method(klass, object, method, singleton, trace)
18
+ @lines << Method.new(klass, object, method, singleton, trace)
19
+ end
20
+
21
+ def finish
22
+ @lines.reject{ |line| line.reject? }.map{ |line| line.to_s }.sort.each do |line|
23
+ @io.puts line
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class RbTags::Formats::Extended::Class
4
+ include RbTags::Formats::Extended::Instance
5
+
6
+ def initialize(klass, trace)
7
+ @klass = klass
8
+ super trace
9
+ end
10
+
11
+ def to_s
12
+ line(@klass)
13
+ end
14
+ end
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module RbTags::Formats::Extended::Instance
4
+ def initialize(trace)
5
+ @file = RbTags::File.new(*%r{\A(.*):(\d+)\z}.match(trace.find{ |line| line !~ %r{\A(.*):(\d+):in .*\z} })[1..2])
6
+ end
7
+
8
+ def reject?
9
+ @file.name.start_with? RbTags.path
10
+ end
11
+
12
+ private
13
+
14
+ def line(tag)
15
+ "%s\t%s\t%s" % [tag, filename, pattern]
16
+ end
17
+
18
+ def filename
19
+ @file.name.start_with?(Dir.pwd) ? @file.name[Dir.pwd.length+1..-1] : @file.name
20
+ end
21
+
22
+ def pattern
23
+ '/^%s$/' % @file.line
24
+ end
25
+ end
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class RbTags::Formats::Extended::Method
4
+ include RbTags::Formats::Extended::Instance
5
+
6
+ def initialize(klass, object, method, singleton, trace)
7
+ @klass, @object, @method, @singleton = klass, object, method, singleton
8
+ super trace
9
+ end
10
+
11
+ def reject?
12
+ not (not @singleton and @method == :initialize) and
13
+ ((class << (@singleton ? @klass : @object); self; end).private_method_defined?(@method) or
14
+ super)
15
+ end
16
+
17
+ def to_s
18
+ line(qualified)
19
+ end
20
+
21
+ private
22
+
23
+ def qualified
24
+ if not @singleton and @method == :initialize
25
+ '%s.new' % @klass
26
+ else
27
+ '%s%s%s' % [@klass, @singleton ? '.' : '#', @method]
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class Module
4
+ unbound_method_added = instance_method(:method_added)
5
+ define_method :method_added do |method|
6
+ RbTags.format.method self, Object.new.extend(self), method, false, caller if instance_of? Module
7
+ unbound_method_added.bind(self).call(method)
8
+ end
9
+ end
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module RbTags::Object
4
+ Allocator = Hash.new{|h,k| h[k] = k.allocate }.merge(Fixnum=>1,
5
+ Bignum=>10000000000000000,
6
+ Float=>1.1,
7
+ Symbol=>:method_args_tmp,
8
+ Binding=>binding,
9
+ UnboundMethod=>Object.instance_method(:object_id),
10
+ Method=>Object.method(:object_id),
11
+ Proc=>lambda{},
12
+ Continuation=>callcc{|c|c},
13
+ Thread=>Thread.new{},
14
+ FalseClass=>false,
15
+ TrueClass=>true,
16
+ NilClass=>nil,
17
+ Struct=>Struct.new(:a).new(1))
18
+ end
19
+
20
+ class Object
21
+ class << self
22
+ method_added = method(:method_added)
23
+ define_method :method_added do |method|
24
+ begin o = RbTags::Object::Allocator[self] rescue Exception end
25
+ RbTags.format.method self, o, method, false, caller
26
+ method_added.call(method)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,10 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'rake'
4
+ require 'rake/tasklib'
5
+
6
+ module RbTags module Rake end end
7
+
8
+ module RbTags::Rake::Tasks
9
+ autoload :Tags, 'rbtags/rake/tasks/tags'
10
+ end
@@ -0,0 +1,31 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class RbTags::Rake::Tasks::Tags < Rake::TaskLib
4
+ def initialize(libs = nil, requires = nil)
5
+ @libs = libs || 'lib'
6
+ @requires = requires || @libs.map{ |lib|
7
+ FileList[lib + '/**/*.rb'].map{ |path| path.sub(%r{\A#{Regexp.escape(lib)}/}, '') }
8
+ }.flatten.sort
9
+ yield self if block_given?
10
+ define
11
+ end
12
+
13
+ def define
14
+ desc 'Generate TAGS'
15
+ task :tags do
16
+ require 'rbtags'
17
+ libs.each do |lib|
18
+ $LOAD_PATH.unshift lib unless $LOAD_PATH.include? lib
19
+ end
20
+ File.open('TAGS', 'wb') do |tags|
21
+ RbTags.with_format RbTags::Formats::Extended.new(tags) do
22
+ requires.each do |path|
23
+ require path
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ attr_accessor :libs, :requires
31
+ end
@@ -0,0 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module RbTags
4
+ Version = '0.1.0'
5
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rbtags
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Nikolai Weibull
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-03-03 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: lookout
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 2
32
+ - 0
33
+ version: "2.0"
34
+ type: :development
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: yard
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 7
45
+ segments:
46
+ - 0
47
+ - 6
48
+ - 0
49
+ version: 0.6.0
50
+ type: :development
51
+ version_requirements: *id002
52
+ description: |
53
+ # RbTags #
54
+
55
+ RbTags is a replacement for ctags (and rtags) for Ruby.
56
+
57
+ email: now@bitwi.se
58
+ executables: []
59
+
60
+ extensions: []
61
+
62
+ extra_rdoc_files: []
63
+
64
+ files:
65
+ - lib/rbtags/class.rb
66
+ - lib/rbtags/file.rb
67
+ - lib/rbtags/formats/extended/class.rb
68
+ - lib/rbtags/formats/extended/instance.rb
69
+ - lib/rbtags/formats/extended/method.rb
70
+ - lib/rbtags/formats/extended.rb
71
+ - lib/rbtags/formats.rb
72
+ - lib/rbtags/module.rb
73
+ - lib/rbtags/object.rb
74
+ - lib/rbtags/rake/tasks/tags.rb
75
+ - lib/rbtags/rake/tasks.rb
76
+ - lib/rbtags/version.rb
77
+ - lib/rbtags.rb
78
+ - README
79
+ - Rakefile
80
+ has_rdoc: true
81
+ homepage: http://github.com/now/rbtags
82
+ licenses: []
83
+
84
+ post_install_message:
85
+ rdoc_options: []
86
+
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ hash: 3
95
+ segments:
96
+ - 0
97
+ version: "0"
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ hash: 3
104
+ segments:
105
+ - 0
106
+ version: "0"
107
+ requirements: []
108
+
109
+ rubyforge_project:
110
+ rubygems_version: 1.3.7
111
+ signing_key:
112
+ specification_version: 3
113
+ summary: RbTags is a replacement for ctags (and rtags) for Ruby.
114
+ test_files: []
115
+