An opinionated language server for Ruby on Rails
Used 25 times
V
Viktor Schmidt
Usage
Run this command in your Rails app directory in the terminal:
rails app:template LOCATION="https://railsbytes.com/script/x9QsmG"
Template Source
Review the code before running this template on your machine.
def do_bundle
Bundler.with_unbundled_env { run "bundle install" }
end
def print_green(heredoc)
puts set_color heredoc, :green
end
def do_commit
git :init
git add: "."
Bundler.with_unbundled_env { git commit: " -m 'Add language server for Ruby' " }
end
say "\nApplying language server for Ruby..."
# Check if RSpec default folder exists, and if so, install ruby-lsp-rspec
# See https://github.com/st0012/ruby-lsp-rspec/issues/45#issuecomment-2421964971
if Dir.exist?("spec")
inject_into_file 'Gemfile', after: 'group :development do' do
<<~RUBY.indent(2)
# Ruby LSP RSpec add-on for better RSpec support
gem "ruby-lsp-rspec", require: false
RUBY
end
end
# Don't do this!
# Inject Ruby LSP for development
# inject_into_file 'Gemfile', after: 'group :development do' do
# <<~RUBY.indent(2)
# # Language server for Ruby
# gem "ruby-lsp-rails", require: false
# RUBY
# end
do_bundle
say "\nAdding documentation for developers..."
create_file "docs/quality_assurance.md", "# Source code quality assurance and best practices\n" unless File.exist? "docs/quality_assurance.md"
append_file "docs/quality_assurance.md" do
<<~EOF
## Ruby LSP
[Ruby LSP Rails](https://rubygems.org/gems/ruby-lsp-rails) for code completion, inline documentation, and static analysis.
### Usage
#### With VS Code
If using VS Code, all you have to do is install the [Ruby LSP extension](https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp)
to get the extra features in the editor. Do not install the `ruby-lsp` gem manually.
For more information on using and configuring the extension, see the extension’s [README.md](https://github.com/Shopify/ruby-lsp/blob/main/vscode/README.md).
#### With other editors
See [editors](https://shopify.github.io/ruby-lsp/editors) for community instructions on setting up the Ruby LSP,
which currently includes Emacs, Neovim, Sublime Text, and Zed.
The gem can be installed by doing
```bash
gem install ruby-lsp
```
and the language server can be launched running `ruby-lsp`
(without bundle exec in order to properly hook into your project’s dependencies).
#### Composed Ruby LSP bundle
The Ruby LSP executable generates a composed bundle with the goal of not requiring users to add the `ruby-lsp`
gem to their Gemfiles, and at the same time being able to hook into project dependencies.
[Learn more](https://shopify.github.io/ruby-lsp/composed-bundle).
EOF
end
do_commit
print_green "\nAdded language server for Ruby successfully!"
Comments
Viktor Schmidt
Viktor Schmidt
Use rubyfmt too:
```
def do_bundle
```
def do_bundle
Bundler.with_unbundled_env { run "bundle install" }
end
def print_green(heredoc)
puts set_color heredoc, :green
end
def do_commit
git :init
git add: "."
Bundler.with_unbundled_env { git commit: " -m 'Add language server for Ruby and Rubyfmt' " }
end
say "\nApplying language server for Ruby and Rubyfmt..."
# Check if RSpec default folder exists, and if so, install ruby-lsp-rspec
if Dir.exist?("spec")
inject_into_file 'Gemfile', after: 'group :development do' do
<<-RUBY
# Ruby LSP RSpec add-on for better RSpec support
gem "ruby-lsp-rspec", require: false
RUBY
end
end
# Inject Rubyfmt add-on
inject_into_file 'Gemfile', after: 'group :development do' do
<<-RUBY
# Rubyfmt for Ruby LSP formatting
gem "ruby-lsp-rubyfmt", require: false
RUBY
end
# Inject Ruby LSP for development
inject_into_file 'Gemfile', after: 'group :development do' do
<<-RUBY
# Language server for Ruby
gem "ruby-lsp-rails", require: false
RUBY
end
do_bundle
say "\nAdding documentation for developers..."
create_file "docs/quality_assurance.md", "# Source code quality assurance and best practices\n" unless File.exist? "docs/quality_assurance.md"
append_file "docs/quality_assurance.md" do
<<~EOF
## Ruby LSP
[Ruby LSP Rails](https://rubygems.org/gems/ruby-lsp-rails) for code completion, inline documentation, and static analysis.
Also check out Microsoft Visual Studio Code Extensions:
- [Ruby LSP](https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp)
- [Shopify Ruby Extensions Pack](https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-extensions-pack)
For more information on configuring Ruby LSP, visit:
- [Ruby LSP Documentation](https://shopify.github.io/ruby-lsp)
- [Ruby LSP Rails Add-on](https://shopify.github.io/ruby-lsp/rails-add-on)
### Rubyfmt Setup
To use Rubyfmt with Ruby LSP, follow these steps:
1. Modify your VS Code `settings.json` file:
```json
"rubyLsp.formatter": "rubyfmt"
```
2. Open the VS Code command palette, then select "Developer: Reload Window".
Rubyfmt is an external dependency required by this add-on.
### Installing Rubyfmt
If you already have Homebrew installed, you can install Rubyfmt by running:
```
brew install rubyfmt
```
This add-on calls the `rubyfmt` executable directly via `addon.rb`.
EOF
end
do_commit
print_green "\nAdded language server for Ruby, Ruby LSP RSpec (if applicable), and Rubyfmt successfully!"
````