Skip to content

Commit

Permalink
add ERBLint to enforce a few basic rules (#994)
Browse files Browse the repository at this point in the history
  • Loading branch information
joelhawksley authored Jul 1, 2021
1 parent 594dfe0 commit dac225f
Show file tree
Hide file tree
Showing 16 changed files with 42 additions and 18 deletions.
9 changes: 9 additions & 0 deletions .erb-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
EnableDefaultLinters: true
exclude:
- '**/vendor/**/*'
linters:
ErbSafety:
enabled: true
FinalNewline:
enabled: true
3 changes: 2 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,12 @@ jobs:
with:
path: vendor/bundle
key: gems-build-rails-main-ruby-2.7.2-${{ hashFiles('**/Gemfile.lock') }}
- name: Lint with Rubocop
- name: Lint with Rubocop and ERB Lint
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
bundle exec rubocop
bundle exec erblint **/*.html.erb
test:
needs: lint
runs-on: ubuntu-latest
Expand Down
9 changes: 9 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,14 @@ GEM
concurrent-ruby (1.1.9)
crass (1.0.6)
docile (1.3.4)
erb_lint (0.0.37)
activesupport
better_html (~> 1.0.7)
html_tokenizer
parser (>= 2.7.1.4)
rainbow
rubocop
smart_properties
erubi (1.10.0)
globalid (0.4.2)
activesupport (>= 4.2.0)
Expand Down Expand Up @@ -232,6 +240,7 @@ DEPENDENCIES
better_html (~> 1)
bundler (~> 2.2)
capybara (~> 3)
erb_lint (~> 0.0.37)
haml (~> 5)
jbuilder (~> 2)
minitest (= 5.6.0)
Expand Down
8 changes: 4 additions & 4 deletions app/views/view_components/_preview_source.html.erb
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
<link href="<%= asset_path('prism.css', skip_pipeline: true) %>" media="screen" rel="stylesheet" type="text/css" />
<link href="<%= asset_path('prism.css', skip_pipeline: true) %>" media="screen" rel="stylesheet" type="text/css">
<div class="view-component-source-example">
<h2>Source:</h2>
<pre class="source">
<% if @render_args[:component] %>
<code class="language-ruby">
<%=h @preview.preview_source(@example_name) %>
<%= h @preview.preview_source(@example_name) %>
</code>
<% else %>
<% template = @view_renderer.lookup_context.find_template(@render_args[:template]) %>
<code class="language-<%= prism_language_name(template: template) %>">
<%=h template.source %>
<%= h template.source %>
</code>
<% end %>
</pre>
</div>
<script type="text/javascript" src="<%= asset_path('prism.min.js', skip_pipeline: true) %>"></script>
<script type="text/javascript" src="<%= asset_path('prism.min.js', skip_pipeline: true) %>"></script>
6 changes: 3 additions & 3 deletions app/views/view_components/preview.html.erb
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<% if ViewComponent::Base.render_monkey_patch_enabled || Rails.version.to_f >= 6.1 %>
<%= render(@render_args[:component], @render_args[:args], &@render_args[:block])%>
<%= render(@render_args[:component], @render_args[:args], &@render_args[:block]) %>
<% else %>
<%= render_component(@render_args[:component], &@render_args[:block])%>
<%= render_component(@render_args[:component], &@render_args[:block]) %>
<% end %>

<% if ViewComponent::Base.show_previews_source %>
<%= preview_source %>
<% end %>
<% end %>
4 changes: 4 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ title: Changelog

## main

* Add ERB Lint for a few basic rules.

*Joel Hawksley*

* Sort `gemspec` dependencies alphabetically.

*Joel Hawksley*
Expand Down
2 changes: 1 addition & 1 deletion test/sandbox/app/components/bad_slot_component.html.erb
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<%= title %>
<%= title %>
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<figure data-index="<%= @index %>">
<img src="<%= @item.url %>" alt="<%= @item.title %>" />
<img src="<%= @item.url %>" alt="<%= @item.title %>">
<figcaption>
Photo.<%= @counter %> - <%= @item.caption %>
</figcaption>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<figure data-index="<%= @iteration.index %>" class="<%= "first" if @iteration.first? %>">
<img src="<%= @item.url %>" alt="<%= @item.title %>" />
<img src="<%= @item.url %>" alt="<%= @item.title %>">
<figcaption>
Photo.<%= @counter %> - <%= @item.caption %>
</figcaption>
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<%= render partial: "integration_examples/controller_inline", locals: { message: @message } %>
<%= render partial: "integration_examples/controller_inline", locals: { message: @message } %>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<div>Hi!</div>
<div>Hi!</div>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Rendered
Rendered
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<div><%= message %></div>
<div><%= message %></div>
2 changes: 1 addition & 1 deletion test/sandbox/app/views/layouts/component_preview.html.erb
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
<%= yield %>
<%= preview_source %>
<%= preview_source %>
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<%=
<%=
render PreviewComponent.new(cta: "Click me!", title: "Lorem Ipsum")
%>
%>
1 change: 1 addition & 0 deletions view_component.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ Gem::Specification.new do |spec|
spec.add_development_dependency "benchmark-ips", "~> 2.8.2"
spec.add_development_dependency "better_html", "~> 1"
spec.add_development_dependency "bundler", "~> 2.2"
spec.add_development_dependency "erb_lint", "~> 0.0.37"
spec.add_development_dependency "haml", "~> 5"
spec.add_development_dependency "jbuilder", "~> 2"
spec.add_development_dependency "minitest", "= 5.6.0"
Expand Down

0 comments on commit dac225f

Please sign in to comment.