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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy