Skip to content

Commit d854006

Browse files
authored
Merge pull request #48 from mtsmfm/flag
Add --experimental-features flag
2 parents 7566daf + 6cb9a47 commit d854006

File tree

6 files changed

+60
-15
lines changed

6 files changed

+60
-15
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## Not released
44

5+
- Add --experimental-features flag
6+
57
## 0.9.0
68

79
- rubocop support #27

Dockerfile.development

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ ENV LANG=C.UTF-8 \
1111

1212
USER ruby
1313
WORKDIR /app
14-
CMD ["bin/language_server-ruby"]
14+
CMD ["bin/language_server-ruby", "--experimental-features"]

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ source "https://rubygems.org"
44
gemspec
55

66
# TODO: Use released gem after new release includes https://github.com/bbatsov/rubocop/pull/4987
7-
gem "rubocop", git: "https://github.com/bbatsov/rubocop"
7+
gem "rubocop", git: "https://github.com/bbatsov/rubocop", ref: "88d9e3b"

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# LanguageServer
22

3+
[Alpha quality]
4+
35
A Ruby Language Server implementation.
46

57
## Installation

exe/language_server-ruby

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,26 @@ if Dir.exist?(File.join(__dir__, "..", ".git"))
55
end
66

77
require "language_server"
8-
LanguageServer.run
8+
require "optparse"
9+
10+
options = { experimental_features_enabled: false }
11+
opt_parser = OptionParser.new do |opts|
12+
opts.banner = "Usage: language_server-ruby [options]"
13+
14+
opts.on("--experimental-features", "Enable experimental features") do |e|
15+
options[:experimental_features_enabled] = e
16+
end
17+
18+
opts.on("-v", "--version", "Show version") do
19+
puts LanguageServer::VERSION
20+
exit
21+
end
22+
end
23+
begin
24+
opt_parser.parse!
25+
rescue OptionParser::InvalidOption
26+
puts opt_parser
27+
exit 1
28+
end
29+
30+
LanguageServer.run(options)

lib/language_server.rb

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@
1313

1414
module LanguageServer
1515
class << self
16-
def run
16+
attr_accessor :options
17+
18+
def run(options)
19+
self.options = options
20+
1721
writer = Protocol::Transport::Stdio::Writer.new
1822
reader = Protocol::Transport::Stdio::Reader.new
1923
variables = {}
@@ -56,6 +60,14 @@ def notify(method:, params: {})
5660
end
5761
end
5862

63+
def rubocop_enabled?
64+
options[:experimental_features_enabled]
65+
end
66+
67+
def adhoc_enabled?
68+
options[:experimental_features_enabled]
69+
end
70+
5971
def subscribers
6072
@subscribers ||= {}
6173
end
@@ -67,7 +79,10 @@ def on(method, &callback)
6779

6880
on :initialize do |request:, variables:|
6981
variables[:file_store] = FileStore.new(load_paths: $LOAD_PATH, remote_root: request[:params][:rootPath], local_root: Dir.getwd)
70-
variables[:project] = Project.new(variables[:file_store])
82+
variables[:project] =
83+
if LanguageServer.adhoc_enabled?
84+
variables[:project] = Project.new(variables[:file_store])
85+
end
7186

7287
Protocol::Interface::InitializeResult.new(
7388
capabilities: Protocol::Interface::ServerCapabilities.new(
@@ -78,7 +93,7 @@ def on(method, &callback)
7893
resolve_provider: true,
7994
trigger_characters: %w[.],
8095
),
81-
definition_provider: true,
96+
definition_provider: LanguageServer.adhoc_enabled?,
8297
),
8398
)
8499
end
@@ -91,8 +106,10 @@ def on(method, &callback)
91106
uri = request[:params][:textDocument][:uri]
92107
text = request[:params][:contentChanges][0][:text]
93108
file_store.cache(uri, text)
94-
project.recalculate_result(uri)
95-
diagnostics = (Linter::Rubocop.new(text).call + Linter::RubyWC.new(text).call).flatten
109+
project.recalculate_result(uri) if LanguageServer.adhoc_enabled?
110+
111+
diagnostics = Linter::RubyWC.new(text).call
112+
diagnostics += Linter::Rubocop.new(text).call if LanguageServer.rubocop_enabled?
96113

97114
diagnostics = diagnostics.map do |error|
98115
Protocol::Interface::Diagnostic.new(
@@ -124,18 +141,20 @@ def on(method, &callback)
124141
uri = request[:params][:textDocument][:uri]
125142
line, character = request[:params][:position].fetch_values(:line, :character).map(&:to_i)
126143

127-
[
128-
CompletionProvider::AdHoc.new(uri: uri, line: line, character: character, project: project),
129-
CompletionProvider::Rcodetools.new(uri: uri, line: line, character: character, file_store: file_store),
130-
].flat_map(&:call)
144+
providers = [CompletionProvider::Rcodetools.new(uri: uri, line: line, character: character, file_store: file_store)]
145+
providers << CompletionProvider::AdHoc.new(uri: uri, line: line, character: character, project: project) if LanguageServer.adhoc_enabled?
146+
147+
providers.flat_map(&:call)
131148
end
132149

133150
on :"textDocument/definition" do |request:, project:|
134151
uri = request[:params][:textDocument][:uri]
135152
line, character = request[:params][:position].fetch_values(:line, :character).map(&:to_i)
136153

137-
[
138-
DefinitionProvider::AdHoc.new(uri: uri, line: line, character: character, project: project),
139-
].flat_map(&:call)
154+
if LanguageServer.adhoc_enabled?
155+
[
156+
DefinitionProvider::AdHoc.new(uri: uri, line: line, character: character, project: project),
157+
].flat_map(&:call)
158+
end
140159
end
141160
end

0 commit comments

Comments
 (0)