@@ -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