tag_ripper 0.2.1 → 0.3.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 +4 -4
- data/Guardfile +0 -7
- data/lib/tag_ripper/taggable_entity.rb +55 -28
- data/lib/tag_ripper/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8223c939423f3fce3c103a0e16649b925cc2cf9d0130618e4172c8f8e206bde
|
4
|
+
data.tar.gz: dbd6a188942b85df76b27189df7cdcbfea4257e10c6fd7003467fdb552eb25b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a72eee3e5dbcafe2729452701418ea233ee6f0439bab493d7220687081a0fa9efc6ec20cb4d4fab5eaf6ea427e0fc5a5df7d6269f20bbfd53feadc5454abf50
|
7
|
+
data.tar.gz: 556c44f1683a4c46c896e11d4c0da33c1e1c14af6061a8ce28072feb8187bc56e6763e357e7d7a568c55da99f2edb95d78a13b56ff0b19124023df382d703be7
|
data/Guardfile
CHANGED
@@ -3,10 +3,3 @@ guard :minitest, cli: "--verbose" do
|
|
3
3
|
watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
|
4
4
|
watch("test/test_helper.rb") { "test" }
|
5
5
|
end
|
6
|
-
|
7
|
-
guard :rubocop, all_on_start: false do
|
8
|
-
watch(/^.+\.rb$/)
|
9
|
-
watch(%r{^(config|test)/.+\.rb$})
|
10
|
-
watch("Gemfile")
|
11
|
-
watch(".rubocop.yml")
|
12
|
-
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
1
3
|
module TagRipper
|
2
4
|
# Follows the state changes of a taggable entity (class, model, or method)
|
3
5
|
# as it responds to various Lexical tokens.
|
@@ -26,6 +28,7 @@ module TagRipper
|
|
26
28
|
pending
|
27
29
|
tagged
|
28
30
|
awaiting_name
|
31
|
+
naming
|
29
32
|
named
|
30
33
|
closed
|
31
34
|
].freeze
|
@@ -34,30 +37,32 @@ module TagRipper
|
|
34
37
|
# @return [Array<Symbol>]
|
35
38
|
OPENED_STATUSES = %i[tagged awaiting_name named].freeze
|
36
39
|
|
37
|
-
def initialize(name: nil, parent: nil, type: nil)
|
40
|
+
def initialize(name: nil, parent: nil, type: nil, status: :pending)
|
38
41
|
@name = name
|
39
42
|
@tags = Hash.new { |hash, key| hash[key] = Set.new }
|
40
43
|
@parent = parent
|
41
44
|
@type = type
|
42
|
-
self.status =
|
45
|
+
self.status = status
|
43
46
|
end
|
44
47
|
|
45
48
|
alias id object_id
|
46
49
|
|
47
50
|
def send_event(event_name, lex)
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
51
|
+
debug(<<~DEBUG)
|
52
|
+
Sending #{event_name} to #{self} with #{lex.token.inspect}
|
53
|
+
#{inspect}
|
54
|
+
|
55
|
+
DEBUG
|
56
|
+
|
57
|
+
return self unless respond_to?(event_name, true)
|
58
|
+
|
59
|
+
send(event_name, lex)
|
54
60
|
end
|
55
61
|
|
56
|
-
def
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
OUTPUT
|
62
|
+
def debug(*strings)
|
63
|
+
return if ENV.fetch("TAG_RIPPER_DEBUG", "false") == "false"
|
64
|
+
|
65
|
+
puts strings.join(" - ")
|
61
66
|
end
|
62
67
|
|
63
68
|
def module?
|
@@ -112,12 +117,12 @@ module TagRipper
|
|
112
117
|
!!@name
|
113
118
|
end
|
114
119
|
|
115
|
-
def name=(
|
116
|
-
unless
|
120
|
+
def name=(value)
|
121
|
+
unless may_append_name?
|
117
122
|
raise IllegalStateTransitionError.new(from: @status, to: :named)
|
118
123
|
end
|
119
124
|
|
120
|
-
@name =
|
125
|
+
@name = value
|
121
126
|
self.status = :named
|
122
127
|
end
|
123
128
|
|
@@ -145,6 +150,10 @@ module TagRipper
|
|
145
150
|
awaiting_name?
|
146
151
|
end
|
147
152
|
|
153
|
+
def may_append_name?
|
154
|
+
awaiting_name? | naming?
|
155
|
+
end
|
156
|
+
|
148
157
|
def may_close?
|
149
158
|
named?
|
150
159
|
end
|
@@ -182,8 +191,12 @@ module TagRipper
|
|
182
191
|
protected
|
183
192
|
|
184
193
|
def append_name!(string)
|
185
|
-
|
194
|
+
unless may_append_name?
|
195
|
+
raise IllegalStateTransitionError.new(from: @status, to: :naming)
|
196
|
+
end
|
186
197
|
|
198
|
+
@status = :naming
|
199
|
+
@name ||= ""
|
187
200
|
@name.concat(string.to_s)
|
188
201
|
end
|
189
202
|
|
@@ -251,22 +264,36 @@ module TagRipper
|
|
251
264
|
define_method].freeze
|
252
265
|
private_constant :IGNORED_IDENT_KEYWORDS
|
253
266
|
|
254
|
-
def name_from_lex(lex)
|
267
|
+
def name_from_lex(lex)
|
255
268
|
return self if IGNORED_IDENT_KEYWORDS.include?(lex.token)
|
256
|
-
# TODO: Simplify this logic
|
257
|
-
return self if named? && !@name.end_with?("::")
|
258
|
-
return self unless may_name? || (name? && @name.end_with?("::"))
|
259
269
|
|
260
|
-
#
|
261
|
-
if named?
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
270
|
+
# If we are already done naming, then we don't want to name some more...
|
271
|
+
return self if named?
|
272
|
+
|
273
|
+
# Unless we are awaiting more name information, return self
|
274
|
+
return self unless may_append_name?
|
275
|
+
|
276
|
+
append_name!(lex.token)
|
266
277
|
|
267
278
|
self
|
268
279
|
end # rubocop:enable Metrics
|
269
280
|
|
281
|
+
# Token is not likely to be part of a TaggableEntity name
|
282
|
+
# (e.g. spaces, newlines, semicolons, keywords...)
|
283
|
+
def on_non_name_token(_lex)
|
284
|
+
if naming?
|
285
|
+
@status = :named
|
286
|
+
end
|
287
|
+
self
|
288
|
+
end
|
289
|
+
|
290
|
+
alias on_nl on_non_name_token
|
291
|
+
alias on_sp on_non_name_token
|
292
|
+
alias on_semicolon on_non_name_token
|
293
|
+
alias on_comma on_non_name_token
|
294
|
+
alias on_lparen on_non_name_token
|
295
|
+
alias on_rparen on_non_name_token
|
296
|
+
|
270
297
|
##
|
271
298
|
# Matches names of constants: module names, const names, etc.
|
272
299
|
alias on_const name_from_lex
|
@@ -276,7 +303,7 @@ module TagRipper
|
|
276
303
|
alias on_ident name_from_lex
|
277
304
|
|
278
305
|
def on_op(lex)
|
279
|
-
if lex.double_colon?
|
306
|
+
if lex.double_colon? && may_append_name?
|
280
307
|
append_name!(lex.token)
|
281
308
|
end
|
282
309
|
|
data/lib/tag_ripper/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tag_ripper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Morrice
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
11
|
dependencies: []
|
12
12
|
description: Add tags to your Ruby code comments and then Rip the as lexical tokens
|
13
13
|
email:
|
@@ -53,7 +53,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
requirements: []
|
56
|
-
rubygems_version: 3.6.
|
56
|
+
rubygems_version: 3.6.7
|
57
57
|
specification_version: 4
|
58
58
|
summary: Rips tags from Ruby code
|
59
59
|
test_files: []
|