LuaLS / LuaLS/lua-language-server
Support 'textDocument/diagnostic' method and 'diagnosticProvider' capability
まだ誰も着手していません。
- 主要言語
- Lua
- スター
- 4.4k
- フォーク
- 442
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
### How are you using the lua-language-server?
Command Line
### Which OS are you using?
Linux
### What is the issue affecting?
Diagnostics/Syntax Checking
### Expected Behaviour
Server's capabilities contain the 'diagnosticProvider' and lua language server supports method "textDocument/diagnostic"
### Actual Behaviour
Server's capabilities don't contain the 'diagnosticProvider' and doesn't support method "textDocument/diagnostic"
### Reproduction steps
1. Get initialize response from server with capabilities
2. Check capabilities list
3. Send "textDocument/diagnostic" request
### Additional Notes
_No response_
### Log File
```
[06:38:37.231][info] [#0:/home/github/lua-language-server/main.lua:68]: Lua Lsp startup, root: /home/github/lua-language-server
[06:38:37.231][info] [#0:/home/github/lua-language-server/main.lua:69]: ROOT: /home/github/lua-language-server
[06:38:37.231][info] [#0:/home/github/lua-language-server/main.lua:70]: LOGPATH: /smsfw/log
[06:38:37.231][info] [#0:/home/github/lua-language-server/main.lua:71]: METAPATH: /home/github/lua-language-server/meta
[06:38:37.231][info] [#0:/home/github/lua-language-server/main.lua:72]: VERSION: 3.10.6
[06:38:37.264][debug][#0:script/pub/pub.lua:50]: Create brave: 1
[06:38:37.264][debug][#0:script/pub/pub.lua:50]: Create brave: 2
[06:38:37.264][debug][#0:script/pub/pub.lua:50]: Create brave: 3
[06:38:37.264][debug][#0:script/pub/pub.lua:50]: Create brave: 4
[06:38:37.264][info] [#0:script/proto/proto.lua:260]: Listen Mode: stdio
[06:38:37.265][info] [#0:script/service/service.lua:146]:
========= Medical Examination Report =========
--------------- Memory ---------------
Total: 2.237 MB
# 00 : 2.237 MB
# 01 : 0.000 MB
# 02 : 0.000 MB
# 03 : 0.000 MB
# 04 : 0.000 MB
--------------- Coroutine ---------------
Total: 0
Running: 0
Suspended: 0
Normal: 0
Dead: 0
--------------- Cache ---------------
Total: 1
Dead: 0
--------------- RPC ---------------
Holdon: 0
Waiting: 0
==============================================
[06:38:37.371][info] [#0:script/client.lua:657]: Client init {
capabilities = {
textDocument = {
diagnostic = {
dynamicRegistration = true
}
},
workspace = {
configuration = true,
didChangeConfiguration = {
dynamicRegistration = false
}
}
},
rootPath = "/smsfw",
rootUri = "file:///smsfw",
trace = "verbose"
}
[06:38:37.371][info] [#0:script/language.lua:137]: VSC language: nil
[06:38:37.371][info] [#0:script/language.lua:138]: LS language: en-us
[06:38:37.371][info] [#0:script/workspace/workspace.lua:38]: Workspace init root: file:///smsfw
[06:38:37.371][info] [#0:script/workspace/workspace.lua:42]: Log path: /smsfw/log/file_smsfw.log
[06:38:37.372][info] [#0:script/workspace/workspace.lua:48]: Workspace create: file:///smsfw
[06:38:37.372][debug][#0:script/provider/provider.lua:134]: Server init {
capabilities = {
codeActionProvider = {
codeActionKinds = { "", "quickfix", "refactor.rewrite", "refactor.extract" },
resolveProvider = false
},
codeLensProvider = {
resolveProvider = true
},
colorProvider = true,
completionProvider = {
resolveProvider = true,
triggerCharacters = { "\t", "\n", ".", ":", "(", "'", '"', "[", ",", "#", "*", "@", "|", "=", "-", "{", " ", "+", "?" }
},
definitionProvider = true,
documentFormattingProvider = true,
documentHighlightProvider = true,
documentOnTypeFormattingProvider = {
firstTriggerCharacter = "\n"
},
documentRangeFormattingProvider = true,
documentSymbolProvider = true,
executeCommandProvider = {
commands = { "lua.removeSpace", "lua.solve", "lua.jsonToLua", "lua.setConfig", "lua.getConfig", "lua.autoRequire" }
},
foldingRangeProvider = true,
hoverProvider = true,
implementationProvider = true,
inlayHintProvider = {
resolveProvider = true
},
offsetEncoding = "utf-16",
referencesProvider = true,
renameProvider = {
prepareProvider = true
},
semanticTokensProvider = {
full = true,
legend = {
tokenModifiers = { "declaration", "definition", "readonly", "static", "deprecated", "abstract", "async", "modification", "documentation", "defaultLibrary", "global" },
tokenTypes = { "namespace", "type", "class", "enum", "interface", "struct", "typeParameter", "parameter", "variable", "property", "enumMember", "event", "function", "method", "macro", "keyword", "modifier", "comment", "string", "number", "regexp", "operator", "decorator" }
},
range = true
},
signatureHelpProvider = {
triggerCharacters = { "(", "," }
},
textDocumentSync = {
change = 2,
openClose = true,
save = {
includeText = false
}
},
typeDefinitionProvider = true,
workspace = {
fileOperations = {
didRename = {
filters = { {
pattern = {
glob = "/smsfw/**",
options = {
ignoreCase = true
}
}
} }
}
},
workspaceFolders = {
changeNotifications = true,
supported = true
}
},
workspaceSymbolProvider = true
},
serverInfo = {
name = "sumneko.lua"
}
}
[06:38:37.574][info] [#0:script/provider/provider.lua:36]: Load config from specified /smsfw/test-luals-annotations/luarc.json
[06:38:37.574][info] [#0:script/provider/provider.lua:37]: {
["window.progressBar"] = false,
["window.statusBar"] = false
}
[06:38:37.574][debug][#0:script/filewatch.lua:53]: Watch add: /smsfw/test-luals-annotations/
[06:38:37.574][debug][#0:script/filewatch.lua:59]: fw.add /smsfw/test-luals-annotations/
[06:38:37.575][debug][#0:script/provider/provider.lua:274]: didOpen file:///smsfw/luals/test_scripts/sccp_ns.lua
[06:38:37.575][trace][#0:script/files.lua:288]: Set text: file:///smsfw/luals/test_scripts/sccp_ns.lua takes 9.9000000000002e-05 sec.
[06:38:37.575][debug][#0:script/provider/provider.lua:274]: didOpen file:///smsfw/luals/test_scripts/m3ua_ns.lua
[06:38:37.575][trace][#0:script/files.lua:288]: Set text: file:///smsfw/luals/test_scripts/m3ua_ns.lua takes 0.00022 sec.
[06:38:37.575][info] [#0:script/provider/provider.lua:49]: Load config from client file:///smsfw
[06:38:37.575][info] [#0:script/provider/provider.lua:50]: {
Lua = {
diagnostics = {
enable = true,
ignoredFiles = "Openned",
libraryFiles = "Openned"
},
workspace = {
checkThirdParty = "",
library = { "/smsfw/luals/library", "/smsfw/lua-core/luals_annotations/library" }
}
}
}
[06:38:37.676][info] [#0:script/provider/provider.lua:65]: Load config from client fallback
[06:38:37.676][info] [#0:script/provider/provider.lua:66]: {
Lua = {
diagnostics = {
enable = true,
ignoredFiles = "Openned",
libraryFiles = "Openned"
},
workspace = {
checkThirdParty = "",
library = { "/smsfw/luals/library", "/smsfw/lua-core/luals_annotations/library" }
}
}
}
[06:38:37.776][warn] [#0:script/proto/proto.lua:170]: Recieved unknown proto: textDocument/diagnostic
```
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
textDocument/diagnostic メソッドが不明であるとログに記録される script/proto/proto.lua と、サーバーの capabilities が組み立てられる script/provider/provider.lua から始めてください。既存の diagnostics のフローと LSP リクエストの処理を追跡してください。initialize のレスポンスが diagnosticProvider を通知し、textDocument/diagnostic リクエストが不明なプロトコルの警告なしにサポートされれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- lua
- 領域
- backend-api-design, devtools
- issue の種類
- 機能追加
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100