LuaLS / LuaLS/lua-language-server

Support 'textDocument/diagnostic' method and 'diagnosticProvider' capability

未關閉
#2,868 6 則留言 6 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

主要語言
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

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

從 script/proto/proto.lua 開始,這裡的日誌會回報未知的 textDocument/diagnostic 方法;接著查看 script/provider/provider.lua,這裡會組合伺服器能力。追蹤現有的診斷流程與 LSP 請求處理。完成的標準是 initialize 回應宣告 diagnosticProvider,並且支援 textDocument/diagnostic 請求,同時不再出現未知協定警告。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
lua
領域
backend-api-design, devtools
Issue 類型
功能
難度
4/5
預估耗時
3-5 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。