ripper-tags 0.4.3 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 21e15e7c0755842e08a5282365f768fe798dde04
4
- data.tar.gz: 5a6f04f288b3a1ee78fa6a8932e7f9ce5f9cbcf9
3
+ metadata.gz: c08d7efdfd064f08e9ddfe9f04764ef7ff8c416b
4
+ data.tar.gz: 81a55c49ef2731f5df43c5d6b19293af677a82f3
5
5
  SHA512:
6
- metadata.gz: f76bd4af060842dd28dd26d9a5fc1f38a484dd939c617d49eee7dedfe9dd8ae5294158463f652fba026fd5b37d30c91973ac77dd1bc037fd12863c16d9f3fa85
7
- data.tar.gz: 2c95b91e67ee8002ea2961851fa7bf34c353fd7d734c88d5e52362e3d0544fb030a7e107cdb328270577b7d1f53161d69de00599b37d350514827482682e5544
6
+ metadata.gz: ec1d0a697a94f42071a7b1046ea5e979b21b927dd85821ff8a66047fb8fc77b8cfbb32c7e3ca4c337b421d4f13e4732d83847e47e0261c3d81a32a0fec09ff34
7
+ data.tar.gz: 5e3b0c4915d6761a30c3d146fd18a74c149621931b67c15920ca74875f67c4f1ceee5e1a2f5a8da887eebe441f661abd65a19dc78a6abbced149472896b28cb1
@@ -9,7 +9,7 @@ require 'ripper-tags/vim_formatter'
9
9
  require 'ripper-tags/json_formatter'
10
10
 
11
11
  module RipperTags
12
- def self.version() "0.4.3" end
12
+ def self.version() "0.5.0" end
13
13
 
14
14
  FatalError = Class.new(RuntimeError)
15
15
 
@@ -35,17 +35,24 @@ module RipperTags
35
35
  class ForgivingOptionParser < OptionParser
36
36
  attr_accessor :ignore_unsupported_options
37
37
 
38
- def parse(argv)
39
- argv = argv.dup
38
+ def load_options_file(file)
39
+ @argv.unshift(*File.readlines(file).flat_map { |line|
40
+ line.strip!.match(/(=|\s)/)
41
+ ($1 == "" || $1 == "=") ? line : line.split(/\s+/, 2)
42
+ })
43
+ end
44
+
45
+ private
46
+
47
+ def parse_in_order(argv = default_argv, *)
40
48
  exceptions = []
41
- remaining = []
49
+ @argv = argv
42
50
 
43
- while argv.size > 0
51
+ loop do
44
52
  begin
45
- remaining = super(argv)
53
+ super
46
54
  break
47
55
  rescue OptionParser::InvalidOption => err
48
- argv -= err.args
49
56
  exceptions << err
50
57
  end
51
58
  end
@@ -54,7 +61,7 @@ module RipperTags
54
61
  raise exceptions.first
55
62
  end
56
63
 
57
- remaining
64
+ argv
58
65
  end
59
66
  end
60
67
 
@@ -151,6 +158,9 @@ module RipperTags
151
158
  exit 1
152
159
  end
153
160
  end
161
+ opts.on_tail("--options=FILE", "Read additional options from file") do |file|
162
+ opts.load_options_file(file)
163
+ end
154
164
  opts.on_tail("--ignore-unsupported-options", "Don't fail when unsupported options given, just skip them") do
155
165
  opts.ignore_unsupported_options = true
156
166
  end
@@ -71,9 +71,9 @@ class Parser < Ripper
71
71
  "has_one", "has_many",
72
72
  "belongs_to", "has_and_belongs_to_many",
73
73
  "scope", "named_scope",
74
- "public_class_method", "private_class_method",
74
+ "public_class_method", "private_class_method", "protected_class_method",
75
75
  "public", "protected", "private",
76
- /^attr_(accessor|reader|writer)$/
76
+ /^[mc]?attr_(accessor|reader|writer)$/
77
77
  on_method_add_arg([:fcall, name], args[0])
78
78
  when "delegate"
79
79
  on_delegate(*Array(args[0])[1..-1])
@@ -171,21 +171,25 @@ class Parser < Ripper
171
171
  [:alias, args[1][0], args[2][0], line] if args[1] && args[2]
172
172
  when "define_method"
173
173
  [:def, args[1][0], line]
174
- when "public_class_method", "private_class_method", "private", "public", "protected"
174
+ when "public_class_method", "private_class_method", "protected_class_method", "private", "public", "protected"
175
175
  access = name.sub("_class_method", "")
176
+ klass = name == access ? nil : 'self'
177
+ procedure = :def_with_access
176
178
 
177
- if args[1][1] == 'self'
178
- klass = 'self'
179
+ if args[1][0].is_a?(String)
180
+ procedure = :redefine_access
181
+ method_name = args[1][0]
182
+ elsif args[1][1] == 'self'
179
183
  method_name = args[1][2]
180
184
  else
181
185
  klass = nil
182
186
  method_name = args[1][1]
183
187
  end
184
188
 
185
- [:def_with_access, klass, method_name, access, line]
189
+ [procedure, klass, method_name, access, line]
186
190
  when "scope", "named_scope"
187
191
  [:rails_def, :scope, args[1][0], line]
188
- when /^attr_(accessor|reader|writer)$/
192
+ when /^[mc]?attr_(accessor|reader|writer)$/
189
193
  gen_reader = $1 != 'writer'
190
194
  gen_writer = $1 != 'reader'
191
195
  args[1..-1].inject([]) do |gen, arg|
@@ -457,6 +461,14 @@ end
457
461
  :access => access
458
462
  end
459
463
 
464
+ def on_redefine_access(klass, name, access, line)
465
+ ns = (@namespace.empty? ? 'Object' : @namespace.join('::'))
466
+ singleton = @is_singleton || klass == 'self'
467
+ full_name = "#{ns}#{singleton ? '.' : '#'}#{name}"
468
+ tag = @tags.select { |t| t[:full_name] == full_name }.last
469
+ tag[:access] = access if tag
470
+ end
471
+
460
472
  def on_rails_def(kind, name, line)
461
473
  ns = (@namespace.empty?? 'Object' : @namespace.join('::'))
462
474
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ripper-tags
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aman Gupta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-15 00:00:00.000000000 Z
11
+ date: 2018-01-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: fast, accurate ctags generator for ruby source code using Ripper
14
14
  email: