From 6dad9d8b44e22f2729a2db95a1c2d14b3e84d477 Mon Sep 17 00:00:00 2001 From: Gautham Goli Date: Mon, 14 Aug 2017 01:25:44 +0530 Subject: [PATCH] Add test for top level method def --- .../Homebrew/rubocops/extend/formula_cop.rb | 1 + Library/Homebrew/rubocops/lines_cop.rb | 6 ++--- .../Homebrew/test/rubocops/lines_cop_spec.rb | 23 +++++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/rubocops/extend/formula_cop.rb b/Library/Homebrew/rubocops/extend/formula_cop.rb index 08c9e6eb84..cb404046cb 100644 --- a/Library/Homebrew/rubocops/extend/formula_cop.rb +++ b/Library/Homebrew/rubocops/extend/formula_cop.rb @@ -232,6 +232,7 @@ module RuboCop @offense_source_range = def_node.source_range return def_node end + return if node.parent.nil? # If not found then, parent node becomes the offensive node @offensive_node = node.parent @offense_source_range = node.parent.source_range diff --git a/Library/Homebrew/rubocops/lines_cop.rb b/Library/Homebrew/rubocops/lines_cop.rb index 1b7a1935e3..22df462054 100644 --- a/Library/Homebrew/rubocops/lines_cop.rb +++ b/Library/Homebrew/rubocops/lines_cop.rb @@ -271,9 +271,9 @@ module RuboCop problem "Use the `#{match}` Ruby method instead of `#{m.source}`" end - # if find_method_def(@processed_source.ast) - # problem "Define method #{method_name(@offensive_node)} in the class body, not at the top-level" - # end + if find_method_def(@processed_source.ast) + problem "Define method #{method_name(@offensive_node)} in the class body, not at the top-level" + end # # find_instance_method_call(body_node, :build, :without?) do |m| # next unless unless_modifier?(m.parent) diff --git a/Library/Homebrew/test/rubocops/lines_cop_spec.rb b/Library/Homebrew/test/rubocops/lines_cop_spec.rb index 1af5d2e727..00543f5452 100644 --- a/Library/Homebrew/test/rubocops/lines_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/lines_cop_spec.rb @@ -592,6 +592,29 @@ describe RuboCop::Cop::FormulaAudit::Miscellaneous do inspect_source(cop, source) + expected_offenses.zip(cop.offenses).each do |expected, actual| + expect_offense(expected, actual) + end + end + it "with a top-level function def " do + source = <<-EOS.undent + def test + nil + end + class Foo < Formula + desc "foo" + url 'http://example.com/foo-1.0.tgz' + end + EOS + + expected_offenses = [{ message: "Define method test in the class body, not at the top-level", + severity: :convention, + line: 1, + column: 0, + source: source }] + + inspect_source(cop, source) + expected_offenses.zip(cop.offenses).each do |expected, actual| expect_offense(expected, actual) end