Comentário ERB multilinha para Ruby / Rails (e bônus de texto sublime)

Se você está lendo isso, é porque você quer uma maneira elegante de comentar várias linhas no ERB e não está feliz com a sintaxe feia que outros hacks têm.

Configuração

Defina um método vazio em seu script Ruby.

def comment
end

Se você estiver usando Rails, você pode adicionar isso a application_helpers.rb:

module ApplicationHelper
def comment
end
end

Usar

Agora você pode usar o novo método:

<% comment do %>
<div class="field">
<%= f.label :title %><br>
<%= f.text_field :title %>
</div>
<% end %>

Ou até mesmo ajustá-lo um pouco para maior legibilidade:

<% comment do %>
<div class="field">
<%= f.label :title %><br>
<%= f.text_field :title %>
</div>
<% comment end %>

A coisa boa sobre o último é que você pode facilmente adicionar uma correspondência para isso e obter destaque de sintaxe!

Cenário

Destaque de sintaxe para texto sublime

Comece localizando a pasta Packages para a instalação do Sublime Text. No OSX, o local padrão é ./Users/xxxxx/Library/Application Support/Sublime Text 3/Packages

Dentro desse local, crie uma nova pasta chamada Railse crie um arquivo com o seguinte conteúdo:HTML (Rails).tmLanguage

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>fileTypes</key>
<array>
<string>rhtml</string>
<string>erb</string>
<string>html.erb</string>
</array>
<key>foldingStartMarker</key>
<string>(?x)
(&lt;(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)\b.*?&gt;

|&lt;!--(?!.*--&gt;)

|\{\s*($|\?&gt;\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/)))

)
</string>
<key>foldingStopMarker</key>
<string>(?x)
(&lt;/(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)&gt;

|^\s*--&gt;

|(^|\s)\}

)
</string>
<key>keyEquivalent</key>
<string>^~R</string>
<key>name</key>
<string>HTML (Rails)</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>&lt;% +comment do +%&gt;</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.erb</string>
</dict>
</dict>
<key>end</key>
<string>&lt;% +comment end +%&gt;</string>
<key>name</key>
<string>comment.block.erb</string>
</dict>
<dict>
<key>begin</key>
<string>&lt;%+#</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.erb</string>
</dict>
</dict>
<key>end</key>
<string>%&gt;</string>
<key>name</key>
<string>comment.block.erb</string>
</dict>
<dict>
<key>begin</key>
<string>&lt;%+(?!&gt;)[-=]?</string>
<key>captures</key>
<dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.section.embedded.ruby</string>
</dict>
</dict>
<key>end</key>
<string>-?%&gt;</string>
<key>name</key>
<string>source.ruby.rails.embedded.html</string>
<key>patterns</key>
<array>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.ruby</string>
</dict>
</dict>
<key>match</key>
<string>(#).*?(?=-?%&gt;)</string>
<key>name</key>
<string>comment.line.number-sign.ruby</string>
</dict>
<dict>
<key>include</key>
<string>source.ruby.rails</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
<key>scopeName</key>
<string>text.html.ruby</string>
<key>uuid</key>
<string>45D7E1FC-7D0B-4105-A1A2-3D10BB555A5C</string>
</dict>
</plist>

Agora, toda vez que você usa a segunda sintaxe, você obtém uma aparência de comentário. Muito arrumado!

Se você quiser reverter para o estado original, você só precisa remover a pasta Rails e o Sublime Text usará o pacote pristine sem as modificações.

Atalho para Texto Sublime

Mesmo depois de instalar a nova sintaxe, você notará que o atalho para comentários (CMD + /) ainda usará o formato de comentário HTML. Crie outro arquivo dentro do pacote Rails com o seguinte conteúdo:Comments.tmPreferences

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Comments</string>
<key>scope</key>
<string>text.html.ruby</string>
<key>settings</key>
<dict>
<key>shellVariables</key>
<array>
<dict>
<key>name</key>
<string>TM_COMMENT_START</string>
<key>value</key>
<string>&lt;% comment do %&gt; </string>
</dict>
<dict>
<key>name</key>
<string>TM_COMMENT_END</string>
<key>value</key>
<string> &lt;% comment end %&gt;</string>
</dict>
</array>
</dict>
<key>uuid</key>
<string>B79BDBCF-D0C9-468E-BE62-744074D7825F</string>
</dict>
</plist>

Por favor, deixe seus comentários ou ideias para melhorar isso e se você achar útil, vote positivamente!
Aproveitar! 🙂

Este hack é inspirado na solução fornecida por Adam Block em http://stackoverflow.com/a/24131080/230371 .