summaryrefslogtreecommitdiff
path: root/server-beta/src/core/diagnostics/init.lua
blob: 2724387d20706418514d71ec365275468ca0a164 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
local files  = require 'files'
local define = require 'proto.define'
local config = require 'config'
local await  = require 'await'

local function check(uri, name, level, results)
    if config.config.diagnostics.disable[name] then
        return
    end
    level = config.config.diagnostics.severity[name] or level
    local severity = define.DiagnosticSeverity[level]
    local clock = os.clock()
    require('core.diagnostics.' .. name)(uri, function (result)
        result.level = severity or result.level
        result.code  = name
        results[#results+1] = result
    end, name)
    local passed = os.clock() - clock
    if passed >= 0.1 then
        log.warn(('Diagnostics [%s] @ [%s] takes [%.3f] sec!'):format(name, uri, passed))
        await.delay()
    end
end

return function (uri)
    local ast = files.getAst(uri)
    if not ast then
        return nil
    end
    local results = {}

    for name, level in pairs(define.DiagnosticDefaultSeverity) do
        check(uri, name, level, results)
    end

    return results
end