Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions examples/in_as_expression.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<h1>
<% if 1 in Numeric %>
<div>Text1</div>
<% else %>
<div>Text2</div>
<% end %>
</h1>
8 changes: 7 additions & 1 deletion src/analyze/analyze_helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,13 @@ bool search_in_nodes(const pm_node_t* node, void* data) {
analyzed_ruby_T* analyzed = (analyzed_ruby_T*) data;

if (node->type == PM_IN_NODE) { analyzed->in_node_count++; }
if (node->type == PM_MATCH_PREDICATE_NODE) { analyzed->in_node_count++; }
if (node->type == PM_CASE_MATCH_NODE) {
const pm_case_match_node_t* case_match_node = (const pm_case_match_node_t*) node;

if (case_match_node->predicate != NULL && case_match_node->predicate->type == PM_MATCH_PREDICATE_NODE) {
analyzed->in_node_count++;
}
}

pm_visit_child_nodes(node, search_in_nodes, analyzed);

Expand Down
85 changes: 85 additions & 0 deletions test/parser/inline_in_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# frozen_string_literal: true

require_relative "../test_helper"

module Parser
class InlineInTest < Minitest::Spec
include SnapshotUtils

test "one-line pattern match against regexp as if condition" do
assert_parsed_snapshot(<<~HTML)
<% if attribute in /...+/ %>
<%= attribute %>
<% end %>
HTML
end

test "one-line pattern match as if/else condition" do
assert_parsed_snapshot(<<~HTML)
<% if 1 in Numeric %>
<div>Text1</div>
<% else %>
<div>Text2</div>
<% end %>
HTML
end

test "one-line pattern match as unless condition" do
assert_parsed_snapshot(<<~HTML)
<% unless value in [Integer] %>
<%= value %>
<% end %>
HTML
end

test "one-line pattern match as output expression" do
assert_parsed_snapshot(<<~HTML)
<%= value in [Integer] %>
HTML
end

test "one-line pattern match as elsif condition" do
assert_parsed_snapshot(<<~HTML)
<% if value in Integer %>
<div>Integer</div>
<% elsif value in String %>
<div>String</div>
<% else %>
<div>Other</div>
<% end %>
HTML
end

test "one-line pattern match as while condition" do
assert_parsed_snapshot(<<~HTML)
<% while value in Integer %>
<%= value %>
<% end %>
HTML
end

test "one-line pattern match as until condition" do
assert_parsed_snapshot(<<~HTML)
<% until value in Done %>
<%= value %>
<% end %>
HTML
end

test "one-line pattern match in ternary expression" do
assert_parsed_snapshot(<<~HTML)
<%= (value in Integer) ? "yes" : "no" %>
HTML
end

test "one-line pattern match inside a block body" do
assert_parsed_snapshot(<<~HTML)
<% items.each do |n| %>
<% if n in Integer %>
<%= n %>
<% end %>
<% end %>
HTML
end
end
end

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading