# File lib/nanoc3/base/item_rep.rb, line 120
    def outdatedness_reason
      # Get reason symbol
      reason = lambda do
        # Outdated if we don't know
        return :no_mtime if @item.mtime.nil?

        # Outdated if the dependency tracker says so
        return :forced if @force_outdated

        # Outdated if compiled file doesn't exist (yet)
        return :no_raw_path if self.raw_path.nil?
        return :not_written if !File.file?(self.raw_path)

        # Get compiled mtime
        compiled_mtime = File.stat(self.raw_path).mtime

        # Outdated if file too old
        return :source_modified if @item.mtime > compiled_mtime

        # Outdated if layouts outdated
        return :layouts_outdated if @item.site.layouts.any? do |l|
          l.mtime.nil? || l.mtime > compiled_mtime
        end

        # Outdated if code outdated
        return :code_outdated if @item.site.code_snippets.any? do |cs|
          cs.mtime.nil? || cs.mtime > compiled_mtime
        end

        # Outdated if config outdated
        return :config_outdated if @item.site.config_mtime.nil?
        return :config_outdated if @item.site.config_mtime > compiled_mtime

        # Outdated if rules outdated
        return :rules_outdated if @item.site.rules_mtime.nil?
        return :rules_outdated if @item.site.rules_mtime > compiled_mtime

        return nil
      end[]

      # Build reason symbol and description
      if reason.nil?
        nil
      else
        {
          :type        => reason,
          :description => OUTDATEDNESS_REASON_DESCRIPTIONS[reason]
        }
      end
    end