Sha256: b16e4760c4175edde66678fad82da18ed3060b0e2fd0aefd20c73451dac36997

Contents?: true

Size: 1.61 KB

Versions: 8

Compression:

Stored size: 1.61 KB

Contents

module Yoda
  module Parsing
    # @deprecated
    class SourceAnalyzer
      include AstTraversable

      # @param source   [String]
      # @param location [Location]
      # @return [SourceAnalyzer]
      def self.from_source(source, location)
        new(Parser.new.parse(source), location)
      end

      attr_reader :ast, :location

      # @param ast      [::Parser::AST::Node]
      # @param location [Location]
      def initialize(ast, location)
        @ast = ast
        @location = location
      end

      # @return [Array<::Parser::AST::Node>]
      def nodes_to_current_location_from_root
        @nodes_to_current_location ||= calc_nodes_to_current_location(ast, location)
      end

      # @return [true, false]
      def on_method?
        !!current_method_node
      end

      # @return [::Parser::AST::Node]
      def current_method_node
        nodes_to_current_location_from_root.reverse.find { |node| [:def, :defs].include?(node.type) }
      end

      # @return [Array<::Parser::AST::Node>]
      def current_namespace_nodes
        nodes_to_current_location_from_root.find_all { |node| [:class, :module, :sclass].include?(node.type) }
      end

      # @return [Namespace]
      def namespace
        @namespace ||= NodeObjects::Namespace.new(self.ast)
      end

      # @return [NodeObjects::Namespace, nil]
      def current_namespace
        @current_namespace ||= namespace.calc_current_location_namespace(location)
      end

      # @return [NodeObjects::MethodDefition, nil]
      def current_method
        @current_method ||= namespace.calc_current_location_method(location)
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
yoda-language-server-0.7.2 lib/yoda/parsing/source_analyzer.rb
yoda-language-server-0.7.1 lib/yoda/parsing/source_analyzer.rb
yoda-language-server-0.7.0 lib/yoda/parsing/source_analyzer.rb
yoda-language-server-0.6.2 lib/yoda/parsing/source_analyzer.rb
yoda-language-server-0.6.1 lib/yoda/parsing/source_analyzer.rb
yoda-language-server-0.6.0 lib/yoda/parsing/source_analyzer.rb
yoda-language-server-0.5.0 lib/yoda/parsing/source_analyzer.rb
yoda-language-server-0.4.0 lib/yoda/parsing/source_analyzer.rb