diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2019-11-22 23:26:32 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2019-11-22 23:26:32 +0800 |
commit | d0ff66c9abe9d6abbca12fd811e0c3cb69c1033a (patch) | |
tree | bb34518d70b85de7656dbdbe958dfa221a3ff3b3 /script-beta/src/proto/define.lua | |
parent | 0a2c2ad15e1ec359171fb0dd4c72e57c5b66e9ba (diff) | |
download | lua-language-server-d0ff66c9abe9d6abbca12fd811e0c3cb69c1033a.zip |
整理一下目录结构
Diffstat (limited to 'script-beta/src/proto/define.lua')
-rw-r--r-- | script-beta/src/proto/define.lua | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/script-beta/src/proto/define.lua b/script-beta/src/proto/define.lua new file mode 100644 index 00000000..61c4037c --- /dev/null +++ b/script-beta/src/proto/define.lua @@ -0,0 +1,140 @@ +local guide = require 'parser.guide' + +local m = {} + +--- 获取 position 对应的光标位置 +---@param lines table +---@param text string +---@param position position +---@return integer +function m.offset(lines, text, position) + local row = position.line + 1 + local start = guide.lineRange(lines, row) + local offset = utf8.offset(text, position.character + 1, start) + if text:sub(offset-1, offset):match '[%w_][^%w_]' then + offset = offset - 1 + end + return offset +end + +--- 将光标位置转化为 position +---@alias position table +---@param lines table +---@param text string +---@param offset integer +---@return position +function m.position(lines, text, offset) + local row, col = guide.positionOf(lines, offset) + local start = guide.lineRange(lines, row) + if start < 1 then + start = 1 + end + local ucol = utf8.len(text, start, start + col - 1, true) + if row < 1 then + row = 1 + end + return { + line = row - 1, + character = ucol, + } +end + +--- 将起点与终点位置转化为 range +---@alias range table +---@param lines table +---@param text string +---@param offset1 integer +---@param offset2 integer +function m.range(lines, text, offset1, offset2) + local range = { + start = m.position(lines, text, offset1), + ['end'] = m.position(lines, text, offset2), + } + if range.start.character > 0 then + range.start.character = range.start.character - 1 + end + return range +end + +---@alias location table +---@param uri string +---@param range range +---@return location +function m.location(uri, range) + return { + uri = uri, + range = range, + } +end + +---@alias locationLink table +---@param uri string +---@param range range +---@param selection range +---@param origin range +function m.locationLink(uri, range, selection, origin) + return { + targetUri = uri, + targetRange = range, + targetSelectionRange = selection, + originSelectionRange = origin, + } +end + +function m.textEdit(range, newtext) + return { + range = range, + newText = newtext, + } +end + +--- 诊断等级 +m.DiagnosticSeverity = { + Error = 1, + Warning = 2, + Information = 3, + Hint = 4, +} + +--- 诊断类型与默认等级 +m.DiagnosticDefaultSeverity = { + ['unused-local'] = 'Hint', + ['unused-function'] = 'Hint', + ['undefined-global'] = 'Warning', + ['global-in-nil-env'] = 'Warning', + ['unused-label'] = 'Hint', + ['unused-vararg'] = 'Hint', + ['trailing-space'] = 'Hint', + ['redefined-local'] = 'Hint', + ['newline-call'] = 'Information', + ['newfield-call'] = 'Warning', + ['redundant-parameter'] = 'Hint', + ['ambiguity-1'] = 'Warning', + ['lowercase-global'] = 'Information', + ['undefined-env-child'] = 'Information', + ['duplicate-index'] = 'Warning', + ['empty-block'] = 'Hint', + ['redundant-value'] = 'Hint', + ['emmy-lua'] = 'Warning', +} + +--- 诊断报告标签 +m.DiagnosticTag = { + Unnecessary = 1, + Deprecated = 2, +} + +m.DocumentHighlightKind = { + Text = 1, + Read = 2, + Write = 3, +} + +m.MessageType = { + Error = 1, + Warning = 2, + Info = 3, + Log = 4, +} + +return m |