rubocop-yast 0.0.6 → 0.0.8
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/CHANGELOG.md +18 -1
 - data/README.md +3 -2
 - data/Rakefile +1 -4
 - data/config/default.yml +1 -1
 - data/lib/rubocop-yast.rb +1 -0
 - data/lib/rubocop/cop/yast/ops.rb +70 -34
 - data/lib/rubocop/yast/logger.rb +28 -0
 - data/lib/rubocop/yast/niceness.rb +19 -1
 - data/lib/rubocop/yast/track_variable_scope.rb +59 -32
 - data/lib/rubocop/yast/variable_scope.rb +15 -2
 - data/lib/rubocop/yast/version.rb +1 -1
 - data/rubocop-yast.gemspec +3 -2
 - metadata +20 -11
 - data/spec/builtins_spec.rb +0 -560
 - data/spec/ops_spec.rb +0 -119
 - data/spec/spec_helper.rb +0 -29
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: ab9d34ebc702b4f960ea9052af25796369d11d60
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 0562543d6aca25bd76a0f933fcfd8670cde680cf
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 8f8c2c95efd7d2e58b78258fae535b1e3c671dbfdb3a108daf9231ae7224f46d21b81912622951635065c0c5364faaa0f509b68b95815992427412e8ee6a5784
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 9fe4dfebd32eea8427cf671018187e60361d99fdb5089e3e4c1d35c2db30278ac11689a1823b233bf5e5dadb5f45e53b37828977dc8e85354d46acbc5392d06e
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -2,7 +2,24 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            ## master (unreleased)
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            ## 0.0. 
     | 
| 
      
 5 
     | 
    
         
            +
            ## 0.0.8 (2015-12-11)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ### New Features
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            - Nearly all Cucumber features converted from Zombie Killer work.
         
     | 
| 
      
 10 
     | 
    
         
            +
              The exception is a `retry` in `rescue`.
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            ## 0.0.7 (2015-12-08)
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            ### Changes
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            - Added Cucumber features converted from the Zombie Killer spec.
         
     | 
| 
      
 17 
     | 
    
         
            +
              Some of them are marked as pending because they don't work yet.
         
     | 
| 
      
 18 
     | 
    
         
            +
            - SafeMode config removed, it is always enabled instead.
         
     | 
| 
      
 19 
     | 
    
         
            +
            - StrictMode config added, enabled by default: report all Ops, even if they
         
     | 
| 
      
 20 
     | 
    
         
            +
              cannot be autocorrected.
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            ## 0.0.6 (2014-12-15)
         
     | 
| 
       6 
23 
     | 
    
         | 
| 
       7 
24 
     | 
    
         
             
            ### New Features
         
     | 
| 
       8 
25 
     | 
    
         | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -67,8 +67,9 @@ Yast/Builtins: 
     | 
|
| 
       67 
67 
     | 
    
         
             
            # Check for obsolete Ops.* calls
         
     | 
| 
       68 
68 
     | 
    
         
             
            Yast/Ops:
         
     | 
| 
       69 
69 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       70 
     | 
    
         
            -
              # in  
     | 
| 
       71 
     | 
    
         
            -
               
     | 
| 
      
 70 
     | 
    
         
            +
              # in strict mode all Ops calls are reported
         
     | 
| 
      
 71 
     | 
    
         
            +
              # even if they cannot be autocorrected
         
     | 
| 
      
 72 
     | 
    
         
            +
              StrictMode: true
         
     | 
| 
       72 
73 
     | 
    
         
             
            ```
         
     | 
| 
       73 
74 
     | 
    
         | 
| 
       74 
75 
     | 
    
         
             
            Development
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -13,10 +13,7 @@ end 
     | 
|
| 
       13 
13 
     | 
    
         
             
            require "cucumber/rake/task"
         
     | 
| 
       14 
14 
     | 
    
         
             
            Cucumber::Rake::Task.new(:features)
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
            require "rspec/core/rake_task"
         
     | 
| 
       17 
     | 
    
         
            -
            RSpec::Core::RakeTask.new(:spec)
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
16 
     | 
    
         
             
            require "rubocop/rake_task"
         
     | 
| 
       20 
17 
     | 
    
         
             
            RuboCop::RakeTask.new(:rubocop)
         
     | 
| 
       21 
18 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
            task default: [: 
     | 
| 
      
 19 
     | 
    
         
            +
            task default: [:features, :rubocop]
         
     | 
    
        data/config/default.yml
    CHANGED
    
    
    
        data/lib/rubocop-yast.rb
    CHANGED
    
    | 
         @@ -6,6 +6,7 @@ require_relative "rubocop/yast/config" 
     | 
|
| 
       6 
6 
     | 
    
         
             
            RuboCop::Yast::Config.load_defaults
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            require_relative "rubocop/yast/version"
         
     | 
| 
      
 9 
     | 
    
         
            +
            require_relative "rubocop/yast/logger"
         
     | 
| 
       9 
10 
     | 
    
         
             
            require_relative "rubocop/cop/yast/builtins"
         
     | 
| 
       10 
11 
     | 
    
         
             
            require_relative "rubocop/cop/yast/ops"
         
     | 
| 
       11 
12 
     | 
    
         
             
            require_relative "rubocop/cop/yast/log_variable"
         
     | 
    
        data/lib/rubocop/cop/yast/ops.rb
    CHANGED
    
    | 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # encoding: utf-8
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require "rubocop/yast/track_variable_scope"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "unparser"
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            # We have encountered code that does satisfy our simplifying assumptions,
         
     | 
| 
       6 
7 
     | 
    
         
             
            # translating it would not be correct.
         
     | 
| 
         @@ -10,63 +11,98 @@ end 
     | 
|
| 
       10 
11 
     | 
    
         
             
            module RuboCop
         
     | 
| 
       11 
12 
     | 
    
         
             
              module Cop
         
     | 
| 
       12 
13 
     | 
    
         
             
                module Yast
         
     | 
| 
       13 
     | 
    
         
            -
                  # This cop checks for Ops.* calls 
     | 
| 
       14 
     | 
    
         
            -
                  #  
     | 
| 
      
 14 
     | 
    
         
            +
                  # This cop checks for Ops.* calls aka Zombies.
         
     | 
| 
      
 15 
     | 
    
         
            +
                  # Some of these can be autocorrected, mostly when we can prove
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # that their arguments cannot be nil.
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # In Strict Mode, it reports all zombies.
         
     | 
| 
      
 18 
     | 
    
         
            +
                  # In Permissive Mode, it report only zombies that can be autocorrected.
         
     | 
| 
       15 
19 
     | 
    
         
             
                  class Ops < Cop
         
     | 
| 
       16 
     | 
    
         
            -
                    include RuboCop::Yast::TrackVariableScope
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
20 
     | 
    
         
             
                    # Ops replacement mapping
         
     | 
| 
       19 
21 
     | 
    
         
             
                    REPLACEMENT = {
         
     | 
| 
       20 
     | 
    
         
            -
                      add:  
     | 
| 
      
 22 
     | 
    
         
            +
                      add: :+,
         
     | 
| 
      
 23 
     | 
    
         
            +
                      # divide: :/,          # must also check divisor nonzero
         
     | 
| 
      
 24 
     | 
    
         
            +
                      # greater_than::>,      # handle ycp comparison
         
     | 
| 
      
 25 
     | 
    
         
            +
                      # greater_or_equal: :>=,# handle ycp comparison
         
     | 
| 
      
 26 
     | 
    
         
            +
                      # less_than: :<,        # handle ycp comparison
         
     | 
| 
      
 27 
     | 
    
         
            +
                      # less_or_equal: :<=,   # handle ycp comparison
         
     | 
| 
      
 28 
     | 
    
         
            +
                      modulo: :%,
         
     | 
| 
      
 29 
     | 
    
         
            +
                      multiply: :*,
         
     | 
| 
      
 30 
     | 
    
         
            +
                      subtract: :-
         
     | 
| 
       21 
31 
     | 
    
         
             
                    }
         
     | 
| 
       22 
32 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                    MSG = "Obsolete Ops.%s call found"
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
33 
     | 
    
         
             
                    def initialize(config = nil, options = nil)
         
     | 
| 
       26 
34 
     | 
    
         
             
                      super(config, options)
         
     | 
| 
       27 
35 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
                      @ 
     | 
| 
      
 36 
     | 
    
         
            +
                      @strict_mode = cop_config && cop_config["StrictMode"]
         
     | 
| 
       29 
37 
     | 
    
         
             
                      @replaced_nodes = []
         
     | 
| 
      
 38 
     | 
    
         
            +
                      @processor = OpsProcessor.new(self)
         
     | 
| 
       30 
39 
     | 
    
         
             
                    end
         
     | 
| 
       31 
40 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
                    def  
     | 
| 
       33 
     | 
    
         
            -
                       
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                      _ops, method, a, b = *node
         
     | 
| 
       36 
     | 
    
         
            -
                      return if !(nice(a) && nice(b)) && safe_mode
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                      add_offense(node, :selector, format(MSG, method))
         
     | 
| 
      
 41 
     | 
    
         
            +
                    def investigate(processed_source)
         
     | 
| 
      
 42 
     | 
    
         
            +
                      @processor.investigate(processed_source)
         
     | 
| 
       39 
43 
     | 
    
         
             
                    end
         
     | 
| 
       40 
44 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
                     
     | 
| 
      
 45 
     | 
    
         
            +
                    attr_reader :strict_mode
         
     | 
| 
       42 
46 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
                     
     | 
| 
       44 
     | 
    
         
            -
                      n_receiver, n_message = *node
         
     | 
| 
       45 
     | 
    
         
            -
                      n_receiver && n_receiver.type == :const &&
         
     | 
| 
       46 
     | 
    
         
            -
                        n_receiver.children[0].nil? &&
         
     | 
| 
       47 
     | 
    
         
            -
                        n_receiver.children[1] == namespace &&
         
     | 
| 
       48 
     | 
    
         
            -
                        n_message == message
         
     | 
| 
       49 
     | 
    
         
            -
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
                    private
         
     | 
| 
       50 
48 
     | 
    
         | 
| 
       51 
49 
     | 
    
         
             
                    def autocorrect(node)
         
     | 
| 
       52 
     | 
    
         
            -
                       
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 50 
     | 
    
         
            +
                      return unless @processor.autocorrectable?(node)
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                      _ops, message, arg1, arg2 = *node
         
     | 
| 
       54 
53 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
      
 54 
     | 
    
         
            +
                      new_op = REPLACEMENT[message]
         
     | 
| 
      
 55 
     | 
    
         
            +
                      return unless new_op
         
     | 
| 
       57 
56 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
      
 57 
     | 
    
         
            +
                      @corrections << lambda do |corrector|
         
     | 
| 
      
 58 
     | 
    
         
            +
                        source_range = node.loc.expression
         
     | 
| 
      
 59 
     | 
    
         
            +
                        next if contains_comment?(source_range.source)
         
     | 
| 
      
 60 
     | 
    
         
            +
                        new_node = Parser::AST::Node.new(:send, [arg1, new_op, arg2])
         
     | 
| 
      
 61 
     | 
    
         
            +
                        corrector.replace(source_range, Unparser.unparse(new_node))
         
     | 
| 
       60 
62 
     | 
    
         
             
                      end
         
     | 
| 
       61 
63 
     | 
    
         
             
                    end
         
     | 
| 
       62 
64 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
                    def  
     | 
| 
       64 
     | 
    
         
            -
                      " 
     | 
| 
       65 
     | 
    
         
            -
                        "#{arg2.loc.expression.source}"
         
     | 
| 
      
 65 
     | 
    
         
            +
                    def contains_comment?(string)
         
     | 
| 
      
 66 
     | 
    
         
            +
                      /^[^'"\n]*#/.match(string)
         
     | 
| 
       66 
67 
     | 
    
         
             
                    end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                    attr_reader :safe_mode
         
     | 
| 
       69 
68 
     | 
    
         
             
                  end
         
     | 
| 
       70 
69 
     | 
    
         
             
                end
         
     | 
| 
       71 
70 
     | 
    
         
             
              end
         
     | 
| 
       72 
71 
     | 
    
         
             
            end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
            # Niceness processor really
         
     | 
| 
      
 74 
     | 
    
         
            +
            class OpsProcessor < Parser::AST::Processor
         
     | 
| 
      
 75 
     | 
    
         
            +
              include RuboCop::Yast::TrackVariableScope
         
     | 
| 
      
 76 
     | 
    
         
            +
              include RuboCop::Cop::Util # const_name
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
              attr_reader :cop
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
              def initialize(cop)
         
     | 
| 
      
 81 
     | 
    
         
            +
                @cop = cop
         
     | 
| 
      
 82 
     | 
    
         
            +
              end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
              def investigate(processed_source)
         
     | 
| 
      
 85 
     | 
    
         
            +
                process(processed_source.ast)
         
     | 
| 
      
 86 
     | 
    
         
            +
              end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
              MSG = "Obsolete Ops.%s call found"
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
              def on_send(node)
         
     | 
| 
      
 91 
     | 
    
         
            +
                super
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                receiver, message = *node
         
     | 
| 
      
 94 
     | 
    
         
            +
                return unless const_name(receiver) == "Ops"
         
     | 
| 
      
 95 
     | 
    
         
            +
                return unless RuboCop::Cop::Yast::Ops::REPLACEMENT.key?(message)
         
     | 
| 
      
 96 
     | 
    
         
            +
                return unless cop.strict_mode || autocorrectable?(node)
         
     | 
| 
      
 97 
     | 
    
         
            +
                cop.add_offense(node, :selector, format(MSG, message))
         
     | 
| 
      
 98 
     | 
    
         
            +
              end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
              # assumes node is an Ops.add
         
     | 
| 
      
 101 
     | 
    
         
            +
              def autocorrectable?(node)
         
     | 
| 
      
 102 
     | 
    
         
            +
                RuboCop::Yast.logger.debug "AUTOCORRECTABLE?(#{node.inspect})"
         
     | 
| 
      
 103 
     | 
    
         
            +
                RuboCop::Yast.logger.debug "CUR SCOPE #{scope.inspect}"
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                _ops, _method, a, b = *node
         
     | 
| 
      
 106 
     | 
    
         
            +
                nice(a) && nice(b)
         
     | 
| 
      
 107 
     | 
    
         
            +
              end
         
     | 
| 
      
 108 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,28 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "logger"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RuboCop
         
     | 
| 
      
 4 
     | 
    
         
            +
              # Yast specific helpers
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Yast
         
     | 
| 
      
 6 
     | 
    
         
            +
                def logger
         
     | 
| 
      
 7 
     | 
    
         
            +
                  return @logger if @logger
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  @logger = ::Logger.new(STDERR)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @logger.level = ::Logger::WARN
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @logger.level = ::Logger::DEBUG if $DEBUG
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @logger
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
                module_function :logger
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def backtrace(skip_frames: 0)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  c = caller
         
     | 
| 
      
 18 
     | 
    
         
            +
                  lines = []
         
     | 
| 
      
 19 
     | 
    
         
            +
                  c.reverse.drop(skip_frames).each_with_index do |frame, i|
         
     | 
| 
      
 20 
     | 
    
         
            +
                    lines << "#{i}: #{frame}"
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  lines.reverse_each do |l|
         
     | 
| 
      
 23 
     | 
    
         
            +
                    puts l
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
                module_function :backtrace
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -18,7 +18,7 @@ module Niceness 
     | 
|
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
              def nice(node)
         
     | 
| 
       20 
20 
     | 
    
         
             
                nice_literal(node) || nice_variable(node) || nice_send(node) ||
         
     | 
| 
       21 
     | 
    
         
            -
                  nice_begin(node)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  nice_sformat(node) || nice_begin(node)
         
     | 
| 
       22 
22 
     | 
    
         
             
              end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
              def nice_literal(node)
         
     | 
| 
         @@ -54,7 +54,25 @@ module Niceness 
     | 
|
| 
       54 
54 
     | 
    
         
             
                args.size == arity && args.all? { |a| nice(a) }
         
     | 
| 
       55 
55 
     | 
    
         
             
              end
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
      
 57 
     | 
    
         
            +
              # Builtins.sformat is special in that it can produce nil
         
     | 
| 
      
 58 
     | 
    
         
            +
              # but only if the format string is nil which is fortunately
         
     | 
| 
      
 59 
     | 
    
         
            +
              # easy to rule out. Other args may be ugly but we don't care.
         
     | 
| 
      
 60 
     | 
    
         
            +
              def nice_sformat(node)
         
     | 
| 
      
 61 
     | 
    
         
            +
                return false unless node.type == :send
         
     | 
| 
      
 62 
     | 
    
         
            +
                return false unless call?(node, :Builtins, :sformat)
         
     | 
| 
      
 63 
     | 
    
         
            +
                _builtins, _sformat, format_string, *_other_args = *node
         
     | 
| 
      
 64 
     | 
    
         
            +
                nice(format_string)
         
     | 
| 
      
 65 
     | 
    
         
            +
              end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
       57 
67 
     | 
    
         
             
              def nice_begin(node)
         
     | 
| 
       58 
68 
     | 
    
         
             
                node.type == :begin && nice(node.children.last)
         
     | 
| 
       59 
69 
     | 
    
         
             
              end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
              def call?(node, namespace, message)
         
     | 
| 
      
 72 
     | 
    
         
            +
                n_receiver, n_message = *node
         
     | 
| 
      
 73 
     | 
    
         
            +
                n_receiver && n_receiver.type == :const &&
         
     | 
| 
      
 74 
     | 
    
         
            +
                  n_receiver.children[0].nil? &&
         
     | 
| 
      
 75 
     | 
    
         
            +
                  n_receiver.children[1] == namespace &&
         
     | 
| 
      
 76 
     | 
    
         
            +
                  n_message == message
         
     | 
| 
      
 77 
     | 
    
         
            +
              end
         
     | 
| 
       60 
78 
     | 
    
         
             
            end
         
     | 
| 
         @@ -18,15 +18,6 @@ module RuboCop 
     | 
|
| 
       18 
18 
     | 
    
         
             
                    @scopes ||= VariableScopeStack.new
         
     | 
| 
       19 
19 
     | 
    
         
             
                  end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                  # FIXME
         
     | 
| 
       22 
     | 
    
         
            -
                  def process(node)
         
     | 
| 
       23 
     | 
    
         
            -
                    return if node.nil?
         
     | 
| 
       24 
     | 
    
         
            -
                    #  if ! @unsafe
         
     | 
| 
       25 
     | 
    
         
            -
                    #  oops(node, RuntimeError.new("Unknown node type #{node.type}")) \
         
     | 
| 
       26 
     | 
    
         
            -
                    #    unless HANDLED_NODE_TYPES.include? node.type
         
     | 
| 
       27 
     | 
    
         
            -
                    #  end
         
     | 
| 
       28 
     | 
    
         
            -
                  end
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
21 
     | 
    
         
             
                  # currently visible scope
         
     | 
| 
       31 
22 
     | 
    
         
             
                  def scope
         
     | 
| 
       32 
23 
     | 
    
         
             
                    scopes.innermost
         
     | 
| 
         @@ -41,23 +32,46 @@ module RuboCop 
     | 
|
| 
       41 
32 
     | 
    
         
             
                  end
         
     | 
| 
       42 
33 
     | 
    
         | 
| 
       43 
34 
     | 
    
         
             
                  def on_def(node)
         
     | 
| 
       44 
     | 
    
         
            -
                     
     | 
| 
      
 35 
     | 
    
         
            +
                    name, _, _ = *node
         
     | 
| 
      
 36 
     | 
    
         
            +
                    RuboCop::Yast.logger.debug "ONDEF #{name}"
         
     | 
| 
      
 37 
     | 
    
         
            +
                    RuboCop::Yast.logger.debug "CUR SCOPE #{scope.inspect}"
         
     | 
| 
      
 38 
     | 
    
         
            +
                    RuboCop::Yast.backtrace skip_frames: 50 if $DEBUG
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                    with_new_scope_rescuing_oops(node) { super }
         
     | 
| 
       45 
41 
     | 
    
         
             
                  end
         
     | 
| 
       46 
42 
     | 
    
         | 
| 
       47 
43 
     | 
    
         
             
                  def on_defs(node)
         
     | 
| 
       48 
     | 
    
         
            -
                    with_new_scope_rescuing_oops(node)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    with_new_scope_rescuing_oops(node) { super }
         
     | 
| 
       49 
45 
     | 
    
         
             
                  end
         
     | 
| 
       50 
46 
     | 
    
         | 
| 
       51 
47 
     | 
    
         
             
                  def on_module(node)
         
     | 
| 
       52 
     | 
    
         
            -
                    with_new_scope_rescuing_oops(node)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    with_new_scope_rescuing_oops(node) { super }
         
     | 
| 
       53 
49 
     | 
    
         
             
                  end
         
     | 
| 
       54 
50 
     | 
    
         | 
| 
       55 
51 
     | 
    
         
             
                  def on_class(node)
         
     | 
| 
       56 
     | 
    
         
            -
                    with_new_scope_rescuing_oops(node)
         
     | 
| 
      
 52 
     | 
    
         
            +
                    with_new_scope_rescuing_oops(node) { super }
         
     | 
| 
       57 
53 
     | 
    
         
             
                  end
         
     | 
| 
       58 
54 
     | 
    
         | 
| 
       59 
55 
     | 
    
         
             
                  def on_sclass(node)
         
     | 
| 
       60 
     | 
    
         
            -
                    with_new_scope_rescuing_oops(node)
         
     | 
| 
      
 56 
     | 
    
         
            +
                    with_new_scope_rescuing_oops(node) { super }
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                  def on_if(node)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    cond, then_body, else_body = *node
         
     | 
| 
      
 61 
     | 
    
         
            +
                    process(cond)
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                    scopes.with_copy do
         
     | 
| 
      
 64 
     | 
    
         
            +
                      process(then_body)
         
     | 
| 
      
 65 
     | 
    
         
            +
                    end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                    scopes.with_copy do
         
     | 
| 
      
 68 
     | 
    
         
            +
                      process(else_body)
         
     | 
| 
      
 69 
     | 
    
         
            +
                    end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                    # clean slate
         
     | 
| 
      
 72 
     | 
    
         
            +
                    scope.clear
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                    node
         
     | 
| 
       61 
75 
     | 
    
         
             
                  end
         
     | 
| 
       62 
76 
     | 
    
         | 
| 
       63 
77 
     | 
    
         
             
                  # def on_unless
         
     | 
| 
         @@ -79,36 +93,46 @@ module RuboCop 
     | 
|
| 
       79 
93 
     | 
    
         | 
| 
       80 
94 
     | 
    
         
             
                    # clean slate
         
     | 
| 
       81 
95 
     | 
    
         
             
                    scope.clear
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                    node
         
     | 
| 
       82 
98 
     | 
    
         
             
                  end
         
     | 
| 
       83 
99 
     | 
    
         | 
| 
       84 
100 
     | 
    
         
             
                  def on_lvasgn(node)
         
     | 
| 
      
 101 
     | 
    
         
            +
                    super
         
     | 
| 
       85 
102 
     | 
    
         
             
                    name, value = * node
         
     | 
| 
       86 
103 
     | 
    
         
             
                    return if value.nil? # and-asgn, or-asgn, resbody do this
         
     | 
| 
       87 
104 
     | 
    
         
             
                    scope[name].nice = nice(value)
         
     | 
| 
      
 105 
     | 
    
         
            +
                    node
         
     | 
| 
       88 
106 
     | 
    
         
             
                  end
         
     | 
| 
       89 
107 
     | 
    
         | 
| 
       90 
108 
     | 
    
         
             
                  def on_and_asgn(node)
         
     | 
| 
      
 109 
     | 
    
         
            +
                    super
         
     | 
| 
       91 
110 
     | 
    
         
             
                    var, value = *node
         
     | 
| 
       92 
111 
     | 
    
         
             
                    bool_op_asgn(var, value, :and)
         
     | 
| 
      
 112 
     | 
    
         
            +
                    node
         
     | 
| 
       93 
113 
     | 
    
         
             
                  end
         
     | 
| 
       94 
114 
     | 
    
         | 
| 
       95 
115 
     | 
    
         
             
                  def on_or_asgn(node)
         
     | 
| 
      
 116 
     | 
    
         
            +
                    super
         
     | 
| 
       96 
117 
     | 
    
         
             
                    var, value = *node
         
     | 
| 
       97 
118 
     | 
    
         
             
                    bool_op_asgn(var, value, :or)
         
     | 
| 
      
 119 
     | 
    
         
            +
                    node
         
     | 
| 
       98 
120 
     | 
    
         
             
                  end
         
     | 
| 
       99 
121 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
                  def on_block( 
     | 
| 
      
 122 
     | 
    
         
            +
                  def on_block(node)
         
     | 
| 
       101 
123 
     | 
    
         
             
                    # ignore body, clean slate
         
     | 
| 
       102 
124 
     | 
    
         
             
                    scope.clear
         
     | 
| 
      
 125 
     | 
    
         
            +
                    node
         
     | 
| 
       103 
126 
     | 
    
         
             
                  end
         
     | 
| 
       104 
127 
     | 
    
         
             
                  alias_method :on_for, :on_block
         
     | 
| 
       105 
128 
     | 
    
         | 
| 
       106 
     | 
    
         
            -
                  def on_while( 
     | 
| 
      
 129 
     | 
    
         
            +
                  def on_while(node)
         
     | 
| 
       107 
130 
     | 
    
         
             
                    # ignore both condition and body,
         
     | 
| 
       108 
131 
     | 
    
         
             
                    # with a simplistic scope we cannot handle them
         
     | 
| 
       109 
132 
     | 
    
         | 
| 
       110 
133 
     | 
    
         
             
                    # clean slate
         
     | 
| 
       111 
134 
     | 
    
         
             
                    scope.clear
         
     | 
| 
      
 135 
     | 
    
         
            +
                    node
         
     | 
| 
       112 
136 
     | 
    
         
             
                  end
         
     | 
| 
       113 
137 
     | 
    
         
             
                  alias_method :on_until, :on_while
         
     | 
| 
       114 
138 
     | 
    
         | 
| 
         @@ -117,22 +141,24 @@ module RuboCop 
     | 
|
| 
       117 
141 
     | 
    
         | 
| 
       118 
142 
     | 
    
         
             
                  def on_rescue(node)
         
     | 
| 
       119 
143 
     | 
    
         
             
                    # (:rescue, begin-block, resbody..., else-block-or-nil)
         
     | 
| 
       120 
     | 
    
         
            -
                     
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
                    # FIXME
         
     | 
| 
       123 
     | 
    
         
            -
                    # 
     | 
| 
       124 
     | 
    
         
            -
                    # 
     | 
| 
       125 
     | 
    
         
            -
                     
     | 
| 
       126 
     | 
    
         
            -
                     
     | 
| 
       127 
     | 
    
         
            -
                     
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
                     
     | 
| 
       130 
     | 
    
         
            -
                    #  rescue TooComplexToTranslateError
         
     | 
| 
       131 
     | 
    
         
            -
                    #    warning "begin-rescue is too complex to translate due to a retry"
         
     | 
| 
      
 144 
     | 
    
         
            +
                    begin_body, *rescue_bodies, else_body = *node
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                    # FIXME: the transaction must be rolled back
         
     | 
| 
      
 147 
     | 
    
         
            +
                    # by the TooComplexToTranslateError
         
     | 
| 
      
 148 
     | 
    
         
            +
                    # @source_rewriter.transaction do
         
     | 
| 
      
 149 
     | 
    
         
            +
                    process(begin_body)
         
     | 
| 
      
 150 
     | 
    
         
            +
                    process(else_body)
         
     | 
| 
      
 151 
     | 
    
         
            +
                    rescue_bodies.each do |r|
         
     | 
| 
      
 152 
     | 
    
         
            +
                      process(r)
         
     | 
| 
      
 153 
     | 
    
         
            +
                    end
         
     | 
| 
       132 
154 
     | 
    
         
             
                    #  end
         
     | 
| 
      
 155 
     | 
    
         
            +
                    node
         
     | 
| 
      
 156 
     | 
    
         
            +
                  rescue TooComplexToTranslateError
         
     | 
| 
      
 157 
     | 
    
         
            +
                    warn "begin-rescue is too complex to translate due to a retry"
         
     | 
| 
      
 158 
     | 
    
         
            +
                    node
         
     | 
| 
       133 
159 
     | 
    
         
             
                  end
         
     | 
| 
       134 
160 
     | 
    
         | 
| 
       135 
     | 
    
         
            -
                  def on_resbody( 
     | 
| 
      
 161 
     | 
    
         
            +
                  def on_resbody(node)
         
     | 
| 
       136 
162 
     | 
    
         
             
                    # How it is parsed:
         
     | 
| 
       137 
163 
     | 
    
         
             
                    # (:resbody, exception-types-or-nil, exception-variable-or-nil, body)
         
     | 
| 
       138 
164 
     | 
    
         
             
                    # exception-types is an :array
         
     | 
| 
         @@ -143,19 +169,20 @@ module RuboCop 
     | 
|
| 
       143 
169 
     | 
    
         
             
                    # and join begin-block with else-block, but it is little worth
         
     | 
| 
       144 
170 
     | 
    
         
             
                    # because they will contain few zombies.
         
     | 
| 
       145 
171 
     | 
    
         
             
                    scope.clear
         
     | 
| 
      
 172 
     | 
    
         
            +
                    super
         
     | 
| 
       146 
173 
     | 
    
         
             
                  end
         
     | 
| 
       147 
174 
     | 
    
         | 
| 
       148 
     | 
    
         
            -
                  def on_ensure( 
     | 
| 
      
 175 
     | 
    
         
            +
                  def on_ensure(node)
         
     | 
| 
       149 
176 
     | 
    
         
             
                    # (:ensure, guarded-code, ensuring-code)
         
     | 
| 
       150 
177 
     | 
    
         
             
                    # guarded-code may be a :rescue or not
         
     | 
| 
       151 
178 
     | 
    
         | 
| 
       152 
179 
     | 
    
         
             
                    scope.clear
         
     | 
| 
      
 180 
     | 
    
         
            +
                    node
         
     | 
| 
       153 
181 
     | 
    
         
             
                  end
         
     | 
| 
       154 
182 
     | 
    
         | 
| 
       155 
183 
     | 
    
         
             
                  def on_retry(_node)
         
     | 
| 
       156 
184 
     | 
    
         
             
                    # that makes the :rescue a loop, top-down data-flow fails
         
     | 
| 
       157 
     | 
    
         
            -
                     
     | 
| 
       158 
     | 
    
         
            -
                    # raise TooComplexToTranslateError
         
     | 
| 
      
 185 
     | 
    
         
            +
                    raise TooComplexToTranslateError
         
     | 
| 
       159 
186 
     | 
    
         
             
                  end
         
     | 
| 
       160 
187 
     | 
    
         | 
| 
       161 
188 
     | 
    
         
             
                  private
         
     | 
| 
         @@ -1,6 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Tracks state for a variable
         
     | 
| 
       2 
2 
     | 
    
         
             
            class VariableState
         
     | 
| 
       3 
     | 
    
         
            -
               
     | 
| 
      
 3 
     | 
    
         
            +
              def nice
         
     | 
| 
      
 4 
     | 
    
         
            +
                RuboCop::Yast.logger.debug "GETN #{inspect}"
         
     | 
| 
      
 5 
     | 
    
         
            +
                @nice
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def nice=(v)
         
     | 
| 
      
 9 
     | 
    
         
            +
                @nice = v
         
     | 
| 
      
 10 
     | 
    
         
            +
                RuboCop::Yast.logger.debug "SETN #{inspect}"
         
     | 
| 
      
 11 
     | 
    
         
            +
                v
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
       4 
13 
     | 
    
         
             
            end
         
     | 
| 
       5 
14 
     | 
    
         | 
| 
       6 
15 
     | 
    
         
             
            # Tracks state for local variables visible at certain point.
         
     | 
| 
         @@ -23,11 +32,14 @@ class VariableScope < Hash 
     | 
|
| 
       23 
32 
     | 
    
         | 
| 
       24 
33 
     | 
    
         
             
              # @return [VariableState] state
         
     | 
| 
       25 
34 
     | 
    
         
             
              def [](varname)
         
     | 
| 
       26 
     | 
    
         
            -
                super
         
     | 
| 
      
 35 
     | 
    
         
            +
                v = super
         
     | 
| 
      
 36 
     | 
    
         
            +
                RuboCop::Yast.logger.debug "GET #{varname} -> #{v}"
         
     | 
| 
      
 37 
     | 
    
         
            +
                v
         
     | 
| 
       27 
38 
     | 
    
         
             
              end
         
     | 
| 
       28 
39 
     | 
    
         | 
| 
       29 
40 
     | 
    
         
             
              # Set state for a variable
         
     | 
| 
       30 
41 
     | 
    
         
             
              def []=(varname, state)
         
     | 
| 
      
 42 
     | 
    
         
            +
                RuboCop::Yast.logger.debug "SET #{varname} -> #{state}"
         
     | 
| 
       31 
43 
     | 
    
         
             
                super
         
     | 
| 
       32 
44 
     | 
    
         
             
              end
         
     | 
| 
       33 
45 
     | 
    
         | 
| 
         @@ -50,6 +62,7 @@ class VariableScopeStack 
     | 
|
| 
       50 
62 
     | 
    
         
             
              # @return the scope as the block left it, popped from the stack
         
     | 
| 
       51 
63 
     | 
    
         
             
              def with_new(&block)
         
     | 
| 
       52 
64 
     | 
    
         
             
                @stack.push VariableScope.new
         
     | 
| 
      
 65 
     | 
    
         
            +
                RuboCop::Yast.logger.debug "SCOPES #{@stack.inspect}"
         
     | 
| 
       53 
66 
     | 
    
         
             
                block.call
         
     | 
| 
       54 
67 
     | 
    
         
             
                @stack.pop
         
     | 
| 
       55 
68 
     | 
    
         
             
              end
         
     | 
    
        data/lib/rubocop/yast/version.rb
    CHANGED
    
    
    
        data/rubocop-yast.gemspec
    CHANGED
    
    | 
         @@ -24,11 +24,12 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       24 
24 
     | 
    
         
             
                "*.gemspec",
         
     | 
| 
       25 
25 
     | 
    
         
             
                "Gemfile",
         
     | 
| 
       26 
26 
     | 
    
         
             
                "Rakefile"
         
     | 
| 
       27 
     | 
    
         
            -
              ]
         
     | 
| 
      
 27 
     | 
    
         
            +
              ].reject { |f| f =~ /~$/ }
         
     | 
| 
       28 
28 
     | 
    
         
             
              spec.test_files = spec.files.grep(/^spec\//)
         
     | 
| 
       29 
29 
     | 
    
         
             
              spec.extra_rdoc_files = ["LICENSE", "README.md"]
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
              spec.add_runtime_dependency("rubocop", "~> 0. 
     | 
| 
      
 31 
     | 
    
         
            +
              spec.add_runtime_dependency("rubocop", "~> 0.29.1")
         
     | 
| 
      
 32 
     | 
    
         
            +
              spec.add_runtime_dependency("unparser", "~> 0")
         
     | 
| 
       32 
33 
     | 
    
         | 
| 
       33 
34 
     | 
    
         
             
              spec.add_development_dependency("rake")
         
     | 
| 
       34 
35 
     | 
    
         
             
              spec.add_development_dependency("rspec", "~> 3.1.0")
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: rubocop-yast
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.8
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Ladislav Slezák
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-12-15 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rubocop
         
     | 
| 
         @@ -16,14 +16,28 @@ dependencies: 
     | 
|
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
17 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version:  
     | 
| 
      
 19 
     | 
    
         
            +
                    version: 0.29.1
         
     | 
| 
       20 
20 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       21 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
24 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version:  
     | 
| 
      
 26 
     | 
    
         
            +
                    version: 0.29.1
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: unparser
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       27 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
42 
     | 
    
         
             
              name: rake
         
     | 
| 
       29 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -106,6 +120,7 @@ files: 
     | 
|
| 
       106 
120 
     | 
    
         
             
            - lib/rubocop/yast/builtins/time.rb
         
     | 
| 
       107 
121 
     | 
    
         
             
            - lib/rubocop/yast/builtins/y2log.rb
         
     | 
| 
       108 
122 
     | 
    
         
             
            - lib/rubocop/yast/config.rb
         
     | 
| 
      
 123 
     | 
    
         
            +
            - lib/rubocop/yast/logger.rb
         
     | 
| 
       109 
124 
     | 
    
         
             
            - lib/rubocop/yast/niceness.rb
         
     | 
| 
       110 
125 
     | 
    
         
             
            - lib/rubocop/yast/node_helpers.rb
         
     | 
| 
       111 
126 
     | 
    
         
             
            - lib/rubocop/yast/reformatter.rb
         
     | 
| 
         @@ -113,9 +128,6 @@ files: 
     | 
|
| 
       113 
128 
     | 
    
         
             
            - lib/rubocop/yast/variable_scope.rb
         
     | 
| 
       114 
129 
     | 
    
         
             
            - lib/rubocop/yast/version.rb
         
     | 
| 
       115 
130 
     | 
    
         
             
            - rubocop-yast.gemspec
         
     | 
| 
       116 
     | 
    
         
            -
            - spec/builtins_spec.rb
         
     | 
| 
       117 
     | 
    
         
            -
            - spec/ops_spec.rb
         
     | 
| 
       118 
     | 
    
         
            -
            - spec/spec_helper.rb
         
     | 
| 
       119 
131 
     | 
    
         
             
            homepage: http://github.com/yast/rubocop-yast
         
     | 
| 
       120 
132 
     | 
    
         
             
            licenses:
         
     | 
| 
       121 
133 
     | 
    
         
             
            - MIT
         
     | 
| 
         @@ -140,7 +152,4 @@ rubygems_version: 2.2.2 
     | 
|
| 
       140 
152 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       141 
153 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       142 
154 
     | 
    
         
             
            summary: Specific YaST Rubocop checks
         
     | 
| 
       143 
     | 
    
         
            -
            test_files:
         
     | 
| 
       144 
     | 
    
         
            -
            - spec/builtins_spec.rb
         
     | 
| 
       145 
     | 
    
         
            -
            - spec/ops_spec.rb
         
     | 
| 
       146 
     | 
    
         
            -
            - spec/spec_helper.rb
         
     | 
| 
      
 155 
     | 
    
         
            +
            test_files: []
         
     | 
    
        data/spec/builtins_spec.rb
    DELETED
    
    | 
         @@ -1,560 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Automatically generated -- DO NOT EDIT!
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require "spec_helper"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            describe "RuboCop::Cop::Yast::Builtins" do
         
     | 
| 
       6 
     | 
    
         
            -
              describe "Generic Tests:" do
         
     | 
| 
       7 
     | 
    
         
            -
                it "It reports y2milestone builtin as offense" do
         
     | 
| 
       8 
     | 
    
         
            -
                  code = code_cleanup(<<-EOT)
         
     | 
| 
       9 
     | 
    
         
            -
                    Builtins.y2milestone("foo")
         
     | 
| 
       10 
     | 
    
         
            -
                  EOT
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       13 
     | 
    
         
            -
                  inspect_source(cop, [code])
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  expect(cop.offenses.size).to eq(1)
         
     | 
| 
       16 
     | 
    
         
            -
                end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                it "It finds builtin in explicit Yast namespace" do
         
     | 
| 
       19 
     | 
    
         
            -
                  code = code_cleanup(<<-EOT)
         
     | 
| 
       20 
     | 
    
         
            -
                    Yast::Builtins.y2milestone("foo")
         
     | 
| 
       21 
     | 
    
         
            -
                  EOT
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       24 
     | 
    
         
            -
                  inspect_source(cop, [code])
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                  expect(cop.offenses.size).to eq(1)
         
     | 
| 
       27 
     | 
    
         
            -
                end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                it "It finds builtin in explicit ::Yast namespace" do
         
     | 
| 
       30 
     | 
    
         
            -
                  code = code_cleanup(<<-EOT)
         
     | 
| 
       31 
     | 
    
         
            -
                    ::Yast::Builtins.y2milestone("foo")
         
     | 
| 
       32 
     | 
    
         
            -
                  EOT
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       35 
     | 
    
         
            -
                  inspect_source(cop, [code])
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                  expect(cop.offenses.size).to eq(1)
         
     | 
| 
       38 
     | 
    
         
            -
                end
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                it "Builtins in the ::Builtins name space are ignored" do
         
     | 
| 
       41 
     | 
    
         
            -
                  code = code_cleanup(<<-EOT)
         
     | 
| 
       42 
     | 
    
         
            -
                    ::Builtins.y2milestone("foo")
         
     | 
| 
       43 
     | 
    
         
            -
                  EOT
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       46 
     | 
    
         
            -
                  inspect_source(cop, [code])
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                  expect(cop.offenses).to be_empty
         
     | 
| 
       49 
     | 
    
         
            -
                end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                it "Builtins in non Yast name space are ignored" do
         
     | 
| 
       52 
     | 
    
         
            -
                  code = code_cleanup(<<-EOT)
         
     | 
| 
       53 
     | 
    
         
            -
                    Foo::Builtins.y2milestone("foo")
         
     | 
| 
       54 
     | 
    
         
            -
                  EOT
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       57 
     | 
    
         
            -
                  inspect_source(cop, [code])
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                  expect(cop.offenses).to be_empty
         
     | 
| 
       60 
     | 
    
         
            -
                end
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                it "lsort(), crypt and gettext builtins are allowed" do
         
     | 
| 
       63 
     | 
    
         
            -
                  code = code_cleanup(<<-EOT)
         
     | 
| 
       64 
     | 
    
         
            -
                    Builtins.lsort(["foo"])
         
     | 
| 
       65 
     | 
    
         
            -
                    Builtins.crypt("foo")
         
     | 
| 
       66 
     | 
    
         
            -
                    Builtins.dgettext("domain", "foo")
         
     | 
| 
       67 
     | 
    
         
            -
                  EOT
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       70 
     | 
    
         
            -
                  inspect_source(cop, [code])
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                  expect(cop.offenses).to be_empty
         
     | 
| 
       73 
     | 
    
         
            -
                end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                it "It does not change unknown builtins" do
         
     | 
| 
       76 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       77 
     | 
    
         
            -
                    Builtins.foo()
         
     | 
| 
       78 
     | 
    
         
            -
                  EOT
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       81 
     | 
    
         
            -
                    Builtins.foo()
         
     | 
| 
       82 
     | 
    
         
            -
                  EOT
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       85 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       86 
     | 
    
         
            -
                end
         
     | 
| 
       87 
     | 
    
         
            -
              end
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
              describe "Builtins.getenv():" do
         
     | 
| 
       90 
     | 
    
         
            -
                it "With string literal parameter is translated to ENV equivalent" do
         
     | 
| 
       91 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       92 
     | 
    
         
            -
                    Builtins.getenv("foo")
         
     | 
| 
       93 
     | 
    
         
            -
                  EOT
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       96 
     | 
    
         
            -
                    ENV["foo"]
         
     | 
| 
       97 
     | 
    
         
            -
                  EOT
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       100 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       101 
     | 
    
         
            -
                end
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
                it "Variable as parameter is preserved" do
         
     | 
| 
       104 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       105 
     | 
    
         
            -
                    foo = bar
         
     | 
| 
       106 
     | 
    
         
            -
                    Builtins.getenv(foo)
         
     | 
| 
       107 
     | 
    
         
            -
                  EOT
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       110 
     | 
    
         
            -
                    foo = bar
         
     | 
| 
       111 
     | 
    
         
            -
                    ENV[foo]
         
     | 
| 
       112 
     | 
    
         
            -
                  EOT
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       115 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       116 
     | 
    
         
            -
                end
         
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
                it "Any other statement is preserved" do
         
     | 
| 
       119 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       120 
     | 
    
         
            -
                    Builtins.getenv(Ops.add(foo, bar))
         
     | 
| 
       121 
     | 
    
         
            -
                  EOT
         
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       124 
     | 
    
         
            -
                    ENV[Ops.add(foo, bar)]
         
     | 
| 
       125 
     | 
    
         
            -
                  EOT
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       128 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       129 
     | 
    
         
            -
                end
         
     | 
| 
       130 
     | 
    
         
            -
              end
         
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
              describe "Logging - Builtins.y2debug(), ...:" do
         
     | 
| 
       133 
     | 
    
         
            -
                it "It translates `y2debug` to `log.debug`" do
         
     | 
| 
       134 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       135 
     | 
    
         
            -
                    Builtins.y2debug("foo")
         
     | 
| 
       136 
     | 
    
         
            -
                  EOT
         
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       139 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       140 
     | 
    
         
            -
                    log.debug "foo"
         
     | 
| 
       141 
     | 
    
         
            -
                  EOT
         
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       144 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       145 
     | 
    
         
            -
                end
         
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
                it "It translates `y2milestone` to `log.info`" do
         
     | 
| 
       148 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       149 
     | 
    
         
            -
                    Builtins.y2milestone("foo")
         
     | 
| 
       150 
     | 
    
         
            -
                  EOT
         
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
       152 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       153 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       154 
     | 
    
         
            -
                    log.info "foo"
         
     | 
| 
       155 
     | 
    
         
            -
                  EOT
         
     | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
       157 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       158 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       159 
     | 
    
         
            -
                end
         
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
                it "It translates `y2warning` to `log.warn`" do
         
     | 
| 
       162 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       163 
     | 
    
         
            -
                    Builtins.y2warning("foo")
         
     | 
| 
       164 
     | 
    
         
            -
                  EOT
         
     | 
| 
       165 
     | 
    
         
            -
             
     | 
| 
       166 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       167 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       168 
     | 
    
         
            -
                    log.warn "foo"
         
     | 
| 
       169 
     | 
    
         
            -
                  EOT
         
     | 
| 
       170 
     | 
    
         
            -
             
     | 
| 
       171 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       172 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       173 
     | 
    
         
            -
                end
         
     | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
       175 
     | 
    
         
            -
                it "It translates `y2error` to `log.error`" do
         
     | 
| 
       176 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       177 
     | 
    
         
            -
                    Builtins.y2error("foo")
         
     | 
| 
       178 
     | 
    
         
            -
                  EOT
         
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
       180 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       181 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       182 
     | 
    
         
            -
                    log.error "foo"
         
     | 
| 
       183 
     | 
    
         
            -
                  EOT
         
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
       185 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       186 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       187 
     | 
    
         
            -
                end
         
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
       189 
     | 
    
         
            -
                it "It translates `y2security` to `log.error`" do
         
     | 
| 
       190 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       191 
     | 
    
         
            -
                    Builtins.y2security("foo")
         
     | 
| 
       192 
     | 
    
         
            -
                  EOT
         
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       195 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       196 
     | 
    
         
            -
                    log.error "foo"
         
     | 
| 
       197 
     | 
    
         
            -
                  EOT
         
     | 
| 
       198 
     | 
    
         
            -
             
     | 
| 
       199 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       200 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       201 
     | 
    
         
            -
                end
         
     | 
| 
       202 
     | 
    
         
            -
             
     | 
| 
       203 
     | 
    
         
            -
                it "It translates `y2internal` to `log.fatal`" do
         
     | 
| 
       204 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       205 
     | 
    
         
            -
                    Builtins.y2internal("foo")
         
     | 
| 
       206 
     | 
    
         
            -
                  EOT
         
     | 
| 
       207 
     | 
    
         
            -
             
     | 
| 
       208 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       209 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       210 
     | 
    
         
            -
                    log.fatal "foo"
         
     | 
| 
       211 
     | 
    
         
            -
                  EOT
         
     | 
| 
       212 
     | 
    
         
            -
             
     | 
| 
       213 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       214 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       215 
     | 
    
         
            -
                end
         
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
       217 
     | 
    
         
            -
                it "It adds the include statement only once" do
         
     | 
| 
       218 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       219 
     | 
    
         
            -
                    Builtins.y2milestone("foo")
         
     | 
| 
       220 
     | 
    
         
            -
                    Builtins.y2milestone("foo")
         
     | 
| 
       221 
     | 
    
         
            -
                  EOT
         
     | 
| 
       222 
     | 
    
         
            -
             
     | 
| 
       223 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       224 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       225 
     | 
    
         
            -
                    log.info \"foo\"
         
     | 
| 
       226 
     | 
    
         
            -
                    log.info \"foo\"
         
     | 
| 
       227 
     | 
    
         
            -
                  EOT
         
     | 
| 
       228 
     | 
    
         
            -
             
     | 
| 
       229 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       230 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       231 
     | 
    
         
            -
                end
         
     | 
| 
       232 
     | 
    
         
            -
             
     | 
| 
       233 
     | 
    
         
            -
                it "It converts YCP sformat to Ruby interpolation" do
         
     | 
| 
       234 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       235 
     | 
    
         
            -
                    Builtins.y2milestone("foo: %1", foo)
         
     | 
| 
       236 
     | 
    
         
            -
                  EOT
         
     | 
| 
       237 
     | 
    
         
            -
             
     | 
| 
       238 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       239 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       240 
     | 
    
         
            -
                    log.info "foo: \#{foo}"
         
     | 
| 
       241 
     | 
    
         
            -
                  EOT
         
     | 
| 
       242 
     | 
    
         
            -
             
     | 
| 
       243 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       244 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       245 
     | 
    
         
            -
                end
         
     | 
| 
       246 
     | 
    
         
            -
             
     | 
| 
       247 
     | 
    
         
            -
                it "It converts %% in the format string to simple %" do
         
     | 
| 
       248 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       249 
     | 
    
         
            -
                    Builtins.y2milestone("foo: %1%%", foo)
         
     | 
| 
       250 
     | 
    
         
            -
                  EOT
         
     | 
| 
       251 
     | 
    
         
            -
             
     | 
| 
       252 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       253 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       254 
     | 
    
         
            -
                    log.info "foo: \#{foo}%"
         
     | 
| 
       255 
     | 
    
         
            -
                  EOT
         
     | 
| 
       256 
     | 
    
         
            -
             
     | 
| 
       257 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       258 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       259 
     | 
    
         
            -
                end
         
     | 
| 
       260 
     | 
    
         
            -
             
     | 
| 
       261 
     | 
    
         
            -
                it "It replaces repeated % placeholders in the format string" do
         
     | 
| 
       262 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       263 
     | 
    
         
            -
                    Builtins.y2warning("%1 %1", foo)
         
     | 
| 
       264 
     | 
    
         
            -
                  EOT
         
     | 
| 
       265 
     | 
    
         
            -
             
     | 
| 
       266 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       267 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       268 
     | 
    
         
            -
                    log.warn "\#{foo} \#{foo}"
         
     | 
| 
       269 
     | 
    
         
            -
                  EOT
         
     | 
| 
       270 
     | 
    
         
            -
             
     | 
| 
       271 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       272 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       273 
     | 
    
         
            -
                end
         
     | 
| 
       274 
     | 
    
         
            -
             
     | 
| 
       275 
     | 
    
         
            -
                it "The % placeholders do not need to start from 1" do
         
     | 
| 
       276 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       277 
     | 
    
         
            -
                    Builtins.y2warning("%2 %2", foo, bar)
         
     | 
| 
       278 
     | 
    
         
            -
                  EOT
         
     | 
| 
       279 
     | 
    
         
            -
             
     | 
| 
       280 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       281 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       282 
     | 
    
         
            -
                    log.warn "\#{bar} \#{bar}"
         
     | 
| 
       283 
     | 
    
         
            -
                  EOT
         
     | 
| 
       284 
     | 
    
         
            -
             
     | 
| 
       285 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       286 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       287 
     | 
    
         
            -
                end
         
     | 
| 
       288 
     | 
    
         
            -
             
     | 
| 
       289 
     | 
    
         
            -
                it "The % placeholders do not need to be in ascending order" do
         
     | 
| 
       290 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       291 
     | 
    
         
            -
                    Builtins.y2warning("%2 %1", foo, bar)
         
     | 
| 
       292 
     | 
    
         
            -
                  EOT
         
     | 
| 
       293 
     | 
    
         
            -
             
     | 
| 
       294 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       295 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       296 
     | 
    
         
            -
                    log.warn "\#{bar} \#{foo}"
         
     | 
| 
       297 
     | 
    
         
            -
                  EOT
         
     | 
| 
       298 
     | 
    
         
            -
             
     | 
| 
       299 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       300 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       301 
     | 
    
         
            -
                end
         
     | 
| 
       302 
     | 
    
         
            -
             
     | 
| 
       303 
     | 
    
         
            -
                it "It keeps the original statements in interpolated string" do
         
     | 
| 
       304 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       305 
     | 
    
         
            -
                    Builtins.y2warning("%1", foo + bar)
         
     | 
| 
       306 
     | 
    
         
            -
                  EOT
         
     | 
| 
       307 
     | 
    
         
            -
             
     | 
| 
       308 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       309 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       310 
     | 
    
         
            -
                    log.warn "\#{foo + bar}"
         
     | 
| 
       311 
     | 
    
         
            -
                  EOT
         
     | 
| 
       312 
     | 
    
         
            -
             
     | 
| 
       313 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       314 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       315 
     | 
    
         
            -
                end
         
     | 
| 
       316 
     | 
    
         
            -
             
     | 
| 
       317 
     | 
    
         
            -
                it "It converts a log with string interpolation" do
         
     | 
| 
       318 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       319 
     | 
    
         
            -
                    Builtins.y2warning("foo: \#{foo}")
         
     | 
| 
       320 
     | 
    
         
            -
                  EOT
         
     | 
| 
       321 
     | 
    
         
            -
             
     | 
| 
       322 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       323 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       324 
     | 
    
         
            -
                    log.warn "foo: \#{foo}"
         
     | 
| 
       325 
     | 
    
         
            -
                  EOT
         
     | 
| 
       326 
     | 
    
         
            -
             
     | 
| 
       327 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       328 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       329 
     | 
    
         
            -
                end
         
     | 
| 
       330 
     | 
    
         
            -
             
     | 
| 
       331 
     | 
    
         
            -
                it "It converts a log with a message variable" do
         
     | 
| 
       332 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       333 
     | 
    
         
            -
                    msg = "message"
         
     | 
| 
       334 
     | 
    
         
            -
                    Builtins.y2warning(msg)
         
     | 
| 
       335 
     | 
    
         
            -
                  EOT
         
     | 
| 
       336 
     | 
    
         
            -
             
     | 
| 
       337 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       338 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       339 
     | 
    
         
            -
                    msg = "message"
         
     | 
| 
       340 
     | 
    
         
            -
                    log.warn msg
         
     | 
| 
       341 
     | 
    
         
            -
                  EOT
         
     | 
| 
       342 
     | 
    
         
            -
             
     | 
| 
       343 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       344 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       345 
     | 
    
         
            -
                end
         
     | 
| 
       346 
     | 
    
         
            -
             
     | 
| 
       347 
     | 
    
         
            -
                it "It converts a log with function call" do
         
     | 
| 
       348 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       349 
     | 
    
         
            -
                    Builtins.y2warning(msg)
         
     | 
| 
       350 
     | 
    
         
            -
                  EOT
         
     | 
| 
       351 
     | 
    
         
            -
             
     | 
| 
       352 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       353 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       354 
     | 
    
         
            -
                    log.warn msg
         
     | 
| 
       355 
     | 
    
         
            -
                  EOT
         
     | 
| 
       356 
     | 
    
         
            -
             
     | 
| 
       357 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       358 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       359 
     | 
    
         
            -
                end
         
     | 
| 
       360 
     | 
    
         
            -
             
     | 
| 
       361 
     | 
    
         
            -
                it "It doesn't convert a log with extra parameters" do
         
     | 
| 
       362 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       363 
     | 
    
         
            -
                    Builtins.y2warning(msg, arg1, arg2)
         
     | 
| 
       364 
     | 
    
         
            -
                  EOT
         
     | 
| 
       365 
     | 
    
         
            -
             
     | 
| 
       366 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       367 
     | 
    
         
            -
                    Builtins.y2warning(msg, arg1, arg2)
         
     | 
| 
       368 
     | 
    
         
            -
                  EOT
         
     | 
| 
       369 
     | 
    
         
            -
             
     | 
| 
       370 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       371 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       372 
     | 
    
         
            -
                end
         
     | 
| 
       373 
     | 
    
         
            -
             
     | 
| 
       374 
     | 
    
         
            -
                it "It converts log with operator call" do
         
     | 
| 
       375 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       376 
     | 
    
         
            -
                    Builtins.y2warning(msg1 + msg2)
         
     | 
| 
       377 
     | 
    
         
            -
                  EOT
         
     | 
| 
       378 
     | 
    
         
            -
             
     | 
| 
       379 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       380 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       381 
     | 
    
         
            -
                    log.warn msg1 + msg2
         
     | 
| 
       382 
     | 
    
         
            -
                  EOT
         
     | 
| 
       383 
     | 
    
         
            -
             
     | 
| 
       384 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       385 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       386 
     | 
    
         
            -
                end
         
     | 
| 
       387 
     | 
    
         
            -
             
     | 
| 
       388 
     | 
    
         
            -
                it "It adds logger include to the class definition" do
         
     | 
| 
       389 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       390 
     | 
    
         
            -
                    class Foo
         
     | 
| 
       391 
     | 
    
         
            -
                      Builtins.y2error('foo')
         
     | 
| 
       392 
     | 
    
         
            -
                    end
         
     | 
| 
       393 
     | 
    
         
            -
                  EOT
         
     | 
| 
       394 
     | 
    
         
            -
             
     | 
| 
       395 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       396 
     | 
    
         
            -
                    class Foo
         
     | 
| 
       397 
     | 
    
         
            -
                      include Yast::Logger
         
     | 
| 
       398 
     | 
    
         
            -
             
     | 
| 
       399 
     | 
    
         
            -
                      log.error "foo"
         
     | 
| 
       400 
     | 
    
         
            -
                    end
         
     | 
| 
       401 
     | 
    
         
            -
                  EOT
         
     | 
| 
       402 
     | 
    
         
            -
             
     | 
| 
       403 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       404 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       405 
     | 
    
         
            -
                end
         
     | 
| 
       406 
     | 
    
         
            -
             
     | 
| 
       407 
     | 
    
         
            -
                it "It adds logger include with correct indentation" do
         
     | 
| 
       408 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       409 
     | 
    
         
            -
                      class Foo
         
     | 
| 
       410 
     | 
    
         
            -
                        Builtins.y2error('foo')
         
     | 
| 
       411 
     | 
    
         
            -
                      end
         
     | 
| 
       412 
     | 
    
         
            -
                  EOT
         
     | 
| 
       413 
     | 
    
         
            -
             
     | 
| 
       414 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       415 
     | 
    
         
            -
                      class Foo
         
     | 
| 
       416 
     | 
    
         
            -
                        include Yast::Logger
         
     | 
| 
       417 
     | 
    
         
            -
             
     | 
| 
       418 
     | 
    
         
            -
                        log.error "foo"
         
     | 
| 
       419 
     | 
    
         
            -
                      end
         
     | 
| 
       420 
     | 
    
         
            -
                  EOT
         
     | 
| 
       421 
     | 
    
         
            -
             
     | 
| 
       422 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       423 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       424 
     | 
    
         
            -
                end
         
     | 
| 
       425 
     | 
    
         
            -
             
     | 
| 
       426 
     | 
    
         
            -
                it "It does not add the logger include if already present" do
         
     | 
| 
       427 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       428 
     | 
    
         
            -
                    class Foo
         
     | 
| 
       429 
     | 
    
         
            -
                      include Yast::Logger
         
     | 
| 
       430 
     | 
    
         
            -
                      Builtins.y2error('foo')
         
     | 
| 
       431 
     | 
    
         
            -
                    end
         
     | 
| 
       432 
     | 
    
         
            -
                  EOT
         
     | 
| 
       433 
     | 
    
         
            -
             
     | 
| 
       434 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       435 
     | 
    
         
            -
                    class Foo
         
     | 
| 
       436 
     | 
    
         
            -
                      include Yast::Logger
         
     | 
| 
       437 
     | 
    
         
            -
                      log.error "foo"
         
     | 
| 
       438 
     | 
    
         
            -
                    end
         
     | 
| 
       439 
     | 
    
         
            -
                  EOT
         
     | 
| 
       440 
     | 
    
         
            -
             
     | 
| 
       441 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       442 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       443 
     | 
    
         
            -
                end
         
     | 
| 
       444 
     | 
    
         
            -
             
     | 
| 
       445 
     | 
    
         
            -
                it "It adds the logger include after the parent class name if present" do
         
     | 
| 
       446 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       447 
     | 
    
         
            -
                    class Foo < Bar
         
     | 
| 
       448 
     | 
    
         
            -
                      Builtins.y2error('foo')
         
     | 
| 
       449 
     | 
    
         
            -
                    end
         
     | 
| 
       450 
     | 
    
         
            -
                  EOT
         
     | 
| 
       451 
     | 
    
         
            -
             
     | 
| 
       452 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       453 
     | 
    
         
            -
                    class Foo < Bar
         
     | 
| 
       454 
     | 
    
         
            -
                      include Yast::Logger
         
     | 
| 
       455 
     | 
    
         
            -
             
     | 
| 
       456 
     | 
    
         
            -
                      log.error "foo"
         
     | 
| 
       457 
     | 
    
         
            -
                    end
         
     | 
| 
       458 
     | 
    
         
            -
                  EOT
         
     | 
| 
       459 
     | 
    
         
            -
             
     | 
| 
       460 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       461 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       462 
     | 
    
         
            -
                end
         
     | 
| 
       463 
     | 
    
         
            -
             
     | 
| 
       464 
     | 
    
         
            -
                it "It adds logger include once to a derived class in a module" do
         
     | 
| 
       465 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       466 
     | 
    
         
            -
                    module Yast
         
     | 
| 
       467 
     | 
    
         
            -
                      class TestClass < Module
         
     | 
| 
       468 
     | 
    
         
            -
                        def test
         
     | 
| 
       469 
     | 
    
         
            -
                          Builtins.y2error("foo")
         
     | 
| 
       470 
     | 
    
         
            -
                          Builtins.y2debug("foo")
         
     | 
| 
       471 
     | 
    
         
            -
                        end
         
     | 
| 
       472 
     | 
    
         
            -
                      end
         
     | 
| 
       473 
     | 
    
         
            -
                    end
         
     | 
| 
       474 
     | 
    
         
            -
                  EOT
         
     | 
| 
       475 
     | 
    
         
            -
             
     | 
| 
       476 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       477 
     | 
    
         
            -
                    module Yast
         
     | 
| 
       478 
     | 
    
         
            -
                      class TestClass < Module
         
     | 
| 
       479 
     | 
    
         
            -
                        include Yast::Logger
         
     | 
| 
       480 
     | 
    
         
            -
             
     | 
| 
       481 
     | 
    
         
            -
                        def test
         
     | 
| 
       482 
     | 
    
         
            -
                          log.error "foo"
         
     | 
| 
       483 
     | 
    
         
            -
                          log.debug "foo"
         
     | 
| 
       484 
     | 
    
         
            -
                        end
         
     | 
| 
       485 
     | 
    
         
            -
                      end
         
     | 
| 
       486 
     | 
    
         
            -
                    end
         
     | 
| 
       487 
     | 
    
         
            -
                  EOT
         
     | 
| 
       488 
     | 
    
         
            -
             
     | 
| 
       489 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       490 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       491 
     | 
    
         
            -
                end
         
     | 
| 
       492 
     | 
    
         
            -
             
     | 
| 
       493 
     | 
    
         
            -
                it "It converts the single quoted format string to double quoted" do
         
     | 
| 
       494 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       495 
     | 
    
         
            -
                    Builtins.y2milestone('foo: %1', foo)
         
     | 
| 
       496 
     | 
    
         
            -
                  EOT
         
     | 
| 
       497 
     | 
    
         
            -
             
     | 
| 
       498 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       499 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       500 
     | 
    
         
            -
                    log.info "foo: \#{foo}"
         
     | 
| 
       501 
     | 
    
         
            -
                  EOT
         
     | 
| 
       502 
     | 
    
         
            -
             
     | 
| 
       503 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       504 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       505 
     | 
    
         
            -
                end
         
     | 
| 
       506 
     | 
    
         
            -
             
     | 
| 
       507 
     | 
    
         
            -
                it "It escapes double quotes and interpolations" do
         
     | 
| 
       508 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       509 
     | 
    
         
            -
                    Builtins.y2milestone('"\#{foo}"')
         
     | 
| 
       510 
     | 
    
         
            -
                  EOT
         
     | 
| 
       511 
     | 
    
         
            -
             
     | 
| 
       512 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       513 
     | 
    
         
            -
                    include Yast::Logger
         
     | 
| 
       514 
     | 
    
         
            -
                    log.info "\\"\\\#{foo}\\""
         
     | 
| 
       515 
     | 
    
         
            -
                  EOT
         
     | 
| 
       516 
     | 
    
         
            -
             
     | 
| 
       517 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       518 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       519 
     | 
    
         
            -
                end
         
     | 
| 
       520 
     | 
    
         
            -
             
     | 
| 
       521 
     | 
    
         
            -
                it "It does not convert logging with backtrace" do
         
     | 
| 
       522 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       523 
     | 
    
         
            -
                    Builtins.y2milestone(-1, "foo")
         
     | 
| 
       524 
     | 
    
         
            -
                  EOT
         
     | 
| 
       525 
     | 
    
         
            -
             
     | 
| 
       526 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       527 
     | 
    
         
            -
                    Builtins.y2milestone(-1, "foo")
         
     | 
| 
       528 
     | 
    
         
            -
                  EOT
         
     | 
| 
       529 
     | 
    
         
            -
             
     | 
| 
       530 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       531 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       532 
     | 
    
         
            -
                end
         
     | 
| 
       533 
     | 
    
         
            -
             
     | 
| 
       534 
     | 
    
         
            -
                it "It does not convert code with a local variable 'log'" do
         
     | 
| 
       535 
     | 
    
         
            -
                  original_code = code_cleanup(<<-EOT)
         
     | 
| 
       536 
     | 
    
         
            -
                    log = 1
         
     | 
| 
       537 
     | 
    
         
            -
                    Builtins.y2milestone("foo")
         
     | 
| 
       538 
     | 
    
         
            -
                  EOT
         
     | 
| 
       539 
     | 
    
         
            -
             
     | 
| 
       540 
     | 
    
         
            -
                  translated_code = code_cleanup(<<-EOT)
         
     | 
| 
       541 
     | 
    
         
            -
                    log = 1
         
     | 
| 
       542 
     | 
    
         
            -
                    Builtins.y2milestone("foo")
         
     | 
| 
       543 
     | 
    
         
            -
                  EOT
         
     | 
| 
       544 
     | 
    
         
            -
             
     | 
| 
       545 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       546 
     | 
    
         
            -
                  expect(autocorrect_source(cop, original_code)).to eq(translated_code)
         
     | 
| 
       547 
     | 
    
         
            -
                end
         
     | 
| 
       548 
     | 
    
         
            -
             
     | 
| 
       549 
     | 
    
         
            -
                it "It finds an offense with missing parenthesis around argument" do
         
     | 
| 
       550 
     | 
    
         
            -
                  code = code_cleanup(<<-EOT)
         
     | 
| 
       551 
     | 
    
         
            -
                    Builtins.y2milestone "Executing hook '\#{name}'"
         
     | 
| 
       552 
     | 
    
         
            -
                  EOT
         
     | 
| 
       553 
     | 
    
         
            -
             
     | 
| 
       554 
     | 
    
         
            -
                  cop = RuboCop::Cop::Yast::Builtins.new
         
     | 
| 
       555 
     | 
    
         
            -
                  inspect_source(cop, [code])
         
     | 
| 
       556 
     | 
    
         
            -
             
     | 
| 
       557 
     | 
    
         
            -
                  expect(cop.offenses.size).to eq(1)
         
     | 
| 
       558 
     | 
    
         
            -
                end
         
     | 
| 
       559 
     | 
    
         
            -
              end
         
     | 
| 
       560 
     | 
    
         
            -
            end
         
     | 
    
        data/spec/ops_spec.rb
    DELETED
    
    | 
         @@ -1,119 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: utf-8
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require "spec_helper"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            describe RuboCop::Cop::Yast::Ops do
         
     | 
| 
       6 
     | 
    
         
            -
              context("In safe mode") do
         
     | 
| 
       7 
     | 
    
         
            -
                let(:config) do
         
     | 
| 
       8 
     | 
    
         
            -
                  conf = { "Yast/Ops" => { "SafeMode" => true } }
         
     | 
| 
       9 
     | 
    
         
            -
                  RuboCop::Config.new(conf)
         
     | 
| 
       10 
     | 
    
         
            -
                end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                subject(:cop) { described_class.new(config) }
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                it "finds trivial Ops.add call" do
         
     | 
| 
       15 
     | 
    
         
            -
                  inspect_source(cop, ["Ops.add(2, 4)"])
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  expect(cop.offenses.size).to eq(1)
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                it "finds Ops.add call with variable" do
         
     | 
| 
       21 
     | 
    
         
            -
                  inspect_source(cop, ["foo = 2\n Ops.add(foo, 4)"])
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                  expect(cop.offenses.size).to eq(1)
         
     | 
| 
       24 
     | 
    
         
            -
                end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                it "finds Ops.add call with variable inside condition" do
         
     | 
| 
       27 
     | 
    
         
            -
                  inspect_source(cop, ["foo = 1\nif true\nOps.add(foo, 4)\nend"])
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                  expect(cop.offenses.size).to eq(1)
         
     | 
| 
       30 
     | 
    
         
            -
                end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                it "ignores unsafe calls" do
         
     | 
| 
       33 
     | 
    
         
            -
                  inspect_source(cop, ["if true\nOps.add(foo, 4)\nend"])
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                  expect(cop.offenses).to be_empty
         
     | 
| 
       36 
     | 
    
         
            -
                end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                # check that all node types are handled properly
         
     | 
| 
       39 
     | 
    
         
            -
                it "parses complex code" do
         
     | 
| 
       40 
     | 
    
         
            -
                  src = <<-EOF
         
     | 
| 
       41 
     | 
    
         
            -
                  module Foo
         
     | 
| 
       42 
     | 
    
         
            -
                    class Bar
         
     | 
| 
       43 
     | 
    
         
            -
                      def baz(arg)
         
     | 
| 
       44 
     | 
    
         
            -
                        case arg
         
     | 
| 
       45 
     | 
    
         
            -
                        when :foo
         
     | 
| 
       46 
     | 
    
         
            -
                          a &&= true
         
     | 
| 
       47 
     | 
    
         
            -
                          b ||= true
         
     | 
| 
       48 
     | 
    
         
            -
                        end
         
     | 
| 
       49 
     | 
    
         
            -
                      rescue e
         
     | 
| 
       50 
     | 
    
         
            -
                        while false
         
     | 
| 
       51 
     | 
    
         
            -
                          find.foo do
         
     | 
| 
       52 
     | 
    
         
            -
                          end
         
     | 
| 
       53 
     | 
    
         
            -
                          retry
         
     | 
| 
       54 
     | 
    
         
            -
                        end
         
     | 
| 
       55 
     | 
    
         
            -
                      ensure
         
     | 
| 
       56 
     | 
    
         
            -
                        sure
         
     | 
| 
       57 
     | 
    
         
            -
                      end
         
     | 
| 
       58 
     | 
    
         
            -
                      class << foo
         
     | 
| 
       59 
     | 
    
         
            -
                      end
         
     | 
| 
       60 
     | 
    
         
            -
                      def self.foo
         
     | 
| 
       61 
     | 
    
         
            -
                      end
         
     | 
| 
       62 
     | 
    
         
            -
                    end
         
     | 
| 
       63 
     | 
    
         
            -
                  end
         
     | 
| 
       64 
     | 
    
         
            -
                  EOF
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                  inspect_source(cop, src)
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                  expect(cop.offenses).to be_empty
         
     | 
| 
       69 
     | 
    
         
            -
                end
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
                it "auto-corrects Ops.add(2, 4) with 2 + 4" do
         
     | 
| 
       72 
     | 
    
         
            -
                  new_source = autocorrect_source(cop, "Ops.add(2, 4)")
         
     | 
| 
       73 
     | 
    
         
            -
                  expect(new_source).to eq("2 + 4")
         
     | 
| 
       74 
     | 
    
         
            -
                end
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                it "auto-corrects Ops.add(a, b) with a + b" do
         
     | 
| 
       77 
     | 
    
         
            -
                  new_source = autocorrect_source(cop, "a = 1; b = 2; Ops.add(a, b)")
         
     | 
| 
       78 
     | 
    
         
            -
                  expect(new_source).to eq("a = 1; b = 2; a + b")
         
     | 
| 
       79 
     | 
    
         
            -
                end
         
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
                it 'auto-corrects Ops.add("foo", "bar") with "foo" + "bar"' do
         
     | 
| 
       82 
     | 
    
         
            -
                  new_source = autocorrect_source(cop, 'Ops.add("foo", "bar")')
         
     | 
| 
       83 
     | 
    
         
            -
                  expect(new_source).to eq('"foo" + "bar"')
         
     | 
| 
       84 
     | 
    
         
            -
                end
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
                # FIXME: auto-correct does not work work recursively
         
     | 
| 
       87 
     | 
    
         
            -
                xit "auto-corrects nested Ops.add calls" do
         
     | 
| 
       88 
     | 
    
         
            -
                  new_source = autocorrect_source(cop,
         
     | 
| 
       89 
     | 
    
         
            -
                    'Ops.add("foo", Ops.add("bar", "baz"))')
         
     | 
| 
       90 
     | 
    
         
            -
                  expect(new_source).to eq('"foo" + "bar + baz"')
         
     | 
| 
       91 
     | 
    
         
            -
                end
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
                it "keeps unsafe call Ops.add(foo, bar)" do
         
     | 
| 
       94 
     | 
    
         
            -
                  source = "foo = 1; Ops.add(foo, bar)"
         
     | 
| 
       95 
     | 
    
         
            -
                  new_source = autocorrect_source(cop, source)
         
     | 
| 
       96 
     | 
    
         
            -
                  expect(new_source).to eq(source)
         
     | 
| 
       97 
     | 
    
         
            -
                end
         
     | 
| 
       98 
     | 
    
         
            -
              end
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
              context("In unsafe mode") do
         
     | 
| 
       101 
     | 
    
         
            -
                let(:config) do
         
     | 
| 
       102 
     | 
    
         
            -
                  conf = { "Yast/Ops" => { "SafeMode" => false } }
         
     | 
| 
       103 
     | 
    
         
            -
                  RuboCop::Config.new(conf)
         
     | 
| 
       104 
     | 
    
         
            -
                end
         
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
                subject(:cop) { described_class.new(config) }
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
                it "finds unsafe Ops.add calls" do
         
     | 
| 
       109 
     | 
    
         
            -
                  inspect_source(cop, ["if true\nOps.add(foo, 4)\nend"])
         
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
                  expect(cop.offenses.size).to eq(1)
         
     | 
| 
       112 
     | 
    
         
            -
                end
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                it "auto-corrects unsafe call Ops.add(foo, bar) with foo + bar" do
         
     | 
| 
       115 
     | 
    
         
            -
                  new_source = autocorrect_source(cop, "Ops.add(foo, bar)")
         
     | 
| 
       116 
     | 
    
         
            -
                  expect(new_source).to eq("foo + bar")
         
     | 
| 
       117 
     | 
    
         
            -
                end
         
     | 
| 
       118 
     | 
    
         
            -
              end
         
     | 
| 
       119 
     | 
    
         
            -
            end
         
     | 
    
        data/spec/spec_helper.rb
    DELETED
    
    | 
         @@ -1,29 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: utf-8
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require "simplecov"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            SimpleCov.start do
         
     | 
| 
       6 
     | 
    
         
            -
              # don't check code coverage in these subdirectories
         
     | 
| 
       7 
     | 
    
         
            -
              add_filter "/vendor/"
         
     | 
| 
       8 
     | 
    
         
            -
              add_filter "/spec/"
         
     | 
| 
       9 
     | 
    
         
            -
            end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            # allow only the new "expect" RSpec syntax
         
     | 
| 
       12 
     | 
    
         
            -
            RSpec.configure do |config|
         
     | 
| 
       13 
     | 
    
         
            -
              config.expect_with :rspec do |c|
         
     | 
| 
       14 
     | 
    
         
            -
                c.syntax = :expect
         
     | 
| 
       15 
     | 
    
         
            -
              end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
              config.mock_with :rspec do |c|
         
     | 
| 
       18 
     | 
    
         
            -
                c.syntax = :expect
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
            # reuse the Rubocop helper, provides some nice methods used in tests
         
     | 
| 
       23 
     | 
    
         
            -
            require File.join(
         
     | 
| 
       24 
     | 
    
         
            -
              Gem::Specification.find_by_name("rubocop").gem_dir, "spec", "spec_helper.rb"
         
     | 
| 
       25 
     | 
    
         
            -
            )
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
            require "rubocop-yast"
         
     |