lib/rubocop/ast/node_pattern/sets.rb
# frozen_string_literal: true module RuboCop module AST class NodePattern # Utility to assign a set of values to a constant module Sets REGISTRY = Hash.new do |h, set| name = Sets.name(set).freeze Sets.const_set(name, set) h[set] = "::RuboCop::AST::NodePattern::Sets::#{name}" end MAX = 4 def self.name(set) elements = set elements = set.first(MAX - 1) << :etc if set.size > MAX name = elements.to_a.join('_').upcase.gsub(/[^A-Z0-9_]/, '') uniq("SET_#{name}") end def self.uniq(name) return name unless Sets.const_defined?(name) (2..Float::INFINITY).each do |i| uniq = "#{name}_#{i}" return uniq unless Sets.const_defined?(uniq) end end def self.[](set) REGISTRY[set] end end end end end