@@ -16,6 +16,7 @@ import scala.language.unsafeNulls
1616import scala .meta .internal .metals .CompilerVirtualFileParams
1717import scala .meta .internal .metals .EmptyCancelToken
1818import scala .meta .internal .metals .EmptyReportContext
19+ import scala .meta .internal .metals .PcQueryContext
1920import scala .meta .internal .metals .ReportContext
2021import scala .meta .internal .metals .ReportLevel
2122import scala .meta .internal .metals .StdReportContext
@@ -143,26 +144,26 @@ case class ScalaPresentationCompiler(
143144 override def semanticTokens (
144145 params : VirtualFileParams
145146 ): CompletableFuture [ju.List [Node ]] =
146- compilerAccess.withInterruptableCompiler(Some (params))(
147+ compilerAccess.withInterruptableCompiler(
147148 new ju.ArrayList [Node ](),
148149 params.token()
149150 ) { access =>
150151 val driver = access.compiler()
151152 new PcSemanticTokensProvider (driver, params).provide().asJava
152- }
153+ }(params.toQueryContext)
153154
154155 override def inlayHints (
155156 params : InlayHintsParams
156157 ): ju.concurrent.CompletableFuture [ju.List [l.InlayHint ]] =
157- compilerAccess.withInterruptableCompiler(Some (params))(
158+ compilerAccess.withInterruptableCompiler(
158159 new ju.ArrayList [l.InlayHint ](),
159160 params.token(),
160161 ) { access =>
161162 val driver = access.compiler()
162163 new PcInlayHintsProvider (driver, params, search)
163164 .provide()
164165 .asJava
165- }
166+ }(params.toQueryContext)
166167
167168 override def getTasty (
168169 targetUri : URI ,
@@ -173,7 +174,7 @@ case class ScalaPresentationCompiler(
173174 }
174175
175176 def complete (params : OffsetParams ): CompletableFuture [l.CompletionList ] =
176- compilerAccess.withInterruptableCompiler(Some (params))(
177+ compilerAccess.withInterruptableCompiler(
177178 EmptyCompletionList (),
178179 params.token()
179180 ) { access =>
@@ -188,61 +189,60 @@ case class ScalaPresentationCompiler(
188189 folderPath,
189190 completionItemPriority
190191 ).completions()
191-
192- }
192+ }(params.toQueryContext)
193193
194194 def definition (params : OffsetParams ): CompletableFuture [DefinitionResult ] =
195- compilerAccess.withInterruptableCompiler(Some (params))(
195+ compilerAccess.withInterruptableCompiler(
196196 DefinitionResultImpl .empty,
197197 params.token()
198198 ) { access =>
199199 val driver = access.compiler()
200200 PcDefinitionProvider (driver, params, search).definitions()
201- }
201+ }(params.toQueryContext)
202202
203203 override def typeDefinition (
204204 params : OffsetParams
205205 ): CompletableFuture [DefinitionResult ] =
206- compilerAccess.withInterruptableCompiler(Some (params))(
206+ compilerAccess.withInterruptableCompiler(
207207 DefinitionResultImpl .empty,
208208 params.token()
209209 ) { access =>
210210 val driver = access.compiler()
211211 PcDefinitionProvider (driver, params, search).typeDefinitions()
212- }
212+ }(params.toQueryContext)
213213
214214 def documentHighlight (
215215 params : OffsetParams
216216 ): CompletableFuture [ju.List [DocumentHighlight ]] =
217- compilerAccess.withInterruptableCompiler(Some (params))(
217+ compilerAccess.withInterruptableCompiler(
218218 List .empty[DocumentHighlight ].asJava,
219219 params.token()
220220 ) { access =>
221221 val driver = access.compiler()
222222 PcDocumentHighlightProvider (driver, params).highlights.asJava
223- }
223+ }(params.toQueryContext)
224224
225225 override def references (
226226 params : ReferencesRequest
227227 ): CompletableFuture [ju.List [ReferencesResult ]] =
228- compilerAccess.withNonInterruptableCompiler(Some (params.file()))(
228+ compilerAccess.withNonInterruptableCompiler(
229229 List .empty[ReferencesResult ].asJava,
230230 params.file().token,
231231 ) { access =>
232232 val driver = access.compiler()
233233 PcReferencesProvider (driver, params)
234234 .references()
235235 .asJava
236- }
236+ }(params.file().toQueryContext)
237237
238238 def inferExpectedType (params : OffsetParams ): CompletableFuture [ju.Optional [String ]] =
239- compilerAccess.withInterruptableCompiler(Some (params))(
239+ compilerAccess.withInterruptableCompiler(
240240 Optional .empty(),
241241 params.token,
242242 ) { access =>
243243 val driver = access.compiler()
244244 new InferExpectedType (search, driver, params).infer().asJava
245- }
245+ }(params.toQueryContext)
246246
247247 def shutdown (): Unit =
248248 compilerAccess.shutdown()
@@ -257,44 +257,42 @@ case class ScalaPresentationCompiler(
257257 symbol : String
258258 ): CompletableFuture [Optional [IPcSymbolInformation ]] =
259259 compilerAccess.withNonInterruptableCompiler[Optional [IPcSymbolInformation ]](
260- None
261- )(
262260 Optional .empty(),
263261 EmptyCancelToken ,
264262 ) { access =>
265263 SymbolInformationProvider (using access.compiler().currentCtx)
266264 .info(symbol)
267265 .map(_.asJava)
268266 .asJava
269- }
267+ }(emptyQueryContext)
270268
271269 def semanticdbTextDocument (
272270 filename : URI ,
273271 code : String
274272 ): CompletableFuture [Array [Byte ]] =
275273 val virtualFile = CompilerVirtualFileParams (filename, code)
276- compilerAccess.withNonInterruptableCompiler(Some (virtualFile))(
274+ compilerAccess.withNonInterruptableCompiler(
277275 Array .empty[Byte ],
278276 EmptyCancelToken
279277 ) { access =>
280278 val driver = access.compiler()
281279 val provider = SemanticdbTextDocumentProvider (driver, folderPath)
282280 provider.textDocument(filename, code)
283- }
281+ }(virtualFile.toQueryContext)
284282
285283 def completionItemResolve (
286284 item : l.CompletionItem ,
287285 symbol : String
288286 ): CompletableFuture [l.CompletionItem ] =
289- compilerAccess.withNonInterruptableCompiler(None )(
287+ compilerAccess.withNonInterruptableCompiler(
290288 item,
291289 EmptyCancelToken
292290 ) { access =>
293291 val driver = access.compiler()
294292 CompletionItemResolver .resolve(item, symbol, search, config)(using
295293 driver.currentCtx
296294 )
297- }
295+ }(emptyQueryContext)
298296
299297 def autoImports (
300298 name : String ,
@@ -303,7 +301,7 @@ case class ScalaPresentationCompiler(
303301 ): CompletableFuture [
304302 ju.List [scala.meta.pc.AutoImportsResult ]
305303 ] =
306- compilerAccess.withNonInterruptableCompiler(Some (params))(
304+ compilerAccess.withNonInterruptableCompiler(
307305 List .empty[scala.meta.pc.AutoImportsResult ].asJava,
308306 params.token()
309307 ) { access =>
@@ -318,13 +316,13 @@ case class ScalaPresentationCompiler(
318316 )
319317 .autoImports(isExtension)
320318 .asJava
321- }
319+ }(params.toQueryContext)
322320
323321 def implementAbstractMembers (
324322 params : OffsetParams
325323 ): CompletableFuture [ju.List [l.TextEdit ]] =
326324 val empty : ju.List [l.TextEdit ] = new ju.ArrayList [l.TextEdit ]()
327- compilerAccess.withNonInterruptableCompiler(Some (params))(
325+ compilerAccess.withNonInterruptableCompiler(
328326 empty,
329327 params.token()
330328 ) { pc =>
@@ -335,31 +333,31 @@ case class ScalaPresentationCompiler(
335333 search,
336334 config
337335 )
338- }
336+ }(params.toQueryContext)
339337 end implementAbstractMembers
340338
341339 override def insertInferredType (
342340 params : OffsetParams
343341 ): CompletableFuture [ju.List [l.TextEdit ]] =
344342 val empty : ju.List [l.TextEdit ] = new ju.ArrayList [l.TextEdit ]()
345- compilerAccess.withNonInterruptableCompiler(Some (params))(
343+ compilerAccess.withNonInterruptableCompiler(
346344 empty,
347345 params.token()
348346 ) { pc =>
349347 new InferredTypeProvider (params, pc.compiler(), config, search)
350348 .inferredTypeEdits()
351349 .asJava
352- }
350+ }(params.toQueryContext)
353351
354352 override def inlineValue (
355353 params : OffsetParams
356354 ): CompletableFuture [ju.List [l.TextEdit ]] =
357355 val empty : Either [String , List [l.TextEdit ]] = Right (List ())
358356 (compilerAccess
359- .withInterruptableCompiler(Some (params))( empty, params.token()) { pc =>
357+ .withInterruptableCompiler(empty, params.token()) { pc =>
360358 new PcInlineValueProviderImpl (pc.compiler(), params)
361359 .getInlineTextEdits()
362- })
360+ }(params.toQueryContext) )
363361 .thenApply {
364362 case Right (edits : List [TextEdit ]) => edits.asJava
365363 case Left (error : String ) => throw new DisplayableException (error)
@@ -371,7 +369,7 @@ case class ScalaPresentationCompiler(
371369 extractionPos : OffsetParams
372370 ): CompletableFuture [ju.List [l.TextEdit ]] =
373371 val empty : ju.List [l.TextEdit ] = new ju.ArrayList [l.TextEdit ]()
374- compilerAccess.withInterruptableCompiler(Some (range))( empty, range.token()) {
372+ compilerAccess.withInterruptableCompiler(empty, range.token()) {
375373 pc =>
376374 new ExtractMethodProvider (
377375 range,
@@ -382,7 +380,7 @@ case class ScalaPresentationCompiler(
382380 )
383381 .extractMethod()
384382 .asJava
385- }
383+ }(range.toQueryContext)
386384 end extractMethod
387385
388386 override def convertToNamedArguments (
@@ -397,13 +395,13 @@ case class ScalaPresentationCompiler(
397395 ): CompletableFuture [ju.List [l.TextEdit ]] =
398396 val empty : Either [String , List [l.TextEdit ]] = Right (List ())
399397 (compilerAccess
400- .withNonInterruptableCompiler(Some (params))( empty, params.token()) { pc =>
398+ .withNonInterruptableCompiler(empty, params.token()) { pc =>
401399 new ConvertToNamedArgumentsProvider (
402400 pc.compiler(),
403401 params,
404402 argIndices
405403 ).convertToNamedArguments
406- })
404+ }(params.toQueryContext) )
407405 .thenApplyAsync {
408406 case Left (error : String ) => throw new DisplayableException (error)
409407 case Right (edits : List [l.TextEdit ]) => edits.asJava
@@ -413,53 +411,53 @@ case class ScalaPresentationCompiler(
413411 params : ju.List [OffsetParams ]
414412 ): CompletableFuture [ju.List [l.SelectionRange ]] =
415413 CompletableFuture .completedFuture {
416- compilerAccess.withSharedCompiler(params.asScala.headOption)(
414+ compilerAccess.withSharedCompiler(
417415 List .empty[l.SelectionRange ].asJava
418416 ) { pc =>
419417 new SelectionRangeProvider (
420418 pc.compiler(),
421419 params,
422420 ).selectionRange().asJava
423- }
421+ }(params.asScala.headOption.map(_.toQueryContext).getOrElse(emptyQueryContext))
424422 }
425423 end selectionRange
426424
427425 def hover (
428426 params : OffsetParams
429427 ): CompletableFuture [ju.Optional [HoverSignature ]] =
430- compilerAccess.withNonInterruptableCompiler(Some (params))(
428+ compilerAccess.withNonInterruptableCompiler(
431429 ju.Optional .empty[HoverSignature ](),
432430 params.token()
433431 ) { access =>
434432 val driver = access.compiler()
435433 HoverProvider .hover(params, driver, search, config.hoverContentType())
436- }
434+ }(params.toQueryContext)
437435 end hover
438436
439437 def prepareRename (
440438 params : OffsetParams
441439 ): CompletableFuture [ju.Optional [l.Range ]] =
442- compilerAccess.withNonInterruptableCompiler(Some (params))(
440+ compilerAccess.withNonInterruptableCompiler(
443441 Optional .empty[l.Range ](),
444442 params.token()
445443 ) { access =>
446444 val driver = access.compiler()
447445 Optional .ofNullable(
448446 PcRenameProvider (driver, params, None ).prepareRename().orNull
449447 )
450- }
448+ }(params.toQueryContext)
451449
452450 def rename (
453451 params : OffsetParams ,
454452 name : String
455453 ): CompletableFuture [ju.List [l.TextEdit ]] =
456- compilerAccess.withNonInterruptableCompiler(Some (params))(
454+ compilerAccess.withNonInterruptableCompiler(
457455 List [l.TextEdit ]().asJava,
458456 params.token()
459457 ) { access =>
460458 val driver = access.compiler()
461459 PcRenameProvider (driver, params, Some (name)).rename().asJava
462- }
460+ }(params.toQueryContext)
463461
464462 def newInstance (
465463 buildTargetIdentifier : String ,
@@ -473,24 +471,24 @@ case class ScalaPresentationCompiler(
473471 )
474472
475473 def signatureHelp (params : OffsetParams ): CompletableFuture [l.SignatureHelp ] =
476- compilerAccess.withNonInterruptableCompiler(Some (params))(
474+ compilerAccess.withNonInterruptableCompiler(
477475 new l.SignatureHelp (),
478476 params.token()
479477 ) { access =>
480478 val driver = access.compiler()
481479 SignatureHelpProvider .signatureHelp(driver, params, search)
482- }
480+ }(params.toQueryContext)
483481
484482 override def didChange (
485483 params : VirtualFileParams
486484 ): CompletableFuture [ju.List [l.Diagnostic ]] =
487485 CompletableFuture .completedFuture(Nil .asJava)
488486
489487 override def didClose (uri : URI ): Unit =
490- compilerAccess.withNonInterruptableCompiler(None )(
488+ compilerAccess.withNonInterruptableCompiler(
491489 (),
492490 EmptyCancelToken
493- ) { access => access.compiler().close(uri) }
491+ ) { access => access.compiler().close(uri) }(emptyQueryContext)
494492
495493 override def withExecutorService (
496494 executorService : ExecutorService
@@ -515,4 +513,19 @@ case class ScalaPresentationCompiler(
515513
516514 override def isLoaded () = compilerAccess.isLoaded()
517515
516+ def additionalReportData () =
517+ s """ |Scala version: $scalaVersion
518+ |Classpath:
519+ | ${classpath
520+ .map(path => s " $path [ ${if path.exists then " exists" else " missing" } ] " )
521+ .mkString(" , " )}
522+ |Options:
523+ | ${options.mkString(" " )}
524+ | """ .stripMargin
525+
526+ extension (params : VirtualFileParams )
527+ def toQueryContext = PcQueryContext (Some (params), additionalReportData)
528+
529+ def emptyQueryContext = PcQueryContext (None , additionalReportData)
530+
518531end ScalaPresentationCompiler
0 commit comments