Sha256: d67eec1dad3b3aca526740c80d4a87d071987cdc9176387829e171769218033f

Contents?: true

Size: 957 Bytes

Versions: 28

Compression:

Stored size: 957 Bytes

Contents

# frozen_string_literal: true

require_relative 'node'
require_relative 'sexp_extensions'

module Reek
  module AST
    # Maps AST node types to sublasses of ASTNode extended with the relevant
    # utility modules.
    #
    class ASTNodeClassMap
      def initialize
        @klass_map = {}
      end

      def klass_for(type)
        klass_map[type] ||= Class.new(Node).tap do |klass|
          extension = extension_map[type]
          # TODO: map node type to constant directly.
          klass.send :include, extension if extension
        end
      end

      def extension_map
        @extension_map ||=
          begin
            assoc = SexpExtensions.constants.map do |const|
              [
                const.to_s.sub(/Node$/, '').downcase.to_sym,
                SexpExtensions.const_get(const)
              ]
            end
            Hash[assoc]
          end
      end

      private

      attr_reader :klass_map
    end
  end
end

Version data entries

28 entries across 26 versions & 2 rubygems

Version Path
reek-6.0.3 lib/reek/ast/ast_node_class_map.rb
reek-6.0.2 lib/reek/ast/ast_node_class_map.rb
reek-6.0.1 lib/reek/ast/ast_node_class_map.rb
reek-6.0.0 lib/reek/ast/ast_node_class_map.rb
reek-5.6.0 lib/reek/ast/ast_node_class_map.rb
reek-5.5.0 lib/reek/ast/ast_node_class_map.rb
reek-5.4.1 lib/reek/ast/ast_node_class_map.rb
reek-5.4.0 lib/reek/ast/ast_node_class_map.rb
reek-5.3.2 lib/reek/ast/ast_node_class_map.rb
reek-5.3.1 lib/reek/ast/ast_node_class_map.rb
reek-5.3.0 lib/reek/ast/ast_node_class_map.rb
config_gems_initialization_aim-0.1.4 vendor/bundle/ruby/2.5.0/gems/config_gems_initialization_aim-0.1.1/vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/lib/reek/ast/ast_node_class_map.rb
config_gems_initialization_aim-0.1.4 vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/lib/reek/ast/ast_node_class_map.rb
config_gems_initialization_aim-0.1.3 vendor/bundle/ruby/2.5.0/gems/config_gems_initialization_aim-0.1.1/vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/lib/reek/ast/ast_node_class_map.rb
config_gems_initialization_aim-0.1.3 vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/lib/reek/ast/ast_node_class_map.rb
reek-5.2.0 lib/reek/ast/ast_node_class_map.rb
reek-5.1.0 lib/reek/ast/ast_node_class_map.rb
reek-5.0.2 lib/reek/ast/ast_node_class_map.rb
reek-5.0.1 lib/reek/ast/ast_node_class_map.rb
reek-5.0.0 lib/reek/ast/ast_node_class_map.rb