module Inch
  module Language
    module Ruby
      module Provider
        # Parses the source tree (using YARD)
        module YARD
          # Returns +true+ if the docstring was generated by YARD
          #
          # @param docstring [Docstring,String]
          # @param method [MethodObject]
          def self.implicit_docstring?(docstring, method)
            name = method.name
            if method.getter?
              docstring.to_s == "Returns the value of attribute #{name}"
            elsif method.setter?
              basename = name.to_s.gsub(/(\=)$/, "")
              docstring.to_s == "Sets the attribute #{basename}"
            else
              false
            end
          end

          # Returns +true+ if the tag was generated by YARD
          #
          # @param tag [::YARD::Tag]
          # @param method [MethodObject]
          def self.implicit_tag?(tag, method)
            name = method.name
            if method.getter?
              tag.tag_name == "return" &&
                tag.text == "the current value of #{name}"
            elsif method.setter?
              tag.tag_name == "return" &&
                tag.text == "the newly set value"
            else
              false
            end
          end

          # @see Provider.parse
          def self.parse(dir, config)
            Parser.parse(dir, config)
          end
        end
      end
    end
  end
end

require "logger"
require "yard"

log.level = ::Logger::UNKNOWN # basically disable YARD's logging

require "inch/language/ruby/provider/yard/parser"
require "inch/language/ruby/provider/yard/docstring"
require "inch/language/ruby/provider/yard/nodoc_helper"
require "inch/language/ruby/provider/yard/object"