starscope 1.0.2 → 1.0.3

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 38376cc70ae8d935176b3b428d6b82acb2e9ed28
4
+ data.tar.gz: eb7761acf9adc1aef79eaf1e2e74b04d7be51ca2
5
+ SHA512:
6
+ metadata.gz: b2df9c55e2e0ca2ab3c0aeb825f7a9e9f3dec274216256a9e712eb60ea3176c4851925799b5621220fa59eca32ff67ba5813699eec056aa285840397f91775db
7
+ data.tar.gz: c5159b4997e35cd23f29ffee1a17da99e298dcdb7a02789a5b64435cd645e1af56788c5666c1ef5ac3dccfd5fdc250e48c62e7c170a8aaf71009e62138590d19
@@ -1,7 +1,16 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- v1.0.2 (trunk)
4
+ v1.0.3 (trunk)
5
+ --------------------
6
+
7
+ Improvements:
8
+ * Optimized extracting lines from parsed files.
9
+
10
+ Misc:
11
+ * Code cleanup.
12
+
13
+ v1.0.2 (2014-04-19)
5
14
  --------------------
6
15
 
7
16
  Bug Fixes:
@@ -1,28 +1,28 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- starscope (1.0.2)
5
- oj (~> 2.7)
4
+ starscope (1.0.3)
5
+ oj (~> 2.9)
6
6
  parser (~> 2.1)
7
- ruby-progressbar (~> 1.4)
7
+ ruby-progressbar (~> 1.5)
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- ast (1.1.0)
12
+ ast (2.0.0)
13
13
  coderay (1.1.0)
14
14
  method_source (0.8.2)
15
- minitest (5.3.3)
16
- oj (2.7.3)
17
- parser (2.1.8)
18
- ast (~> 1.1)
15
+ minitest (5.3.4)
16
+ oj (2.9.4)
17
+ parser (2.1.9)
18
+ ast (>= 1.1, < 3.0)
19
19
  slop (~> 3.4, >= 3.4.5)
20
20
  pry (0.9.12.6)
21
21
  coderay (~> 1.0)
22
22
  method_source (~> 0.8)
23
23
  slop (~> 3.4)
24
- rake (10.2.2)
25
- ruby-progressbar (1.4.2)
24
+ rake (10.3.2)
25
+ ruby-progressbar (1.5.1)
26
26
  slop (3.5.0)
27
27
 
28
28
  PLATFORMS
data/README.md CHANGED
@@ -35,6 +35,8 @@ $ starscope -e ctags
35
35
  $ starscope -e cscope
36
36
  ```
37
37
 
38
+ More flags and options are available, run `starscope --help` for the complete list.
39
+
38
40
  Other Uses
39
41
  ----------
40
42
 
@@ -35,20 +35,20 @@ class StarScope::DB
35
35
  @output.log("Reading database from `#{file}`... ")
36
36
  File.open(file, 'r') do |file|
37
37
  Zlib::GzipReader.wrap(file) do |file|
38
- format = file.gets.to_i
39
- if format == DB_FORMAT
38
+ case file.gets.to_i
39
+ when DB_FORMAT
40
40
  @meta = Oj.load(file.gets)
41
41
  @tables = Oj.load(file.gets)
42
42
  return false
43
- elsif format <= 2
43
+ when 3..4
44
+ # Old format, so read the directories segment then rebuild
45
+ add_paths(Oj.load(file.gets))
46
+ return true
47
+ when 0..2
44
48
  # Old format (pre-json), so read the directories segment then rebuild
45
49
  len = file.gets.to_i
46
50
  add_paths(Marshal::load(file.read(len)))
47
51
  return true
48
- elsif format <= 4
49
- # Old format, so read the directories segment then rebuild
50
- add_paths(Oj.load(file.gets))
51
- return true
52
52
  else
53
53
  raise UnknownDBFormatError
54
54
  end
@@ -190,10 +190,11 @@ END
190
190
  buf = ""
191
191
  files = []
192
192
  db_by_line().each do |filename, lines|
193
- if not lines.empty?
194
- buf << "\t@#{filename}\n\n"
195
- files << filename
196
- end
193
+ next if lines.empty?
194
+
195
+ buf << "\t@#{filename}\n\n"
196
+ files << filename
197
+
197
198
  lines.sort.each do |line_no, records|
198
199
  begin
199
200
  line = records.first[:line].strip.gsub(/\s+/, ' ')
@@ -201,25 +202,25 @@ END
201
202
  # invalid utf-8 byte sequence in the line, just do our best
202
203
  line = records.first[:line]
203
204
  end
204
- toks = {}
205
205
 
206
+ toks = {}
206
207
  records.each do |record|
207
- index = line.index(record[:name][-1].to_s)
208
+ key = record[:name][-1].to_s
209
+ index = line.index(key)
208
210
  while index
209
211
  toks[index] = record
210
- index = line.index(record[:name][-1].to_s, index + 1)
212
+ index = line.index(key, index + 1)
211
213
  end
212
214
  end
213
-
214
215
  next if toks.empty?
215
216
 
216
217
  prev = 0
217
218
  buf << line_no.to_s << " "
218
- toks.sort().each do |offset, record|
219
+ toks.sort.each do |offset, record|
220
+ key = record[:name][-1].to_s
219
221
  buf << line.slice(prev...offset) << "\n"
220
- buf << StarScope::Record.cscope_mark(record[:tbl], record)
221
- buf << record[:name][-1].to_s << "\n"
222
- prev = offset + record[:name][-1].to_s.length
222
+ buf << StarScope::Record.cscope_mark(record[:tbl], record) << key << "\n"
223
+ prev = offset + key.length
223
224
  end
224
225
  buf << line.slice(prev..-1) << "\n\n"
225
226
  end
@@ -18,51 +18,39 @@ module StarScope::Lang
18
18
  scope = []
19
19
  str = File.readlines(file).each_with_index do |line, line_no|
20
20
  line_no += 1 # zero-index to one-index
21
+
21
22
  # strip single-line comments like // foo
22
23
  match = /(.*)\/\//.match(line)
23
- if match
24
- line = match[1]
25
- end
24
+ line = match[1] if match
26
25
  # strip single-line comments like foo /* foo */ foo
27
26
  match = /(.*?)\/\*.*\*\/(.*)/.match(line)
28
- if match
29
- line = match[1] + match[2]
30
- end
27
+ line = match[1] + match[2] if match
31
28
  # strip end-of-line comment starters like foo /* foo \n
32
29
  match = /(.*?)\/\*/.match(line)
33
- if match
34
- line = match[1]
35
- ends_with_comment = true
36
- else
37
- ends_with_comment = false
38
- end
30
+ line = match[1] if match
31
+ ends_with_comment = !match.nil?
32
+
39
33
  # if we're in a block comment, wait for it to end
40
34
  if stack[-1] == :comment
41
35
  match = /\*\/(.*)/.match(line)
42
- if match
43
- line = match[1]
44
- stack.pop
45
- else
46
- next
47
- end
36
+ next unless match
37
+ line = match[1]
38
+ stack.pop
48
39
  end
40
+
49
41
  # poor-man's parser
50
42
  case stack[-1]
51
43
  when :struct
52
44
  case line
53
45
  when END_OF_BLOCK
54
- yield :end, scope + ["}"], :line_no => line_no, :type => :class
55
- stack.pop
56
- scope.pop
46
+ end_block(line_no, scope, stack, &block)
57
47
  when /(.+)\s+\w+/
58
48
  parse_def($1, line_no, scope, &block)
59
49
  end
60
50
  when :interface
61
51
  case line
62
52
  when END_OF_BLOCK
63
- yield :end, scope + ["}"], :line_no => line_no, :type => :class
64
- stack.pop
65
- scope.pop
53
+ end_block(line_no, scope, stack, &block)
66
54
  when /(\w+)\(.*\)\s+/
67
55
  yield :defs, scope + [$1], :line_no => line_no
68
56
  end
@@ -83,60 +71,18 @@ module StarScope::Lang
83
71
  name = $1.split('/')
84
72
  yield :imports, name, :line_no => line_no
85
73
  end
86
- else
87
- if stack[-1] == :func and /^\}/ =~ line
74
+ when :func
75
+ case line
76
+ when /^\}/
88
77
  yield :end, "}", :line_no => line_no, :type => :func
89
78
  stack.pop
90
- end
91
- case line
92
- when /^func\s+(\w+)\(/
93
- yield :defs, scope + [$1], :line_no => line_no, :type => :func
94
- stack.push(:func)
95
- when /^func\s+\(\w+\s+\*?(\w+)\)\s*(\w+)\(/
96
- yield :defs, scope + [$1, $2], :line_no => line_no, :type => :func
97
- stack.push(:func)
98
- when /^package\s+(\w+)/
99
- scope.push($1)
100
- yield :defs, scope, :line_no => line_no, :type => :package
101
- when /^type\s+(\w+)\s+struct\s*\{/
102
- scope.push($1)
103
- stack.push(:struct)
104
- yield :defs, scope, :line_no => line_no, :type => :class
105
- when /^type\s+(\w+)\s+interface\s*\{/
106
- scope.push($1)
107
- stack.push(:interface)
108
- yield :defs, scope, :line_no => line_no, :type => :class
109
- when /^type\s+(\w+)/
110
- yield :defs, scope + [$1], :line_no => line_no, :type => :type
111
- when /^import\s+"(.+)"/
112
- name = $1.split('/')
113
- yield :imports, name, :line_no => line_no
114
- when /^import\s+\(/
115
- stack.push(:import)
116
- when /^var\s+\(/
117
- stack.push(:def)
118
- when /^var\s+(\w+)\s/
119
- yield :defs, scope + [$1], :line_no => line_no
120
- when /^const\s+\(/
121
- stack.push(:def)
122
- when /^const\s+(\w+)\s/
123
- yield :defs, scope + [$1], :line_no => line_no
124
- when /^\s+(.*?) :?=[^=]/
125
- $1.split(' ').each do |var|
126
- next if CONTROL_KEYS.include?(var)
127
- name = var.delete(',').split('.')
128
- next if name[0] == "_" # assigning to _ is a discard in golang
129
- if name.length == 1
130
- yield :assigns, scope + [name[0]], :line_no => line_no
131
- else
132
- yield :assigns, name, :line_no => line_no
133
- end
134
- end
135
- parse_call(line, line_no, scope, &block)
136
79
  else
137
- parse_call(line, line_no, scope, &block)
80
+ parse_new_line(line, line_no, scope, stack, &block)
138
81
  end
82
+ else
83
+ parse_new_line(line, line_no, scope, stack, &block)
139
84
  end
85
+
140
86
  # if the line looks like "foo /* foo" then we enter the comment state
141
87
  # after parsing the usable part of the line
142
88
  if ends_with_comment
@@ -145,6 +91,58 @@ module StarScope::Lang
145
91
  end
146
92
  end
147
93
 
94
+ # handles new lines (when not in the middle of an existing definition)
95
+ def self.parse_new_line(line, line_no, scope, stack, &block)
96
+ case line
97
+ when /^func\s+(\w+)\(/
98
+ yield :defs, scope + [$1], :line_no => line_no, :type => :func
99
+ stack.push(:func)
100
+ when /^func\s+\(\w+\s+\*?(\w+)\)\s*(\w+)\(/
101
+ yield :defs, scope + [$1, $2], :line_no => line_no, :type => :func
102
+ stack.push(:func)
103
+ when /^package\s+(\w+)/
104
+ scope.push($1)
105
+ yield :defs, scope, :line_no => line_no, :type => :package
106
+ when /^type\s+(\w+)\s+struct\s*\{/
107
+ scope.push($1)
108
+ stack.push(:struct)
109
+ yield :defs, scope, :line_no => line_no, :type => :class
110
+ when /^type\s+(\w+)\s+interface\s*\{/
111
+ scope.push($1)
112
+ stack.push(:interface)
113
+ yield :defs, scope, :line_no => line_no, :type => :class
114
+ when /^type\s+(\w+)/
115
+ yield :defs, scope + [$1], :line_no => line_no, :type => :type
116
+ when /^import\s+"(.+)"/
117
+ name = $1.split('/')
118
+ yield :imports, name, :line_no => line_no
119
+ when /^import\s+\(/
120
+ stack.push(:import)
121
+ when /^var\s+\(/
122
+ stack.push(:def)
123
+ when /^var\s+(\w+)\s/
124
+ yield :defs, scope + [$1], :line_no => line_no
125
+ when /^const\s+\(/
126
+ stack.push(:def)
127
+ when /^const\s+(\w+)\s/
128
+ yield :defs, scope + [$1], :line_no => line_no
129
+ when /^\s+(.*?) :?=[^=]/
130
+ $1.split(' ').each do |var|
131
+ next if CONTROL_KEYS.include?(var)
132
+ name = var.delete(',').split('.')
133
+ next if name[0] == "_" # assigning to _ is a discard in golang
134
+ if name.length == 1
135
+ yield :assigns, scope + [name[0]], :line_no => line_no
136
+ else
137
+ yield :assigns, name, :line_no => line_no
138
+ end
139
+ end
140
+ parse_call(line, line_no, scope, &block)
141
+ else
142
+ parse_call(line, line_no, scope, &block)
143
+ end
144
+ end
145
+
148
146
  def self.parse_call(line, line_no, scope)
149
147
  line.scan(FUNC_CALL) do |match|
150
148
  name = match[0].split('.').select {|chunk| not chunk.empty?}
@@ -171,5 +169,11 @@ module StarScope::Lang
171
169
  break if not var.end_with?(',')
172
170
  end
173
171
  end
172
+
173
+ def self.end_block(line_no, scope, stack)
174
+ yield :end, scope + ["}"], :line_no => line_no, :type => :class
175
+ stack.pop
176
+ scope.pop
177
+ end
174
178
  end
175
179
  end
@@ -51,32 +51,38 @@ module StarScope::Lang
51
51
  end
52
52
 
53
53
  def extract_node(node)
54
+ loc = node.location
55
+
54
56
  case node.type
55
57
  when :send
56
- fqn = scoped_name(node)
57
- yield :calls, fqn, :line_no => node.location.expression.line
58
+ yield :calls, scoped_name(node), :line_no => loc.expression.line
58
59
  if node.children[0].nil? and node.children[1] == :require and node.children[2].type == :str
59
- fqn = node.children[2].children[0].split("/")
60
- yield :requires, fqn, :line_no => node.location.expression.line
60
+ yield :requires, node.children[2].children[0].split("/"),
61
+ :line_no => loc.expression.line
61
62
  end
63
+
62
64
  when :def
63
65
  yield :defs, @scope + [node.children[0]],
64
- :line_no => node.location.expression.line, :type => :func
65
- yield :end, :end, :line_no => node.location.end.line, :type => :func
66
+ :line_no => loc.expression.line, :type => :func
67
+ yield :end, :end, :line_no => loc.end.line, :type => :func
68
+
66
69
  when :defs
67
70
  yield :defs, @scope + [node.children[1]],
68
- :line_no => node.location.expression.line, :type => :func
69
- yield :end, :end, :line_no => node.location.end.line, :type => :func
71
+ :line_no => loc.expression.line, :type => :func
72
+ yield :end, :end, :line_no => loc.end.line, :type => :func
73
+
70
74
  when :module, :class
71
- fqn = @scope + scoped_name(node.children[0])
72
- yield :defs, fqn, :line_no => node.location.expression.line, :type => node.type
73
- yield :end, :end, :line_no => node.location.end.line, :type => node.type
75
+ yield :defs, @scope + scoped_name(node.children[0]),
76
+ :line_no => loc.expression.line, :type => node.type
77
+ yield :end, :end, :line_no => loc.end.line, :type => node.type
78
+
74
79
  when :casgn
75
80
  fqn = scoped_name(node)
76
- yield :assigns, fqn, :line_no => node.location.expression.line
77
- yield :defs, fqn, :line_no => node.location.expression.line
81
+ yield :assigns, fqn, :line_no => loc.expression.line
82
+ yield :defs, fqn, :line_no => loc.expression.line
83
+
78
84
  when :lvasgn, :ivasgn, :cvasgn, :gvasgn
79
- yield :assigns, @scope + [node.children[0]], :line_no => node.location.expression.line
85
+ yield :assigns, @scope + [node.children[0]], :line_no => loc.expression.line
80
86
  end
81
87
  end
82
88
 
@@ -1,5 +1,8 @@
1
1
  class StarScope::Record
2
2
 
3
+ @@cachedFile = nil
4
+ @@cachedLines = nil
5
+
3
6
  def self.build(file, name, args)
4
7
  args[:file] = file
5
8
 
@@ -10,7 +13,12 @@ class StarScope::Record
10
13
  end
11
14
 
12
15
  if args[:line_no]
13
- args[:line] = File.readlines(file)[args[:line_no]-1].chomp
16
+ if @@cachedFile != file
17
+ @@cachedFile = file
18
+ @@cachedLines = File.readlines(file)
19
+ end
20
+
21
+ args[:line] = @@cachedLines[args[:line_no]-1].chomp
14
22
  end
15
23
 
16
24
  args
@@ -1,3 +1,3 @@
1
1
  module StarScope
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -15,9 +15,9 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.required_ruby_version = '>= 1.8.7'
17
17
 
18
- gem.add_dependency 'oj', '~> 2.7'
18
+ gem.add_dependency 'oj', '~> 2.9'
19
19
  gem.add_dependency 'parser', '~> 2.1'
20
- gem.add_dependency 'ruby-progressbar', '~> 1.4'
20
+ gem.add_dependency 'ruby-progressbar', '~> 1.5'
21
21
  gem.add_development_dependency 'bundler', '~> 1.5'
22
22
  gem.add_development_dependency 'rake'
23
23
  gem.add_development_dependency 'pry'
@@ -13,8 +13,23 @@ describe StarScope::Record do
13
13
  end
14
14
 
15
15
  it "must read correct line from file" do
16
+
17
+ # we interleave the files here to test the cache
18
+
16
19
  rec = StarScope::Record.build(GOLANG_SAMPLE, :a, {:line_no => 1})
17
20
  rec[:line].must_equal "package main"
21
+
22
+ rec = StarScope::Record.build(GOLANG_SAMPLE, :a, {:line_no => 62})
23
+ rec[:line].must_equal "\tfmt.Println(t)"
24
+
25
+ rec = StarScope::Record.build(RUBY_SAMPLE, :a, {:line_no => 1})
26
+ rec[:line].must_equal "require 'date'"
27
+
28
+ rec = StarScope::Record.build(RUBY_SAMPLE, :a, {:line_no => 163})
29
+ rec[:line].must_equal "end"
30
+
31
+ rec = StarScope::Record.build(GOLANG_SAMPLE, :a, {:line_no => 63})
32
+ rec[:line].must_equal "}"
18
33
  end
19
34
 
20
35
  end
metadata CHANGED
@@ -1,36 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: starscope
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
5
- prerelease:
4
+ version: 1.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Evan Huus
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-04-19 00:00:00.000000000 Z
11
+ date: 2014-06-10 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: oj
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: '2.7'
19
+ version: '2.9'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: '2.7'
26
+ version: '2.9'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: parser
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,23 +41,20 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: ruby-progressbar
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
53
- version: '1.4'
47
+ version: '1.5'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
61
- version: '1.4'
54
+ version: '1.5'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: bundler
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,49 +69,43 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rake
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: pry
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: minitest
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  description: A tool like the venerable cscope, but for ruby, golang and other languages
@@ -163,30 +148,26 @@ files:
163
148
  homepage: https://github.com/eapache/starscope
164
149
  licenses:
165
150
  - MIT
151
+ metadata: {}
166
152
  post_install_message:
167
153
  rdoc_options: []
168
154
  require_paths:
169
155
  - lib
170
156
  required_ruby_version: !ruby/object:Gem::Requirement
171
- none: false
172
157
  requirements:
173
- - - ! '>='
158
+ - - '>='
174
159
  - !ruby/object:Gem::Version
175
160
  version: 1.8.7
176
161
  required_rubygems_version: !ruby/object:Gem::Requirement
177
- none: false
178
162
  requirements:
179
- - - ! '>='
163
+ - - '>='
180
164
  - !ruby/object:Gem::Version
181
165
  version: '0'
182
- segments:
183
- - 0
184
- hash: 2115433325249412524
185
166
  requirements: []
186
167
  rubyforge_project:
187
- rubygems_version: 1.8.23
168
+ rubygems_version: 2.0.14
188
169
  signing_key:
189
- specification_version: 3
170
+ specification_version: 4
190
171
  summary: A code indexer and analyzer
191
172
  test_files:
192
173
  - test/files/db_old.json.gz