13
13
14
14
module LanguageServer
15
15
class << self
16
- def run
16
+ attr_accessor :options
17
+
18
+ def run ( options )
19
+ self . options = options
20
+
17
21
writer = Protocol ::Transport ::Stdio ::Writer . new
18
22
reader = Protocol ::Transport ::Stdio ::Reader . new
19
23
variables = { }
@@ -56,6 +60,14 @@ def notify(method:, params: {})
56
60
end
57
61
end
58
62
63
+ def rubocop_enabled?
64
+ options [ :experimental_features_enabled ]
65
+ end
66
+
67
+ def adhoc_enabled?
68
+ options [ :experimental_features_enabled ]
69
+ end
70
+
59
71
def subscribers
60
72
@subscribers ||= { }
61
73
end
@@ -67,7 +79,10 @@ def on(method, &callback)
67
79
68
80
on :initialize do |request :, variables :|
69
81
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
71
86
72
87
Protocol ::Interface ::InitializeResult . new (
73
88
capabilities : Protocol ::Interface ::ServerCapabilities . new (
@@ -78,7 +93,7 @@ def on(method, &callback)
78
93
resolve_provider : true ,
79
94
trigger_characters : %w[ . ] ,
80
95
) ,
81
- definition_provider : true ,
96
+ definition_provider : LanguageServer . adhoc_enabled? ,
82
97
) ,
83
98
)
84
99
end
@@ -91,8 +106,10 @@ def on(method, &callback)
91
106
uri = request [ :params ] [ :textDocument ] [ :uri ]
92
107
text = request [ :params ] [ :contentChanges ] [ 0 ] [ :text ]
93
108
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?
96
113
97
114
diagnostics = diagnostics . map do |error |
98
115
Protocol ::Interface ::Diagnostic . new (
@@ -124,18 +141,20 @@ def on(method, &callback)
124
141
uri = request [ :params ] [ :textDocument ] [ :uri ]
125
142
line , character = request [ :params ] [ :position ] . fetch_values ( :line , :character ) . map ( &:to_i )
126
143
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 )
131
148
end
132
149
133
150
on :"textDocument/definition" do |request :, project :|
134
151
uri = request [ :params ] [ :textDocument ] [ :uri ]
135
152
line , character = request [ :params ] [ :position ] . fetch_values ( :line , :character ) . map ( &:to_i )
136
153
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
140
159
end
141
160
end
0 commit comments