Support 'textDocument/diagnostic' method and 'diagnosticProvider' capability
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
- Get initialize response from server with capabilities
- Check capabilities list
- 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
This protocol has been around for a long time, but correctly implementing it seems to be not easy, and many language clients do not support this protocol.
There are no plans to add this functionality in the near future. Am I right?
There are no plans to add this functionality in the near future. Am I right?
I remember that this protocol was supported a long time ago, but I might be mistaken. At least, I tried to support this protocol myself, but the experience was actually quite poor. Diagnostics often failed to refresh in VSCode, so I stopped looking into it. If you want to implement it, you can give it a try and submit a PR.
Can you advise to me with my case. I need to get diagnostics for many .lua files, but also I have to be sure the server has finished diagnostic all files. What marker can I use?
How do you intend to use this language server? If you want to get all diagnostic results, you can directly use the --check command of the lua-language-server. Check the PR for details on how to use it. I'm not very familiar with this language server.
After full searching the codebase I found this: https://github.com/LuaLS/lua-language-server/blob/6ba0c9362ebfec8a668d452b0a752216fd52d543/script/provider/provider.lua#L1457-L1496
- This protocol is registering with
preview = true, which seems to only enable when the server is started with a--previewflag 🤔 - But just by looking at the code, there is a
TODOcomment, and the return data is just'unchanged'😂 I doubt if it is implemented correctly