Skip to content

Commit 868b49e

Browse files
authoredJul 31, 2024··
[linter] add custom config for DetailsMenuMigration (#2985)
1 parent dbb01c7 commit 868b49e

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed
 

‎.changeset/warm-oranges-march.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@primer/view-components': patch
3+
---
4+
5+
Adds custom config for DetailsMenuMigration linter.

‎lib/primer/view_components/linters/details_menu_migration.rb

+8-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ class DetailsMenuMigration < Linter
1414
" https://primer.style/design/components/action-menu/rails/alpha"
1515
DETAILS_MENU_RUBY_PATTERN = /tag:?\s+:"details-menu"/.freeze
1616

17+
# Allow custom pattern matching for ERB nodes
18+
class ConfigSchema < LinterConfig
19+
property :custom_erb_pattern, accepts: array_of?(Regexp),
20+
default: -> { [] }
21+
end
22+
self.config_schema = ConfigSchema
23+
1724
def run(processed_source)
1825
# HTML tags
1926
tags(processed_source).each do |tag|
@@ -25,7 +32,7 @@ def run(processed_source)
2532
# ERB nodes
2633
erb_nodes(processed_source).each do |node|
2734
code = extract_ruby_from_erb_node(node)
28-
generate_node_offense(self.class, processed_source, node, MIGRATE_FROM_DETAILS_MENU) if code.match?(DETAILS_MENU_RUBY_PATTERN)
35+
generate_node_offense(self.class, processed_source, node, MIGRATE_FROM_DETAILS_MENU) if (code.match?(DETAILS_MENU_RUBY_PATTERN) || code.match?(Regexp.new(@config.custom_erb_pattern.join("|"), true)))
2936
end
3037
end
3138
end

‎test/lib/erblint/details_menu_migration_test.rb

+23
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,27 @@ def test_does_not_warn_if_inline_disable_comment
4646
offenses = @linter.offenses.reject(&:disabled?)
4747
assert_equal 0, offenses.count
4848
end
49+
50+
def test_accepts_custom_regex_pattern
51+
@linter.config.custom_erb_pattern = [/render[\s\(]GitHub::MenuComponent/]
52+
@file = <<~HTML
53+
<%= render GitHub::MenuComponent.new do %>
54+
HTML
55+
@linter.run(processed_source)
56+
assert_equal 1, @linter.offenses.count
57+
assert_match(/.<details-menu> has been deprecated./, @linter.offenses.first.message)
58+
end
59+
60+
def test_accepts_multiple_custom_regex_pattern
61+
@linter.config.custom_erb_pattern = [/render[\s\(]GitHub::MenuComponent/, /SomeOtherComponent/]
62+
@file = <<~HTML
63+
<%= render GitHub::MenuComponent.new do %>
64+
<% end %>
65+
<%= render SomeOtherComponent.new do %>
66+
<% end %>
67+
HTML
68+
@linter.run(processed_source)
69+
assert_equal 2, @linter.offenses.count
70+
assert_match(/.<details-menu> has been deprecated./, @linter.offenses.first.message)
71+
end
4972
end

0 commit comments

Comments
 (0)
Please sign in to comment.