Sha256: ed052c21addb69a5e8df3038445fe5e09021fe4d5e070bb7dfa3c00de9e5b7a1

Contents?: true

Size: 1.47 KB

Versions: 4

Compression:

Stored size: 1.47 KB

Contents

module Yoda
  module Store
    module Transformers
      # YARD parses some kernel methods as public.
      # This class fixes these visibilities.
      class CoreVisibility
        # @param patch [Objects::Patch]
        # @return [Objects::Patch]
        def self.transform(patch)
          new(patch).transformed_patch
        end

        # @return [Objects::Patch]
        attr_reader :patch

        # @param patch [Objects::Patch]
        def initialize(patch)
          @patch = patch
        end

        # @return [Objects::Patch]
        def transformed_patch
          @transformed_patch = begin
            if patch.has_key?(:Kernel)
              create_patch
            else
              patch
            end
          end
        end

        private

        # @return [Objects::Patch]
        def create_patch
          new_patch = Objects::Patch.new(patch.id)

          patch.keys.each do |key|
            new_patch.register(transform_object(patch.get(key)))
          end

          new_patch
        end

        # @param object [Objects::Base]
        # @return [Objects::Base]
        def transform_object(object)
          if object.kind == :method && object.namespace_path == "Kernel"
            if Kernel.private_instance_methods.include?(object.name.to_sym)
              Objects::MethodObject.new(**object.to_h, visibility: :private)
            else
              object
            end
          else
            object
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
yoda-language-server-0.10.1 lib/yoda/store/transformers/core_visibility.rb
yoda-language-server-0.10.0 lib/yoda/store/transformers/core_visibility.rb
yoda-language-server-0.9.0 lib/yoda/store/transformers/core_visibility.rb
yoda-language-server-0.8.0 lib/yoda/store/transformers/core_visibility.rb