Skip to content

Commit 138acb9

Browse files
committed
Drop reimplementation of Ripper lex state
This code was for ruby 2.4 compatibility, but rdoc dropped support for ruby 2.4 about three years ago, in c07ed31. This code was almost half of the lines of code in rdoc/parser/ripper_state_lex.
1 parent 4614f05 commit 138acb9

File tree

1 file changed

+1
-285
lines changed

1 file changed

+1
-285
lines changed

lib/rdoc/parser/ripper_state_lex.rb

Lines changed: 1 addition & 285 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
class RDoc::Parser::RipperStateLex
88
# :stopdoc:
99

10-
# TODO: Remove this constants after Ruby 2.4 EOL
11-
RIPPER_HAS_LEX_STATE = Ripper::Filter.method_defined?(:state)
12-
1310
Token = Struct.new(:line_no, :char_no, :kind, :text, :state)
1411

1512
EXPR_NONE = 0
@@ -31,284 +28,6 @@ class RDoc::Parser::RipperStateLex
3128
EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG)
3229
EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
3330

34-
class InnerStateLex < Ripper::Filter
35-
attr_accessor :lex_state
36-
37-
def initialize(code)
38-
@lex_state = EXPR_BEG
39-
@in_fname = false
40-
@continue = false
41-
reset
42-
super(code)
43-
end
44-
45-
def reset
46-
@command_start = false
47-
@cmd_state = @command_start
48-
end
49-
50-
def on_nl(tok, data)
51-
case @lex_state
52-
when EXPR_FNAME, EXPR_DOT
53-
@continue = true
54-
else
55-
@continue = false
56-
@lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
57-
end
58-
data << Token.new(lineno, column, __method__, tok, @lex_state)
59-
end
60-
61-
def on_ignored_nl(tok, data)
62-
case @lex_state
63-
when EXPR_FNAME, EXPR_DOT
64-
@continue = true
65-
else
66-
@continue = false
67-
@lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
68-
end
69-
data << Token.new(lineno, column, __method__, tok, @lex_state)
70-
end
71-
72-
def on_op(tok, data)
73-
case tok
74-
when '&', '|', '!', '!=', '!~'
75-
case @lex_state
76-
when EXPR_FNAME, EXPR_DOT
77-
@lex_state = EXPR_ARG
78-
else
79-
@lex_state = EXPR_BEG
80-
end
81-
when '<<'
82-
# TODO next token?
83-
case @lex_state
84-
when EXPR_FNAME, EXPR_DOT
85-
@lex_state = EXPR_ARG
86-
else
87-
@lex_state = EXPR_BEG
88-
end
89-
when '?'
90-
@lex_state = EXPR_BEG
91-
when '&&', '||', '+=', '-=', '*=', '**=',
92-
'&=', '|=', '^=', '<<=', '>>=', '||=', '&&='
93-
@lex_state = EXPR_BEG
94-
when '::'
95-
case @lex_state
96-
when EXPR_ARG, EXPR_CMDARG
97-
@lex_state = EXPR_DOT
98-
when EXPR_FNAME, EXPR_DOT
99-
@lex_state = EXPR_ARG
100-
else
101-
@lex_state = EXPR_BEG
102-
end
103-
else
104-
case @lex_state
105-
when EXPR_FNAME, EXPR_DOT
106-
@lex_state = EXPR_ARG
107-
else
108-
@lex_state = EXPR_BEG
109-
end
110-
end
111-
data << Token.new(lineno, column, __method__, tok, @lex_state)
112-
end
113-
114-
def on_kw(tok, data)
115-
case tok
116-
when 'class'
117-
@lex_state = EXPR_CLASS
118-
@in_fname = true
119-
when 'def'
120-
@lex_state = EXPR_FNAME
121-
@continue = true
122-
@in_fname = true
123-
when 'if', 'unless', 'while', 'until'
124-
if ((EXPR_MID | EXPR_END | EXPR_ENDARG | EXPR_ENDFN | EXPR_ARG | EXPR_CMDARG) & @lex_state) != 0 # postfix if
125-
@lex_state = EXPR_BEG | EXPR_LABEL
126-
else
127-
@lex_state = EXPR_BEG
128-
end
129-
when 'begin', 'case', 'when'
130-
@lex_state = EXPR_BEG
131-
when 'return', 'break'
132-
@lex_state = EXPR_MID
133-
else
134-
if @lex_state == EXPR_FNAME
135-
@lex_state = EXPR_END
136-
else
137-
@lex_state = EXPR_END
138-
end
139-
end
140-
data << Token.new(lineno, column, __method__, tok, @lex_state)
141-
end
142-
143-
def on_tstring_beg(tok, data)
144-
@lex_state = EXPR_BEG
145-
data << Token.new(lineno, column, __method__, tok, @lex_state)
146-
end
147-
148-
def on_tstring_end(tok, data)
149-
@lex_state = EXPR_END | EXPR_ENDARG
150-
data << Token.new(lineno, column, __method__, tok, @lex_state)
151-
end
152-
153-
def on_CHAR(tok, data)
154-
@lex_state = EXPR_END
155-
data << Token.new(lineno, column, __method__, tok, @lex_state)
156-
end
157-
158-
def on_period(tok, data)
159-
@lex_state = EXPR_DOT
160-
data << Token.new(lineno, column, __method__, tok, @lex_state)
161-
end
162-
163-
def on_int(tok, data)
164-
@lex_state = EXPR_END | EXPR_ENDARG
165-
data << Token.new(lineno, column, __method__, tok, @lex_state)
166-
end
167-
168-
def on_float(tok, data)
169-
@lex_state = EXPR_END | EXPR_ENDARG
170-
data << Token.new(lineno, column, __method__, tok, @lex_state)
171-
end
172-
173-
def on_rational(tok, data)
174-
@lex_state = EXPR_END | EXPR_ENDARG
175-
data << Token.new(lineno, column, __method__, tok, @lex_state)
176-
end
177-
178-
def on_imaginary(tok, data)
179-
@lex_state = EXPR_END | EXPR_ENDARG
180-
data << Token.new(lineno, column, __method__, tok, @lex_state)
181-
end
182-
183-
def on_symbeg(tok, data)
184-
@lex_state = EXPR_FNAME
185-
@continue = true
186-
@in_fname = true
187-
data << Token.new(lineno, column, __method__, tok, @lex_state)
188-
end
189-
190-
private def on_variables(event, tok, data)
191-
if @in_fname
192-
@lex_state = EXPR_ENDFN
193-
@in_fname = false
194-
@continue = false
195-
elsif @continue
196-
case @lex_state
197-
when EXPR_DOT
198-
@lex_state = EXPR_ARG
199-
else
200-
@lex_state = EXPR_ENDFN
201-
@continue = false
202-
end
203-
else
204-
@lex_state = EXPR_CMDARG
205-
end
206-
data << Token.new(lineno, column, event, tok, @lex_state)
207-
end
208-
209-
def on_ident(tok, data)
210-
on_variables(__method__, tok, data)
211-
end
212-
213-
def on_ivar(tok, data)
214-
@lex_state = EXPR_END
215-
on_variables(__method__, tok, data)
216-
end
217-
218-
def on_cvar(tok, data)
219-
@lex_state = EXPR_END
220-
on_variables(__method__, tok, data)
221-
end
222-
223-
def on_gvar(tok, data)
224-
@lex_state = EXPR_END
225-
on_variables(__method__, tok, data)
226-
end
227-
228-
def on_backref(tok, data)
229-
@lex_state = EXPR_END
230-
on_variables(__method__, tok, data)
231-
end
232-
233-
def on_lparen(tok, data)
234-
@lex_state = EXPR_LABEL | EXPR_BEG
235-
data << Token.new(lineno, column, __method__, tok, @lex_state)
236-
end
237-
238-
def on_rparen(tok, data)
239-
@lex_state = EXPR_ENDFN
240-
data << Token.new(lineno, column, __method__, tok, @lex_state)
241-
end
242-
243-
def on_lbrace(tok, data)
244-
@lex_state = EXPR_LABEL | EXPR_BEG
245-
data << Token.new(lineno, column, __method__, tok, @lex_state)
246-
end
247-
248-
def on_rbrace(tok, data)
249-
@lex_state = EXPR_ENDARG
250-
data << Token.new(lineno, column, __method__, tok, @lex_state)
251-
end
252-
253-
def on_lbracket(tok, data)
254-
@lex_state = EXPR_LABEL | EXPR_BEG
255-
data << Token.new(lineno, column, __method__, tok, @lex_state)
256-
end
257-
258-
def on_rbracket(tok, data)
259-
@lex_state = EXPR_ENDARG
260-
data << Token.new(lineno, column, __method__, tok, @lex_state)
261-
end
262-
263-
def on_const(tok, data)
264-
case @lex_state
265-
when EXPR_FNAME
266-
@lex_state = EXPR_ENDFN
267-
when EXPR_CLASS, EXPR_CMDARG, EXPR_MID
268-
@lex_state = EXPR_ARG
269-
else
270-
@lex_state = EXPR_CMDARG
271-
end
272-
data << Token.new(lineno, column, __method__, tok, @lex_state)
273-
end
274-
275-
def on_sp(tok, data)
276-
data << Token.new(lineno, column, __method__, tok, @lex_state)
277-
end
278-
279-
def on_comma(tok, data)
280-
@lex_state = EXPR_BEG | EXPR_LABEL if (EXPR_ARG_ANY & @lex_state) != 0
281-
data << Token.new(lineno, column, __method__, tok, @lex_state)
282-
end
283-
284-
def on_comment(tok, data)
285-
@lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
286-
data << Token.new(lineno, column, __method__, tok, @lex_state)
287-
end
288-
289-
def on_ignored_sp(tok, data)
290-
@lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
291-
data << Token.new(lineno, column, __method__, tok, @lex_state)
292-
end
293-
294-
def on_heredoc_beg(tok, data)
295-
data << Token.new(lineno, column, __method__, tok, @lex_state)
296-
@lex_state = EXPR_END
297-
data
298-
end
299-
300-
def on_heredoc_end(tok, data)
301-
data << Token.new(lineno, column, __method__, tok, @lex_state)
302-
@lex_state = EXPR_BEG
303-
data
304-
end
305-
306-
def on_default(event, tok, data)
307-
reset
308-
data << Token.new(lineno, column, event, tok, @lex_state)
309-
end
310-
end unless RIPPER_HAS_LEX_STATE
311-
31231
class InnerStateLex < Ripper::Filter
31332
def initialize(code)
31433
super(code)
@@ -317,7 +36,7 @@ def initialize(code)
31736
def on_default(event, tok, data)
31837
data << Token.new(lineno, column, event, tok, state)
31938
end
320-
end if RIPPER_HAS_LEX_STATE
39+
end
32140

32241
def get_squashed_tk
32342
if @buf.empty?
@@ -333,7 +52,6 @@ def get_squashed_tk
33352
tk = get_string_tk(tk)
33453
when :on_backtick then
33554
if (tk[:state] & (EXPR_FNAME | EXPR_ENDFN)) != 0
336-
@inner_lex.lex_state = EXPR_ARG unless RIPPER_HAS_LEX_STATE
33755
tk[:kind] = :on_ident
33856
tk[:state] = Ripper::Lexer.const_defined?(:State) ? Ripper::Lexer::State.new(EXPR_ARG) : EXPR_ARG
33957
else
@@ -345,7 +63,6 @@ def get_squashed_tk
34563
tk = get_embdoc_tk(tk)
34664
when :on_heredoc_beg then
34765
@heredoc_queue << retrieve_heredoc_info(tk)
348-
@inner_lex.lex_state = EXPR_END unless RIPPER_HAS_LEX_STATE
34966
when :on_nl, :on_ignored_nl, :on_comment, :on_heredoc_end then
35067
if !@heredoc_queue.empty?
35168
get_heredoc_tk(*@heredoc_queue.shift)
@@ -549,7 +266,6 @@ def get_squashed_tk
549266
private def get_op_tk(tk)
550267
redefinable_operators = %w[! != !~ % & * ** + +@ - -@ / < << <= <=> == === =~ > >= >> [] []= ^ ` | ~]
551268
if redefinable_operators.include?(tk[:text]) and tk[:state] == EXPR_ARG then
552-
@inner_lex.lex_state = EXPR_ARG unless RIPPER_HAS_LEX_STATE
553269
tk[:state] = Ripper::Lexer.const_defined?(:State) ? Ripper::Lexer::State.new(EXPR_ARG) : EXPR_ARG
554270
tk[:kind] = :on_ident
555271
elsif tk[:text] =~ /^[-+]$/ then

0 commit comments

Comments
 (0)