module Inch
  # The Evaluation module concerns itself with the evaluation of code objects
  # with regard to their inline code documentation
  module Evaluation
    def self.for(code_object)
      class_for(code_object).new(code_object)
    end

    private

    def self.class_for(code_object)
      class_name = code_object.class.to_s.split("::").last
      const_get(class_name)
    end
  end
end

require "inch/utils/read_write_methods"

require "inch/evaluation/file"
require "inch/evaluation/grade"
require "inch/evaluation/grade_list"
require "inch/evaluation/object_schema"
require "inch/evaluation/priority_range"

require "inch/evaluation/role/base"
require "inch/evaluation/role/missing"
require "inch/evaluation/role/object"
require "inch/evaluation/role/method"
require "inch/evaluation/role/method_parameter"
require "inch/evaluation/role/namespace"
require "inch/evaluation/role/constant"
require "inch/evaluation/role/class_variable"

require "inch/evaluation/proxy"