diff options
Diffstat (limited to 'script-beta/src/core/diagnostics/unused-function.lua')
-rw-r--r-- | script-beta/src/core/diagnostics/unused-function.lua | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/script-beta/src/core/diagnostics/unused-function.lua b/script-beta/src/core/diagnostics/unused-function.lua new file mode 100644 index 00000000..6c53cdf7 --- /dev/null +++ b/script-beta/src/core/diagnostics/unused-function.lua @@ -0,0 +1,45 @@ +local files = require 'files' +local guide = require 'parser.guide' +local vm = require 'vm' +local define = require 'proto.define' +local lang = require 'language' +local await = require 'await' + +return function (uri, callback) + local ast = files.getAst(uri) + if not ast then + return + end + -- 只检查局部函数与全局函数 + guide.eachSourceType(ast.ast, 'function', function (source) + local parent = source.parent + if not parent then + return + end + if parent.type ~= 'local' + and parent.type ~= 'setlocal' + and parent.type ~= 'setglobal' then + return + end + local hasSet + local hasGet = vm.eachRef(source, function (info) + if info.mode == 'get' then + return true + elseif info.mode == 'set' + or info.mode == 'declare' then + hasSet = true + end + end) + if not hasGet and hasSet then + callback { + start = source.start, + finish = source.finish, + tags = { define.DiagnosticTag.Unnecessary }, + message = lang.script.DIAG_UNUSED_FUNCTION, + } + end + await.delay(function () + return files.globalVersion + end) + end) +end |