-
Notifications
You must be signed in to change notification settings - Fork 125
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2088 from Shopify/ko/tapioca-addon
[Tapioca Add-on] Implement boilerplate add-on code
- Loading branch information
Showing
10 changed files
with
13,904 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# typed: strict | ||
# frozen_string_literal: true | ||
|
||
RubyLsp::Addon.depend_on_ruby_lsp!(">= 0.22.1", "< 0.23") | ||
|
||
begin | ||
# The Tapioca add-on depends on the Rails add-on to add a runtime component to the runtime server. We can allow the | ||
# add-on to work outside of a Rails context in the future, but that may require Tapioca spawning its own runtime | ||
# server | ||
require "ruby_lsp/ruby_lsp_rails/runner_client" | ||
rescue LoadError | ||
return | ||
end | ||
|
||
module RubyLsp | ||
module Tapioca | ||
class Addon < ::RubyLsp::Addon | ||
extend T::Sig | ||
|
||
sig { void } | ||
def initialize | ||
super | ||
|
||
@global_state = T.let(nil, T.nilable(RubyLsp::GlobalState)) | ||
@rails_runner_client = T.let(nil, T.nilable(RubyLsp::Rails::RunnerClient)) | ||
end | ||
|
||
sig { override.params(global_state: RubyLsp::GlobalState, outgoing_queue: Thread::Queue).void } | ||
def activate(global_state, outgoing_queue) | ||
@global_state = global_state | ||
return unless @global_state.enabled_feature?(:tapiocaAddon) | ||
|
||
Thread.new do | ||
# Get a handle to the Rails add-on's runtime client. The call to `rails_runner_client` will block this thread | ||
# until the server has finished booting, but it will not block the main LSP. This has to happen inside of a | ||
# thread | ||
addon = T.cast(::RubyLsp::Addon.get("Ruby LSP Rails", ">= 0.3.17", "< 0.4"), ::RubyLsp::Rails::Addon) | ||
@rails_runner_client = addon.rails_runner_client | ||
outgoing_queue << Notification.window_log_message("Activating Tapioca add-on v#{version}") | ||
@rails_runner_client.register_server_addon(File.expand_path("server_addon.rb", __dir__)) | ||
rescue IncompatibleApiError | ||
# The requested version for the Rails add-on no longer matches. We need to upgrade and fix the breaking | ||
# changes | ||
end | ||
end | ||
|
||
sig { override.void } | ||
def deactivate | ||
end | ||
|
||
sig { override.returns(String) } | ||
def name | ||
"Tapioca" | ||
end | ||
|
||
sig { override.returns(String) } | ||
def version | ||
"0.1.0" | ||
end | ||
|
||
sig { params(changes: T::Array[{ uri: String, type: Integer }]).void } | ||
def workspace_did_change_watched_files(changes) | ||
return unless T.must(@global_state).enabled_feature?(:tapiocaAddon) | ||
return unless @rails_runner_client # Client is not ready | ||
|
||
nil | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# typed: false | ||
# frozen_string_literal: true | ||
|
||
require "tapioca/internal" | ||
|
||
module RubyLsp | ||
module Tapioca | ||
class ServerAddon < ::RubyLsp::Rails::ServerAddon | ||
def name | ||
"Tapioca" | ||
end | ||
|
||
def execute(request, params) | ||
case request | ||
when "dsl" | ||
dsl(params) | ||
end | ||
end | ||
|
||
private | ||
|
||
def dsl(params) | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.