@@ -13,6 +13,7 @@ local converter = require 'proto.converter'
1313local loading = require ' workspace.loading'
1414local scope = require ' workspace.scope'
1515local time = require ' bee.time'
16+ local ltable = require ' linked-table'
1617
1718--- @class diagnosticProvider
1819local m = {}
@@ -360,28 +361,38 @@ local function askForDisable(uri)
360361end
361362
362363--- @async
363- function m .awaitDiagnosticsScope (uri )
364- local scp = scope .getScope (uri )
364+ function m .awaitDiagnosticsScope (suri )
365+ local scp = scope .getScope (suri )
365366 while loading .count () > 0 do
366367 await .sleep (1.0 )
367368 end
368369 local clock = os.clock ()
369- local bar <close> = progress .create (scope .getScope (uri ), lang .script .WORKSPACE_DIAGNOSTIC , 1 )
370+ local bar <close> = progress .create (scope .getScope (suri ), lang .script .WORKSPACE_DIAGNOSTIC , 1 )
370371 local cancelled
371372 bar :onCancel (function ()
372373 log .debug (' Cancel workspace diagnostics' )
373374 cancelled = true
374375 --- @async
375376 await .call (function ()
376- askForDisable (uri )
377+ askForDisable (suri )
377378 end )
378379 end )
379- local uris = files .getAllUris (uri )
380+ local uris = files .getAllUris (suri )
381+ local sortedUris = ltable ()
382+ for _ , uri in ipairs (uris ) do
383+ if files .isOpen (uri ) then
384+ sortedUris :pushHead (uri )
385+ else
386+ sortedUris :pushTail (uri )
387+ end
388+ end
380389 log .info ((' Diagnostics scope [%s], files count:[%d]' ):format (scp :getName (), # uris ))
381- for i , uri in ipairs (uris ) do
390+ local i = 0
391+ for uri in sortedUris :pairs () do
382392 while loading .count () > 0 do
383393 await .sleep (1.0 )
384394 end
395+ i = i + 1
385396 bar :setMessage ((' %d/%d' ):format (i , # uris ))
386397 bar :setPercentage (i / # uris * 100 )
387398 xpcall (m .doDiagnostic , log .error , uri , true )
0 commit comments