ruby-lint 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/CONTRIBUTING.md +1 -0
- data/README.md +1 -1
- data/checksum/ruby-lint-2.2.0.gem.sha512 +1 -0
- data/doc/changelog.md +39 -0
- data/doc/graphviz/flow.dot +3 -0
- data/doc/images/flow.png +0 -0
- data/lib/ruby-lint/analysis/argument_amount.rb +2 -1
- data/lib/ruby-lint/analysis/loop_keywords.rb +8 -3
- data/lib/ruby-lint/constant_loader.rb +52 -4
- data/lib/ruby-lint/constant_path.rb +3 -12
- data/lib/ruby-lint/definition/ruby_object.rb +20 -8
- data/lib/ruby-lint/report/entry.rb +1 -1
- data/lib/ruby-lint/runner.rb +0 -6
- data/lib/ruby-lint/variable_predicates.rb +1 -0
- data/lib/ruby-lint/version.rb +1 -1
- data/lib/ruby-lint/virtual_machine.rb +11 -0
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 331ac16aeefe37d7fe272112bdde394e57e8cfe4
         | 
| 4 | 
            +
              data.tar.gz: b78010d6fd3e7cd0ffba8e69166427671ebb1646
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 84d955c9da5d706926efab593310f5fd211cf10b72e2f1f9e7562768c9af1ddaf3a5c647ed3b5fb4a8a441bbb3642083b74643b616813bdf4865ba9ff61afb5b
         | 
| 7 | 
            +
              data.tar.gz: 8e43b5ca6ca4b22c38eea2b63072982930551f73d7fe51b094cf8072c8fbb16dded067efd622d77ed98e09cc3da542c210ca814d1a789549637a44f40de810bb
         | 
    
        data/.yardopts
    CHANGED
    
    
    
        data/CONTRIBUTING.md
    CHANGED
    
    | @@ -18,6 +18,7 @@ this CoC. | |
| 18 18 | 
             
            * Wrap lines at 80 characters per line.
         | 
| 19 19 | 
             
            * Git commits should have a <= 50 character summary, optionally followed by a
         | 
| 20 20 | 
             
              blank line and a more in depth description of 80 characters per line.
         | 
| 21 | 
            +
            * Write a summary of your contribution to the {file:changelog changelog}.
         | 
| 21 22 |  | 
| 22 23 | 
             
            ## Editor Setup
         | 
| 23 24 |  | 
    
        data/README.md
    CHANGED
    
    | @@ -78,7 +78,7 @@ the following output: | |
| 78 78 |  | 
| 79 79 | 
             
                test.rb: error: line 7, column 22: undefined instance variable @name
         | 
| 80 80 | 
             
                test.rb: warning: line 12, column 1: unused local variable greeting
         | 
| 81 | 
            -
                test.rb: error: line 14, column 1: wrong number of arguments (expected 0 but got 1)
         | 
| 81 | 
            +
                test.rb: error: line 14, column 1: wrong number of arguments for 'greet' (expected 0 but got 1)
         | 
| 82 82 |  | 
| 83 83 | 
             
            ## ruby-lint versus RuboCop
         | 
| 84 84 |  | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            ee671e49cd231d715d6a680fc471b209f7c05c0d72cec2a7b1bc20301933e621be0be91bda12cb095f6349835c321d88a1b4806dc2673a46b5f7c69edc1a5f43
         | 
    
        data/doc/changelog.md
    CHANGED
    
    | @@ -5,6 +5,45 @@ This document contains a short summary of the various releases of ruby-lint. | |
| 5 5 | 
             
            For a full list of commits included in each release see the corresponding Git
         | 
| 6 6 | 
             
            tags (named after the versions).
         | 
| 7 7 |  | 
| 8 | 
            +
            ## 2.3.0 - 2016-06-30
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            Analysis fixes:
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            * Absolute constant names, such as `::File`, are resolved correctly.
         | 
| 13 | 
            +
              ([PR#188][PR188] by Martin Vidner)
         | 
| 14 | 
            +
            * When a `Bar` constant is seen inside a `Foo` module, load the definitions
         | 
| 15 | 
            +
              for `Foo::Bar`.
         | 
| 16 | 
            +
              ([PR#184][PR184] by Martin Vidner)
         | 
| 17 | 
            +
            * loop_keywords analysis is no longer fooled by nested loops.
         | 
| 18 | 
            +
              ([PR#185][PR185] by Josef Reidinger)
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            Parsing fixes:
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            * Fixed an exception "Not enough argument definitions" when determining the
         | 
| 23 | 
            +
              value of an empty regex (`//`), empty heredoc, or a bare `yield`.
         | 
| 24 | 
            +
              ([PR#187][PR187] by Martin Vidner)
         | 
| 25 | 
            +
            * Do not crash for `$10` and bigger.
         | 
| 26 | 
            +
              ([PR#186][PR186] by Josef Reidinger)
         | 
| 27 | 
            +
            * Analysis is no longer cut short by Ruby syntax warnings.
         | 
| 28 | 
            +
              ([PR#177][PR177] by Martin Vidner)
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            Report improvements:
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            * argument_amount analysis mentions the method name in the report.
         | 
| 33 | 
            +
              ([PR#172][PR172] by Martin Vidner)
         | 
| 34 | 
            +
            * Reports are sorted by the whole pathname, then by line numbers, and newly
         | 
| 35 | 
            +
              also by column numbers.
         | 
| 36 | 
            +
              ([PR#176][PR176] by Martin Vidner)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            [PR172]: https://github.com/YorickPeterse/ruby-lint/pull/172
         | 
| 39 | 
            +
            [PR176]: https://github.com/YorickPeterse/ruby-lint/pull/176
         | 
| 40 | 
            +
            [PR177]: https://github.com/YorickPeterse/ruby-lint/pull/177
         | 
| 41 | 
            +
            [PR184]: https://github.com/YorickPeterse/ruby-lint/pull/184
         | 
| 42 | 
            +
            [PR185]: https://github.com/YorickPeterse/ruby-lint/pull/185
         | 
| 43 | 
            +
            [PR186]: https://github.com/YorickPeterse/ruby-lint/pull/186
         | 
| 44 | 
            +
            [PR187]: https://github.com/YorickPeterse/ruby-lint/pull/187
         | 
| 45 | 
            +
            [PR188]: https://github.com/YorickPeterse/ruby-lint/pull/188
         | 
| 46 | 
            +
             | 
| 8 47 | 
             
            ## 2.2.0 - 2016-05-26
         | 
| 9 48 |  | 
| 10 49 | 
             
            * Martin Vidner added a present for Emacs, see commit
         | 
    
        data/doc/graphviz/flow.dot
    CHANGED
    
    
    
        data/doc/images/flow.png
    CHANGED
    
    | Binary file | 
| @@ -24,6 +24,11 @@ module RubyLint | |
| 24 24 | 
             
                class LoopKeywords < Base
         | 
| 25 25 | 
             
                  register 'loop_keywords'
         | 
| 26 26 |  | 
| 27 | 
            +
                  def after_initialize
         | 
| 28 | 
            +
                    @loop_nesting = 0
         | 
| 29 | 
            +
                    super
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 27 32 | 
             
                  ##
         | 
| 28 33 | 
             
                  # List of keywords that can only be used inside a loop.
         | 
| 29 34 | 
             
                  #
         | 
| @@ -44,11 +49,11 @@ module RubyLint | |
| 44 49 |  | 
| 45 50 | 
             
                  STATEMENTS.each do |statement|
         | 
| 46 51 | 
             
                    define_method("on_#{statement}") do
         | 
| 47 | 
            -
                      @ | 
| 52 | 
            +
                      @loop_nesting += 1
         | 
| 48 53 | 
             
                    end
         | 
| 49 54 |  | 
| 50 55 | 
             
                    define_method("after_#{statement}") do
         | 
| 51 | 
            -
                      @ | 
| 56 | 
            +
                      @loop_nesting -= 1
         | 
| 52 57 | 
             
                    end
         | 
| 53 58 | 
             
                  end
         | 
| 54 59 |  | 
| @@ -57,7 +62,7 @@ module RubyLint | |
| 57 62 | 
             
                  # @param [RubyLint::AST::Node] node
         | 
| 58 63 | 
             
                  #
         | 
| 59 64 | 
             
                  def verify_keyword(keyword, node)
         | 
| 60 | 
            -
                    if current_scope.type != :block and  | 
| 65 | 
            +
                    if current_scope.type != :block and @loop_nesting.zero?
         | 
| 61 66 | 
             
                      error("#{keyword} can only be used inside a loop/block", node)
         | 
| 62 67 | 
             
                    end
         | 
| 63 68 | 
             
                  end
         | 
| @@ -16,8 +16,11 @@ module RubyLint | |
| 16 16 | 
             
              # @!attribute [r] definitions
         | 
| 17 17 | 
             
              #  @return [RubyLint::Definition::RubyObject]
         | 
| 18 18 | 
             
              #
         | 
| 19 | 
            +
              # @!attribute [r] module_nesting
         | 
| 20 | 
            +
              #  @return [Array<String>]
         | 
| 21 | 
            +
              #
         | 
| 19 22 | 
             
              class ConstantLoader < Iterator
         | 
| 20 | 
            -
                attr_reader :loaded, :definitions
         | 
| 23 | 
            +
                attr_reader :loaded, :definitions, :module_nesting
         | 
| 21 24 |  | 
| 22 25 | 
             
                ##
         | 
| 23 26 | 
             
                # Built-in definitions that should be bootstrapped.
         | 
| @@ -34,10 +37,10 @@ module RubyLint | |
| 34 37 | 
             
                BOOTSTRAP_GVARS = [
         | 
| 35 38 | 
             
                  '$!', '$$', '$&', '$\'', '$*', '$+', '$,', '$-0', '$-F', '$-I', '$-K',
         | 
| 36 39 | 
             
                  '$-W', '$-a', '$-d', '$-i', '$-l', '$-p', '$-v', '$-w', '$.', '$/', '$0',
         | 
| 37 | 
            -
                  ' | 
| 38 | 
            -
                  '$=', '$>', '$?', '$@', '$DEBUG', '$FILENAME', '$KCODE',
         | 
| 40 | 
            +
                  '$:', '$;', '$<', '$=', '$>', '$?', '$@', '$DEBUG', '$FILENAME', '$KCODE',
         | 
| 39 41 | 
             
                  '$LOADED_FEATURES', '$LOAD_PATH', '$PROGRAM_NAME', '$SAFE', '$VERBOSE',
         | 
| 40 42 | 
             
                  '$\"', '$\\', '$_', '$`', '$stderr', '$stdin', '$stdout', '$~'
         | 
| 43 | 
            +
                  # Regexp $1, $2,... $99 are lazy loaded when first used
         | 
| 41 44 | 
             
                ]
         | 
| 42 45 |  | 
| 43 46 | 
             
                ##
         | 
| @@ -70,13 +73,36 @@ module RubyLint | |
| 70 73 | 
             
                #
         | 
| 71 74 | 
             
                def after_initialize
         | 
| 72 75 | 
             
                  @loaded = Set.new
         | 
| 76 | 
            +
                  @module_nesting = []
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                def on_module(node)
         | 
| 80 | 
            +
                  name, _body = *node
         | 
| 81 | 
            +
                  cp = ConstantPath.new(name)
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                  @module_nesting.push(cp.to_s)
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                def after_module(_node)
         | 
| 87 | 
            +
                  @module_nesting.pop
         | 
| 88 | 
            +
                end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                def on_class(node)
         | 
| 91 | 
            +
                  name, _parent, _body = *node
         | 
| 92 | 
            +
                  cp = ConstantPath.new(name)
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                  @module_nesting.push(cp.to_s)
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                def after_class(_node)
         | 
| 98 | 
            +
                  @module_nesting.pop
         | 
| 73 99 | 
             
                end
         | 
| 74 100 |  | 
| 75 101 | 
             
                ##
         | 
| 76 102 | 
             
                # @param [RubyLint::Node] node
         | 
| 77 103 | 
             
                #
         | 
| 78 104 | 
             
                def on_const(node)
         | 
| 79 | 
            -
                   | 
| 105 | 
            +
                  load_nested_constant(ConstantPath.new(node).to_s)
         | 
| 80 106 | 
             
                end
         | 
| 81 107 |  | 
| 82 108 | 
             
                ##
         | 
| @@ -96,6 +122,28 @@ module RubyLint | |
| 96 122 | 
             
                  return RubyLint.registry
         | 
| 97 123 | 
             
                end
         | 
| 98 124 |  | 
| 125 | 
            +
                ##
         | 
| 126 | 
            +
                # Tries to load the definitions for the given constant.
         | 
| 127 | 
            +
                # Takes into account what modules we are in to resolve the constant name.
         | 
| 128 | 
            +
                #
         | 
| 129 | 
            +
                # @param [String] constant name, possibly unqualified
         | 
| 130 | 
            +
                #
         | 
| 131 | 
            +
                def load_nested_constant(constant)
         | 
| 132 | 
            +
                  if constant.start_with?("::")
         | 
| 133 | 
            +
                    constant = constant.sub(/^::/, "")
         | 
| 134 | 
            +
                  else
         | 
| 135 | 
            +
                    # ["A", "B", "C"] -> ["A::B::C", "A::B", "A"]
         | 
| 136 | 
            +
                    namespaces = module_nesting.size.downto(1).map do |n|
         | 
| 137 | 
            +
                      module_nesting.take(n).join("::")
         | 
| 138 | 
            +
                    end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                    namespaces.each do |ns|
         | 
| 141 | 
            +
                      load_constant("#{ns}::#{constant}")
         | 
| 142 | 
            +
                    end
         | 
| 143 | 
            +
                  end
         | 
| 144 | 
            +
                  load_constant(constant)
         | 
| 145 | 
            +
                end
         | 
| 146 | 
            +
             | 
| 99 147 | 
             
                ##
         | 
| 100 148 | 
             
                # Tries to load the definitions for the given constant.
         | 
| 101 149 | 
             
                #
         | 
| @@ -31,7 +31,7 @@ module RubyLint | |
| 31 31 | 
             
                #
         | 
| 32 32 | 
             
                # @param [RubyLint::Definition::RubyObject] scope The scope to use for the
         | 
| 33 33 | 
             
                #  lookups.
         | 
| 34 | 
            -
                # @return [RubyLint::Definition::RubyObject]
         | 
| 34 | 
            +
                # @return [RubyLint::Definition::RubyObject|NilClass]
         | 
| 35 35 | 
             
                #
         | 
| 36 36 | 
             
                def resolve(scope)
         | 
| 37 37 | 
             
                  current = scope
         | 
| @@ -40,7 +40,7 @@ module RubyLint | |
| 40 40 | 
             
                    type  = REMAP_TYPES.fetch(type, type)
         | 
| 41 41 | 
             
                    found = current.lookup(type, name, index == 0)
         | 
| 42 42 |  | 
| 43 | 
            -
                    if found and found.const?
         | 
| 43 | 
            +
                    if found and (found.const? or found.type == :root)
         | 
| 44 44 | 
             
                      current = found
         | 
| 45 45 |  | 
| 46 46 | 
             
                    # Local variables and the likes.
         | 
| @@ -55,15 +55,6 @@ module RubyLint | |
| 55 55 | 
             
                  return current
         | 
| 56 56 | 
             
                end
         | 
| 57 57 |  | 
| 58 | 
            -
                ##
         | 
| 59 | 
            -
                # Returns the very first segment of the constant path as an AST node.
         | 
| 60 | 
            -
                #
         | 
| 61 | 
            -
                # @return [RubyLint::AST::Node]
         | 
| 62 | 
            -
                #
         | 
| 63 | 
            -
                def root_node
         | 
| 64 | 
            -
                  return constant_segments.first
         | 
| 65 | 
            -
                end
         | 
| 66 | 
            -
             | 
| 67 58 | 
             
                ##
         | 
| 68 59 | 
             
                # Returns a String containing the full constant path, e.g.
         | 
| 69 60 | 
             
                # "RubyLint::Runner".
         | 
| @@ -78,7 +69,7 @@ module RubyLint | |
| 78 69 | 
             
                # Returns an Array containing the segments of a constant path.
         | 
| 79 70 | 
             
                #
         | 
| 80 71 | 
             
                # @param [RubyLint::AST::Node] node
         | 
| 81 | 
            -
                # @return [Array<String>]
         | 
| 72 | 
            +
                # @return [Array<Array(Symbol,String)>]
         | 
| 82 73 | 
             
                #
         | 
| 83 74 | 
             
                def constant_segments(node = self.node)
         | 
| 84 75 | 
             
                  segments = []
         | 
| @@ -37,10 +37,12 @@ module RubyLint | |
| 37 37 | 
             
                #  @return [Symbol] The type of object, e.g. `:const`.
         | 
| 38 38 | 
             
                #
         | 
| 39 39 | 
             
                # @!attribute [r] definitions
         | 
| 40 | 
            -
                #  @return [Hash | 
| 40 | 
            +
                #  @return [Hash{Symbol => Hash{String => Object}}]
         | 
| 41 | 
            +
                #    Hash keyed by type and name, containing all child the definitions.
         | 
| 41 42 | 
             
                #
         | 
| 42 43 | 
             
                # @!attribute [rw] parents
         | 
| 43 | 
            -
                #  @return [Array] | 
| 44 | 
            +
                #  @return [Array<RubyLint::Definition::RubyObject>]
         | 
| 45 | 
            +
                #    Array containing the parent definitions.
         | 
| 44 46 | 
             
                #
         | 
| 45 47 | 
             
                # @!attribute [rw] reference_amount
         | 
| 46 48 | 
             
                #  @return [Numeric] The amount of times an object was referenced.
         | 
| @@ -51,7 +53,7 @@ module RubyLint | |
| 51 53 | 
             
                #   instance.
         | 
| 52 54 | 
             
                #
         | 
| 53 55 | 
             
                # @!attribute [r] update_parents
         | 
| 54 | 
            -
                #  @return [Array] A list of data types to also add to the parent
         | 
| 56 | 
            +
                #  @return [Array<Symbol>] A list of data types to also add to the parent
         | 
| 55 57 | 
             
                #   definitions when adding an object to the current one.
         | 
| 56 58 | 
             
                #
         | 
| 57 59 | 
             
                # @!attribute [r] members_as_value
         | 
| @@ -79,7 +81,7 @@ module RubyLint | |
| 79 81 | 
             
                  # Array containing items that should be looked up in the parent
         | 
| 80 82 | 
             
                  # definition if they're not found in the current one.
         | 
| 81 83 | 
             
                  #
         | 
| 82 | 
            -
                  # @return [Array]
         | 
| 84 | 
            +
                  # @return [Array<Symbol>]
         | 
| 83 85 | 
             
                  #
         | 
| 84 86 | 
             
                  LOOKUP_PARENT = [
         | 
| 85 87 | 
             
                    :const,
         | 
| @@ -264,7 +266,8 @@ module RubyLint | |
| 264 266 | 
             
                  # @param [TrueClass|FalseClass] lookup_parent Whether definitions should
         | 
| 265 267 | 
             
                  #  be looked up from parent definitions.
         | 
| 266 268 | 
             
                  #
         | 
| 267 | 
            -
                  # @param [Array] exclude | 
| 269 | 
            +
                  # @param [Array<RubyLint::Definition::RubyObject>] exclude
         | 
| 270 | 
            +
                  #  A list of definitions to skip when looking up
         | 
| 268 271 | 
             
                  #  parents. This list is used to prevent stack errors when dealing with
         | 
| 269 272 | 
             
                  #  recursive definitions. A good example of this is `Logger` and
         | 
| 270 273 | 
             
                  #  `Logger::Severity` which both inherit from each other.
         | 
| @@ -278,6 +281,8 @@ module RubyLint | |
| 278 281 | 
             
                    if defines?(type, name)
         | 
| 279 282 | 
             
                      found = definitions[type][name]
         | 
| 280 283 |  | 
| 284 | 
            +
                    elsif type == :cbase
         | 
| 285 | 
            +
                      found = top_scope
         | 
| 281 286 | 
             
                    # Look up the definition in the parent scope(s) (if any are set). This
         | 
| 282 287 | 
             
                    # takes the parents themselves also into account.
         | 
| 283 288 | 
             
                    elsif lookup_parent?(type) and lookup_parent
         | 
| @@ -374,7 +379,8 @@ module RubyLint | |
| 374 379 | 
             
                  #
         | 
| 375 380 | 
             
                  # @param [#to_sym] type
         | 
| 376 381 | 
             
                  # @param [String] name
         | 
| 377 | 
            -
                  # @param [Array] exclude | 
| 382 | 
            +
                  # @param [Array<RubyLint::Definition::RubyObject>] exclude
         | 
| 383 | 
            +
                  #   Parent definitions to exclude.
         | 
| 378 384 | 
             
                  # @return [TrueClass|FalseClass]
         | 
| 379 385 | 
             
                  #
         | 
| 380 386 | 
             
                  def has_definition?(type, name, exclude = [])
         | 
| @@ -677,6 +683,12 @@ module RubyLint | |
| 677 683 | 
             
                    return %Q(#<#{self.class}:0x#{address} #{attributes.join(' ')}>)
         | 
| 678 684 | 
             
                  end
         | 
| 679 685 |  | 
| 686 | 
            +
                  def top_scope
         | 
| 687 | 
            +
                    return self if type == :root
         | 
| 688 | 
            +
                    scope = parents.last   # the enclosing scope
         | 
| 689 | 
            +
                    scope ? scope.top_scope : self
         | 
| 690 | 
            +
                  end
         | 
| 691 | 
            +
             | 
| 680 692 | 
             
                  private
         | 
| 681 693 |  | 
| 682 694 | 
             
                  ##
         | 
| @@ -697,7 +709,7 @@ module RubyLint | |
| 697 709 | 
             
                  # @param [RubyLint::Definition::RubyObject] parent
         | 
| 698 710 | 
             
                  # @param [Symbol] type
         | 
| 699 711 | 
             
                  # @param [String] name
         | 
| 700 | 
            -
                  # @param [Array] exclude
         | 
| 712 | 
            +
                  # @param [Array<RubyLint::Definition::RubyObject>] exclude
         | 
| 701 713 | 
             
                  # @return [RubyLint::Definition::RubyObject]
         | 
| 702 714 | 
             
                  #
         | 
| 703 715 | 
             
                  def determine_parent(parent, type, name, exclude = [])
         | 
| @@ -769,7 +781,7 @@ module RubyLint | |
| 769 781 | 
             
                  #
         | 
| 770 782 | 
             
                  # @param [#to_sym] type
         | 
| 771 783 | 
             
                  # @param [#to_s] name
         | 
| 772 | 
            -
                  # @return [Array]
         | 
| 784 | 
            +
                  # @return [Array(Symbol,String)]
         | 
| 773 785 | 
             
                  #
         | 
| 774 786 | 
             
                  def prepare_lookup(type, name)
         | 
| 775 787 | 
             
                    return type.to_sym, name.to_s
         | 
    
        data/lib/ruby-lint/runner.rb
    CHANGED
    
    | @@ -30,12 +30,6 @@ module RubyLint | |
| 30 30 |  | 
| 31 31 | 
             
                  parser.consumer = proc do |diag|
         | 
| 32 32 | 
             
                    report_diagnostic(diag, report)
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                    # FIXME: there's a bug in the pure Ruby version of Racc causing it hang
         | 
| 35 | 
            -
                    # after detecting a syntax error (it stays forever in recovery mode).
         | 
| 36 | 
            -
                    # To work around this we'll have to bail out after detecting the first
         | 
| 37 | 
            -
                    # syntax error.
         | 
| 38 | 
            -
                    return presenter.present(report)
         | 
| 39 33 | 
             
                  end
         | 
| 40 34 |  | 
| 41 35 | 
             
                  files.each do |file|
         | 
    
        data/lib/ruby-lint/version.rb
    CHANGED
    
    
| @@ -103,7 +103,9 @@ module RubyLint | |
| 103 103 | 
             
                  :int,
         | 
| 104 104 | 
             
                  :float,
         | 
| 105 105 | 
             
                  :str,
         | 
| 106 | 
            +
                  :dstr,
         | 
| 106 107 | 
             
                  :sym,
         | 
| 108 | 
            +
                  :regexp,
         | 
| 107 109 | 
             
                  :true,
         | 
| 108 110 | 
             
                  :false,
         | 
| 109 111 | 
             
                  :nil,
         | 
| @@ -352,6 +354,8 @@ module RubyLint | |
| 352 354 | 
             
                #
         | 
| 353 355 | 
             
                def on_nth_ref(node)
         | 
| 354 356 | 
             
                  var = definitions.lookup(:gvar, "$#{node.children[0]}")
         | 
| 357 | 
            +
                  # If the number is not found, then add it as there is no limit for them
         | 
| 358 | 
            +
                  var = definitions.define_global_variable(node.children[0]) if !var && node.children[0].is_a?(Fixnum)
         | 
| 355 359 |  | 
| 356 360 | 
             
                  push_value(var.value)
         | 
| 357 361 | 
             
                end
         | 
| @@ -446,6 +450,13 @@ module RubyLint | |
| 446 450 | 
             
                  push_value(method.return_value)
         | 
| 447 451 | 
             
                end
         | 
| 448 452 |  | 
| 453 | 
            +
                ##
         | 
| 454 | 
            +
                # Pushes the return value of the block yielded to, that is, an unknown one.
         | 
| 455 | 
            +
                #
         | 
| 456 | 
            +
                def on_yield
         | 
| 457 | 
            +
                  push_unknown_value
         | 
| 458 | 
            +
                end
         | 
| 459 | 
            +
             | 
| 449 460 | 
             
                ##
         | 
| 450 461 | 
             
                # Creates the definition for a module.
         | 
| 451 462 | 
             
                #
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ruby-lint
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 4 | 
            +
              version: 2.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Yorick Peterse
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-06-30 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: parser
         | 
| @@ -172,6 +172,7 @@ files: | |
| 172 172 | 
             
            - checksum/ruby-lint-2.0.4.gem.sha512
         | 
| 173 173 | 
             
            - checksum/ruby-lint-2.0.5.gem.sha512
         | 
| 174 174 | 
             
            - checksum/ruby-lint-2.1.0.gem.sha512
         | 
| 175 | 
            +
            - checksum/ruby-lint-2.2.0.gem.sha512
         | 
| 175 176 | 
             
            - doc/architecture.md
         | 
| 176 177 | 
             
            - doc/changelog.md
         | 
| 177 178 | 
             
            - doc/code_analysis.md
         |