Skip to content

Commit 7d6aaec

Browse files
committed
Source::TreeRewriter: Refactor to reduce object allocations
1 parent faa7633 commit 7d6aaec

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

lib/parser/source/tree_rewriter.rb

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,9 @@ def initialize(source_buffer,
105105
@source_buffer = source_buffer
106106
@in_transaction = false
107107

108-
@policy = {crossing_deletions: check_policy_value(crossing_deletions),
109-
different_replacements: check_policy_value(different_replacements),
110-
swallowed_insertions: check_policy_value(swallowed_insertions)}.freeze
108+
@crossing_deletions = check_policy_value(crossing_deletions)
109+
@different_replacements = check_policy_value(different_replacements)
110+
@swallowed_insertions = check_policy_value(swallowed_insertions)
111111

112112
@enforcer = method(:enforce_policy)
113113
# We need a range that would be jugded as containing all other ranges,
@@ -381,15 +381,27 @@ def check_range_validity(range)
381381
range
382382
end
383383

384+
EVENT_TO_POLICY = {
385+
crossing_deletions: :@crossing_deletions,
386+
different_replacements: :@different_replacements,
387+
swallowed_insertions: :@swallowed_insertions,
388+
}.freeze
389+
390+
def policy(event)
391+
return :raise if event == :crossing_insertions
392+
393+
instance_variable_get(EVENT_TO_POLICY.fetch(event))
394+
end
395+
384396
def enforce_policy(event)
385-
return if @policy[event] == :accept
397+
return if policy(event) == :accept
386398
return unless (values = yield)
387399
trigger_policy(event, **values)
388400
end
389401

390402
POLICY_TO_LEVEL = {warn: :warning, raise: :error}.freeze
391403
def trigger_policy(event, range: raise, conflict: nil, **arguments)
392-
action = @policy[event] || :raise
404+
action = policy(event)
393405
diag = Parser::Diagnostic.new(POLICY_TO_LEVEL[action], event, arguments, range)
394406
@diagnostics.process(diag)
395407
if conflict

0 commit comments

Comments
 (0)