1313
1414module 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
141160end
0 commit comments