Skip to content

Commit

Permalink
Setup haml-lint CI with todo config (mastodon#23524)
Browse files Browse the repository at this point in the history
  • Loading branch information
nschonni authored Mar 15, 2023
1 parent a232a1f commit 75131e7
Show file tree
Hide file tree
Showing 27 changed files with 248 additions and 145 deletions.
17 changes: 17 additions & 0 deletions .github/workflows/haml-lint-problem-matcher.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"problemMatcher": [
{
"owner": "haml-lint",
"severity": "warning",
"pattern": [
{
"regexp": "^(.*):(\\d+)\\s\\[W]\\s(.*):\\s(.*)$",
"file": 1,
"line": 2,
"code": 3,
"message": 4
}
]
}
]
}
44 changes: 44 additions & 0 deletions .github/workflows/lint-haml.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Haml Linting
on:
push:
branches-ignore:
- 'dependabot/**'
paths:
- '.github/workflows/haml-lint-problem-matcher.json'
- '.github/workflows/lint-haml.yml'
- '.haml-lint*.yml'
- '.rubocop*.yml'
- '.ruby-version'
- '**/*.haml'
- 'Gemfile*'

pull_request:
paths:
- '.github/workflows/haml-lint-problem-matcher.json'
- '.github/workflows/lint-haml.yml'
- '.haml-lint*.yml'
- '.rubocop*.yml'
- '.ruby-version'
- '**/*.haml'
- 'Gemfile*'

jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v3

- name: Install native Ruby dependencies
run: sudo apt-get install -y libicu-dev libidn11-dev

- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true

- name: Run haml-lint
run: |
echo "::add-matcher::.github/workflows/haml-lint-problem-matcher.json"
bundle exec haml-lint
103 changes: 2 additions & 101 deletions .haml-lint.yml
Original file line number Diff line number Diff line change
@@ -1,108 +1,9 @@
# Whether to ignore frontmatter at the beginning of HAML documents for
# frameworks such as Jekyll/Middleman
skip_frontmatter: false
inherits_from: .haml-lint_todo.yml

exclude:
- 'vendor/**/*'
- 'spec/**/*'
- 'lib/templates/**/*'
- 'app/views/kaminari/**/*'
- lib/templates/haml/scaffold/_form.html.haml

linters:
AltText:
enabled: false

ClassAttributeWithStaticValue:
enabled: true

ClassesBeforeIds:
enabled: true

ConsecutiveComments:
enabled: true

ConsecutiveSilentScripts:
enabled: true
max_consecutive: 2

EmptyObjectReference:
enabled: true

EmptyScript:
enabled: true

FinalNewline:
enabled: true
present: true

HtmlAttributes:
enabled: true

ImplicitDiv:
enabled: true

LeadingCommentSpace:
enabled: true

LineLength:
enabled: false
max: 80

MultilinePipe:
enabled: true

MultilineScript:
enabled: true

ObjectReferenceAttributes:
enabled: true

RuboCop:
enabled: true
# These cops are incredibly noisy when it comes to HAML templates, so we
# ignore them.
ignored_cops:
- Lint/BlockAlignment
- Lint/EndAlignment
- Lint/Void
- Metrics/BlockLength
- Metrics/LineLength
- Style/AlignParameters
- Style/BlockNesting
- Style/ElseAlignment
- Style/EndOfLine
- Style/FileName
- Style/FinalNewline
- Style/FrozenStringLiteralComment
- Style/IfUnlessModifier
- Style/IndentationWidth
- Style/Next
- Style/TrailingBlankLines
- Style/TrailingWhitespace
- Style/WhileUntilModifier

RubyComments:
enabled: true

SpaceBeforeScript:
enabled: true

SpaceInsideHashAttributes:
enabled: true
style: space

Indentation:
enabled: true
character: space # or tab

TagName:
enabled: true

TrailingWhitespace:
enabled: true

UnnecessaryInterpolation:
enabled: true

UnnecessaryStringOutput:
enabled: true
128 changes: 128 additions & 0 deletions .haml-lint_todo.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
# This configuration was generated by
# `haml-lint --auto-gen-config`
# on 2023-02-11 02:16:03 -0500 using Haml-Lint version 0.45.0.
# The point is for the user to remove these configuration records
# one by one as the lints are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of Haml-Lint, may require this file to be generated again.

linters:
# Offense count: 76
RuboCop:
exclude:
- 'app/views/accounts/_og.html.haml'
- 'app/views/admin/account_actions/new.html.haml'
- 'app/views/admin/account_warnings/_account_warning.html.haml'
- 'app/views/admin/accounts/index.html.haml'
- 'app/views/admin/accounts/show.html.haml'
- 'app/views/admin/action_logs/index.html.haml'
- 'app/views/admin/announcements/edit.html.haml'
- 'app/views/admin/announcements/new.html.haml'
- 'app/views/admin/change_emails/show.html.haml'
- 'app/views/admin/custom_emojis/index.html.haml'
- 'app/views/admin/dashboard/index.html.haml'
- 'app/views/admin/disputes/appeals/_appeal.html.haml'
- 'app/views/admin/domain_blocks/edit.html.haml'
- 'app/views/admin/domain_blocks/new.html.haml'
- 'app/views/admin/ip_blocks/new.html.haml'
- 'app/views/admin/reports/actions/preview.html.haml'
- 'app/views/admin/reports/index.html.haml'
- 'app/views/admin/reports/show.html.haml'
- 'app/views/admin/roles/_form.html.haml'
- 'app/views/admin/settings/about/show.html.haml'
- 'app/views/admin/settings/appearance/show.html.haml'
- 'app/views/admin/settings/registrations/show.html.haml'
- 'app/views/admin/statuses/show.html.haml'
- 'app/views/application/_card.html.haml'
- 'app/views/application/_sidebar.html.haml'
- 'app/views/auth/registrations/_sessions.html.haml'
- 'app/views/auth/registrations/new.html.haml'
- 'app/views/auth/sessions/new.html.haml'
- 'app/views/disputes/strikes/show.html.haml'
- 'app/views/filters/_filter_fields.html.haml'
- 'app/views/invites/_form.html.haml'
- 'app/views/layouts/application.html.haml'
- 'app/views/layouts/error.html.haml'
- 'app/views/layouts/mailer.html.haml'
- 'app/views/notification_mailer/_status.html.haml'
- 'app/views/notification_mailer/favourite.html.haml'
- 'app/views/notification_mailer/follow_request.html.haml'
- 'app/views/oauth/authorizations/new.html.haml'
- 'app/views/oauth/authorized_applications/index.html.haml'
- 'app/views/settings/applications/_fields.html.haml'
- 'app/views/settings/imports/show.html.haml'
- 'app/views/settings/login_activities/_login_activity.html.haml'
- 'app/views/settings/preferences/appearance/show.html.haml'
- 'app/views/settings/preferences/other/show.html.haml'
- 'app/views/settings/preferences/other/show.html.haml'
- 'app/views/statuses_cleanup/show.html.haml'
- 'app/views/statuses/_detailed_status.html.haml'
- 'app/views/statuses/_og_image.html.haml'
- 'app/views/statuses/_poll.html.haml'
- 'app/views/statuses/_status.html.haml'
- 'app/views/statuses/show.html.haml'
- 'app/views/user_mailer/suspicious_sign_in.html.haml'
- 'app/views/user_mailer/warning.html.haml'
- 'app/views/user_mailer/webauthn_credential_added.html.haml'
- 'app/views/user_mailer/webauthn_credential_deleted.html.haml'

# Offense count: 918
LineLength:
enabled: false

# Offense count: 22
UnnecessaryStringOutput:
exclude:
- 'app/views/accounts/show.html.haml'
- 'app/views/admin/custom_emojis/_custom_emoji.html.haml'
- 'app/views/admin/relays/_relay.html.haml'
- 'app/views/admin/rules/_rule.html.haml'
- 'app/views/admin/statuses/index.html.haml'
- 'app/views/auth/registrations/_sessions.html.haml'
- 'app/views/disputes/strikes/show.html.haml'
- 'app/views/notification_mailer/_status.html.haml'
- 'app/views/settings/two_factor_authentication_methods/index.html.haml'
- 'app/views/statuses/_detailed_status.html.haml'
- 'app/views/statuses/_poll.html.haml'
- 'app/views/statuses/_simple_status.html.haml'
- 'app/views/user_mailer/suspicious_sign_in.html.haml'
- 'app/views/user_mailer/webauthn_credential_added.html.haml'
- 'app/views/user_mailer/webauthn_credential_deleted.html.haml'
- 'app/views/user_mailer/welcome.html.haml'

# Offense count: 3
ViewLength:
exclude:
- 'app/views/admin/accounts/show.html.haml'
- 'app/views/admin/reports/show.html.haml'
- 'app/views/disputes/strikes/show.html.haml'

# Offense count: 43
InstanceVariables:
exclude:
- 'app/views/admin/reports/_actions.html.haml'
- 'app/views/admin/roles/_form.html.haml'
- 'app/views/admin/webhooks/_form.html.haml'
- 'app/views/application/_sidebar.html.haml'
- 'app/views/auth/registrations/_sessions.html.haml'
- 'app/views/auth/registrations/_status.html.haml'
- 'app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml'
- 'app/views/authorize_interactions/_post_follow_actions.html.haml'
- 'app/views/invites/_form.html.haml'
- 'app/views/relationships/_account.html.haml'
- 'app/views/shared/_og.html.haml'
- 'app/views/statuses/_status.html.haml'

# Offense count: 6
ConsecutiveSilentScripts:
exclude:
- 'app/views/admin/settings/shared/_links.html.haml'
- 'app/views/settings/login_activities/_login_activity.html.haml'
- 'app/views/statuses/_poll.html.haml'

# Offense count: 3
IdNames:
exclude:
- 'app/views/authorize_interactions/error.html.haml'
- 'app/views/oauth/authorizations/error.html.haml'
- 'app/views/shared/_error_messages.html.haml'
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ group :development do
gem 'memory_profiler'
gem 'brakeman', '~> 5.4', require: false
gem 'bundler-audit', '~> 0.9', require: false
gem 'haml_lint', require: false

gem 'capistrano', '~> 3.17'
gem 'capistrano-rails', '~> 1.6'
Expand Down
8 changes: 8 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,12 @@ GEM
activesupport (>= 5.1)
haml (>= 4.0.6)
railties (>= 5.1)
haml_lint (0.45.0)
haml (>= 4.0, < 6.2)
parallel (~> 1.10)
rainbow
rubocop (>= 0.50.0)
sysexits (~> 1.1)
hashdiff (1.0.1)
hashie (5.0.0)
highline (2.0.3)
Expand Down Expand Up @@ -687,6 +693,7 @@ GEM
activesupport (>= 3)
attr_required (>= 0.0.5)
httpclient (>= 2.4)
sysexits (1.2.0)
temple (0.10.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
Expand Down Expand Up @@ -804,6 +811,7 @@ DEPENDENCIES
fog-openstack (~> 0.3)
fuubar (~> 2.5)
haml-rails (~> 2.0)
haml_lint
hiredis (~> 0.6)
htmlentities (~> 4.3)
http (~> 5.1)
Expand Down
8 changes: 4 additions & 4 deletions app/views/admin/accounts/show.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@
- if @deletion_request.present?
= link_to t('admin.accounts.delete'), admin_account_path(@account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, @account)
- else
%div.action-buttons
.action-buttons
%div
- if @account.local? && @account.user_approved?
= link_to t('admin.accounts.warn'), new_admin_account_action_path(@account.id, type: 'none'), class: 'button' if can?(:warn, @account)
Expand Down Expand Up @@ -276,9 +276,9 @@
%hr.spacer/

- if @account.user&.invite_request&.text&.present?
%div.speech-bubble
%div.speech-bubble__bubble
.speech-bubble
.speech-bubble__bubble
= @account.user&.invite_request&.text
%div.speech-bubble__owner
.speech-bubble__owner
= admin_account_link_to @account
= t('admin.accounts.invite_request_text')
2 changes: 1 addition & 1 deletion app/views/admin/action_logs/index.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
= select_tag :action_type, options_for_select(Admin::ActionLogFilter::ACTION_TYPE_MAP.keys.map { |key| [I18n.t("admin.action_logs.action_types.#{key}"), key]}, params[:action_type]), prompt: I18n.t('admin.accounts.moderation.all')

- if @action_logs.empty?
%div.muted-hint.center-text
.muted-hint.center-text
= t 'admin.action_logs.empty'
- else
.report-notes
Expand Down
2 changes: 1 addition & 1 deletion app/views/admin/announcements/index.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
%li= filter_link_to safe_join([t('admin.announcements.live'), "(#{number_with_delimiter(Announcement.published.count)})"], ' '), published: '1', unpublished: nil

- if @announcements.empty?
%div.muted-hint.center-text
.muted-hint.center-text
= t 'admin.announcements.empty'
- else
.announcements-list
Expand Down
2 changes: 1 addition & 1 deletion app/views/admin/disputes/appeals/index.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
%li= filter_link_to t('admin.trends.rejected'), status: 'rejected'

- if @appeals.empty?
%div.muted-hint.center-text
.muted-hint.center-text
= t 'admin.disputes.appeals.empty'
- else
.announcements-list
Expand Down
2 changes: 1 addition & 1 deletion app/views/admin/instances/index.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
%hr.spacer/

- if @instances.empty?
%div.muted-hint.center-text
.muted-hint.center-text
= t 'admin.instances.empty'
- else
= render partial: 'instance', collection: @instances
Expand Down
Loading

0 comments on commit 75131e7

Please sign in to comment.