116116function measure_sub_operation (f, request_name, server)
117117 start_time = string (Dates. unix2datetime (time ()), " Z" )
118118 tic = time_ns ()
119- f ()
119+ res = f ()
120120 toc = time_ns ()
121121 duration = (toc - tic) / 1e+6
122122
@@ -132,6 +132,8 @@ function measure_sub_operation(f, request_name, server)
132132 " time" => start_time
133133 )
134134 )
135+
136+ return res
135137end
136138
137139function textDocument_didChange_notification (params:: DidChangeTextDocumentParams , server:: LanguageServerInstance , conn)
@@ -418,7 +420,9 @@ function try_to_load_parents(child_path, server)
418420end
419421
420422function publish_diagnostics (uris:: Vector{URI} , server, conn, source)
421- jw_diagnostics_updated, jw_diagnostics_deleted = JuliaWorkspaces. get_files_with_updated_diagnostics (server. workspace)
423+ jw_diagnostics_updated, jw_diagnostics_deleted = measure_sub_operation (" publish_diagnostics - get_files_with_updated_diagnostics" , server) do
424+ JuliaWorkspaces. get_files_with_updated_diagnostics (server. workspace)
425+ end
422426
423427 all_uris_with_updates = Set {URI} ()
424428
@@ -432,42 +436,49 @@ function publish_diagnostics(uris::Vector{URI}, server, conn, source)
432436
433437 diagnostics = Dict {URI,Vector{Diagnostic}} ()
434438
435- for uri in all_uris_with_updates
436- diags = Diagnostic[]
437- diagnostics[uri] = diags
439+ measure_sub_operation (" publish_diagnostics - loop over updates" , server) do
440+ for uri in all_uris_with_updates
441+ diags = Diagnostic[]
442+ diagnostics[uri] = diags
438443
439- if hasdocument (server, uri)
440- doc = getdocument (server, uri)
444+ if hasdocument (server, uri)
445+ doc = getdocument (server, uri)
441446
442- if server. runlinter && (is_workspace_file (doc) || isunsavedfile (doc))
443- pkgpath = getpath (doc)
444- if any (is_in_target_dir_of_package .(Ref (pkgpath), server. lint_disableddirs))
445- filter! (! is_diag_dependent_on_env, doc. diagnostics)
447+ if server. runlinter && (is_workspace_file (doc) || isunsavedfile (doc))
448+ pkgpath = getpath (doc)
449+ if any (is_in_target_dir_of_package .(Ref (pkgpath), server. lint_disableddirs))
450+ filter! (! is_diag_dependent_on_env, doc. diagnostics)
451+ end
452+ append! (diags, doc. diagnostics)
446453 end
447- append! (diags, doc. diagnostics)
448454 end
449- end
450455
451- if JuliaWorkspaces. has_file (server. workspace, uri)
452- st = JuliaWorkspaces. get_text_file (server. workspace, uri). content
453- append! (diags, Diagnostic (
454- Range (st, i. range),
455- if i. severity== :error
456- DiagnosticSeverities. Error
457- elseif i. severity== :warning
458- DiagnosticSeverities. Warning
459- elseif i. severity== :info
460- DiagnosticSeverities. Information
461- else
462- error (" Unknown severity $(i. severity) " )
463- end ,
464- missing ,
465- missing ,
466- i. source,
467- i. message,
468- missing ,
469- missing
470- ) for i in JuliaWorkspaces. get_diagnostic (server. workspace, uri))
456+ if JuliaWorkspaces. has_file (server. workspace, uri)
457+ st = JuliaWorkspaces. get_text_file (server. workspace, uri). content
458+
459+ new_diags = measure_sub_operation (" publish_diagnostics - get_diagnostic" , server) do
460+ JuliaWorkspaces. get_diagnostic (server. workspace, uri)
461+ end
462+
463+ append! (diags, Diagnostic (
464+ Range (st, i. range),
465+ if i. severity== :error
466+ DiagnosticSeverities. Error
467+ elseif i. severity== :warning
468+ DiagnosticSeverities. Warning
469+ elseif i. severity== :info
470+ DiagnosticSeverities. Information
471+ else
472+ error (" Unknown severity $(i. severity) " )
473+ end ,
474+ missing ,
475+ missing ,
476+ i. source,
477+ i. message,
478+ missing ,
479+ missing
480+ ) for i in new_diags)
481+ end
471482 end
472483 end
473484
0 commit comments