Skip to content

Commit 6c39739

Browse files
committed
Merge common render linting patterns
1 parent 7f5fbd9 commit 6c39739

File tree

3 files changed

+58
-50
lines changed

3 files changed

+58
-50
lines changed

lib/rubocop/cop/github/rails_controller_render_literal.rb

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,15 @@
11
# frozen_string_literal: true
22

33
require "rubocop"
4+
require "rubocop/cop/github/render_literal_helpers"
45

56
module RuboCop
67
module Cop
78
module GitHub
89
class RailsControllerRenderLiteral < Cop
9-
MSG = "render must be used with a string literal or an instance of a Class"
10-
11-
def_node_matcher :literal?, <<-PATTERN
12-
({str sym true false nil?} ...)
13-
PATTERN
14-
15-
def_node_matcher :render?, <<-PATTERN
16-
(send nil? {:render :render_to_string} ...)
17-
PATTERN
10+
include RenderLiteralHelpers
1811

19-
def_node_matcher :render_literal?, <<-PATTERN
20-
(send nil? {:render :render_to_string} ({str sym} $_) $...)
21-
PATTERN
22-
23-
def_node_matcher :render_const?, <<-PATTERN
24-
(send nil? {:render :render_to_string} (const _ _) ...)
25-
PATTERN
26-
27-
def_node_matcher :render_inst?, <<-PATTERN
28-
(send nil? {:render :render_to_string} (send _ :new ...) ...)
29-
PATTERN
30-
31-
def_node_matcher :render_with_options?, <<-PATTERN
32-
(send nil? {:render :render_to_string} (hash $...))
33-
PATTERN
12+
MSG = "render must be used with a string literal or an instance of a Class"
3413

3514
def_node_matcher :ignore_key?, <<-PATTERN
3615
(pair (sym {
@@ -68,10 +47,14 @@ class RailsControllerRenderLiteral < Cop
6847
}) ...)
6948
PATTERN
7049

50+
def_node_matcher :render_const?, <<-PATTERN
51+
(send nil? {:render :render_to_string} (const _ _) ...)
52+
PATTERN
53+
7154
def on_send(node)
7255
return unless render?(node)
7356

74-
if render_literal?(node) || render_inst?(node) || render_const?(node)
57+
if render_literal?(node) || render_view_component?(node) || render_const?(node)
7558
elsif option_pairs = render_with_options?(node)
7659
option_pairs = option_pairs.reject { |pair| options_key?(pair) }
7760

lib/rubocop/cop/github/rails_view_render_literal.rb

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,15 @@
11
# frozen_string_literal: true
22

33
require "rubocop"
4+
require "rubocop/cop/github/render_literal_helpers"
45

56
module RuboCop
67
module Cop
78
module GitHub
89
class RailsViewRenderLiteral < Cop
9-
MSG = "render must be used with a literal template and use literals for locals keys"
10-
11-
def_node_matcher :literal?, <<-PATTERN
12-
({str sym true false nil?} ...)
13-
PATTERN
14-
15-
def_node_matcher :render?, <<-PATTERN
16-
(send nil? {:render :render_to_string} $...)
17-
PATTERN
18-
19-
def_node_matcher :render_literal?, <<-PATTERN
20-
(send nil? {:render :render_to_string} ({str sym} $_) $...)
21-
PATTERN
10+
include RenderLiteralHelpers
2211

23-
def_node_matcher :render_view_component?, <<-PATTERN
24-
(send nil? {:render :render_to_string} (send _ :new ...) ...)
25-
PATTERN
26-
27-
def_node_matcher :render_view_component_collection?, <<-PATTERN
28-
(send nil? {:render :render_to_string} (send _ :with_collection ...) ...)
29-
PATTERN
30-
31-
def_node_matcher :render_with_options?, <<-PATTERN
32-
(send nil? {:render :render_to_string} (hash $...) ...)
33-
PATTERN
12+
MSG = "render must be used with a literal template and use literals for locals keys"
3413

3514
def_node_matcher :ignore_key?, <<-PATTERN
3615
(pair (sym {
@@ -61,7 +40,7 @@ def on_send(node)
6140
return unless render?(node)
6241

6342
# Ignore "component"-style renders
64-
return if render_view_component?(node) || render_view_component_collection?(node)
43+
return if render_view_component?(node)
6544

6645
if render_literal?(node)
6746
elsif option_pairs = render_with_options?(node)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# frozen_string_literal: true
2+
#
3+
require "rubocop"
4+
5+
module RuboCop
6+
module Cop
7+
module GitHub
8+
module RenderLiteralHelpers
9+
extend NodePattern::Macros
10+
11+
def_node_matcher :literal?, <<-PATTERN
12+
({str sym true false nil?} ...)
13+
PATTERN
14+
15+
def_node_matcher :render?, <<-PATTERN
16+
(send nil? {:render :render_to_string} ...)
17+
PATTERN
18+
19+
def_node_matcher :render_literal?, <<-PATTERN
20+
(send nil? {:render :render_to_string} ({str sym} $_) $...)
21+
PATTERN
22+
23+
def_node_matcher :render_inst?, <<-PATTERN
24+
(send nil? {:render :render_to_string} (send _ :new ...) ...)
25+
PATTERN
26+
27+
def_node_matcher :render_with_options?, <<-PATTERN
28+
(send nil? {:render :render_to_string} (hash $...) ...)
29+
PATTERN
30+
31+
def_node_matcher :render_view_component_instance?, <<-PATTERN
32+
(send nil? {:render :render_to_string} (send _ :new ...) ...)
33+
PATTERN
34+
35+
def_node_matcher :render_view_component_collection?, <<-PATTERN
36+
(send nil? {:render :render_to_string} (send _ :with_collection ...) ...)
37+
PATTERN
38+
39+
def render_view_component?(node)
40+
render_view_component_instance?(node) ||
41+
render_view_component_collection?(node)
42+
end
43+
end
44+
end
45+
end
46+
end

0 commit comments

Comments
 (0)